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

📄 lcd1602driver.c

📁 1602液晶显示驱动程序,包括反显,各种自定义字符显示
💻 C
字号:
#include"LCD1602DRIVER.H"
#include"reg52.h"
#include"intrins.h"
#include"string.h"
#include"key.h"
//================================================================================
//函数名称:LCD1602_Write(uchar Comment,uchar Modle_Choose)写命令
//函数功能:向LCD1602写命令
//================================================================================
void LCD1602_Write(uchar Comment,bit Modle_Choose)
{

	LCD_E = 0;
	LCD_RS=Modle_Choose;
	LCD_RW = 0;
	_nop_();
	Data_Port = Comment;
	_nop_();
	_nop_();
	LCD_E = 1;
	LCD_E = 0;
	_nop_();
	Test_Busy();
}
//================================================================================
//函数名称:LCD1602_Read(uchar Modle_Choose)读命令
//函数功能:读LCD1602端口数据
//================================================================================
uchar LCD1602_Read(uchar Modle_Choose)
{
	uchar Data_Return;
	if(Modle_Choose&0x01)
	LCD_RS=1;
	else
	LCD_RS=0;
	LCD_RW = 1;
	LCD_E = 0;
	_nop_();
	LCD_E = 1;
	_nop_();
	_nop_();
	Data_Return = Data_Port	;
	_nop_();
	LCD_E=0;
	LCD_RW = 0;
	Test_Busy();
	return Data_Return;
}
//================================================================================
//函数名称:LCD1602_Init()
//函数功能:LCD1602初始化
//================================================================================
void  LCD1602_Init()
{
	LCD_E=0;
	LCD1602_Write(Modle_Choode,Comment_Modle);		  								  
	LCD1602_Write(Modle_Choode,Comment_Modle);		 
	LCD1602_Write(Clear_Screen,Comment_Modle);
	LCD1602_Write(Open_Disput,Comment_Modle);
	LCD1602_Write(Auto_Move,Comment_Modle);
 
}
//================================================================================
//函数名称:void  LCD1602_ClearScreen();
//函数功能:清屏
//===============================================================================
void  LCD1602_ClearScreen()
{
	Test_Busy();
	LCD1602_Write(Clear_Screen,Comment_Modle);
}
//================================================================================
//函数名称:Test_Busy()
//函数功能:检查LCD总线忙
//================================================================================
void Test_Busy()
{
	uchar Flage;
	LCD_RS=0;
	LCD_RW = 1;
	LCD_E = 1;
	_nop_();
	_nop_();
	Flage=Data_Port;
	while(Flage&0x80)
	{
		Flage=Data_Port;
		_nop_();
	}
	LCD_E = 0;
	
}
//================================================================================
//函数名称:Delay(uchar Delay_Time)
//函数功能:检查LCD总线忙
//===============================================================================
void  Delay(uchar Delay_Time)
{
	uchar i;
	for(;Delay_Time>0;Delay_Time--)
		for(i=0;i<50;i++);
}
//================================================================================
//函数名称:uchar Translater(uchar Tr_Data);
//函数功能:转换成ASCLL码
//===============================================================================
uchar Translater(uchar Tr_Data)
{
	uchar TD;
	TD = Tr_Data+0x30;
	return TD;
		
}
//================================================================================
//函数名称:void  Disput_AChar(uchar addr,uchar Display);
//函数功能:向指定地址显示一个字符
//===============================================================================
void  Disput_ANum(uchar addr,uchar Display)
{  	
	 uchar ASCALL_Data;
	 ASCALL_Data=Translater(Display);
	 Test_Busy();
	 LCD1602_Write(addr,Comment_Modle);
	 Test_Busy();
	 LCD1602_Write(ASCALL_Data,Data_Modle);
	 
}
//================================================================================
//函数名称:void  Disput_AChar(uchar addr,uchar *Display);
//函数功能:向指定地址显示一行字符
//===============================================================================
void  Disput_ALineChar(uchar addr,uchar *Display)
{
	uchar Str_Length,address;
	address=addr;
	Str_Length=strlen(Display);
	for(;Str_Length>0;Str_Length--)
	{
	
		LCD1602_Write(address,Comment_Modle);
		LCD1602_Write(*(Display++),Data_Modle);
		if(address==0x8f)
		address=0xc0;
		else if(address==0xcf)
		address=0x80;
		else	address++;
	}
		
}
//================================================================================
//函数名称:void  Disput_CharNum(uchar addr,uchar Display);
//函数功能:向指定地址显示一行字符
//===============================================================================
void  Disput_CharNum(uchar addr,uchar Display)
{
	uchar Disput_Data[4]={0x20,0x20,0x20,0};
	uchar Temp;
	uchar i=0;
	Temp=Display;
	 while(Temp/10)
	 {

		Temp/=10;
		i++;
	 }
	 while(i)
	 {
	 	Disput_Data[i]=Display%10+0x30;
		Display/=10;
		i--;
	 }
	 Disput_Data[i]=Display%10+0x30;
	 Disput_ALineChar(addr,Disput_Data);

}
//================================================================================
//函数名称:void  Disput_IntNum(uchar addr,uchar Display);
//函数功能:向指定地址显示一行字符
//===============================================================================
void  Disput_IntNum(uchar addr,uint Display_Int)
{
	uchar Disput_Data[7]={0x20,0x20,0x20,0x20,0x20,0x20,0};
	uint Temp;
	uchar i=0;
	Temp=Display_Int;
	 while(Temp/10)
	 {

		Temp/=10;
		i++;
	 }
	  while(i)
	 {
	 	Disput_Data[i]=Display_Int%10+0x30;
		Display_Int/=10;
		i--;
	 }
	 Disput_Data[i]=Display_Int%10+0x30;
	 Disput_ALineChar(addr,Disput_Data);

		
}
//================================================================================
//函数名称:void  Disput_LongNum(uchar addr,uchar Display);
//函数功能:向指定地址显示一行字符
//===============================================================================
void  Disput_LongNum(uchar addr,ulong Display_Long)
{
	uchar Disput_Data[13]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0};
	ulong Temp;
	uchar i=0;
	Temp=Display_Long;
	 while(Temp/10)
	 {
		Temp/=10;
		i++;
	 }
	 while(i)
	 {
	 	Disput_Data[i]=Display_Long%10+0x30;
		Display_Long/=10;
		i--;
	 }
	 Disput_Data[i]=Display_Long%10+0x30;
	 Disput_ALineChar(addr,Disput_Data);


}
void main()
{
	uchar Key_Value=0;
	LCD1602_Init();
	Disput_ALineChar(0x80,"Key_Value:");
	//Disput_CharNum(0x80,123);
	while(1)
	{
		Key_Value=KeyScan();
		if(Key_Value!=16)
		{
			Disput_LongNum(0xc0,Key_Value);
			while(Key_Value==KeyScan());
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -