写一个单片机LCD时间显示代码。只显示时,分,秒。在P1^1端口设置一个按键切换时,分,秒的调整并在P1^2端口设置按键对时间进行加法,在P1^3端口设置按键对时间进行减法,在P1^4端口设置一个按键退出调整
时间: 2023-12-31 10:04:08 浏览: 125
好的,以下是一个8051单片机LCD时间显示的代码,实现了时分秒,并可以通过P1^1切换调整时、分、秒,通过P1^2和P1^3分别对时间进行加法和减法,通过P1^4退出调整:
```
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
uchar hour=0,min=0,sec=0; // 初始时间为0时0分0秒
bit adjust_flag=0; // 调整标志位,0表示未调整,1表示正在调整
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
RS=0;
RW=0;
P0=com;
E=1;
delay(1);
E=0;
}
void write_data(uchar dat)
{
RS=1;
RW=0;
P0=dat;
E=1;
delay(1);
E=0;
}
void init()
{
write_com(0x38); // 显示模式:5*7点阵、16x2行、8位数据线
delay(5);
write_com(0x0c); // 显示控制:开显示,光标关闭,光标闪烁关闭
delay(5);
write_com(0x06); // 光标移动:写入数据后光标右移,整屏移动关闭
delay(5);
write_com(0x01); // 清屏
delay(5);
}
void display_time()
{
uchar th,tm,ts;
th=hour/10+'0'; // 时十位
tm=min/10+'0'; // 分十位
ts=sec/10+'0'; // 秒十位
write_com(0x80); // 第一行第一列
write_data(th);
write_data(hour%10+'0'); // 时个位
write_data(':');
write_data(tm);
write_data(min%10+'0'); // 分个位
write_data(':');
write_data(ts);
write_data(sec%10+'0'); // 秒个位
}
void adjust_time()
{
uchar key=0;
adjust_flag=1;
while(adjust_flag)
{
if(P1^1==0) // 切换调整项
{
delay(1000);
key++;
if(key>2) key=0;
}
if(P1^2==0) // 加1
{
delay(1000);
if(key==0) // 调整小时
{
hour++;
if(hour>23) hour=0;
}
else if(key==1) // 调整分钟
{
min++;
if(min>59) min=0;
}
else if(key==2) // 调整秒钟
{
sec++;
if(sec>59) sec=0;
}
}
if(P1^3==0) // 减1
{
delay(1000);
if(key==0) // 调整小时
{
if(hour==0) hour=23;
else hour--;
}
else if(key==1) // 调整分钟
{
if(min==0) min=59;
else min--;
}
else if(key==2) // 调整秒钟
{
if(sec==0) sec=59;
else sec--;
}
}
if(P1^4==0) // 退出调整
{
delay(1000);
adjust_flag=0;
}
display_time();
}
}
void main()
{
init();
while(1)
{
display_time();
if(P1^1==0) adjust_time();
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)
{
hour=0;
}
}
}
delay(1000);
}
}
```
注意:本代码只是一个示例,实际应用中还需要考虑更多的情况和细节。
阅读全文