用51单片机写一个LCD1602显示函数
时间: 2024-05-05 15:20:43 浏览: 89
下面提供一个基于51单片机的LCD1602显示函数代码:
```
#include <reg52.h>
#define LCD1602_DATAPORT P0 // LCD1602数据口定义
#define LCD1602_CMDPORT P2 // LCD1602命令口定义
#define LCD1602_CLEAR 0x01 // 清屏命令
#define LCD1602_HOME 0x02 // 返回首页命令
#define LCD1602_ENTRY 0x06 // 入口模式命令
#define LCD1602_DISPLAY 0x0C // 显示开启命令
#define LCD1602_FUNCTION 0x38 // 8位数据总线、2行显示、5x7点阵字符
// 延时函数
void Delay(unsigned int t)
{
unsigned int i, j;
for(i=0; i<t; i++)
for(j=0; j<100; j++);
}
// 写命令
void WriteCmd(unsigned char cmd)
{
LCD1602_CMDPORT &= 0xfe; // RS=0, 写命令
LCD1602_DATAPORT = cmd;
Delay(5);
LCD1602_CMDPORT |= 0x01; // EN=1, 产生上升沿
Delay(5);
LCD1602_CMDPORT &= 0xfe; // EN=0, 产生下降沿
Delay(5);
}
// 写数据
void WriteData(unsigned char dat)
{
LCD1602_CMDPORT |= 0x01; // RS=1, 写数据
LCD1602_DATAPORT = dat;
Delay(5);
LCD1602_CMDPORT |= 0x01; // EN=1, 产生上升沿
Delay(5);
LCD1602_CMDPORT &= 0xfe; // EN=0, 产生下降沿
Delay(5);
}
// 初始化函数
void InitLcd1602()
{
Delay(150);
WriteCmd(0x38); // 8位数据总线、2行显示、5x7点阵字符
WriteCmd(0x0c); // 显示开启、光标不显示、光标不闪烁
WriteCmd(0x06); // 入口模式:字体不移位、屏幕向右移动
WriteCmd(0x01); // 清屏
}
// 显示字符串
void DisplayString(unsigned char x,unsigned char y,unsigned char *s)
{
unsigned char i;
if(y==0) y=0x80; // 第一行
else y=0xc0; // 第二行
y+=x; // 指定列
WriteCmd(y); // 光标移至指定位置
i=0;
while(s[i]!='\0')
{
WriteData(s[i]); // 输出字符
i++;
}
}
// 主函数
void main()
{
InitLcd1602(); // 初始化 LCD1602
DisplayString(0,0,"Hello World!"); // 在第一行第一列输出 "Hello World!"
while(1);
}
```
注:以上代码仅供参考,具体实现需要根据实际情况进行调整。
阅读全文