//假設晶振12MHZ,按鍵輸入P1.0,P1.1,P1.2;LED控制P2.0,P2.1,P2.2,都是低電平有效
#include "reg51.h"
unsigned int YSJS1=0;
unsigned int YSJS2=0;
unsigned int YSJS3=0;
sbit KEY1=P1^0;按鍵
sbit KEY2=P1^1;按鍵
sbit KEY3=P1^2;按鍵
sbit LED1=P2^0;燈
sbit LED2=P2^1;燈
sbit LED3=P2^2;燈
void Timer1Init(void) //500微秒@12.000MHz
{
AUXR &= 0xBF; //定時器時鐘12T模式
TMOD &= 0x0F; //設置定時器模式
TMOD |= 0x10; //設置定時器模式
TL1 = 0x0C; //設置定時初值
TH1 = 0xFE; //設置定時初值
TF1 = 0; //清除TF1標誌
ET1 = 1; //使能定時器1中斷
TR1=1; //定時器1開始計時
EA =1; //開總中斷
}
void main(void)
{
LED1=1;
LED2=1;
LED3=1;
KEY1=1;
KEY2=1;
KEY3=1;
Timer1Init()
while(1)
{
if(KEY1==0)
{
YSJS=6000;
LED1=0;
}
if(KEY2==0)
{
YSJS=10000;
LED2=0;
}
if(KEY3==0)
{
YSJS=16000;
LED3=0;
}
}
}
void TIMER1(void) interrupt 3 //定時器1中斷函數使用默認寄存器組
{
TH1 = 0XFE; //定時器1定時時間=500us
TL1 = 0X0C;
if(YSJS1!=0)
{
YSJS1--;
}
else LED1=1;
if(YSJS2!=0)
{
YSJS2--;
}
else LED2=1;
if(YSJS2!=0)
{
YSJS2--;
}
else LED2=1;
}