|
#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; //設(shè)置定時(shí)初始值
TH0 = (65536-50000)/256; //設(shè)置定時(shí)初始值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
ET0=1;
EA=1;
}
void isr_timer0()interrupt 1 //定時(shí)器0中斷服務(wù)子函數(shù)
{
TL0 = (65536-50000)%256; //設(shè)置定時(shí)初始值
TH0 = (65536-50000)/256; //設(shè)置定時(shí)初始值
Time_f=1;
}
//50ms調(diào)用一次
//短按燈亮,長(zhǎng)按燈滅
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();
}
}
}
|
|