一般lcd显示屏都是4位,前两位用来表示小时,后两位用来表示分钟,没有地方显示秒钟,一般中间的冒号每次闪烁表示经过一秒,这个你能用keil写个代码吗
时间: 2024-03-16 08:44:25 浏览: 51
当然可以,以下是基于Keil C51编译器的代码示例:
```c
#include <reg51.h>
sbit RS = P2^0; // 数据/命令选择引脚
sbit RW = P2^1; // 读/写选择引脚
sbit EN = P2^2; // 使能引脚
void delay(unsigned int i) {
while(i--);
}
void init_lcd() { // 初始化LCD
RS = 0;
RW = 0;
EN = 0;
delay(5000);
P1 = 0x30; // 8位数据线,设置为8位模式
EN = 1;
delay(5000);
EN = 0;
delay(5000);
P1 = 0x30;
EN = 1;
delay(5000);
EN = 0;
delay(5000);
P1 = 0x30;
EN = 1;
delay(5000);
EN = 0;
delay(5000);
P1 = 0x38; // 8位数据线,2行显示,5x7点阵字符
EN = 1;
delay(5000);
EN = 0;
delay(5000);
P1 = 0x08; // 关闭显示
EN = 1;
delay(5000);
EN = 0;
delay(5000);
P1 = 0x01; // 清屏
EN = 1;
delay(5000);
EN = 0;
delay(5000);
P1 = 0x06; // 指针自动加1,显示不移位
EN = 1;
delay(5000);
EN = 0;
delay(5000);
P1 = 0x0C; // 开启显示,光标不显示
EN = 1;
delay(5000);
EN = 0;
}
void write_com(unsigned char com) { // 写命令
RS = 0;
RW = 0;
P1 = com;
EN = 1;
delay(100);
EN = 0;
delay(100);
}
void write_data(unsigned char dat) { // 写数据
RS = 1;
RW = 0;
P1 = dat;
EN = 1;
delay(100);
EN = 0;
delay(100);
}
void display_time(unsigned char hour,unsigned char min) { // 显示时间
unsigned char buf[6];
buf[0] = hour / 10 + 0x30;
buf[1] = hour % 10 + 0x30;
buf[2] = ':';
buf[3] = min / 10 + 0x30;
buf[4] = min % 10 + 0x30;
buf[5] = '\0';
write_com(0x80); // 第1行第1个字符
for(unsigned char i=0; buf[i]!='\0'; i++) {
write_data(buf[i]);
}
}
void main() {
init_lcd(); // 初始化LCD
unsigned char hour = 0;
unsigned char min = 0;
while(1) {
display_time(hour,min); // 显示时间
delay(50000); // 延时1秒
write_com(0x0E); // 关闭显示
delay(50000); // 延时1秒
write_com(0x0F); // 开启显示
min++;
if(min == 60) {
min = 0;
hour++;
if(hour == 24) {
hour = 0;
}
}
}
}
```
这段代码可以实现在LCD显示屏上显示当前时间,并且每秒钟中间的冒号闪烁一次。注意:这里的延时函数需要根据实际情况进行调整。
阅读全文