c51单片机实现电脑串口远程控制LCD1602 代码
时间: 2023-11-13 22:04:45 浏览: 138
以下是基于C51单片机实现电脑串口远程控制LCD1602的代码:
```c
#include <REG52.H>
#include <stdio.h>
#include <string.h>
#define LCD1602_DB P0
#define LCD1602_RS P2_0
#define LCD1602_RW P2_1
#define LCD1602_E P2_2
void delay(unsigned int xms) // 延时函数
{
unsigned int i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void lcd1602_write_cmd(unsigned char cmd) // 写命令函数
{
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_E = 1;
LCD1602_DB = cmd;
delay(5);
LCD1602_E = 0;
}
void lcd1602_write_data(unsigned char dat) // 写数据函数
{
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_E = 1;
LCD1602_DB = dat;
delay(5);
LCD1602_E = 0;
}
void lcd1602_init(void) // 初始化函数
{
lcd1602_write_cmd(0x38);
delay(5);
lcd1602_write_cmd(0x0c);
delay(5);
lcd1602_write_cmd(0x06);
delay(5);
lcd1602_write_cmd(0x01);
delay(5);
}
void lcd1602_display(unsigned char X, unsigned char Y, unsigned char *s) // 显示函数
{
unsigned char i;
if (X > 15)
{
X = 0;
Y++;
}
switch (Y)
{
case 0:
lcd1602_write_cmd(0x80 + X);
break;
case 1:
lcd1602_write_cmd(0x80 + 0x40 + X);
break;
case 2:
lcd1602_write_cmd(0x80 + 0x10 + X);
break;
case 3:
lcd1602_write_cmd(0x80 + 0x50 + X);
break;
default:
break;
}
for (i = 0; s[i] != '\0'; i++)
lcd1602_write_data(s[i]);
}
void main(void)
{
unsigned char ch;
unsigned char str[17];
SCON = 0x50; // 8位数据,可变波特率
TMOD = 0x20; // 定时器1工作在方式2(8位自动重载)
TH1 = 0xfd; // 波特率9600
TL1 = 0xfd;
TR1 = 1; // 启动定时器1
lcd1602_init(); // 初始化LCD1602
while (1)
{
if (RI)
{
RI = 0;
ch = SBUF;
switch (ch)
{
case '1':
strcpy(str, "Hello World!");
lcd1602_display(0, 0, str);
break;
case '2':
strcpy(str, "C51 is great!");
lcd1602_display(0, 1, str);
break;
default:
break;
}
}
}
}
```
该代码通过串口接收来自电脑端的数据,并根据数据来控制LCD1602的显示内容。具体操作为:
1. 初始化LCD1602;
2. 开启串口通信,并设置波特率为9600;
3. 进入死循环,等待串口接收数据;
4. 根据接收到的数据,选择不同的显示内容,并控制LCD1602显示。
需要注意的是,本代码中使用的是基于定时器1的波特率发生器,因此需要在头文件中添加 `#include <REG52.H>`。如果使用其他单片机,需要根据具体型号进行修改。同时,由于LCD1602的显示位置是由地址决定的,因此需要根据具体的LCD1602型号,自行修改 `lcd1602_display()` 函数中的地址值。
阅读全文