/*******************************************************************************
* Function Name : void Timer0_Init()
* Description : 定时器初始化
*******************************************************************************/
void Time0_Init()
{
count = 0;
min = 0;
sec = 59;
mTimer0Clk12DivFsys(); //T0定时器时钟设置
mTimer1Clk12DivFsys(); //T1定时器时钟设置
mTimer_x_ModInit(0,1); //T0定时器模式设置16位定时器
mTimer_x_ModInit(1,2); //T1定时器模式设置8位自动重装定时器
mTimer_x_SetData(0,0xC350); //T0定时器赋值5MS
mTimer_x_SetData(1,0x4C00); //T1定时器赋值5MS
mTimer0RunCTL(0); //T0定时器启动
mTimer1RunCTL(1); //T1定时器启动
ET0 = 1; //T0定时器中断开启
ET1 = 1; //T1定时器中断开启
EA = 1;
}
/*******************************************************************************
* Function Name : mTimer0Interrupt()
* Description : CH554定时计数器0定时计数器中断处理函数
*******************************************************************************/
voidmTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1 //timer0中断服务程序,使用寄存器组1
{
mTimer_x_SetData(0,0xC350); //非自动重载方式需重新给TH0和TL0赋值
count++;
if(count==10)
{
count=0;
if(sec==0)
{
if(min!=0)
{
sec=59;
min--;
}
else
{
mTimer0RunCTL(0); //T0定时器停止
}
}
else sec--;
}
}
voidmTimer1Interrupt( void ) interrupt INT_NO_TMR1 using 2
{
cnt++;
if(cnt>=30) //计时3s
{
cnt=0;
if(key1==1&&key2==1&&(min>0||sec>0))
{
mTimer0RunCTL(1); //开启定时器0;
}
}
}
void main( )
{
Time0_Init();
Init_1621(); //初始化HT1621
HT1621_all_off(); //清空LCD显示
while(1)
{
Write_1621(0,0xF0,4);
if(key1==0)
{
delay_ms(100);
if(key1==0)
{
if(min!=999)
{
min++;
}
}
while(!key2);
delay_ms(1000);
while(!key2);
}
if(key2==0)
{
delay_ms(100);
if(key2==0)
{
if(min!=0)
{
min--;
}
}
while(!key1);
delay_ms(1000);
while(!key1);
}
min0=min/100%10;
min1=min/10%10;
min2=min/1%10;
sec1=sec/10%10;
sec2=sec/1%10;
Display_Init(min0,min1,min2,sec1,sec2);
}
}