📄 1602.h
字号:
#include "reg51.h"
/********IO引脚定义***********************************************************/
#ifdef USE_PLCC44
sbit LCD_RS=P2^7;//定义引脚
sbit LCD_RW=P2^6;
sbit LCD_E=P2^5;
#define LCD_Data P1
#elif defined USE_DIP40
sbit LCD_RS=P1^0;//定义引脚
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
#define LCD_Data P0
#else
sbit LCD_RS=P1^0;//定义引脚
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
#define LCD_Data P0
#endif
/********宏定义***********************************************************/
#define Busy 0x80 //用于检测LCD状态字中的Busy标识
#define uchar unsigned char
#define uint unsigned int
/********数据定义*************************************************************/
code uchar table[]={48,49,50,51,52,53,54,55,56,57}; //0_9 ascii码的数字
/********函数声明*************************************************************/
void WriteDataLCD(unsigned char WR_DATA); //写数据
void WriteCommandLCD(unsigned char WCLCD); //写命令
void busy_check(void); //读状态
void LCDInit(void); //初始化
void DisplayOneChar(uchar X, uchar Y, uchar DData); //相应坐标显示字节内容
void DisplayListChar(uchar X, uchar Y, uchar code *DData); //相应坐标开始显示一串内容
/*初始化*/
void LCDInit(void)
{
WriteCommandLCD(0x38); //显示模式设置,开始要求每次检测忙信号 0011 1000
WriteCommandLCD(0x08); //关闭显示
WriteCommandLCD(0x01); //显示清屏
WriteCommandLCD(0x06); //显示光标移动设置
WriteCommandLCD(0x0C); //显示开及光标设置
}
/*按指定位置显示一串字符*/
void DisplayListChar(uchar X, uchar Y, uchar code *DData)
{
unsigned char ListLength;
ListLength = 0;
X &= 0xF;
Y &= 0x1; //限制X不能大于15,Y不能大于1
while (DData[ListLength]>=0x20){ //若到达字串尾则退出
if (X <= 0xF){ //X坐标应小于0xF
DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
ListLength++;
X++;
}
}
}
/*按指定位置显示一个字符*/
void DisplayOneChar(uchar X, uchar Y, uchar DData)
{
X &= 0xF;
Y &= 0x1; //限制X不能大于15,Y不能大于1
if (Y)
X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; //算出指令码
WriteCommandLCD(X); //发送地址码
WriteDataLCD(DData);
}
/***********写指令********************************************************/
void WriteCommandLCD(uchar WCLCD)
{
busy_check();
LCD_Data = WCLCD;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 0;
LCD_E = 1;
}
/***********写数据********************************************************/
void WriteDataLCD(uchar WR_DATA)
{
busy_check(); //检测忙
LCD_Data = WR_DATA;
LCD_RS = 1;
LCD_RW = 0;
// LCD_E = 0; //若晶振速度太高可以在这后加小的延时
LCD_E = 0;
LCD_E = 1;
}
//检测忙信号
void busy_check(void)
{
LCD_Data = 0xFF;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 0;
LCD_E = 1;
while (LCD_Data & Busy);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -