使用定时器T0产生PWM方波,
用按键调整占空比,20级可调
控制led灯的亮度等级.
#include "my51.h"
#include "timer0.h"
#define grading 20 //亮度20级变化
sbit keyS3=P3^5; //按键调整占空比,PWM_keyChange++
sbit keyS4=P3^6; // PWM_keyChange--
u8 PWM_keyChange=10; //初值,按键调整在1~20之间变化
//占空比 PWM_keyChange/grading
void T0_work() //本函数由T0定时器中断函数调用
{
if(timeMultiple1Flag)
{
led=off(7); //关闭7号灯
timeMultiple1Flag=0; //清定时器复用置位标志
}
if(timeMultiple2Flag)
{
led=on(7); //打开7号灯
timeMultiple2Flag=0; //清定时器复用置位标志
}
}
void main() //测试
{
u8 keyFlag=1; //程序中没有消抖处理,只是简易的按键进出自锁标志
led0=ledon; //先打开0号灯,用于和7号灯对比亮度
initT0(1,10,grading); //1毫秒的基本定时,亮的时间1*10毫秒,暗1*(grading-10)毫秒
while(1)
{
if(0==keyS3)
{
if(keyFlag) //防止一次按键中多次执行
{
keyFlag=0; //清标志,类似同步锁
if(++PWM_keyChange>grading)
{

本文记录了如何利用51单片机的定时器T0生成PWM方波,通过改变占空比来调节20级不同的LED灯亮度。
最低0.47元/天 解锁文章
1692

被折叠的 条评论
为什么被折叠?



