📄 lcd1602.c
字号:
#include<reg51.h>
#include"inc/define.h"
#include"inc/lcd1602.h"
#define BUSY 0x80 //用于检测LCD状态字中的Busy标识
u8 BusyCheck() //忙检测 LCD正操作忙则返回1;不忙则返回0
{
u8 flag;
LCD_Data = 0xFF;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
flag = LCD_Data & BUSY;
LCD_E = 0;
return flag;
}
void BusyWait() //忙等待 一直等到LCD不忙时再返回
{
while(1 == BusyCheck())
;
}
void WriteCMD(u8 CData)
{
BusyWait();
LCD_Data = CData;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 1;
LCD_E = 0;
}
void WriteData(u8 DData)
{
BusyWait();
LCD_Data = DData;
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 1;
LCD_E = 0;
}
u8 ReadData()
{
u8 DData;
LCD_RS = 1;
LCD_RW = 1;
LCD_E = 1;
DData=LCD_Data;
LCD_E = 0;
return DData;
}
/**********在指定位置显示一个字符*************/
void DisplayChar(u8 x,u8 y,uchar DData)
{
x &= 0xF;
y &= 0x1; //限制x不能大于15,y不能大于1
if (1 == y)
x |= 0x40; //当要显示第二行时地址码 0x40;
x |= 0x80; //算出指令码
WriteCMD(x); //这里不检测忙信号,发送地址码
WriteData(DData);
}
/*********按指定位置显示一串字符**************/
void DisplayStr(u8 x,u8 y,uchar *DData)
{
u8 char_posi = 0;
x &= 0xF;
y &= 0x1; //限制x不能大于15,y不能大于1
while ((DData[char_posi] != '\0') && (x <= 0x0F)) //若到达字串尾则退出并且位置不在末尾
{
DisplayChar(x,y,DData[char_posi]); //显示单个字符
char_posi++;
x++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -