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

📄 1602.c

📁 液晶显示1602的驱动
💻 C
字号:
//========================1602=============================//
//========================by laputa========================//
//========================2006.5.16========================//
#include<reg51.h>
//===========================函数声明=====================================//
void WriComm(unsigned char reg_code,busy);
void Display(unsigned char Disp_Data);
void Delay();
void Init_LCM();

void Delay5Ms(void);
void Delay400Ms(void);
void LINE2_CLEAR();
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData);
//==========================================================================//

sbit RS=P2^3;  
sbit RW=P2^2; 
sbit E=P2^1;
sbit LED=P2^0; //=======背光灯
sbit busy=P0^7;//=======忙标志
//=========================LCM初始化数据===============================//
#define lcd_bus P0
#define  Set_Disp_On 0X0c
#define  Set_Disp_Off 0x08
#define  Set_CLR  0X01
#define  Set_DISP_Mode  0X38
#define  Set_LINE_Mode  0X06

//=====================================================================//

//====================主程序======================//
main()
{
EA=1;
IT1=1;
IT0=1;
EX1=1;
EX0=1;
Delay400Ms();
Init_LCM();
DisplayOneChar(4,1,'s');
//DisplayOneChar(5,1,'e');
//DisplayOneChar(5,1,'x');
while(1);
}
//================================================//



//延时子程序======================================//
//==============5ms延时==========================//
void Delay5Ms(void)
{
 unsigned int TempCyc = 5552;
 while(TempCyc--);
}

//==============400ms延时=========================//
void Delay400Ms(void)
{
 unsigned char TempCycA = 5;
 unsigned int TempCycB;
 while(TempCycA--)
 {
  TempCycB=7269;
  while(TempCycB--);
 };
}
//=================================================//



//写入控制命令子程序=============================//
void WriComm(unsigned char reg_code,busy) 
{
  lcd_bus=reg_code;
  RS=0;           
  RW=0;
  E=0;
  //if(busy)
 // Delay(); 
  E=1; 
}
//=================================================//


//判断液晶显示器忙子程序==========================//
void Delay() 
{
      lcd_bus=0xff;       
      RS=0; 
      RW=1;
      E=0;
      E=0;             
      E=1; 
     while(busy==1);
}
//=================================================//



//显示命令子程序====================================//
void Display(unsigned char Disp_Data)
{
  lcd_bus= Disp_Data;
  RS=1;       
  RW=0;        
  E=0;         
  Delay();     
  E=1;
}
//===================================================//
//按指定位置显示一个字符子程序===============================================//
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
 Y &= 0x01;
 X &= 0x0F; 
 if (Y) X |= 0x40; 
 X |= 0x80; 
 WriComm(X, 1);
 Display(DData);
}
//=============================================================================//

//按指定位置显示一串字符子程序=================================================//
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
{
 Y &= 0x01;
 X &= 0x0F; 
 if (Y) X |= 0x40; 
 X |= 0x80; 
 WriComm(X, 1);
 while (*DData)
 Display(*(DData++));
}
//=============================================================================//

//LCM初始化子程序==============================================================//
void Init_LCM()
{
lcd_bus=0;
WriComm(Set_DISP_Mode,0);
Delay5Ms();
WriComm(Set_DISP_Mode,0);
Delay5Ms();
WriComm(Set_DISP_Mode,0);
Delay5Ms();
WriComm(Set_DISP_Mode,1);
WriComm(Set_Disp_On,1);
WriComm(Set_LINE_Mode,1);
LED=0;

}
//=============================================================================//
//lcm第二行清字符子程序========================================================//
void LINE2_CLEAR()
{
 unsigned char i;
 WriComm(0XC0,1);
 for(i=16;i>0;i--)
 Display(0xfe);
}



⌨️ 快捷键说明

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