51单片机lcd1602电子时钟c代码
时间: 2023-06-13 22:06:47 浏览: 236
以下是51单片机LCD1602电子时钟C代码的示例:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^6; //LCD1602的RS引脚
sbit RW = P2^5; //LCD1602的RW引脚
sbit EN = P2^7; //LCD1602的EN引脚
void Delay1ms(uint cnt) //延时函数,cnt为延时的毫秒数
{
uint i;
while(cnt--)
{
for(i = 0; i < 1000; i++);
}
}
void WriteCommand(uchar cmd) //写命令函数
{
RS = 0; //将RS引脚置为0,表示要写入的是命令
RW = 0; //将RW引脚置为0,表示要写入的是命令
P0 = cmd; //将命令写入P0口
EN = 1; //将EN引脚置为1,表示要执行命令
_nop_(); //空操作,延时一段时间
EN = 0; //将EN引脚置为0,表示命令执行完毕
}
void WriteData(uchar dat) //写数据函数
{
RS = 1; //将RS引脚置为1,表示要写入的是数据
RW = 0; //将RW引脚置为0,表示要写入的是数据
P0 = dat; //将数据写入P0口
EN = 1; //将EN引脚置为1,表示要执行命令
_nop_(); //空操作,延时一段时间
EN = 0; //将EN引脚置为0,表示命令执行完毕
}
void InitLCD() //初始化LCD1602函数
{
WriteCommand(0x38); //初始化LCD1602,设置显示模式为2行、5*7点阵、8位数据接口
WriteCommand(0x0c); //将光标设置为不可见状态,不显示光标和闪烁
WriteCommand(0x06); //设置光标移动方向为右移,不滚屏
WriteCommand(0x01); //清屏
}
void Display(uchar hour, uchar minute, uchar second) //显示函数
{
uchar temp;
//显示小时
temp = hour / 10; //计算十位数
WriteData(temp + '0'); //显示十位数
temp = hour % 10; //计算个位数
WriteData(temp + '0'); //显示个位数
WriteData(':'); //显示冒号
//显示分钟
temp = minute / 10; //计算十位数
WriteData(temp + '0'); //显示十位数
temp = minute % 10; //计算个位数
WriteData(temp + '0'); //显示个位数
WriteData(':'); //显示冒号
//显示秒钟
temp = second / 10; //计算十位数
WriteData(temp + '0'); //显示十位数
temp = second % 10; //计算个位数
WriteData(temp + '0'); //显示个位数
}
void main() //主函数
{
uchar hour = 0, minute = 0, second = 0; //定义小时、分钟、秒钟变量
InitLCD(); //初始化LCD1602
while(1)
{
//显示时间
Display(hour, minute, second);
//更新时间
second++; //秒钟加1
if(second == 60) //如果秒钟等于60
{
second = 0; //秒钟清零
minute++; //分钟加1
if(minute == 60) //如果分钟等于60
{
minute = 0; //分钟清零
hour++; //小时加1
if(hour == 24) //如果小时等于24
{
hour = 0; //小时清零
}
}
}
Delay1ms(1000); //延时1秒钟
}
}
```
以上代码仅供参考,具体实现方式可以根据自己的需求进行修改。
阅读全文