|
#include<reg52.h>
#include "LCD1602.H"
#define u8 unsigned char
#define u16 unsigned int
sbit LED=P2^0;
sbit KEY=P2^1;
bit Time_f=0;
void Timer0_init() //50毫秒@12.000MHz
{
TMOD|=0x01;
TL0 = (65536-50000)%256; //设置定时初始值
TH0 = (65536-50000)/256; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
void isr_timer0()interrupt 1 //定时器0中断服务子函数
{
TL0 = (65536-50000)%256; //设置定时初始值
TH0 = (65536-50000)/256; //设置定时初始值
Time_f=1;
}
//50ms调用一次
//短按灯亮,长按灯灭
void KEY_SCAN()
{
static u8 i=0,c=0;
if(KEY==0)
{
if(i==0)
{
if(KEY==0&&c++>=200) //50ms*200=10000ms=10s
{
i=1;
LED=1; //灯灭
}
}
}
else
{
if(c>1&&c<200)
LED=0; //灯亮
i=0;
c=0;
}
}
void main()
{
Timer0_init();
while(1)
{
if(Time_f)
{
Time_f=0;
KEY_SCAN();
}
}
}
|
|