51单片机lcd1602显示程序
时间: 2023-08-30 09:11:05 浏览: 86
LCD1602屏幕的驱动程序
以下是基于 Keil C51 编译器的 51 单片机 LCD1602 显示程序:
```c
#include <reg51.h>
#define LCD_DATA P0
sbit RS = P2^0;
sbit EN = P2^1;
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void lcd_write_cmd(unsigned char cmd) // 写命令函数
{
RS = 0; // 选择命令寄存器
LCD_DATA = cmd; // 发送命令
EN = 1; // 使能
delay(10); // 延时
EN = 0; // 失能
}
void lcd_write_data(unsigned char dat) // 写数据函数
{
RS = 1; // 选择数据寄存器
LCD_DATA = dat; // 发送数据
EN = 1; // 使能
delay(10); // 延时
EN = 0; // 失能
}
void lcd_init() // LCD 初始化函数
{
lcd_write_cmd(0x38); // 8 位数据总线,2 行显示,5x7 点阵字符,无显示光标
lcd_write_cmd(0x0c); // 开启显示,不显示光标,不闪烁
lcd_write_cmd(0x06); // 显示光标移动,不移动屏幕
lcd_write_cmd(0x01); // 清屏
}
void lcd_display_string(unsigned char x,unsigned char y,unsigned char *s) // 在指定位置显示字符串
{
unsigned char i;
if(x < 16) // 如果 x 坐标小于 16,则为第一行
{
lcd_write_cmd(0x80 + x); // 命令寄存器设置为第一行的 x 坐标
lcd_write_cmd(0x80); // 指向第一行的第一个字符
}
else // 否则为第二行
{
lcd_write_cmd(0x80 + 0x40 + x - 16); // 命令寄存器设置为第二行的 x 坐标
lcd_write_cmd(0xc0); // 指向第二行的第一个字符
}
for(i = 0; s[i] != '\0'; i++) // 逐个输出字符
{
lcd_write_data(s[i]);
}
}
void main()
{
lcd_init(); // LCD 初始化
lcd_display_string(0,0,"Hello, world!"); // 在第一行第一列输出字符串
lcd_display_string(0,1,"From 51 MCU!"); // 在第二行第一列输出字符串
while(1); // 无限循环
}
```
注:以上程序仅供参考,具体实现可能需要根据硬件电路和 LCD 模块的具体规格进行调整。
阅读全文