定时器0初始化
void Timer0Init(void)
{
TMOD = 0x01; //设置定时器模式
TH0 = 0xEE;
TL0 = 0x00;
EA=1; //打开总中断
ET0=1; //打开定时器0中断
TR0 = 0;
}
void tm0_isr() interrupt 1
{
TH0 = 0xEE;
TL0 = 0x00;
count++;
if (count>= 16) //1ms * 1000 -> 1s
{
TR0 = 0; //关闭定时器1
count = 0;
BEEP = 1; //work LED flash
flag = 1;
}
}
定时器1初始化
void Timer1Init(void) //50毫秒@11.0592MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x00; //设置定时初值
TH1 = 0x4C; //设置定时初值
EA= 1;
ET1 = 1;
TR1 = 0;
}
void Timer1Interrupt(void) interrupt 3
{
TL1 = 0x00; //设置定时初值
TH1 = 0x4C; //设置定时初值
tcount++;
if(tcount == 200)
{
switch(tim_flag)
{
case 1:
keycountABC();
tcount= 0;
cnt = 0;
break;
case 2:
keycountDEF();
tcount= 0;
cnt = 0;
break;
case 3:
keycountGHI();
tcount= 0;
cnt = 0;
break;
case 4:
keycountJKL();
tcount= 0;
cnt = 0;
break;
case 5:
keycountMNO();
tcount= 0;
cnt = 0;
break;
case 6:
keycountPQR();
tcount= 0;
cnt = 0;
break;
case 7:
keycountSTUV();
tcount= 0;
cnt = 0;
break;
case 8:
keycountWXYZ();
tcount= 0;
cnt = 0;
break;
}
}
}
矩阵键盘
只要有键按下就启动定时器0。
有几个特殊按键按下,在按下的时候启动定时器0和定时1
在定时器1的初始化中, 我的初始值是50MS,理论来说计数变量tcount计数到20,
就是1S,但是实际是没有1S,我把tcount改为200,则实际约为1S左右。
能否解答一下? |