用定时器控制LCD显示计时功能
#include <REGX52.H>
#include "LCD1602.h"
int hour=0,minute=0,second=0; //全局变量 时,分,秒
void time0_Init() //定时1ms
{
TMOD=0x01; //设置工作方式为模式1,16位计时器
EA=1; //CPU开放所有中断(全体)
ET0=1; //允许T0发生中断(T0是全体内的一个中断)
TR0=1; //允许T0开始计数
TL0=0x66; //低8位计数器赋初值
TH0=0xFC; //高8位计数器赋初值
PT0=0; //其实默认为0了
TF0=0;
}
void main()
{
LCD_Init();
time0_Init(); //必须初始化LCE和计时器
LCD_ShowString(1,1,"Time:");
LCD_ShowString(2,1,"00:00:00");
while(1)
{}
}
void time0_count() interrupt 1
{
static int i=0;
TL0=0x66; //低8位计数器赋初值
TH0=0xFC; //高8位计数器赋初值
i++;
if(i>=1000) //1s后显示
{
i=0;
second++;
minute=minute+second/60; //分钟进位
hour=hour+minute/60; //小时进位
second=second%60; //秒溢出归零
minute%=60; //分钟溢出归零
hour%=24; //小时溢出归零
LCD_ShowString(1,1,"Time:");
LCD_ShowString(2,3,":");
LCD_ShowString(2,6,":");
LCD_ShowNum(2,1,hour,2);
LCD_ShowNum(2,4,minute,2);
LCD_ShowNum(2,7,second,2);
}
}
显示效果如下: