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

📄 lcd_b.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************************
  CSA----选择IC1,低有效 即 (左)64列
  CSB----选择IC2,低有效 即 (右)64列
---------------------------------------------------------------------------------------
  RS:   D/I=H,表示DB7~DB0为显示数据
        D/I=L,表示DB7~DB0为指令数据
---------------------------------------------------------------------------------------
  R/W:  R/W=H,E=H数据被读到DB7~DB0
        R/W=L,E信号下降沿,DDRAM数据被写到IR或DR
---------------------------------------------------------------------------------------
  E:    R/W=L,E信号下降沿锁存DB7~DB0
        R/W=H,E=H DDRAM数据读到DB7~DB0
---------------------------------------------------------------------------------------
  |DB0-----D7.0 | DB4-----D7.4 | CSA-------P3.2 |
  |DB1-----D7.1 | DB5-----D7.5 | CSB-------P3.3 |
  |DB2-----D7.2 | DB6-----D7.6 | RS-------P3.4  |
  |DB3-----D7.3 | DB7-----D7.7 | RW-------P3.5  |
  |17脚---A正电源 18脚----K地  |  E-------P3.6  |	  |
  |VO-------0V |																		|
****************************************************************************************/
#define		CSA		PTE_PTE3//片选信号 低有效
#define		CSB		PTE_PTE4//片选信号 低有效
#define		RS		PTE_PTE0//数据 指令选择信号	 1-数据操作 0-写指令或读状态 
#define		RW		PTE_PTE1//读写选择信号  1-读选通   0-写选通
#define		E		  PTE_PTE2//读写使能信号 
#define		RST		PTE_PTE5//复位信号 无须考虑 

#define     LC_DIS_OP    0x3F//显示开指令
#define     LC_DIS_CLS   0x3E//显示关指令
#define     DIS_ROW_SET  0xC0//显示起始行设置指令
#define     X_ADDR_SET   0xB8//页设置指令 X
#define	    Y_ADDR_SET   0x40//列地址设置指令 Y

#define		LCD_DATA	PTG
#define	  D0		PTG_PTG0
#define		D1		PTG_PTG1
#define		D2		PTG_PTG2
#define		D3		PTG_PTG3
#define		D4		PTG_PTG4
#define		D5		PTG_PTG5
#define		D6		PTG_PTG6
#define		D7		PTG_PTG7

#define		LCD_DDR		DDRG
#define		DDR0	DDRG_DDRG0
#define		DDR1	DDRG_DDRG1
#define		DDR2	DDRG_DDRG2
#define		DDR3	DDRG_DDRG3
#define		DDR4	DDRG_DDRG4
#define		DDR5	DDRG_DDRG5
#define		DDR6	DDRG_DDRG6
#define		DDR7	DDRG_DDRG7

//sys_data_type	status0,status1,status2,status3,status4,status5,status6,status7,status8;

unsigned int  lcd_sec;
unsigned char	lcd_min,min,lcd_hour,hour;

//unsigned char	lcd_sec,lcd_min=0,lcd_hour=0;	//分、小时
unsigned char	minh=0,minl=0,hourh=0,hourl=0;//分钟、小时得高位、低位
//分钟、小时得高位、低位   用于判断时间是否变化
//unsigned char sech0=0,secl0=0,minh0=0,minl0=0,hourh0=0,hourl0=0;	 //后来自己添加
//unsigned char flash=1;   //后来添加
unsigned int	clock_count0=0/*,clock_count1=0*/;		//系统时钟定时器
unsigned int	clock_change=0;

sys_data_type light_fault_flags;
#define   light_fault1  light_fault_flags.Bit.BIT0
#define   light_fault2  light_fault_flags.Bit.BIT1
#define   light_fault3  light_fault_flags.Bit.BIT2
#define   light_fault4  light_fault_flags.Bit.BIT3
#define   flash					light_fault_flags.Bit.BIT7

#define   lcd_dl_timer    8
//#define   lcd_dl_timer0   80
/*--------------------------------------------------------------------------------------
| R/W  D/I	 DB7	 DB6   DB5   DB4   DB3   DB2   DB1   DB0
|  1		0		 BUSY	  0	 ON/OFF	 REST	  0			0			0			0
| 该指令用于查询液晶显示模块内部控制器的状态
| BUSY  1-内部在工作 0-正常状态     ON/OFF  1-显示关闭  0-显示打开
| REST  1-复位状态  0-正常状态     在BUSY和REST状态时 除读状态指令外其它指令均不对
| 液晶显示模块产生作用 
| 在对液晶显示模块操作之前要查询BUSY状态 以确定是否可以对液晶显示模块进行操作
|----------------------------------------------------------------------------------------
| R/W  D/I	 DB7	 DB6   DB5   DB4   DB3   DB2   DB1   DB0
|  0		1		                 写    数    据
| 写数据指令
|----------------------------------------------------------------------------------------
| R/W  D/I	 DB7	 DB6   DB5   DB4   DB3   DB2   DB1   DB0
|  1		1		                 读 显 示 数 据
| 读数据指令 

读写数据指令每执行完一次读写操作列地址就自动增一  必须注意的是进行
读操作之前 必须有一次空读操作 紧接着再读 才会读出所要读的单元中的数据
--------------------------------------------------------------------------------------*/    


/****************************************************************************************
//函数:  void writMI(unsigned char i)
//描述:  主控制器 发指令
//参数:  i数据或指令
//返回值:none
*****************************************************************************************/
void writeMI(unsigned char wdata)
{
  do
  {
    CSA=0;
    delay(lcd_dl_timer);
    CSB=0;//00-禁止
    
    E=0; 
    delay(lcd_dl_timer);
    RS=0;//写指令或读状态
    delay(lcd_dl_timer);
    RW=1;//读选通
    delay(lcd_dl_timer);
    DDR7=0;//方向
    delay(lcd_dl_timer);
    CSA=1;//选择主片
    delay(lcd_dl_timer);
    E=1;//读数据
    delay(lcd_dl_timer);
    __RESET_WATCHDOG();				//喂狗
  }while(D7);//判断主控制器忙
     
  CSA=0;
  delay(lcd_dl_timer);
  E=0;
  delay(lcd_dl_timer);
  RS=0;//写指令
  delay(lcd_dl_timer);
  RW=0;//写选通
  LCD_DDR=0xff;//数据方向
  delay(lcd_dl_timer);
  LCD_DATA=wdata;//写IO
  delay(lcd_dl_timer);
  CSA=1;//01-片选主
  delay(lcd_dl_timer);
  
  E=1;
  delay(lcd_dl_timer);
  E=0;//数据锁存
  
  delay(lcd_dl_timer);
} 

/*****************************************************************************************
//函数:  void writSI(unsigned char i)
//描述:  从控制器发指令
//参数:  i数据或指令
//返回值:none
******************************************************************************************/
void writeSI(unsigned char wdata)
{
  do
  {
    CSA=0;
    delay(lcd_dl_timer);
    CSB=0;//001-禁止
    
    delay(lcd_dl_timer);
    E=0;
    delay(lcd_dl_timer);
    RS=0;//写指令或读状态 
    delay(lcd_dl_timer);
    RW=1;//读选通
    delay(lcd_dl_timer);
    DDR7=0;//数据方向
    delay(lcd_dl_timer);
    CSB=1;//片选从
    delay(lcd_dl_timer);
    E=1;//读数据
    delay(lcd_dl_timer);
    __RESET_WATCHDOG();				//喂狗
  }while(D7);//判断从控制器忙?
     
  CSB=0;
  delay(lcd_dl_timer);
  E=0;
  delay(lcd_dl_timer);
  RS=0;//写指令
  delay(lcd_dl_timer);
  RW=0;//写选通
  LCD_DDR=0xff;//数据方向
  delay(lcd_dl_timer);
  LCD_DATA=wdata;//写IO
  delay(lcd_dl_timer);
  CSB=1;//10-片选从
  delay(lcd_dl_timer);
  
  E=1; 
  delay(lcd_dl_timer);
  E=0;//数据锁存
  
  delay(lcd_dl_timer);
}
   
/****************************************************************************************
//函数:  void writMD  (unsigned char i)
//描述:  主控制器 发数据
//参数:  i数据或指令
//返回值:none
*****************************************************************************************/
void  writeMD(unsigned char wdata)
{
  do
  {
    CSA=0;
    delay(lcd_dl_timer); 
    CSB=0;//00-禁止
    
    delay(lcd_dl_timer); 
    E=0;
    delay(lcd_dl_timer);
    RS=0;//写指令或读状态
    delay(lcd_dl_timer);
    RW=1;//读选通
    delay(lcd_dl_timer);
    DDR7=0;//数据方向
    delay(lcd_dl_timer);
    CSA=1;//片选主
    delay(lcd_dl_timer);
    E=1;//读数据
    delay(lcd_dl_timer);
    __RESET_WATCHDOG();				//喂狗
  }while(D7);//判断主控制器忙
     
  CSA=0;
  delay(lcd_dl_timer);
  E=0;
  delay(lcd_dl_timer);
  RS=1;//数据操作
  delay(lcd_dl_timer);
  RW=0;//写选通 
  LCD_DDR=0xff;//数据方向
  delay(lcd_dl_timer);
  LCD_DATA=wdata;
  delay(lcd_dl_timer);
  CSA=1;//01-片选主 
  delay(lcd_dl_timer);
  
  E=1; 
  delay(lcd_dl_timer);
  E=0;//数据锁存
  
  delay(lcd_dl_timer);
} 

/***************************************************************************************
//函数:  void writeSD(unsigned char i)
//描述:  从控制器 发数据
//参数:  i数据或指令
//返回值:none
***************************************************************************************/
void  writeSD(unsigned char wdata)
{
  do
  {
    CSA=0;
    delay(lcd_dl_timer);
    CSB=0;//11-禁止
    delay(lcd_dl_timer);  
    E=0;
    delay(lcd_dl_timer);
    RS=0;//写指令或读状态 
    delay(lcd_dl_timer);
    RW=1;//读选通
    delay(lcd_dl_timer);
    DDR7=0;//数据方向
    delay(lcd_dl_timer);
    CSB=1;//片选从
    delay(lcd_dl_timer);
    E=1;//读数据
    delay(lcd_dl_timer);
    __RESET_WATCHDOG();				//喂狗
  }while(D7);//判断主控制器忙
     
  CSB=0;
  delay(lcd_dl_timer);
  E=0;
  delay(lcd_dl_timer);
  RS=1;//数据操作
  delay(lcd_dl_timer);
  RW=0;//写选通 
  LCD_DDR=0xff;//数据方向
  delay(lcd_dl_timer);
  LCD_DATA=wdata;
  delay(lcd_dl_timer);
  CSB=1;//10-片选从 
  delay(lcd_dl_timer);
  E=1; 
  delay(lcd_dl_timer);
  E=0;
  delay(lcd_dl_timer);
}
 
/****************************************************************************************
//函数:  unsigned char readMD()
//描述:  主控制器 读 数据
//参数:  i数据或指令
//返回值:读取的数据
*****************************************************************************************/
/*unsigned char readMD()
{ 
 unsigned char tmpin;
 
  __RESET_WATCHDOG();				//喂狗
  
  CSA=0;
  CSB=0;
  delay(lcd_dl_timer);
  E=0;
  delay(lcd_dl_timer);
  RS=1;//数据操作
  delay(lcd_dl_timer);
  RW=1;//读选通
  delay(lcd_dl_timer);
  DDR7=0;
  delay(lcd_dl_timer);
  CSA=1;
  delay(lcd_dl_timer);
  E=1; 
  delay(lcd_dl_timer);
  E=0;
  
  do
  {
    CSA=0;
    CSB=0;//11-禁止   
    E=0; 
    RS=0;//写指令或读状态 
    RW=1;//读选通
    DDR7=0;
    CSA=1;
    E=1;//判断主控制器忙
  }while(D7);
  
  RS=1;//数据操作
  E=0;
  LCD_DDR=0;
  tmpin=LCD_DATA;
  return tmpin;
} 
*/
/****************************************************************************************
//函数:  unsigned char readMD()
//描述:  从控制器 读 数据
//参数:  i数据或指令
//返回值:读取的数据
*****************************************************************************************/
/*unsigned char readSD()
{ 
  unsigned char tmpin;
  
  __RESET_WATCHDOG();				//喂狗
 
  
  CSA=0;
  CSB=0;//11-禁止
  E=0;
  RS=1;//数据操作
  RW=1;//读选通
	DDR7=0;
  asm(nop);
  asm(nop);
  CSB=0;
  E=1; 
  asm(nop);
  asm(nop);
  E=0;
  
  do
  {
    CSA=0;
    CSB=0;//11-禁止
    E=0; 
    RS=0;//写指令或读状态
    RW=1;//读选通
    DDR7=0;
    CSB=0;
    E=1;//判断主控制器忙
  }while(D7);
  
  RS=1;//数据操作
  E=0;
  LCD_DDR=0;
  tmpin=LCD_DATA;
  return tmpin;
} 
*/  
/***************************************************************************************
//函数:  void SetPage(unsigned char page1,unsigned char page2)
//描述:  设置主/从窗口页面地址
//参数:  page1主窗口页面地址  page2从窗口页面地址 
//返回值:none
***************************************************************************************/
void SetPage(unsigned char page1,unsigned char page2)
{  
  writeMI(0xB8+page1);//设置主窗口页面地址                   
  writeSI(0xB8+page2);//设置从窗口页面地址
} 
    
