📄 lcd1602.h
字号:
#ifndef LCD1602_2009_3
#define LCD1602_2009_3
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS = P2 ^ 0;
sbit LCD_RW = P2 ^ 1;
sbit LCD_E = P2 ^ 2;
#define LCD_DATA P0
uchar code LcdBuf[]= { //自定义汉字 5X7;最大能存储64个字节
0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00,
0x0f,0x10,0x10,0x10,0x10,0x10,0x0f,0x00,
};
void delayms(uchar ms) // 延时子程序
{
uchar i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
bit lcd_busy()
{ // 测试LCD忙碌状态
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result =(LCD_DATA & 0x80);
LCD_E = 0;
return result;
}
void WriteCommand(uchar wdata)
{
while(lcd_busy());
LCD_DATA=wdata;
LCD_RS=0;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
delayms(5);
LCD_E=1;
}
void WriteData(uchar wdata)
{
while(lcd_busy());
LCD_DATA=wdata;
LCD_RS=1;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
delayms(5);
LCD_E=1;
}
void lcd_init(void)
{
WriteCommand(0x38);
WriteCommand(0x38);
WriteCommand(0x38);
delayms(5);
WriteCommand(0x08);
WriteCommand(0x01);
WriteCommand(0x06);
WriteCommand(0x0c);
}
void set_xy(uchar x,uchar y)
{
switch (x)
{
case 0: y+=0x80; break;
case 1: y+=0xc0; break;
case 2: y+=0x90; break;
case 3: y+=0xd0; break;
}
WriteCommand(y);
}
void display_onechar(uchar x,uchar y,uchar wdate)
{
set_xy(x,y);
WriteData(wdate);
}
void display_string(uchar x,uchar y,uchar *s)
{
set_xy(x,y);
while(*s)
{
WriteData(*s);
s++;
}
}
void Write_CGRAM(uchar *p)
{
uchar i,j,kk;
uchar tmp=0x40; //操作CGRAM的命令码
kk=0;
for(j=0;j<2;j++) //64 字节存储空间,可以生成 8 个自定义字符点阵 64X8
{
for(i=0;i<8;i++) // 8 个字节生成 1 个字符点阵
{
WriteCommand(tmp+i); //操作CGRAM的命令码+写入CGRAM地址.
WriteData(p[kk]); //写入数据
kk++;
}
tmp += 8;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -