⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602.h

📁 LCD1602+89C51+DS18B20数字温度计
💻 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 + -