/***************************************************************************************
//函数:  void Clr_LCD(void)
//描述:  清屏函数
//参数:  none
//返回值:none
****************************************************************************************/

void Clr_LCD(void)                       
{
  unsigned char  line;
  unsigned char  page;

  for (page=0;page<8;page++)
  {
    SetPage(page,page);//设置页面地址
    writeMI(0xB8|page); writeSI(0xB8|page);//设置主窗口页面地址                   
    writeMI(0x40); writeSI(0x40);//设置主窗口显示地址             
    for(line=0;line<64;line++)
    { 
      writeMD(0x00);
      writeSD(0x00);//写数据
    }
  }
  //RST=1;
}

/***************************************************************************************
//函数:  void setdot(unsigned char x, unsigned char y)
//描述:  画点函数
//参数:  x-X地址 y-Y地址
//返回值:none
****************************************************************************************/
/*void setdot(unsigned char x, unsigned char y)
{  
    unsigned char temp;
    
    if (y<64) 
    {
      writeMI(0xB8|x);//设置DDRAM中的页地址(X地址)
      writeMI(0x40|y);//设置DDRAM中的地址(Y地址)
      temp=readMD();//空读
      temp=readMD();
      writeMI(0xB8|x);//设置DDRAM中的页地址(X地址)
      writeMD(temp&(temp|(1<<(y % 8))));//写数据
    } 
    else 
    {
      writeSI(0xB8|x);//设置DDRAM中的页地址(X地址)
      writeSI(0x40|(y-64));//设置DDRAM中的地址(Y地址)
      temp=readSD();//空读
      temp=readSD();
      writeSI(0xB8|x);//设置DDRAM中的页地址(X地址)
      writeSD(temp|(1<<(y % 8)));//写数据
    }
    writeMI(0xc0);writeSI(0xc0);//设置显示起始行     
}
*/
/***************************************************************************************
//函数:  void clrdot(unsigned char x, unsigned char y)
//描述:  消点函数
//参数:  x-X地址 y-Y地址
//返回值:none
****************************************************************************************/
/*void clrdot(unsigned char x, unsigned char y)
{
    unsigned char temp;

    if (x<64) 
    {
      writeMI(0xB8|x);//设置DDRAM中的页地址(X地址)
      writeMI(0x40|y);//设置DDRAM中的地址(Y地址)
      temp=readMD();//空读
      temp=readMD();
      writeMI(0xB8|x);//设置DDRAM中的页地址(X地址)
      writeMD(temp&(0xff-(1<<(y % 8))));//写数据
    } 
    else 
    {
      writeSI(0xB8|x);//设置DDRAM中的页地址(X地址)
      writeSI(0x40|y);//设置DDRAM中的地址(Y地址)
      temp=readSD();//空读
      temp=readSD();
      writeSI(0xB8|x);//设置DDRAM中的页地址(X地址)
      writeSD(temp&(0xff-(1<<(y % 8))));//写数据
    }
    writeMI(0xc0);writeSI(0xc0);//设置显示起始行     
}
*/
/***************************************************************************************
//函数:  void DispImg(unsigned char *img)
//描述:  显示128*64图片
//参数:  图片字模
//返回值:none
****************************************************************************************/
void DispImg(const unsigned char *img)
{
  unsigned char j,k;
  for(k=0;k<8;k++)
  {
    writeMI(0xB8+k);writeSI(0xB8+k);//设置DDRAM中的页地址(X地址) 
    writeMI(0x40);writeSI(0x40);//设置DDRAM中的地址(Y地址)
    for(j=0;j<64;j++) 
    {
      writeMD(img[k*128+j]);//写数据 
    }
    
    for(j=64;j<128;j++) 
    {
      writeSD(img[k*128+j]);
    }
  }

⌨️ 快捷键说明

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