写51单片机lcd1602电子时钟代码
时间: 2023-10-15 09:05:56 浏览: 98
以下是一个简单的51单片机LCD1602电子时钟的代码:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^0; //RS引脚
sbit RW = P2^1; //RW引脚
sbit EN = P2^2; //EN引脚
uchar code table[] = {0x38, 0x0c, 0x06, 0x01, 0x80, 0x00, 0x02, 0x0e}; //初始化指令表
uchar sec = 0; //秒
uchar min = 0; //分
uchar hour = 0; //时
void delay(uint xms) //延时函数
{
uint i, j;
for (i = xms; i > 0; i--)
{
for (j = 112; j > 0; j--)
{
;
}
}
}
void write_com(uchar com) //写入命令函数
{
RS = 0;
RW = 0;
P0 = com;
EN = 1;
_nop_();
_nop_();
EN = 0;
delay(5);
}
void write_data(uchar dat) //写入数据函数
{
RS = 1;
RW = 0;
P0 = dat;
EN = 1;
_nop_();
_nop_();
EN = 0;
delay(5);
}
void init() //LCD1602初始化函数
{
uchar i;
for (i = 0; i < 8; i++)
{
write_com(table[i]);
delay(5);
}
}
void display_time() //显示时间函数
{
uchar shi, ge;
shi = hour / 10; //十位数
ge = hour % 10; //个位数
write_com(0x80 + 0x00); //设置第一行第一列的光标位置
write_data(shi + 0x30); //显示十位数
write_data(ge + 0x30); //显示个位数
write_data(':'); //显示冒号
shi = min / 10;
ge = min % 10;
write_data(shi + 0x30);
write_data(ge + 0x30);
write_data(':');
shi = sec / 10;
ge = sec % 10;
write_data(shi + 0x30);
write_data(ge + 0x30);
}
void main()
{
init(); //LCD1602初始化
while (1)
{
display_time(); //显示时间
delay(1000); //延时1秒
sec++; //秒数加1
if (sec >= 60) //判断秒数是否达到60
{
sec = 0; //秒数清零
min++; //分钟数加1
if (min >= 60) //判断分钟数是否达到60
{
min = 0; //分钟数清零
hour++; //小时数加1
if (hour >= 24) //判断小时数是否达到24
{
hour = 0; //小时数清零
}
}
}
}
}
```
这段代码实现了一个简单的51单片机LCD1602电子时钟,每秒钟刷新一次显示时间。在主函数中循环显示时间,并且通过秒、分、时三个变量来进行时间的计算。
阅读全文