51单片机通过串口控制lcd1602来改变时钟的代码
时间: 2023-11-16 16:05:33 浏览: 90
51单片机实现LCD1602液晶显示时间源码
以下是一个简单的51单片机程序,通过串口控制LCD1602来改变时钟:
```c
#include <reg52.h>
#include <stdio.h>
#define LCD1602_DB P0
sbit LCD1602_RS = P2^0;
sbit LCD1602_RW = P2^1;
sbit LCD1602_E = P2^2;
void delay(unsigned int xms) // 延时函数
{
unsigned int i, j;
for(i=xms; i>0; i--)
for(j=112; j>0; j--);
}
void LCD1602_WriteCommand(unsigned char com) // 写命令
{
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = com;
LCD1602_E = 1;
delay(5);
LCD1602_E = 0;
}
void LCD1602_WriteData(unsigned char dat) // 写数据
{
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
delay(5);
LCD1602_E = 0;
}
void LCD1602_Init() // 初始化LCD1602
{
LCD1602_WriteCommand(0x38);
LCD1602_WriteCommand(0x0c);
LCD1602_WriteCommand(0x06);
LCD1602_WriteCommand(0x01);
}
void LCD1602_ShowString(unsigned char x, unsigned char y, unsigned char *str) // 在指定位置显示字符串
{
unsigned char i = 0;
if(x<16) // x不能大于16
{
if(y) // y=1,第二行
LCD1602_WriteCommand(0xc0+x);
else // y=0,第一行
LCD1602_WriteCommand(0x80+x);
while(str[i]!='\0') // 写入每个字符
{
LCD1602_WriteData(str[i]);
i++;
}
}
}
void main()
{
unsigned char hour = 0, minute = 0; // 定义变量
unsigned char str[16];
LCD1602_Init(); // 初始化LCD1602
while(1)
{
if(RI) // 如果接收到数据
{
RI = 0;
hour = SBUF; // 读取小时
while(!RI); // 等待接收到数据
RI = 0;
minute = SBUF; // 读取分钟
sprintf(str, "%02d:%02d", hour, minute); // 格式化字符串
LCD1602_ShowString(0, 0, str); // 在LCD1602上显示
}
}
}
```
这个程序通过串口接收小时和分钟,然后格式化字符串并在LCD1602上显示。你可以根据需要修改代码以实现更多功能。
阅读全文