lcd_2002a08f.h 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef LCD_2002A08F_H
  2. #define LCD_2002A08F_H
  3. #include <stdint.h>
  4. /* I2C设备地址 - 根据数据手册,从机地址为 0111110x (0x3E或0x3F) */
  5. #define LCD_I2C_ADDR 0x3E
  6. /* 设备文件路径 */
  7. #define LCD_I2C_BUS "/dev/i2c-lcd" /* 根据实际硬件调整,做的映射 */
  8. /* 控制字节定义 */
  9. #define LCD_CONTROL_BYTE 0x00 /* RS=0: 指令 */
  10. #define LCD_DATA_BYTE 0x40 /* RS=1: 数据 */
  11. #define LCD_CO_BIT 0x80 /* Continuation bit */
  12. /* 基本指令 - 根据数据手册第13-16页 */
  13. #define LCD_CLEAR_DISPLAY 0x01 /* 清显示 */
  14. #define LCD_RETURN_HOME 0x02 /* 归位 */
  15. #define LCD_ENTRY_MODE_SET 0x04 /* 设置输入模式 */
  16. #define LCD_DISPLAY_CONTROL 0x08 /* 显示开/关控制 */
  17. #define LCD_CURSOR_SHIFT 0x10 /* 光标或显示移位 */
  18. #define LCD_FUNCTION_SET 0x20 /* 功能设置 */
  19. #define LCD_SET_CGRAM_ADDR 0x40 /* CGRAM地址设置 */
  20. #define LCD_SET_DDRAM_ADDR 0x80 /* DDRAM地址设置 */
  21. /* Entry Mode Set 参数 */
  22. #define LCD_ENTRY_RIGHT 0x00 /* 光标右移 */
  23. #define LCD_ENTRY_LEFT 0x02 /* 光标左移 */
  24. #define LCD_ENTRY_SHIFT_ON 0x01 /* 显示移位开启 */
  25. #define LCD_ENTRY_SHIFT_OFF 0x00 /* 显示移位关闭 */
  26. /* Display Control 参数 */
  27. #define LCD_DISPLAY_ON 0x04 /* 显示开启 */
  28. #define LCD_DISPLAY_OFF 0x00 /* 显示关闭 */
  29. #define LCD_CURSOR_ON 0x02 /* 光标显示 */
  30. #define LCD_CURSOR_OFF 0x00 /* 光标不显示 */
  31. #define LCD_BLINK_ON 0x01 /* 闪烁开启 */
  32. #define LCD_BLINK_OFF 0x00 /* 闪烁关闭 */
  33. /* Function Set 参数 */
  34. #define LCD_2LINE 0x08 /* 2行显示 (N=1) */
  35. #define LCD_1LINE 0x00 /* 1行显示 (N=0) */
  36. #define LCD_5x10DOTS 0x04 /* 5x10点阵 (F=1) */
  37. #define LCD_5x8DOTS 0x00 /* 5x7点阵 (F=0) */
  38. /* Cursor/Display Shift 参数 */
  39. #define LCD_DISPLAY_MOVE 0x08 /* 显示移动 (S/C=1) */
  40. #define LCD_CURSOR_MOVE 0x00 /* 光标移动 (S/C=0) */
  41. #define LCD_MOVE_RIGHT 0x04 /* 向右移动 (R/L=1) */
  42. #define LCD_MOVE_LEFT 0x00 /* 向左移动 (R/L=0) */
  43. /* DDRAM地址 - 根据数据手册第16页 */
  44. #define LCD_LINE1_ADDR 0x00 /* 第一行起始地址 0x00-0x27 */
  45. #define LCD_LINE2_ADDR 0x40 /* 第二行起始地址 0x40-0x67 */
  46. /* 显示参数 */
  47. #define LCD_COLS 20 /* 20列 */
  48. #define LCD_ROWS 2 /* 2行 */
  49. /* 函数声明 */
  50. int lcd_init(const char *i2c_bus, uint8_t addr);
  51. void lcd_close(void);
  52. int lcd_clear(void);
  53. int lcd_home(void);
  54. int lcd_display_control(uint8_t display, uint8_t cursor, uint8_t blink);
  55. int lcd_entry_mode(uint8_t id, uint8_t shift);
  56. int lcd_set_cursor(uint8_t col, uint8_t row);
  57. int lcd_write_char(char c);
  58. int lcd_write_string(const char *str);
  59. int lcd_write_custom_char(uint8_t num, uint8_t *data);
  60. int lcd_show_custom_char(uint8_t num);
  61. int lcd_shift_display(uint8_t direction);
  62. int lcd_shift_cursor(uint8_t direction);
  63. int lcd_clear_line_fast(uint8_t row);
  64. #endif