请高手指点哈下面这个程序。是1602显示1302时钟,请注意红色注释部分哈
void timer0_init()
{
TMOD=0x01;
TH0=0;
TL0=0;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init_LCD();
cmg();
init_DS();
timer0_init();
while(1)
{
key1scan();
if(D8==0)
{
TR0=0;
key2scan();
write_com(0x0f);//开光标闪烁
key3scan();
}
else
{
TR0=1;
write_com(0x0c); //关光标
key22=0; //key22归0.
}
}
}
//液晶读写延时为5ms时,若多写两条液晶写指令会导致key1无法响应,改为1ms延时后问题消失。(是这样吗?)
void timer0() interrupt 1
{
hour=read_DS(0x85); //直接读出即可,读子程序已将数据转换为十进制。
min=read_DS(0x83);
sec=read_DS(0x81);
write_com(0x80+0x43);
write_datae(0x30+hour/10);
write_datae(0x30+hour%10);
write_datae(':');
write_datae(0x30+min/10);
write_datae(0x30+min%10);
write_datae(':');
write_datae(0x30+sec/10);
write_datae(0x30+sec%10);
write_com(0x80+0x4a); //很奇怪,若删除此句秒的个位会多显示一位(时钟可以正常走,就是有两个秒的个位显示,很奇怪呀)
TH0=0;
TL0=0;
}
附件是整个程序清单及相关文件。下面是问题图片
fficeffice" />
|