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

📄 1602h.txt

📁 LCD1602B基本驱动函数库 1、需要底层硬件驱动函数支持 基本的宏定义: LCD_RS LCD_RW LCD_E LCD_SetWriteData LCD_SetReadData
💻 TXT
📖 第 1 页 / 共 2 页
字号:
/******************************************************** 
*  函数库说明:LCD1602B基本驱动函数库                   * 
*  版本:      v1.0                                     * 
*  作者:      傻孩子                                   * 
*  日期:      2005年9月6日                             * 
*  修改:      傻孩子                                   * 
*  修改日期:  2005年9月6日                             * 
*                                                       * 
*  说明:                                               * 
*              1、需要底层硬件驱动函数支持              * 
*                 基本的宏定义:                        * 
*                 LCD_RS   LCD_RW   LCD_E               * 
*                 LCD_SetWriteData  LCD_SetReadData     * 
*                 LCD_HalfData_Port LCD_HalfData_DDR    * 
*                 LCD_SendHalfCharHigh(a)               * 
*                 LCD_SendHalfCharLow(a)                * 
*              2、需要基本的延时函数支持                * 
*                 基本的延时函数:                      * 
*                 DelayMs() 毫秒   DelayUs() 微妙       * 
*              3、需要修改引用宏定义来指定底层硬件驱动  * 
*                 函数库。                              * 
*              4、该头文件支持4位发送模式,硬件连接4位  * 
*                 8位都支持。 
********************************************************/ 
#ifndef _Use_LCD1602B 
# define _Use_LCD1602B 
/*  这里需要加入硬件支持库的头文件引用 */ 

/*********************** 
*    系 统 宏 定 义    * 
***********************/ 

/*---------------------* 
*    常 数 宏 定 义    * 
*---------------------*/ 
#ifndef True 
    # define True           0x01 
#endif 
#ifndef False 
    # define False          0x00 
#endif 

#ifndef Enable 
    # define Enable         0x01 
#endif 
#ifndef Disable 
    # define Disable        0x00 
#endif 

# define LCD_Write          0x00 
# define LCD_Read           0x01 
# define LCD_Command        0x00 
# define LCD_Data           0x01 
# define LCD_CMD_Init       0x28 
# define LCD_CMD_DispCtr    0x0c 
# define LCD_CMD_CLS        0x01 
# define LCD_CMD_EnterSet   0x06 
# define LCD_CMD_IconShow   0x0f 
# define LCD_CMD_IconHide   0x0c 
/*---------------------* 
*    动 作 宏 定 义    * 
*---------------------*/ 
# define SetReadState       LCD_SetReadData;LCD_RS = LCD_Command;LCD_RW = LCD_Read; 
# define SetRead            LCD_SetReadData;LCD_RW = LCD_Read; 
# define SetWrite           LCD_SetWriteData;LCD_RW = LCD_Write; 
# define SetCommand         LCD_RS = LCD_Command; 
# define SetData            LCD_RS = LCD_Data; 

# define Print(a)           LCDDisplayString(a); 
# define Locate(x,y)        LCDSetXY(x-1,y-1); 
# define CLS                LCDWaitForReady();LCDSendCommand(LCD_CMD_CLS); 
# define PrintN(a,b)        LCDDisplayNum((unsigned long)a,b); 
# define ShowIcon           LCDWaitForReady();LCDSendCommand(LCD_CMD_IconShow); 
# define HideIcon           LCDWaitForReady();LCDSendCommand(LCD_CMD_IconHide); 
/*********************** 
*    全局变量声明区    * 
***********************/ 
const char CHR[16] = {0,1,2,3,4,5,6,7,8 
                     ,9,a,b,c,d,e,f}; 
/*********************** 
*    系统函数声明区    * 
***********************/ 
void LCDInit(void); 
void LCDSendCommand(char Command); 
void LCDSendData(char Data); 
void LCDWaitForReady(void); 
void LCDSetXY(char X,char Y); 
void LCDDisplayString(char *String); 
void LCDDisplayNum(unsigned long Num,char BitCount); 
/******************************************************** 
*  函数说明:LCD初始化函数                              * 
********************************************************/ 
void LCDInit(void) 
{ 
    Delay(15); 
    
   LCDWaitForReady(); 
   LCDSendCommand(LCD_CMD_Init); 
    
   LCDWaitForReady(); 
   LCDSendCommand(LCD_CMD_DispCtr); 
    
   LCDWaitForReady(); 
   LCDSendCommand(LCD_CMD_CLS); 
   Delay(2); 
   LCDSendCommand(LCD_CMD_EnterSet); 
} 

