#include<reg52.h>
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);
void ShowBcdByte(unsigned char x,unsigned char y,unsigned char bcd);
unsigned char sec=58 ;
unsigned char min=59;
unsigned char hour=19 ;
bit flag = 0;
void main()
{
EA = 1;
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x67;
ET0 = 1;
TR0 = 1;
InitLcd1602();
LcdShowStr(4,1," : : ");
while(1)
{
if(flag == 1)
{
flag = 0;
sec++;
if(sec >= 60)
{
sec = 0;
min++;
if(min >= 60)
{
min = 0;
hour++;
if(hour >= 24)
{
hour = 0;
}
}
}
}
ShowBcdByte(4,1,hour);
ShowBcdByte(7,1,min);
ShowBcdByte(10,1,sec);
}
}
void ShowBcdByte(unsigned char x,unsigned char y,unsigned char bcd)
{
unsigned char str[3];
str[0] = (bcd/10)+'0';
str[1] = (bcd%10)+'0';
str[2] = '\0';
LcdShowStr(x,y,str);
}
void InterruptTimer0() interrupt 1
{
static unsigned int cnt = 0;
TH0 = 0xFC;
TL0 = 0x67;
cnt++;
if(cnt >= 1000)
{
cnt = 0;
flag = 1;
}
}
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);
void ShowBcdByte(unsigned char x,unsigned char y,unsigned char bcd);
unsigned char sec=58 ;
unsigned char min=59;
unsigned char hour=19 ;
bit flag = 0;
void main()
{
EA = 1;
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x67;
ET0 = 1;
TR0 = 1;
InitLcd1602();
LcdShowStr(4,1," : : ");
while(1)
{
if(flag == 1)
{
flag = 0;
sec++;
if(sec >= 60)
{
sec = 0;
min++;
if(min >= 60)
{
min = 0;
hour++;
if(hour >= 24)
{
hour = 0;
}
}
}
}
ShowBcdByte(4,1,hour);
ShowBcdByte(7,1,min);
ShowBcdByte(10,1,sec);
}
}
void ShowBcdByte(unsigned char x,unsigned char y,unsigned char bcd)
{
unsigned char str[3];
str[0] = (bcd/10)+'0';
str[1] = (bcd%10)+'0';
str[2] = '\0';
LcdShowStr(x,y,str);
}
void InterruptTimer0() interrupt 1
{
static unsigned int cnt = 0;
TH0 = 0xFC;
TL0 = 0x67;
cnt++;
if(cnt >= 1000)
{
cnt = 0;
flag = 1;
}
}
51单片机LCD实时钟显示
本文介绍了一个基于51单片机的实时钟项目实现细节,通过定时中断每秒更新LCD上的时间显示。具体包括初始化LCD模块、设置定时器中断、更新小时、分钟和秒数以及在LCD上显示BCD编码的时间。
2631

被折叠的 条评论
为什么被折叠?



