51单片机串口发送指令lcd1602显示
时间: 2023-11-16 10:05:07 浏览: 285
51单片机和上位机串口软件通信发送数据1602显示程序.zip
下面是51单片机串口发送指令lcd1602显示的代码示例。
```
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS=P1^0; //RS引脚
sbit RW=P1^1; //RW引脚
sbit EN=P1^2; //EN引脚
void delay(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void InitLcd1602() //初始化函数
{
delay(15); //等待上电稳定
WriteCommand(0x38); //设置16x2显示,5x7点阵,8位数据接口
WriteCommand(0x0c); //显示开,光标关,光标不闪烁
WriteCommand(0x06); //光标右移,字符不移位
WriteCommand(0x01); //清屏
}
void WriteCommand(uchar com) //写指令函数
{
RS=0; //RS=0,选择指令寄存器
RW=0; //RW=0,选择写入模式
P0=com; //写入指令
EN=1; //EN脉冲
_nop_();
EN=0;
delay(1);
}
void WriteData(uchar dat) //写数据函数
{
RS=1; //RS=1,选择数据寄存器
RW=0; //RW=0,选择写入模式
P0=dat; //写入数据
EN=1; //EN脉冲
_nop_();
EN=0;
delay(1);
}
void main()
{
TMOD=0x20; //定时器1工作在模式2,8位自动重载
TH1=0xfd; //波特率为9600,定时器初值为FDH
TL1=0xfd;
SCON=0x50; //串口工作在模式1,允许接收
PCON=0x00; //波特率不加倍
TR1=1; //启动定时器1
InitLcd1602(); //初始化LCD1602
while(1)
{
if(RI==1) //有数据接收
{
RI=0; //清除接收标志
WriteData(SBUF); //写数据到LCD1602
}
}
}
```
在上面的代码中,我们首先定义了LCD1602的RS、RW、EN引脚,并编写了延时函数、初始化函数、写指令函数和写数据函数。在主函数中,我们启动了定时器1和串口,并在循环中判断是否有数据接收,如果有则将数据写入LCD1602中。
阅读全文