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

📄 lcd_control_ks0107.h

📁 在嵌入式开发中
💻 H
📖 第 1 页 / 共 2 页
字号:
/******************************************************
函数库名称:LCD_Display.h                              
库功能:存放了驱动12864-1液晶显示屏的基本函数(ks0107)
库版本:1.0                                            
硬件平台:ATMaga16                                     
作者:Smallbogy   congxd@vip.sina.com
日期:2005年6月7日                                    
              
-------------------------------------------------------
端口说明:                                             
1    vss          GND                                  
2    VDD          VCC(5v)                              
3    V0           VCC(5v)                              
4    D/I          PC4                                  
5    R/W          PC5                                  
6    E            PC3                                  
7    DB0          PA0                                  
...                                                    
14   DB7          PA7                                  
15   CS1          PC1                                  
16   CS2          PC2                                  
17   RST          PC0                                  
-----------------------------------------------------*/
//功能管脚定义
#define RS                PORTC.4
#define RW                PORTC.5
#define E                 PORTC.3

#define CS1               PORTC.1
#define CS2               PORTC.2
#define RST               PORTC.0


//命令定义:
#define OpenLCD           0b00111111
#define CloseLCD          0b00111110
#define SetStartLine      0b11000000
#define SetX              0b10111000
#define SetY              0b01000000 

//字符变量                
#define LEFT              0b11111111
#define RIGHT             0b00000000


/*-----------------------------------------------------
函数说明:                                             
函数名                                      函数说明           
-----------------------------------------------------*/

void Delay(int i);                         //延时函数
void PortInit(void);                       //端口初始化

void ReadStateL(void);                     //读取系统状态(左)
void ReadStateR(void);                     //读取系统状态(右)

void CheckStateL(void);
void CheckStateR(void);

void LCD_Nop(void);                        //屏幕周期延时(临时)
void WriteCommandToLeft(unsigned char Commander);    //向屏幕送命令
void WriteCommandToRight(unsigned char Commander);    //向屏幕送命令

void WriteDataToLeft(unsigned char Datas);           //写数据
void WriteDataToRight(unsigned char Datas);           //写数据

unsigned char ReadDataToLeft(void);           //写数据

void SendByte(unsigned char h,unsigned char l,unsigned char Datas);      //根据坐标发送一个字节 

void LCD_Init(void);                     //显示屏初始化
void ClsLeft(unsigned char val);                      //显示屏清屏   
void ClsRight(unsigned char val);                     //显示屏清屏   

void LCDAutoTestLeft(unsigned char val);
void LCDAutoTestRight(unsigned char val);

void LCDAutoTestLeft2(void);

void SetLineLeft(unsigned char line);
void SetLineRight(unsigned char line);

void SetColumnLeft(unsigned char column);                   
void SetColumnRight(unsigned char column);

void TurnOnLCD(char p);                  //打开显示屏
void TurnOffLCD(char p);                 //关闭显示屏  
                                                                   

//显示一个8*16的字符
void Show816(unsigned char h,unsigned char l,unsigned char * ch,unsigned char ShowType);
void Show1616(unsigned char h,unsigned char l,unsigned char * ch,unsigned char ShowType);



char BUSYL=1;                                           //系统忙标志
char BUSYR=1;
char BUSY=1;

char ON_OFFR=0;                                         //显示开标志
char ON_OFFL=0;                                         
char ON_OFF=0;        

char RSTL=0;
char RSTR=0;

char Now_X=0;           //目标位置x
char Now_Y=0;           //目标位置y
               
void LCD_Init(void)
{   
  PortInit();
  RST = 1;  
               
  ClsLeft(0x00);
  ClsRight(0x00);
    
  TurnOnLCD(LEFT);
  TurnOnLCD(RIGHT);  

  WriteCommandToLeft(0b11000000);        
  WriteCommandToLeft(0b10111000);       
  WriteCommandToLeft(0b01000000);       
  
  WriteCommandToRight(0b11000000);        
  WriteCommandToRight(0b10111000);       
  WriteCommandToRight(0b01000000);       

}

