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

📄 lcd8bit.h

📁 1602液晶驱动程序(串行并行全部都有)
💻 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 + -