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