使用AT89C51单片机和液晶LCD1602串行接口方式编写代码实现以下功能1.按下设定好的独立按键,将8个数据发往PC机,PC机用串口助手软件将接收数据显示。 2.接收PC发来的数据,在液晶LCD1602上显示。(晶振11.0592MHz,波特率9600bps)
时间: 2024-03-20 09:43:29 浏览: 90
好的,以下是基于AT89C51单片机和液晶LCD1602串行接口方式的代码实现:
```
#include <reg51.h>
#define LCD1602_DATA P1 //LCD1602数据线端口
sbit LCD1602_RS = P2^0; //LCD1602命令/数据选择端口
sbit LCD1602_RW = P2^1; //LCD1602读/写选择端口
sbit LCD1602_E = P2^2; //LCD1602使能端口
sbit KEY = P3^0; //独立按键端口
void delay(unsigned int t) //延时函数
{
while(t--);
}
void LCD1602_WriteCmd(unsigned char cmd) //LCD1602写命令函数
{
LCD1602_RW = 0;
LCD1602_RS = 0;
LCD1602_E = 0;
delay(5000);
LCD1602_DATA = cmd;
LCD1602_E = 1;
delay(5000);
LCD1602_E = 0;
delay(5000);
}
void LCD1602_WriteData(unsigned char dat) //LCD1602写数据函数
{
LCD1602_RW = 0;
LCD1602_RS = 1;
LCD1602_E = 0;
delay(5000);
LCD1602_DATA = dat;
LCD1602_E = 1;
delay(5000);
LCD1602_E = 0;
delay(5000);
}
void LCD1602_Clear() //LCD1602清屏函数
{
LCD1602_WriteCmd(0x01);
delay(50000);
}
void LCD1602_Init() //LCD1602初始化函数
{
LCD1602_RW = 0;
LCD1602_RS = 0;
LCD1602_E = 0;
delay(50000);
LCD1602_WriteCmd(0x38); //设置8位数据总线,2行显示,5x7点阵字符
delay(50000);
LCD1602_WriteCmd(0x0C); //显示开,光标关,闪烁关
delay(50000);
LCD1602_WriteCmd(0x06); //文字不动,光标右移
delay(50000);
}
void UART_Init() //串口初始化函数
{
TMOD = 0x20; //使用定时器1,模式2
SCON = 0x50; //8位数据,可变波特率,允许接收
TH1 = 0xFD; //设置波特率9600bps,晶振11.0592MHz
TL1 = 0xFD;
TR1 = 1; //启动定时器1
}
void UART_Send(unsigned char dat) //串口发送函数
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void main()
{
unsigned char data[] = "Hello world!";
unsigned char recv;
LCD1602_Init(); //LCD1602初始化
UART_Init(); //串口初始化
LCD1602_Clear(); //LCD1602清屏
while(1)
{
if(KEY == 0) //检测按键是否按下
{
for(int i=0; i<8; i++)
{
UART_Send(data[i]); //将8个数据发送到PC机
}
}
if(RI) //检测串口是否接收到数据
{
recv = SBUF; //获取串口接收到的数据
LCD1602_WriteData(recv); //在LCD1602上显示接收到的数据
RI = 0;
}
}
}
```
以上代码中,需要根据具体情况修改液晶LCD1602的接口方式、单片机的型号以及液晶LCD1602的写命令函数、写数据函数、清屏函数和初始化函数。同时,您还需要根据具体情况添加串口发送和接收的代码,以及独立按键的检测代码。
阅读全文