void Delay(int i)
{
/******************************************************
函数名:延时子函数                                     
功能描述:延时                                         
输入变量 int i                                         
******************************************************/
char a=0;
  int b=0;
  for (b=0;b<i;b++)
     {
    for (a=0;a<255;a++);
  }
}

void PortInit(void)
{
/******************************************************
函数名:端口初始化                                     
功能描述:初始化端口                                   
******************************************************/
  DDRC=0xff;
  PORTC=0x00;
  
  DDRA=0xff;
  PORTA=0x00;
}

void LCD_Nop(void)
{
/******************************************************
函数名:屏幕周期等待函数                               
功能描述:延时,等待屏幕就位(临时使用)                 
******************************************************/
  char i=0;
  for (i=0;i<150;i++);
}

void ReadStateL(void)
{
/******************************************************
函数名:显示屏状态读取函数(左)                       
功能描述: 读取显示屏当前状态                          
输出变量:BUSYL  ON_OFFL  RSTL                          
******************************************************/
  BUSYL=1;
  ON_OFFL=0;
  RSTL=1;
  
  CS2 = 0;           //CS2 =0  
  CS1 = 1;           //CS1 =1  选左

  DDRA =0x00;        //设置为读
  
  
  RW = 1;
  RS = 0;  
  
  E = 0;                              //E拉低L 下降沿送锁存信号
  
  LCD_Nop();    
  
  E = 1;                              //E拉高H 度取状态
  
  BUSYL = PINA.7;                 //获得第七位数据BUSY
  ON_OFFL = PINA.5;               //获得现实状态数据ON / OFF
  RSTL = PINA.4;                  //获取复位数据RSTL
  
  DDRA = 0xff;                    //恢复写数据状态
  
}
     
void ReadStateR(void)
{
/******************************************************
函数名:显示屏状态读取函数(右)                       
功能描述: 读取显示屏当前状态                          
输出变量:BUSYL  ON_OFFL  RSTL                          
******************************************************/
  BUSYR=1;
  ON_OFFR=0;
  RSTR=1;

  CS1 = 0;         
  CS2 = 1;         


  DDRA =0x00;        //设置为读
  
  
  RW = 1;
  RS = 0;  
  
  E = 0;                              //E拉低L 下降沿送锁存信号
  
  LCD_Nop();    
  
  E = 1;                              //E拉高H 度取状态
  
  BUSYR = PINA.7;                 //获得第七位数据BUSY
  ON_OFFR = PINA.5;               //获得现实状态数据ON / OFF
  RSTR = PINA.4;                  //获取复位数据RSTL
  
  DDRA = 0xff;                    //恢复写数据状态
  
}


void CheckStateL(void)
{
  ReadStateL();
  while(BUSYL||RSTL){
    ReadStateL();    
    LCD_Nop();  
  }    

}

void CheckStateR(void)
{
  ReadStateR();
  while(BUSYL||RSTL){
    ReadStateR();    
    LCD_Nop();  
  }    

}

void WriteCommandToLeft(unsigned char Commander)
{
/******************************************************
函数名:屏幕控制函数(左)                             
功能描述:向屏幕写命令
输入变量 Commander                                     
******************************************************/
  CS2 = 0;
  CS1 = 1;

  CheckStateL();       
    
  RS = 0;                               //D/I拉低L 0
  RW = 0;      
    
  DDRA = 0xff;   

  PORTA =Commander;                                 //写命令            
  
  E = 1;         

  E = 0;                 //下降沿
}
 
void WriteCommandToRight(unsigned char Commander)
{
/******************************************************
函数名:屏幕控制函数(右)                             
功能描述:向屏幕写命令
输入变量 Commander                                     
******************************************************/
  CS1 = 0;
  CS2 = 1;

  CheckStateR();       
    
  RS = 0;                               //D/I拉低L 0
  RW = 0;      
    
  DDRA = 0xff;   

  PORTA =Commander;                                 //写命令            
  
  E = 1;         

⌨️ 快捷键说明

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