编写一个基于51单片机在lcd1602上实现电子时钟的C语言程序
时间: 2024-05-01 09:20:54 浏览: 208
基于51单片机控制的1602液晶电子时钟显示程序.docx
非常感谢您的提问。以下是一个基于51单片机实现的C语言程序,可以在LCD1602上显示电子时钟。
```c
#include <REG51.H>
#define LCD_DB P0 // 数据总线
sbit LCD_RS = P1^0; // 寄存器选择 RS
sbit LCD_RW = P1^1; // 读/写选择 RW
sbit LCD_E = P1^2; // 使能信号 E
void delay(unsigned int t) // 延迟函数
{
while(t--);
}
void write_cmd(unsigned char c) // 写命令
{
LCD_RS = 0;
LCD_RW = 0;
LCD_DB = c;
delay(10);
LCD_E = 1;
delay(10);
LCD_E = 0;
delay(10);
}
void write_data(unsigned char c) // 写数据
{
LCD_RS = 1;
LCD_RW = 0;
LCD_DB = c;
delay(10);
LCD_E = 1;
delay(10);
LCD_E = 0;
delay(10);
}
void init_lcd(void) // 初始化 LCD
{
write_cmd(0x38); // 功能设置: 8位数据总线,两行显示,5x8 点阵
write_cmd(0x0C); // 显示开启: 关闭光标,开启显示
write_cmd(0x06); // 显示设置: 光标自动右移,不移动屏幕
write_cmd(0x01); // 清屏
delay(1000); // 延迟 1s
}
void display_time(void) // 显示时间
{
unsigned char hour, min, sec; // 时分秒
hour = 12; // 设定初始值为 12:00:00
min = 0;
sec = 0;
while(1) // 一直循环
{
write_cmd(0x80); // 移动光标到第一行的左端
write_data((hour/10)+'0'); // 显示十位数
write_data((hour%10)+'0'); // 显示个位数
write_data(':');
write_data((min/10)+'0');
write_data((min%10)+'0');
write_data(':');
write_data((sec/10)+'0');
write_data((sec%10)+'0');
delay(500); // 每隔 500ms 刷新一次时间
if(++sec == 60) // 秒加 1
{
sec = 0;
if(++min == 60) // 分加 1
{
min = 0;
if(++hour == 24) // 时加 1
{
hour = 0;
}
}
}
}
}
void main(void)
{
init_lcd();
display_time();
}
```
希望这个程序对您有所帮助。如果您有其他问题,欢迎随时向我提问。
阅读全文