写一个51的lcd1602程序
时间: 2023-05-23 11:03:36 浏览: 58
以下是51的LCD1602程序:
```
#include <reg51.h>
#define LCD_DATA P0
sbit LCD_RS = P2^6;
sbit LCD_RW = P2^5;
sbit LCD_EN = P2^7;
void delay(unsigned int i)
{
while(i--);
}
// 初始化LCD屏幕
void lcd_init()
{
LCD_EN = 0;
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = 0x38; // 设置16x2显示,5x7点阵,8位数据线
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
LCD_DATA = 0x38; // 再次发送以保证初始化成功
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
LCD_DATA = 0x0C; // 开始显示,不显示光标
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
LCD_DATA = 0x01; // 清屏
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(50);
}
// 写命令或数据到LCD屏幕
void lcd_write_cmd(unsigned char cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = cmd;
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(50);
}
void lcd_write_data(unsigned char data)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = data;
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(50);
}
// 在指定位置显示字符串
void lcd_show_string(unsigned char x, unsigned char y, char *str)
{
unsigned char i;
switch(y)
{
case 0:
lcd_write_cmd(0x80 + x);
break;
case 1:
lcd_write_cmd(0xC0 + x);
break;
}
for(i = 0; str[i]!='\0'; i++)
lcd_write_data(str[i]);
}
void main()
{
lcd_init();
lcd_show_string(0, 0, "Hello, world!");
while(1);
}
```
希望可以帮到你!