/******************************************************** 
*  函数说明:向LCD发送指令函数                          * 
*  输入:    需要发送的指令                             * 
********************************************************/ 
void LCDSendCommand(char Command) 
{ 
   SetWrite; 
   SetCommand; 
   { 
       LCD_E = Enable; 
       
      LCD_SendHalfCharHigh(Command); 
       
       LCD_E = Disable; 
   } 
   { 
       LCD_E = Enable; 
       
        LCD_SendHalfCharLow(Command);    
       
      LCD_E = Disable; 
   } 
    SetRead;       
   SetCommand; 
} 

/******************************************************** 
*  函数说明:向LCD发送数据函数                          * 
********************************************************/ 
void LCDSendData(char Data) 
{ 
    SetWrite; 
   SetData; 
   { 
       LCD_E = Enable; 
       
      LCD_SendHalfCharHigh(Data); 
       
       LCD_E = Disable; 
   } 

   { 
       LCD_E = Enable; 
       
        LCD_SendHalfCharLow(Data);    
       
      LCD_E = Disable; 
   } 
    SetRead;       
   SetCommand; 
} 

/******************************************************** 
*  函数说明:等待LCD空闲状态函数                        * 
********************************************************/ 
void LCDWaitForReady(void) 
{ 
    //DelayUs(30); 
   SetRead; 
   SetCommand; 
    
    LCD_E = Enable;    
     
   while (LCD_BF == Enable);   //RW=1,读PD7,为0表示空闲; 
    
    LCD_E = Disable; 
} 

/******************************************************** 
*  函数说明:设置显示坐标函数                           * 
********************************************************/ 
void LCDSetXY(char X,char Y) 
{ 
    char Address; 
    if (Y == 0) 
   { 
       Address = 0x80 + X; 
   } 
    else 
   {  
        Address = 0xc0 + X; 
   } 
    
   LCDWaitForReady(); 
    LCDSendCommand(Address); 
} 

/******************************************************** 
*  函数说明:LCD字符串显示函数                          * 
********************************************************/ 
void LCDDisplayString(char *String) 
{ 
    while(*String) 
   { 
       LCDWaitForReady(); 
       LCDSendData(*String); 
      String++; 
   } 
} 

/******************************************************** 
*  函数说明:数值显示函数(HEX)                          * 
*  输入:    需要显示的数字(无符号长整形)             * 
********************************************************/ 
void LCDDisplayNum(unsigned long Num,char BitCount) 
{ 
    char a = 0; 
   for (a = 8-BitCount ;a<8;a++) 
   { 
       LCDSendData(CHR[(Num<<(a<<2))>>28]); 
   } 
} 
#endif 


------------------------------------------------------------ 
特别说明,这个头文件不依赖硬件系统,所以在使用之前,需要一些硬件相关的宏定义。 
例如: 

# define LCD_RS              _PC4 
# define LCD_RW              _PD3 
# define LCD_E               _PC5 
# define LCD_BF              Read_PC3 
# define LCD_HalfData_Port   PORTC 
# define LCD_HalfData_DDR    DDRC 

# define LCD_SetWriteData    LCD_HalfData_DDR |= 0x0f;LCD_HalfData_Port &= 0xf0; 
# define LCD_SetReadData     LCD_HalfData_DDR &= 0xf0;LCD_HalfData_Port |= 0x0f;  
# define LCD_SendHalfCharHigh(a) LCD_HalfData_Port &= 0xf0; LCD_HalfData_Port |= (a>>4); 
# define LCD_SendHalfCharLow(a)  LCD_HalfData_Port &= 0xf0; LCD_HalfData_Port |= (a<<4>>4); 

这里需要支持位操作的系统。 如LCD_E 定义为PC5,那么当执行LCD_E = 1的时候,就要能够单独置PC5为高。 
如果你的IDE环境是ICC的话,我提供一个头文件,你可以直接使用或修改某些地址参数以后使用。 



------------------------------------------------------------------------- 
ATMega8L的位操作头文件 

/*********************************************************** 
*  支持库名: ATMega8L Robot Driver                         * 
*  源文件:   RD_ATMega8L.h                                 * 
*  版本:     v0.1                                          * 
*                                                          * 
*  作者:    傻孩子                                        * 
*  日期:    2005年6月6日                                  * 
*  修改:    傻孩子                                        * 
*  修改时间: 2005年6月6日                                  * 
*                                                          * 
*  说明:    使用前要把 PORTDefine() 加入到端口初始化函数  * 
*            里面。否则位操作无效                          * 
***********************************************************/ 
# include <iom8v.h> 
# include <macros.h> 
#ifndef _Use_AdvancedPortCommand 
# define _Use_AdvancedPortCommand 

/**************************** 
*        资源说明           * 
****************************/ 
# define PAInUse        0x00 
# define PBInUse        0xff 
# define PCInUse        0b011111111 
# define PDInUse        0xff 
# define PEInUse        0x00 

⌨️ 快捷键说明

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