开关模拟外部事件,每按下开关一次,控制LED状态反转。采用查询和中断两种方式。
(这里条件是定时器计数一次即溢出)
1.中断方式:
代码:
#include <reg51.h>
void main()
{
P0=0x00;//灯的状态一开始为全亮
EA=1;//开中断(先写中断初始化)
ET1=1;//开中断,T1自己的开关(这里用的定时器为T1)
PT1=1;//优先级
TMOD=0x50;//软启动,计数功能,方式1(开始定时器初始化)
TH1=65535/256;//赋初值,因为只按一次溢出,所以初值为65535
TL1=65535%256;//赋初值
TR1=1;//开启计时器
while(1);
}
void one_timer0 ( ) interrupt 3
{
{ET1=1;//关中断
TF1=0;//请标记
TH1=65535/256;//重赋初值
TL1=65535%256;//重赋初值
P0=~P0;//灯的状态反转,全灭
}
ET1=1;//开中断
}
2.查询方式
代码:
#include <reg51.h>
void main()
{
P0=0x00;//灯的状态一开始为全亮
TMOD=0x50;//软启动,计数功能,方式1(开始定时器初始化)
TH1=65535/256;//赋初值,因为只按一次溢出,所以初值为65535
TL1=65535%256;//赋初值
TR1=1;//开启计时器
while(1)
{
if(TF1==1)// 溢出,定时结束
{
TH1=65535/256;//重赋初值
TL1=65535%256;//重赋初值
P0=~P0;//灯的状态反转,全灭
}
ET1=1;//开中断
}
}