跪求一个 89C52单片机通过按键产生PWM信号来控制LED灯的不同亮度的程序,

2024-11-18 12:46:38
推荐回答(1个)
回答(1):

#include
#define uchar unsigned char
#define uint unsigned int
sbit lamp=P2^0;//输出
sbit k1=P3^3;//加键
sbit k2=P3^2;//减键
sbit k3=P3^4;//停止
uchar a=10;

void delay(uint x)//延时函数
{
uchar i;
while(x--)
for(i=0;i<110;i++);
}
void init()
{
TMOD=0X01;//晶振11.0592,定时器定时方式1
TH0=0XFF;//100us定时
TL0=0XA4;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//开定时器
}

void key()
{
if(!k1)
{
delay(10);
if(!k1)
{
a++;
if(a==99)
a=1;
}
}
// while(!k1);
if(!k2)
{
delay(10);
if(!k2)
{
a--;
if(a==1)
a=99;
}
}
// while(!k2);
if(!k3)
{
delay(10);
if(!k3)
{
TR0=~TR0;//开定时器
}
}
while(!k3);
}
void main()
{

init();
while(1)
{
key();

}
}

void timer0() interrupt 1 using 3
{
uchar count; /*中断次数计数器变量*/
TH0=0xFF; /*恢复定时器初始值*/
TL0=0xA4;
count++;
if (count>=100)
count=0;

if (count<=a) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
lamp=0;
else
lamp=1;

}