我想要做到电脑通过串行口助手在连接51单片机后,电脑通过串行口助手输入一个值然后连接的单片机的1602液晶屏就会显示这个值,上面的代码可以做到吗
时间: 2024-02-05 08:13:12 浏览: 126
可以的,你需要使用串口通信来连接电脑和单片机,并且在单片机上编写相应的代码来接收串口数据并在1602液晶屏上显示。
以下是一个简单的示例代码,假设你使用的是STC89C52单片机,连接的1602液晶屏使用的是4位8段引脚接口:
```
#include <reg52.h>
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_EN P2_2
#define LCD_DATA P0
void init_lcd();
void lcd_command(unsigned char cmd);
void lcd_write(unsigned char dat);
void lcd_display(unsigned char x, unsigned char y, unsigned char *str);
void uart_init();
void uart_receive();
unsigned char data_buf[16];
unsigned char data_len;
void main()
{
init_lcd();
uart_init();
while(1)
{
uart_receive();
if(data_len > 0)
{
lcd_display(0, 0, data_buf); // 在第一行显示串口输入的数据
data_len = 0;
}
}
}
void init_lcd()
{
lcd_command(0x38); // 设置显示模式为2行,5*7点阵字符
lcd_command(0x0c); // 开启显示,关闭光标
lcd_command(0x06); // 光标移动时自动移动屏幕
lcd_command(0x01); // 清屏
}
void lcd_command(unsigned char cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = cmd;
LCD_EN = 1;
LCD_EN = 0;
}
void lcd_write(unsigned char dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = dat;
LCD_EN = 1;
LCD_EN = 0;
}
void lcd_display(unsigned char x, unsigned char y, unsigned char *str)
{
unsigned char i;
if(y == 0)
{
lcd_command(0x80 + x); // 第一行
}
else
{
lcd_command(0xc0 + x); // 第二行
}
for(i=0; i<16; i++)
{
if(*str == '\0')
{
break;
}
lcd_write(*str++);
}
}
void uart_init()
{
TMOD = 0x20; // 定时器1工作在方式2,8位自动重装载
TH1 = 0xfd; // 波特率9600,定时器初值
TL1 = 0xfd; // 波特率9600,定时器初值
TR1 = 1; // 启动定时器1
SM0 = 0;
SM1 = 1; // 选择模式1,波特率可调节
REN = 1; // 允许接收
ES = 1; // 允许串口中断
EA = 1; // 允许总中断
}
void uart_receive() interrupt 4
{
if(RI)
{
RI = 0;
data_buf[data_len++] = SBUF;
}
}
```
在电脑端,你可以使用串口调试助手软件,如Tera Term或者PuTTY等,设置串口参数(波特率、数据位、停止位、校验位)与单片机相同,并在软件中输入要发送到单片机的数据。单片机通过串口接收到数据后,会在1602液晶屏上显示。
阅读全文