lcd.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*
  2. * File : lcd.h
  3. * This file is part of RT-Thread RTOS
  4. * COPYRIGHT (C) 2006, RT-Thread Develop Team
  5. *
  6. * The license and distribution terms for this file may be
  7. * found in the file LICENSE in this distribution or at
  8. * http://www.rt-thread.org/license/LICENSE
  9. *
  10. * Change Logs:
  11. * Date Author Notes
  12. * 2008-03-29 Yi.Qiu
  13. * 2011-06-13 lgnq modified for FM3 easy kit
  14. */
  15. #ifndef __LCD_H__
  16. #define __LCD_H__
  17. #include <rtthread.h>
  18. #include "mb9bf506r.h"
  19. /********* LCD Hardward Interface *************
  20. LCD_CS PORT1.7
  21. LCD_CD PORT1.6
  22. LCD_WR PORT1.5
  23. LCD_RD PORT1.4
  24. LCD_SCK PORT1.3
  25. LCD_MOSI PORT1.2
  26. LCD_C86 PORT1.1
  27. LCD_PS PORT1.0
  28. LCD_DATA[0..7] PORT5.[0..7]
  29. ***********************************************/
  30. #define LCD_CS (1UL << 7)
  31. #define LCD_CS_DDR (FM3_GPIO->DDR1)
  32. #define LCD_CS_PFR (FM3_GPIO->PFR1)
  33. #define LCD_CS_PDOR (FM3_GPIO->PDOR1)
  34. #define LCD_CD (1UL << 6)
  35. #define LCD_CD_DDR (FM3_GPIO->DDR1)
  36. #define LCD_CD_PFR (FM3_GPIO->PFR1)
  37. #define LCD_CD_PDOR (FM3_GPIO->PDOR1)
  38. #define LCD_PS (1UL << 0)
  39. #define LCD_PS_DDR (FM3_GPIO->DDR1)
  40. #define LCD_PS_PFR (FM3_GPIO->PFR1)
  41. #define LCD_PS_PDOR (FM3_GPIO->PDOR1)
  42. #define LCD_CLK (1UL << 6)
  43. #define LCD_CLK_DDR (FM3_GPIO->DDR5)
  44. #define LCD_CLK_PFR (FM3_GPIO->PFR5)
  45. #define LCD_CLK_PDOR (FM3_GPIO->PDOR5)
  46. #define LCD_DATA (1UL << 7)
  47. #define LCD_DATA_DDR (FM3_GPIO->DDR5)
  48. #define LCD_DATA_PFR (FM3_GPIO->PFR5)
  49. #define LCD_DATA_PDOR (FM3_GPIO->PDOR5)
  50. /* LCD driver for ZYMG12864C3 */
  51. #define LCD_WIDTH 128
  52. #define LCD_HEIGHT 64
  53. // Driver the LCD with Parallel or serial interface and the command/data control pin is gpio
  54. #define LCD_CS_HIGH() LCD_CS_PDOR |= LCD_CS
  55. #define LCD_CS_LOW() LCD_CS_PDOR &= ~LCD_CS
  56. #define LCD_CD_HIGH() LCD_CD_PDOR |= LCD_CD
  57. #define LCD_CD_LOW() LCD_CD_PDOR &= ~LCD_CD
  58. #define LCD_PS_HIGH() LCD_PS_PDOR |= LCD_PS
  59. #define LCD_PS_LOW() LCD_PS_PDOR &= ~LCD_PS
  60. #define LCD_CLK_HIGH() LCD_CLK_PDOR |= LCD_CLK
  61. #define LCD_CLK_LOW() LCD_CLK_PDOR &= ~LCD_CLK
  62. #define LCD_DATA_HIGH() LCD_DATA_PDOR |= LCD_DATA
  63. #define LCD_DATA_LOW() LCD_DATA_PDOR &= ~LCD_DATA
  64. // define the arrtibute of ZYMG12864(LCM)
  65. #define GUI_LCM_XMAX 128 // defined the lcd's line-number is 128
  66. #define GUI_LCM_YMAX 64 // defined the lcd's column-number is 64
  67. #define GUI_LCM_PAGE 8 // defined the lcd's page-number is 8(GUI_LCM_YMAX/8)
  68. /* set LCD command */
  69. #define DISPLAY_ON 0xAF // A0,RD,WR:010
  70. #define DISPLAY_OFF 0xAE // A0,RD,WR:010
  71. #define SET_START_LINE_0 0x40 // A0,RD,WR:010; line0~line63
  72. #define SET_PAGE_ADDR_0 0xB0 // A0,RD,WR:010; addr0~addr8
  73. #define SET_COLH_ADDR_0 0x10 // A0,RD,WR:010;
  74. #define SET_COLL_ADDR_0 0x00 // A0,RD,WR:010; addr0~addr131
  75. #define READ_STATUS 0x-0 // A0,RD,WR:001; BUSY | ADC | ON/OFF | RESET | 0 0 0 0
  76. #define STATUS_BUSY 0x80
  77. #define STATUS_ADC_REVERSE 0x40 // column address 131-n : SEG n, else column address n : SEG n
  78. #define STATUS_DISPLAY_OFF 0x20
  79. #define STATUS_RESET 0x80
  80. #define WRITE_DATA 0x-- // A0,RD,WR:110
  81. #define READ_DATE 0x-- // A0,RD,WR:101; spi mode is unavailable
  82. #define SET_ADC_NORMAL 0xA0 // A0,RD,WR:010
  83. #define SET_ADC_REVERSE 0xA1 // A0,RD,WR:010
  84. #define DISPLAY_NORMAL 0xA6 // A0,RD,WR:010
  85. #define DISPLAY_REVERSE 0xA7 // A0,RD,WR:010; reverse color
  86. #define DISPLAY_ALL_ON 0xA5 // A0,RD,WR:010
  87. #define DISPLAY_ALL_NORMAL 0xA4 // A0,RD,WR:010
  88. /*************************************************************
  89. * bias: 1/65duty | 1/49duty | 1/33duty | 1/55duty | 1/53duty *
  90. * ---------------|----------|----------|----------|--------- *
  91. * A2: 1/9 bias | 1/8 bias | 1/6 bias | 1/8 bias | 1/8 bias *
  92. * A3: 1/7 bias | 1/6 bias | 1/5 bias | 1/6 bias | 1/6 bias *
  93. **************************************************************/
  94. #define SET_LCD_BIAS_7 0xA3 // A0,RD,WR:010
  95. #define SET_LCD_BIAS_9 0xA2 // A0,RD,WR:010
  96. #define RMW_MODE_ENABLE 0xE0 // A0,RD,WR:010; the column address locked when read command operating
  97. #define RMW_MODE_END 0xEE // A0,RD,WR:010; returns to the column address when RMW was entered.
  98. #define RESET_LCD 0xE2 // A0,RD,WR:010
  99. /**************************************************************************************
  100. * Com Scan Dir: | 1/65duty | 1/49duty | 1/33duty | 1/55duty | 1/53duty *
  101. * --------------|-------------|-------------|-------------|------------------------ *
  102. * C0: Normal | COM0:COM63 | COM0:COM47 | COM0:COM31 | COM0:COM53 | COM0:COM51 *
  103. * C8: Reverse | COM63:COM0 | COM47:COM0 | COM31:COM0 | COM53:COM0 | COM51:COM0 *
  104. ***************************************************************************************/
  105. #define COM_SCAN_DIR_NORMAL 0xC0 // A0,RD,WR:010
  106. #define COM_SCAN_DIR_REVERSE 0xC8 // A0,RD,WR:010
  107. // 0 0 1 0 1 | Booster On | Regulator On | Follower On
  108. #define POWER_BOOSTER_ON 0x2C // A0,RD,WR:010
  109. #define POWER_REGULATOR_ON 0x2E // A0,RD,WR:010
  110. #define POWER_FOLLOWER_ON 0x2F // A0,RD,WR:010
  111. #define SET_RESISTOR_RATIO 0x20 // A0,RD,WR:010; 20~27:small~large
  112. #define SET_ELECVOL_MODE 0x81 // A0,RD,WR:010; double byte command
  113. #define SET_ELECVOL_REG 0x20 // A0,RD,WR:010; the electronic volume(64 voltage levels:00~3F) function is not used.
  114. #define SLEEP_MODE_ENABLE 0xAC // A0,RD,WR:010; double byte command, preceding command
  115. #define SLEEP_MODE_DISABLE 0xAD // A0,RD,WR:010; preceding command
  116. #define SLEEP_MODE_DELIVER 0x00 // A0,RD,WR:010; following command
  117. #define BOOST_RATIO_SET 0xF8 // A0,RD,WR:010; double byte command, preceding command
  118. #define BOOST_RATIO_234 0x00 // A0,RD,WR:010; following command
  119. #define BOOST_RATIO_5 0x01 // A0,RD,WR:010; following command
  120. #define BOOST_RATIO_6 0x03 // A0,RD,WR:010; following command
  121. #define COMMAND_NOP 0xE3 // A0,RD,WR:010
  122. #define COMMAND_IC_TEST 0xFC // A0,RD,WR:010; don't use
  123. #define RT_DEVICE_CTRL_LCD_GET_WIDTH 0
  124. #define RT_DEVICE_CTRL_LCD_GET_HEIGHT 1
  125. #define RT_DEVICE_CTRL_LCD_GET_BPP 2
  126. #define RT_DEVICE_CTRL_LCD_GET_FRAMEBUFFER 3
  127. #define RT_DEVICE_CTRL_LCD_POWER_ON 4
  128. #define RT_DEVICE_CTRL_LCD_POWER_OFF 5
  129. #define RT_DEVICE_CTRL_LCD_CLEAR_SCR 6
  130. #define RT_DEVICE_CTRL_LCD_FILL_ALL 7
  131. #define RT_DEVICE_CTRL_LCD_UPDATE_POINT 8
  132. #define RT_DEVICE_CTRL_LCD_DISPLAY_ON 9
  133. #define RT_DEVICE_CTRL_LCD_DISPLAY_OFF 10
  134. #define RT_DEVICE_CTRL_LCD_PUT_STRING 11
  135. enum
  136. {
  137. ADC_MSG,
  138. KEY_MSG,
  139. CPU_MSG,
  140. MAX_MSG,
  141. };
  142. struct lcd_msg
  143. {
  144. rt_uint8_t type;
  145. rt_uint16_t adc_value;
  146. rt_uint8_t key;
  147. rt_uint16_t major;
  148. rt_uint16_t minor;
  149. };
  150. extern rt_uint32_t x;
  151. extern rt_uint32_t y;
  152. void rt_hw_lcd_init(void);
  153. #endif