# include & ltINTRINS.h & gt
#定義?u16?未簽名?(同Internationalorganizations)國際組織
#定義?u8?未簽名?茶
#定義?Pin0?0x01
#定義?Pin1?0x02
#定義?Pin2?0x04
#定義?Pin3?0x08
#定義?Pin4?0x10
#定義?Pin5?0x20
#定義?Pin6?0x40
#定義?Pin7?0x80
sbit?led1=p1^1;
sbit?led2=p1^2;
sbit?led3=p1^3;
sbit?led4=p1^4;
sbit?led5=p1^5;
sbit?kg1=p3^1;
sbit?key2=p3^2;
sbit?key3=p3^3;
/****************************************/
作廢?init()//初始化函數
{?TMOD = 0x 01;
TH0 =(65536-1000)/256;
TL0 =(65536-1000)% 256;
EA = 1;
ET0 = 1;
}
/////////////////////////
u8?S(){//掃描按鈕
靜電?u8?ms;
u8?t = 0;
//if(key 1 = = 0)t | = pin 1;
if(key 2 = = 0)t | = pin 2;
if(key 3 = = 0)t | = pin 3;
如果(t!=0x00){
如果(ms & lt100)ms++;
if(ms==5){
回歸?t;
}
}別的?ms = 0;
回歸?0x00
}
///////////////////////
typedef?結構{
u16?時間;//n毫秒後
u8?l;//明亮的燈光
u8?m;//關燈
} ledcmd
#定義?LED_CMD_SIZE?10
代碼?ledcmd?lcmd[]={
{0,Pin2,0}之後,//0s?Led2打開
{500,pin4,0}後,//0.5s?Led4打開
{1000,0,Pin4},//1s之後?Led4關閉
{300,Pin3,0,},
{300,Pin4,0,},
{1000,0,Pin4,},
{300,0,Pin2,},
{200,Pin5,0,},
{40,0,Pin5|Pin3},
{500,0,Pin1},
};
作廢?led_l(u8?V){//照明程序
P1=P1。(~ v);
}
作廢?led_m(u8?V){//熄燈程序
p 1 = p 1 |(v);
}
u8?ledzt = 0xff//led任務zt?0xff表示待機。
u16?ledjs//倒計時
作廢?led_start(){?//啟動程序
ledzt = 0;
ledjs=lcmd[ledzt]。時間;
}
作廢?ledcx(){?//led流量程序
if(led ZT & lt;LED_CMD_SIZE){
if((led js = = 0)& amp;& amp(ledzt & ltLED_CMD_SIZE)){//定時為0
ledzt++;
如果(ledzt!=LED_CMD_SIZE){
ledjs=lcmd[ledzt]。時間;
}
}
if(ledzt & gt;1){//
led_l(lcmd[ledzt-1]。l);
led_m(lcmd[ledzt-1]。m);
}
}
}
/***********************************/
作廢?Main()//主函數
{
u8?k;
init();//系統初始化
TR0 = 1;?//計時器開始計數。
while(1){
if(ledzt = = 0x ff){ led 1 =(kg 1!=0);};//當LED不運行時,根據開關改變led1。
k = s();//讀取鍵值
如果((k & ampPin2)!=0){//key2
if(led 1 = = 0 & amp;& ampledzt==0xff){
led _ start();
}
}
如果((k & ampPin3)!=0){//key3
ledzt = 0xff
led _ m(pin 2 | pin 4);
}
ledx();
}
}
/****************************/
作廢?定時器0()?打斷?1//1毫秒定時器
{?
TH0 =(65536-1000)/256;//重載初始值
TL0 =(65536-1000)% 256;
if(led js & gt;0)led js-;
}