📄 lcd8bit.h
字号:
//***************液晶显示****************//(未实测)
/********************************************************
*液晶显示(1602) DATA(8 bit)
**************this file include funtion******************
*void LcdDisplayRam(unsigned char X, unsigned char Y, unsigned char *DData,unsigned char Leng);
*void LcdDisplayRom(unsigned char X, unsigned char Y, unsigned char *DData,unsigned char Leng);
*void LcdInit(void);
********************************************************/
/*入口设置:
#define LCD_DATA PORTD //define data directional register
#define LCD_DATA_DI DDRD //define setup port directional register
#define LCD_DATA_IN PIND //define inport register
#define CTLPORT PORTC //模拟总线用了PD口的PD5,PD6,PD7
#define LCD_RS 3 // pin-0 on CTLPORT
#define LCD_RW 4 // pin-1 on CTLPORT
#define LCD_E 5 // pin-2 on CTLPORT
*/
#define SET_LCD_E CTLPORT|=(1<<LCD_E) // LCD: E = 1
#define CLR_LCD_E CTLPORT&=~(1<<LCD_E) // LCD: E = 0
#define SET_LCD_RW CTLPORT|=(1<<LCD_RW) // LCD: R/W = 1 (read)
#define CLR_LCD_RW CTLPORT&=~(1<<LCD_RW) // LCD: R/W = 0 (write)
#define SET_LCD_RS CTLPORT|=(1<<LCD_RS) // LCD: R/S = 1 (data reg)
#define CLR_LCD_RS CTLPORT&=~(1<<LCD_RS) // LCD: R/S = 0 (status reg)
//*******************************************************************写数据11//
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM(); //检测忙
LCD_DATA = WDLCM;
SET_LCD_RS;
CLR_LCD_RW;
CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;
SET_LCD_E;SET_LCD_E;
}
//********************************************************************写指令12//
void WriteCommandLCM(unsigned char WCLCM,unsigned char BuysC) //BuysC为0时忽略忙检测
{
if (BuysC) ReadStatusLCM(); //根据需要检测忙
LCD_DATA = WCLCM;
CLR_LCD_RS;
CLR_LCD_RW;
CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;
SET_LCD_E;SET_LCD_E;
}
//*******************************************************************读状态13//
unsigned char ReadStatusLCM(void)
{
LCD_DATA_DI = 0x00; //输入
CLR_LCD_RS;
SET_LCD_RW;
CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;CLR_LCD_E;
SET_LCD_E;SET_LCD_E;
while (LCD_DATA_IN&0x80); //检测忙信号
LCD_DATA_DI=0xff;//变回输出
return(LCD_DATA_IN);
}
//*************************************************************显示一个字符14//
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x01; X &= 0x0F;
if (Y) X |= 0x40;
X |= 0x80;
WriteCommandLCM(X, 1);
WriteDataLCM(DData);
WriteCommandLCM(X, 1);
}
//************************************************************显示ROM字符串15//
void LcdDisplayRom(unsigned char X, unsigned char Y, const unsigned char *DData,unsigned char Leng)
{
unsigned char j;
Y &= 0x01;X &= 0x0F;
for(j=0;j<Leng;X++,j++)
{
if(X<=0x0f)DisplayOneChar(X,Y,DData[j]);
}
}
//************************************************************显示RAM字符串16//
void LcdDisplayRam(unsigned char X, unsigned char Y, unsigned char *DData,unsigned char Leng)
{
unsigned char j;
Y &= 0x01;X &= 0x0F;
for(j=0;j<Leng;X++,j++)
{
if(X<=0x0f)DisplayOneChar(X,Y,DData[j]);
}
}
//****************************************************************LCM初始化17//
void LcdInit(void)
{
LCD_DATA = 0;
LCD_DATA_DI=0xff;
WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x08,1); //关闭显示
WriteCommandLCM(0x01,1); //显示清屏
WriteCommandLCM(0x06,1); // 显示光标移动设置
WriteCommandLCM(0x0C,1); // 显示开及光标设置
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -