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

📄 lcd_hd44780.h

📁 这是我自已写的HD44780 LCD1602液晶屏的程序
💻 H
字号:




#ifdef  LCD_HD44780_GLOBALS
#define LCD_HD44780_EXT
#else
#define LCD_HD44780_EXT extern
#endif

/**************************************************************************************************
*                            接口参数
**************************************************************************************************/
#define _lcd_MaxCols        2                 // 最大行数
#define _lcd_MaxRows        16                // 最大列数

#define HD44780_SHARE_IO    0                 // 数据端口共享(0禁止 , 1充许)

#define HD44780_COMM_PORT   5                 // 定义数据端口,具体如下:

#define HD44780_8_Bits_Bus  0                 // (0为8位总线
#define HD44780_8_Bits_IO   1                 // (1为8位普通I/O口
#define HD44780_8_Bits_SRAM 2                 // (2为8位外部内存模式
#define HD44780_4_Bits_HBus 3                 // (3为4位总线(高半字节)
#define HD44780_4_Bits_LBus 4                 // (4为4位总线(低半字节)
#define HD44780_4_Bits_IO   5                 // (5为4位普通I/O口

/**************************************************************************************************
*                            IO 定义
**************************************************************************************************/
#if (HD44780_COMM_PORT == HD44780_8_Bits_SRAM)
//------------------- 当配置为外部内存模式,必须设置以下参数-------------------------------------//
/*
LCD_HD44780_EXT  INT8U xdata  HD44780_Cmd_W_Add    _at_ 0x8000;             // 指令口写地址
LCD_HD44780_EXT  INT8U xdata  HD44780_Cmd_R_Add    _at_ 0x8200;             // 指令口读地址
LCD_HD44780_EXT  INT8U xdata  HD44780_Data_W_Add   _at_ 0x8100;             // 数据口写地址
LCD_HD44780_EXT  INT8U xdata  HD44780_Data_R_Add   _at_ 0x8300;             // 数据口读地址
*/

#else
//--------------------LCD 端口定义---------------------------------------------------------------//

#define HD44780_RS               2
#define HD44780_RS_PORT          PORTD
#define HD44780_RS_DDR           DDRD
#define HD44780_RS_PIN           PIND

#define HD44780_RW               3
#define HD44780_RW_PORT          PORTB
#define HD44780_RW_DDR           DDRB
#define HD44780_RW_PIN           PINB

#define HD44780_E                4
#define HD44780_E_PORT           PORTB
#define HD44780_E_DDR            DDRB
#define HD44780_E_PIN            PINB

#define HD44780_Data_PORT        PORTD
#define HD44780_Data_DDR         DDRD
#define HD44780_Data_PIN         PIND

#define HD44780_Data0            0
#define HD44780_Data0_PORT       PORTD
#define HD44780_Data0_DDR        DDRD
#define HD44780_Data0_PIN        PIND

#define HD44780_Data1            1
#define HD44780_Data1_PORT       PORTD
#define HD44780_Data1_DDR        DDRD
#define HD44780_Data1_PIN        PIND

#define HD44780_Data2            2
#define HD44780_Data2_PORT       PORTD
#define HD44780_Data2_DDR        DDRD
#define HD44780_Data2_PIN        PIND

#define HD44780_Data3            3
#define HD44780_Data3_PORT       PORTD
#define HD44780_Data3_DDR        DDRD
#define HD44780_Data3_PIN        PIND

#define HD44780_Data4            4
#define HD44780_Data4_PORT       PORTD
#define HD44780_Data4_DDR        DDRD
#define HD44780_Data4_PIN        PIND

#define HD44780_Data5            5
#define HD44780_Data5_PORT       PORTD
#define HD44780_Data5_DDR        DDRD
#define HD44780_Data5_PIN        PIND

#define HD44780_Data6            6
#define HD44780_Data6_PORT       PORTD
#define HD44780_Data6_DDR        DDRD
#define HD44780_Data6_PIN        PIND

#define HD44780_Data7            7
#define HD44780_Data7_PORT       PORTD
#define HD44780_Data7_DDR        DDRD
#define HD44780_Data7_PIN        PIND




#define HD44780_E_delay()           Tdelay_3us() 
#define HD44780_E_High()            SETBIT(HD44780_E_PORT,HD44780_E)
#define HD44780_E_Low()             CLRBIT(HD44780_E_PORT,HD44780_E)

#define HD44780_Cmd_Mode()          CLRBIT(HD44780_RS_PORT, HD44780_RS)    // RS=0  指令模式
#define HD44780_Data_Mode()         SETBIT(HD44780_RS_PORT, HD44780_RS)    // RS=1  数据模式
#define HD44780_Wr_Mode()           CLRBIT(HD44780_RW_PORT, HD44780_RW)    // RW=0  写模式
#define HD44780_Rd_Mode()           SETBIT(HD44780_RW_PORT, HD44780_RW)    // RW=1  读模式

#endif


/**************************************************************************************************
*                            常量定义区
**************************************************************************************************/
                                       // ---------------------- HD44780 命令 --------------------
                                       //该参数可以是下列同一组中的一个或多个相或(|):
#define  HD44780_DISP_CMD_CLS          0x01  // LCD 清屏,光标返回(0,0)位置。

#define  HD44780_DISP_CMD_HOME         0x02  // 显示、光标回原位

#define  HD44780_DISP_CURSOR_DEC       0x04  // 光标减量方式,画面不动
#define  HD44780_DISP_CURSOR_DEC_MOV   0x05  // 光标减量方式,画面平移
#define  HD44780_DISP_CURSOR_INC       0x06  // 光标增量方式,画面不动
#define  HD44780_DISP_CURSOR_INC_MOV   0x07  // 光标增量方式,画面平移

#define  HD44780_DISP_ON               0x0C  // 显示开
#define  HD44780_DISP_OFF              0x08  // 显示关
#define  HD44780_DISP_CURSOR_ON        0x0A  // 光标开
#define  HD44780_DISP_CURSOR_OFF       0x08  // 光标关
#define  HD44780_DISP_BLINK_ON         0x09  // 光标所在字符闪烁开
#define  HD44780_DISP_BLINK_OFF        0x08  // 光标所在字符闪烁关

#define  HD44780_DISP_CURSOL_LMOV      0x10  //光标左移一个字符
#define  HD44780_DISP_CURSOR_RMOV      0x14  //光标右移一个字符
#define  HD44780_DISP_MENU_LMOV        0x18  //画面左移一个字符
#define  HD44780_DISP_MENU_RMOV        0x1C  //画面右移一个字符

#define  HD44780_DISP_MODE_BIT_8       0x30  // 8-bit 数据接口
#define  HD44780_DISP_MODE_BIT_4       0x20  // 4-bit 数据接口
#define  HD44780_DISP_MODE_LINE_2      0x28  // 2 行显示
#define  HD44780_DISP_MODE_LINE_1      0x20  // 1 行显示
#define  HD44780_DISP_MODE_FONT_5X10   0x24  // 5 x 10 点阵字符
#define  HD44780_DISP_MODE_FONT_5X7    0x20  // 5 x 7 点阵字符

#define  HD44780_DISP_SET_ADDR_CGRAM   0x40  // 设置 CGRAM 地址

#define  HD44780_DISP_SET_ADDR_DDRAM   0x80  // 设置 DDRAM 地址

#define  HD44780_BUSY_BIT              7     // DB7: LCD is busy


/**************************************************************************************************
*                            变量定义区
**************************************************************************************************/
typedef struct _LCD_CUSTOM_CHAR
{
INT8U cgram[8];
} LCC;

/**************************************************************************************************
*                            函数定义区
**************************************************************************************************/

LCD_HD44780_EXT  void HD44780_Write_Cmd (INT8U Cmd);
LCD_HD44780_EXT  void HD44780_Write_Data (INT8U Data);
LCD_HD44780_EXT  INT8U HD44780_Read_Cmd(void);

#if  (EN_HD44780_Read_Data > 0)   \
   ||(EN_LCD_CGRAM_read_byte > 0)
LCD_HD44780_EXT  INT8U HD44780_Read_Data (void);
#endif



LCD_HD44780_EXT  void LCD_init(void);
LCD_HD44780_EXT  void LCD_clear(void);
LCD_HD44780_EXT  void LCD_home(void);
LCD_HD44780_EXT  void LCD_gotoxy(INT8U x, INT8U y);
LCD_HD44780_EXT  void LCD_putchar(char c);
LCD_HD44780_EXT  void LCD_puts(INT8U *str);
LCD_HD44780_EXT  void LCD_puts_p(const prog_char *progmem_s);

#if (EN_LCD_set_custom_char > 0)
LCD_HD44780_EXT  void LCD_set_custom_char(INT8U index, LCC *cchr);
#endif

#if (EN_LCD_CGRAM_read_byte > 0)
LCD_HD44780_EXT  INT8U LCD_CGRAM_read_byte(INT8U addr);
#endif

#if (EN_LCD_CGRAM_write_byte > 0)
LCD_HD44780_EXT  void LCD_CGRAM_write_byte(INT8U addr, INT8U Data);
#endif
#define LCD_command(command)      HD44780_DispCtrlCmdWr(command)// LCD 指令


/**************************************************************************************************
*                            条件编译
**************************************************************************************************/

#define EN_LCD_CGRAM_read_byte    0           // O为禁止编译。1充许编译 
#define EN_LCD_CGRAM_write_byte   0           // O为禁止编译。1充许编译
#define EN_LCD_set_custom_char    1           // O为禁止编译。1充许编译

#define EN_HD44780_Read_Data      0           // O为禁止编译。1充许编译

#define DEBUG_HD44780_Read_Cmd    1           // O为禁止调试。1充许调试

/**************************************************************************************************
* 
**************************************************************************************************/

#if   (HD44780_COMM_PORT == HD44780_8_Bits_Bus) \
   || (HD44780_COMM_PORT == HD44780_8_Bits_IO)  \
   || (HD44780_COMM_PORT == HD44780_8_Bits_SRAM)

 #define    HD44780_DISP_MODE_BIT   HD44780_DISP_MODE_BIT_8   // 8-bit 数据接口

#elif (HD44780_COMM_PORT == HD44780_4_Bits_HBus) \
   || (HD44780_COMM_PORT == HD44780_4_Bits_LBus) \
   || (HD44780_COMM_PORT == HD44780_4_Bits_IO)

 #define    HD44780_DISP_MODE_BIT   HD44780_DISP_MODE_BIT_4   // 4-bit 数据接口

#endif

#if (_lcd_MaxCols > 1)
 #define    HD44780_DISP_MODE_LINE   HD44780_DISP_MODE_LINE_2
#else
 #define    HD44780_DISP_MODE_LINE   HD44780_DISP_MODE_LINE_1
#endif

#define HD44780_MODE_SET  (HD44780_DISP_MODE_BIT|HD44780_DISP_MODE_LINE|HD44780_DISP_MODE_FONT_5X7)


#if(HD44780_COMM_PORT == HD44780_8_Bits_Bus)//////////////////// 8位总线
    // 设定所有数据引脚为输入    
    #define HD44780_Data_Port_In()  HD44780_Data_DDR=0 
    // 设定所有数据引脚为输出    
    #define HD44780_Data_Port_Out() HD44780_Data_DDR=0xFF 
    
#elif (HD44780_COMM_PORT == HD44780_8_Bits_IO)////////////////// 8位普通I/O口
    // 设定所有数据引脚为输入
    #define HD44780_Data_Port_In()  {   \
                                    CLRBIT(HD44780_Data7_DDR, HD44780_Data7);\
                                    CLRBIT(HD44780_Data6_DDR, HD44780_Data6);\
                                    CLRBIT(HD44780_Data5_DDR, HD44780_Data5);\
                                    CLRBIT(HD44780_Data4_DDR, HD44780_Data4);\
                                    CLRBIT(HD44780_Data3_DDR, HD44780_Data3);\
                                    CLRBIT(HD44780_Data2_DDR, HD44780_Data2);\
                                    CLRBIT(HD44780_Data1_DDR, HD44780_Data1);\
                                    CLRBIT(HD44780_Data0_DDR, HD44780_Data0);\
                                    }
    // 设定所有数据引脚为输出
    #define HD44780_Data_Port_Out() {   \
                                    SETBIT(HD44780_Data7_DDR, HD44780_Data7);\
                                    SETBIT(HD44780_Data6_DDR, HD44780_Data6);\
                                    SETBIT(HD44780_Data5_DDR, HD44780_Data5);\
                                    SETBIT(HD44780_Data4_DDR, HD44780_Data4);\
                                    SETBIT(HD44780_Data3_DDR, HD44780_Data3);\
                                    SETBIT(HD44780_Data2_DDR, HD44780_Data2);\
                                    SETBIT(HD44780_Data1_DDR, HD44780_Data1);\
                                    SETBIT(HD44780_Data0_DDR, HD44780_Data0);\
                                    }
  
#elif (HD44780_COMM_PORT == HD44780_4_Bits_HBus)//////////////// 4位总线(高半字节)
    // 设定所有数据引脚为输入    
    #define HD44780_Data_Port_In()  CLRMASK(HD44780_Data_DDR,BIT(7)+BIT(6)+BIT(5)+BIT(4))
    // 设定所有数据引脚为输出    
    #define HD44780_Data_Port_Out() SETMASK(HD44780_Data_DDR,BIT(7)+BIT(6)+BIT(5)+BIT(4))

#elif (HD44780_COMM_PORT == HD44780_4_Bits_LBus)//////////////// 4位总线(低半字节)
    // 设定所有数据引脚为输入    
    #define HD44780_Data_Port_In()  CLRMASK(HD44780_Data_DDR,BIT(3)+BIT(2)+BIT(1)+BIT(0))
    // 设定所有数据引脚为输出    
    #define HD44780_Data_Port_Out() SETMASK(HD44780_Data_DDR,BIT(3)+BIT(2)+BIT(1)+BIT(0))
    
#elif (HD44780_COMM_PORT == HD44780_4_Bits_IO)////////////////// 4位普通I/O口
    // 设定所有数据引脚为输入
    #define HD44780_Data_Port_In()  {   \
                                    CLRBIT(HD44780_Data7_DDR, HD44780_Data7);\
                                    CLRBIT(HD44780_Data6_DDR, HD44780_Data6);\
                                    CLRBIT(HD44780_Data5_DDR, HD44780_Data5);\
                                    CLRBIT(HD44780_Data4_DDR, HD44780_Data4);\
                                    }
    // 设定所有数据引脚为输出
    #define HD44780_Data_Port_Out() {   \
                                    SETBIT(HD44780_Data7_DDR, HD44780_Data7);\
                                    SETBIT(HD44780_Data6_DDR, HD44780_Data6);\
                                    SETBIT(HD44780_Data5_DDR, HD44780_Data5);\
                                    SETBIT(HD44780_Data4_DDR, HD44780_Data4);\
                                    }
#endif


/**************************************************************************************************
*           END  OF  FILE
**************************************************************************************************/

⌨️ 快捷键说明

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