题目要求:第1,3,5,7个灯半亮(亮度是全亮时候的一半),其余的全亮。
程序测试正常,但我始终不太明白怎么回事,希望解惑。
(1)程序:
# include <reg51.h>
#define uchar unsigned char
# define led P1 //led接在P1口
# define Ton 40 //基准脉宽0.04ms
uchar LEDflag = 0; //全局变量,最大255,保存T0中断次数
void init();
void led_on();
void main()
{
init();
while(1)
{
led_on();
}
}
void init() //定时器初始化
{
TMOD = 0x02; //T0 方式2,8位自动载入
TH0 = 256 - Ton; //T0初始值
TL0 = 256 - Ton; //重载值
TR0 = 1; //启动T0
ET0 = 1; //开T0,T1中断
EA = 1; //全局中断允许
}
void time0_int() interrupt 1 using 3 //T0中断函数,中断1,使用工作组3
{
LEDflag++; //修改LEDflag
}
void led_on()
{
if(LEDflag == 0) // 点亮8个灯
{
led = 0x00;
}
if(LEDflag == 12) // 熄灭1,3,5,7灯
{
led = 0x55;
}
}
|