📄 lcd1602driver.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 + -