51单片机lcd1602两行显示程序
时间: 2023-08-30 16:10:52 浏览: 160
以下是51单片机使用LCD1602显示器实现两行显示的程序:
```c
#include <reg52.h>
#include <stdio.h>
#define LCD1602_DATAPORT P0
sbit LCD1602_RS = P2^0; // RS引脚
sbit LCD1602_RW = P2^1; // RW引脚
sbit LCD1602_EN = P2^2; // EN引脚
void delay(unsigned int t)
{
while(t--);
}
void LCD1602_WriteCmd(unsigned char cmd)
{
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DATAPORT = cmd;
LCD1602_EN = 1;
delay(100);
LCD1602_EN = 0;
}
void LCD1602_WriteData(unsigned char dat)
{
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DATAPORT = dat;
LCD1602_EN = 1;
delay(100);
LCD1602_EN = 0;
}
void LCD1602_Init()
{
LCD1602_WriteCmd(0x38); // 8位数据线,2行显示,5x7点阵字符
LCD1602_WriteCmd(0x0c); // 显示开,无光标,不闪烁
LCD1602_WriteCmd(0x06); // 地址自动加1,不移动屏幕
LCD1602_WriteCmd(0x01); // 清屏
}
void LCD1602_SetCursor(unsigned char x, unsigned char y)
{
unsigned char addr;
if (y == 0) // 第一行
addr = 0x80 + x;
else // 第二行
addr = 0xc0 + x;
LCD1602_WriteCmd(addr);
}
void LCD1602_Print(const char *str)
{
while(*str != '\0')
{
LCD1602_WriteData(*str++);
}
}
void main()
{
LCD1602_Init(); // 初始化
LCD1602_SetCursor(0, 0); // 设置光标位置
LCD1602_Print("Hello,"); // 输出第一行
LCD1602_SetCursor(0, 1); // 设置光标位置
LCD1602_Print("world!"); // 输出第二行
while(1);
}
```
程序中通过 `LCD1602_WriteCmd()` 函数来向LCD1602发送命令,通过 `LCD1602_WriteData()` 函数来向LCD1602发送数据。同时,还实现了一些辅助函数,如 `LCD1602_Init()` 用于初始化LCD1602, `LCD1602_SetCursor()` 用于设置光标位置, `LCD1602_Print()` 用于向LCD1602输出字符串。在主函数中,先进行了LCD1602的初始化,然后设置光标位置和输出两行字符串。
阅读全文