#include <REGX52.H>
#define u8 unsigned char
#define u16 unsigned int
#define LED(X) {hc573(0);P0 = X;hc573(4);hc573(0);}
u8 count,pwm_duty,led = 0xff,pwm_duty,flag;
u16 flag_pwm;
void hc573(u8 channel)
{
switch(channel)
{
case 0: P2 = (P2&0x1f)|0x00;break;
case 4: P2 = (P2&0x1f)|0x80;break;
case 5: P2 = (P2&0x1f)|0xa0;break;
case 6: P2 = (P2&0x1f)|0xc0;break;
case 7: P2 = (P2&0x1f)|0xe0;break;
}
}
void Timer0Init(void) //100微秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x9C; //设置定时初始值
TH0 = 0xFF; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 1;
}
void Timer0() interrupt 1
{
count++;
if(count>=100) count=0;
if(count<=pwm_duty) led &=~1;
else led|=1;
if(flag_pwm<100) flag_pwm++;
LED(led);
}
void pwm()
{
if(flag_pwm<100) return;
flag_pwm = 0;
if(flag==0)
{
pwm_duty++;
if(pwm_duty>=100) flag=1;
}
else
{
pwm_duty--;
if(pwm_duty<=1) flag=0;
}
}
void main()
{
Timer0Init();
while(1)
{
pwm();
}
}
【蓝桥杯单片机】呼吸灯的代码简化
最新推荐文章于 2024-05-19 00:09:50 发布