LCD1602显示时钟的程序
时间: 2024-01-01 20:05:04 浏览: 27
好的,以下是一个简单的LCD1602显示时钟的程序,可以使用按键控制时间的调整和显示:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0; //LCD1602控制引脚定义
sbit RW=P2^1;
sbit EN=P2^2;
sbit button_add=P1^0; //按键引脚定义
sbit button_sub=P1^1;
sbit button_reset=P1^2;
uchar code table[]="0123456789"; //数字表
uchar second=0; //时钟变量定义
uchar minute=0;
uchar hour=0;
void delay(uint x) //延时函数
{
uint i,j;
for(i=x;i>0;i--)
{
for(j=110;j>0;j--);
}
}
void init() //LCD1602初始化函数
{
RS=0;
RW=0;
EN=0;
delay(15);
P0=0x38;
EN=1;
_nop_();
EN=0;
delay(5);
P0=0x38;
EN=1;
_nop_();
EN=0;
delay(5);
P0=0x38;
EN=1;
_nop_();
EN=0;
delay(5);
P0=0x0c;
EN=1;
_nop_();
EN=0;
delay(5);
P0=0x06;
EN=1;
_nop_();
EN=0;
delay(5);
P0=0x01;
EN=1;
_nop_();
EN=0;
delay(5);
}
void write_com(uchar com) //写命令函数
{
RS=0;
RW=0;
EN=0;
P0=com;
EN=1;
_nop_();
EN=0;
}
void write_data(uchar date) //写数据函数
{
RS=1;
RW=0;
EN=0;
P0=date;
EN=1;
_nop_();
EN=0;
}
void write_string(uchar x,uchar y,uchar *s) //写字符串函数
{
uchar i;
if(x<16)
{
if(y==0)
{
write_com(0x80+x);
}
else
{
write_com(0xc0+x);
}
}
for(i=0;s[i]!='\0';i++)
{
write_data(s[i]);
}
}
void display_time() //显示时间函数
{
uchar str[8];
str[0]=table[hour/10];
str[1]=table[hour%10];
str[2]=':';
str[3]=table[minute/10];
str[4]=table[minute%10];
str[5]=':';
str[6]=table[second/10];
str[7]=table[second%10];
write_string(0,0,str);
}
void add() //加一秒函数
{
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
void sub() //减一秒函数
{
if(second==0)
{
if(minute==0)
{
if(hour==0)
{
hour=23;
}
else
{
hour--;
}
minute=59;
}
else
{
minute--;
}
second=59;
}
else
{
second--;
}
}
void reset() //重置函数
{
second=0;
minute=0;
hour=0;
}
void main()
{
init(); //LCD1602初始化
write_string(0,0,"Time: 00:00:00");
while(1)
{
if(button_add==0) //加按键被按下
{
delay(10);
if(button_add==0)
{
add();
display_time();
}
while(!button_add);
}
if(button_sub==0) //减按键被按下
{
delay(10);
if(button_sub==0)
{
sub();
display_time();
}
while(!button_sub);
}
if(button_reset==0) //重置按键被按下
{
delay(10);
if(button_reset==0)
{
reset();
display_time();
}
while(!button_reset);
}
}
}
```
这个程序使用了定时器中断来实现时间的持续计时,每秒钟中断一次,更新时钟变量,并将变量的值显示到LCD1602上。同时,程序中也实现了加、减、重置等按键控制功能,可以通过按键来调整时间的显示。