GPS Tracker with a TFT display, GPLV3
Dependencies: MAX17055 MAX32620FTHR MAX77650 SerialGPS
LCD_Driver.cpp@0:48d0ba737b93, 2018-08-18 (annotated)
- Committer:
- DimiterK
- Date:
- Sat Aug 18 22:34:58 2018 +0000
- Revision:
- 0:48d0ba737b93
GPS tracker , Hackster Contest, August 2018; Release under GPLv3,
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DimiterK | 0:48d0ba737b93 | 1 | |
DimiterK | 0:48d0ba737b93 | 2 | /*********************************************************************************************************************** |
DimiterK | 0:48d0ba737b93 | 3 | * | file : LCD_Driver.c |
DimiterK | 0:48d0ba737b93 | 4 | * | version : V1.0 |
DimiterK | 0:48d0ba737b93 | 5 | * | date : 2017-10-16 |
DimiterK | 0:48d0ba737b93 | 6 | * | function : On the ST7735S chip driver and clear screen, drawing lines, drawing, writing |
DimiterK | 0:48d0ba737b93 | 7 | and other functions to achieve |
DimiterK | 0:48d0ba737b93 | 8 | ***********************************************************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 9 | |
DimiterK | 0:48d0ba737b93 | 10 | #include "LCD_Driver.h" |
DimiterK | 0:48d0ba737b93 | 11 | |
DimiterK | 0:48d0ba737b93 | 12 | #include <stdlib.h> //itoa() |
DimiterK | 0:48d0ba737b93 | 13 | #include <stdio.h> |
DimiterK | 0:48d0ba737b93 | 14 | #include "fonts.h" |
DimiterK | 0:48d0ba737b93 | 15 | |
DimiterK | 0:48d0ba737b93 | 16 | LCD_DIS sLCD_DIS; |
DimiterK | 0:48d0ba737b93 | 17 | |
DimiterK | 0:48d0ba737b93 | 18 | /*********************************************************************************************************************** |
DimiterK | 0:48d0ba737b93 | 19 | ------------------------------------------------------------------------ |
DimiterK | 0:48d0ba737b93 | 20 | |\\\ ///| |
DimiterK | 0:48d0ba737b93 | 21 | |\\\ Drive layer ///| |
DimiterK | 0:48d0ba737b93 | 22 | ------------------------------------------------------------------------ |
DimiterK | 0:48d0ba737b93 | 23 | ***********************************************************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 24 | /******************************************************************************* |
DimiterK | 0:48d0ba737b93 | 25 | function: |
DimiterK | 0:48d0ba737b93 | 26 | Hardware reset |
DimiterK | 0:48d0ba737b93 | 27 | *******************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 28 | SPI spi0(P0_5, P0_6, P0_4); // mosi, miso, sclk |
DimiterK | 0:48d0ba737b93 | 29 | |
DimiterK | 0:48d0ba737b93 | 30 | DigitalOut cs0(P0_7); |
DimiterK | 0:48d0ba737b93 | 31 | DigitalOut rst(P1_5); |
DimiterK | 0:48d0ba737b93 | 32 | DigitalOut dc(P1_4); |
DimiterK | 0:48d0ba737b93 | 33 | |
DimiterK | 0:48d0ba737b93 | 34 | static void LCD_Reset(void) |
DimiterK | 0:48d0ba737b93 | 35 | { |
DimiterK | 0:48d0ba737b93 | 36 | RST_HIGH(); |
DimiterK | 0:48d0ba737b93 | 37 | wait_ms(100); |
DimiterK | 0:48d0ba737b93 | 38 | RST_LOW(); |
DimiterK | 0:48d0ba737b93 | 39 | wait_ms(100); |
DimiterK | 0:48d0ba737b93 | 40 | RST_HIGH(); |
DimiterK | 0:48d0ba737b93 | 41 | wait_ms(100); |
DimiterK | 0:48d0ba737b93 | 42 | } |
DimiterK | 0:48d0ba737b93 | 43 | |
DimiterK | 0:48d0ba737b93 | 44 | /******************************************************************************* |
DimiterK | 0:48d0ba737b93 | 45 | function: |
DimiterK | 0:48d0ba737b93 | 46 | Write register address and data |
DimiterK | 0:48d0ba737b93 | 47 | *******************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 48 | static void LCD_WriteReg(uint8_t Reg) |
DimiterK | 0:48d0ba737b93 | 49 | { |
DimiterK | 0:48d0ba737b93 | 50 | DC_LOW(); |
DimiterK | 0:48d0ba737b93 | 51 | cs0 = 0; |
DimiterK | 0:48d0ba737b93 | 52 | spi0.write(Reg); |
DimiterK | 0:48d0ba737b93 | 53 | cs0 = 1; |
DimiterK | 0:48d0ba737b93 | 54 | } |
DimiterK | 0:48d0ba737b93 | 55 | |
DimiterK | 0:48d0ba737b93 | 56 | static void LCD_WriteData_8Bit(uint8_t Data) |
DimiterK | 0:48d0ba737b93 | 57 | { |
DimiterK | 0:48d0ba737b93 | 58 | DC_HIGH(); |
DimiterK | 0:48d0ba737b93 | 59 | cs0 = 0; |
DimiterK | 0:48d0ba737b93 | 60 | spi0.write(Data); |
DimiterK | 0:48d0ba737b93 | 61 | cs0 = 1; |
DimiterK | 0:48d0ba737b93 | 62 | } |
DimiterK | 0:48d0ba737b93 | 63 | |
DimiterK | 0:48d0ba737b93 | 64 | |
DimiterK | 0:48d0ba737b93 | 65 | static void LCD_WriteData_NLen16Bit(uint16_t Data,uint32_t DataLen) |
DimiterK | 0:48d0ba737b93 | 66 | { |
DimiterK | 0:48d0ba737b93 | 67 | uint32_t i; |
DimiterK | 0:48d0ba737b93 | 68 | DC_HIGH(); |
DimiterK | 0:48d0ba737b93 | 69 | cs0 = 0; |
DimiterK | 0:48d0ba737b93 | 70 | for(i = 0; i < DataLen; i++) { |
DimiterK | 0:48d0ba737b93 | 71 | spi0.write( (uint8_t)(Data >> 8) ); |
DimiterK | 0:48d0ba737b93 | 72 | spi0.write((uint8_t)(Data & 0XFF) ); |
DimiterK | 0:48d0ba737b93 | 73 | } |
DimiterK | 0:48d0ba737b93 | 74 | cs0 = 1; |
DimiterK | 0:48d0ba737b93 | 75 | } |
DimiterK | 0:48d0ba737b93 | 76 | |
DimiterK | 0:48d0ba737b93 | 77 | /******************************************************************************* |
DimiterK | 0:48d0ba737b93 | 78 | function: |
DimiterK | 0:48d0ba737b93 | 79 | Common register initialization |
DimiterK | 0:48d0ba737b93 | 80 | *******************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 81 | static void LCD_InitReg(void) |
DimiterK | 0:48d0ba737b93 | 82 | { |
DimiterK | 0:48d0ba737b93 | 83 | spi0.frequency(4000000); |
DimiterK | 0:48d0ba737b93 | 84 | cs0 = 1; |
DimiterK | 0:48d0ba737b93 | 85 | |
DimiterK | 0:48d0ba737b93 | 86 | //ST7735R Frame Rate |
DimiterK | 0:48d0ba737b93 | 87 | LCD_WriteReg(0xB1); |
DimiterK | 0:48d0ba737b93 | 88 | LCD_WriteData_8Bit(0x01); |
DimiterK | 0:48d0ba737b93 | 89 | LCD_WriteData_8Bit(0x2C); |
DimiterK | 0:48d0ba737b93 | 90 | LCD_WriteData_8Bit(0x2D); |
DimiterK | 0:48d0ba737b93 | 91 | |
DimiterK | 0:48d0ba737b93 | 92 | LCD_WriteReg(0xB2); |
DimiterK | 0:48d0ba737b93 | 93 | LCD_WriteData_8Bit(0x01); |
DimiterK | 0:48d0ba737b93 | 94 | LCD_WriteData_8Bit(0x2C); |
DimiterK | 0:48d0ba737b93 | 95 | LCD_WriteData_8Bit(0x2D); |
DimiterK | 0:48d0ba737b93 | 96 | |
DimiterK | 0:48d0ba737b93 | 97 | LCD_WriteReg(0xB3); |
DimiterK | 0:48d0ba737b93 | 98 | LCD_WriteData_8Bit(0x01); |
DimiterK | 0:48d0ba737b93 | 99 | LCD_WriteData_8Bit(0x2C); |
DimiterK | 0:48d0ba737b93 | 100 | LCD_WriteData_8Bit(0x2D); |
DimiterK | 0:48d0ba737b93 | 101 | LCD_WriteData_8Bit(0x01); |
DimiterK | 0:48d0ba737b93 | 102 | LCD_WriteData_8Bit(0x2C); |
DimiterK | 0:48d0ba737b93 | 103 | LCD_WriteData_8Bit(0x2D); |
DimiterK | 0:48d0ba737b93 | 104 | |
DimiterK | 0:48d0ba737b93 | 105 | LCD_WriteReg(0xB4); //Column inversion |
DimiterK | 0:48d0ba737b93 | 106 | LCD_WriteData_8Bit(0x07); |
DimiterK | 0:48d0ba737b93 | 107 | |
DimiterK | 0:48d0ba737b93 | 108 | //ST7735R Power Sequence |
DimiterK | 0:48d0ba737b93 | 109 | LCD_WriteReg(0xC0); |
DimiterK | 0:48d0ba737b93 | 110 | LCD_WriteData_8Bit(0xA2); |
DimiterK | 0:48d0ba737b93 | 111 | LCD_WriteData_8Bit(0x02); |
DimiterK | 0:48d0ba737b93 | 112 | LCD_WriteData_8Bit(0x84); |
DimiterK | 0:48d0ba737b93 | 113 | LCD_WriteReg(0xC1); |
DimiterK | 0:48d0ba737b93 | 114 | LCD_WriteData_8Bit(0xC5); |
DimiterK | 0:48d0ba737b93 | 115 | |
DimiterK | 0:48d0ba737b93 | 116 | LCD_WriteReg(0xC2); |
DimiterK | 0:48d0ba737b93 | 117 | LCD_WriteData_8Bit(0x0A); |
DimiterK | 0:48d0ba737b93 | 118 | LCD_WriteData_8Bit(0x00); |
DimiterK | 0:48d0ba737b93 | 119 | |
DimiterK | 0:48d0ba737b93 | 120 | LCD_WriteReg(0xC3); |
DimiterK | 0:48d0ba737b93 | 121 | LCD_WriteData_8Bit(0x8A); |
DimiterK | 0:48d0ba737b93 | 122 | LCD_WriteData_8Bit(0x2A); |
DimiterK | 0:48d0ba737b93 | 123 | LCD_WriteReg(0xC4); |
DimiterK | 0:48d0ba737b93 | 124 | LCD_WriteData_8Bit(0x8A); |
DimiterK | 0:48d0ba737b93 | 125 | LCD_WriteData_8Bit(0xEE); |
DimiterK | 0:48d0ba737b93 | 126 | |
DimiterK | 0:48d0ba737b93 | 127 | LCD_WriteReg(0xC5); //VCOM |
DimiterK | 0:48d0ba737b93 | 128 | LCD_WriteData_8Bit(0x0E); |
DimiterK | 0:48d0ba737b93 | 129 | |
DimiterK | 0:48d0ba737b93 | 130 | //ST7735R Gamma Sequence |
DimiterK | 0:48d0ba737b93 | 131 | LCD_WriteReg(0xe0); |
DimiterK | 0:48d0ba737b93 | 132 | LCD_WriteData_8Bit(0x0f); |
DimiterK | 0:48d0ba737b93 | 133 | LCD_WriteData_8Bit(0x1a); |
DimiterK | 0:48d0ba737b93 | 134 | LCD_WriteData_8Bit(0x0f); |
DimiterK | 0:48d0ba737b93 | 135 | LCD_WriteData_8Bit(0x18); |
DimiterK | 0:48d0ba737b93 | 136 | LCD_WriteData_8Bit(0x2f); |
DimiterK | 0:48d0ba737b93 | 137 | LCD_WriteData_8Bit(0x28); |
DimiterK | 0:48d0ba737b93 | 138 | LCD_WriteData_8Bit(0x20); |
DimiterK | 0:48d0ba737b93 | 139 | LCD_WriteData_8Bit(0x22); |
DimiterK | 0:48d0ba737b93 | 140 | LCD_WriteData_8Bit(0x1f); |
DimiterK | 0:48d0ba737b93 | 141 | LCD_WriteData_8Bit(0x1b); |
DimiterK | 0:48d0ba737b93 | 142 | LCD_WriteData_8Bit(0x23); |
DimiterK | 0:48d0ba737b93 | 143 | LCD_WriteData_8Bit(0x37); |
DimiterK | 0:48d0ba737b93 | 144 | LCD_WriteData_8Bit(0x00); |
DimiterK | 0:48d0ba737b93 | 145 | LCD_WriteData_8Bit(0x07); |
DimiterK | 0:48d0ba737b93 | 146 | LCD_WriteData_8Bit(0x02); |
DimiterK | 0:48d0ba737b93 | 147 | LCD_WriteData_8Bit(0x10); |
DimiterK | 0:48d0ba737b93 | 148 | |
DimiterK | 0:48d0ba737b93 | 149 | LCD_WriteReg(0xe1); |
DimiterK | 0:48d0ba737b93 | 150 | LCD_WriteData_8Bit(0x0f); |
DimiterK | 0:48d0ba737b93 | 151 | LCD_WriteData_8Bit(0x1b); |
DimiterK | 0:48d0ba737b93 | 152 | LCD_WriteData_8Bit(0x0f); |
DimiterK | 0:48d0ba737b93 | 153 | LCD_WriteData_8Bit(0x17); |
DimiterK | 0:48d0ba737b93 | 154 | LCD_WriteData_8Bit(0x33); |
DimiterK | 0:48d0ba737b93 | 155 | LCD_WriteData_8Bit(0x2c); |
DimiterK | 0:48d0ba737b93 | 156 | LCD_WriteData_8Bit(0x29); |
DimiterK | 0:48d0ba737b93 | 157 | LCD_WriteData_8Bit(0x2e); |
DimiterK | 0:48d0ba737b93 | 158 | LCD_WriteData_8Bit(0x30); |
DimiterK | 0:48d0ba737b93 | 159 | LCD_WriteData_8Bit(0x30); |
DimiterK | 0:48d0ba737b93 | 160 | LCD_WriteData_8Bit(0x39); |
DimiterK | 0:48d0ba737b93 | 161 | LCD_WriteData_8Bit(0x3f); |
DimiterK | 0:48d0ba737b93 | 162 | LCD_WriteData_8Bit(0x00); |
DimiterK | 0:48d0ba737b93 | 163 | LCD_WriteData_8Bit(0x07); |
DimiterK | 0:48d0ba737b93 | 164 | LCD_WriteData_8Bit(0x03); |
DimiterK | 0:48d0ba737b93 | 165 | LCD_WriteData_8Bit(0x10); |
DimiterK | 0:48d0ba737b93 | 166 | |
DimiterK | 0:48d0ba737b93 | 167 | LCD_WriteReg(0xF0); //Enable test command |
DimiterK | 0:48d0ba737b93 | 168 | LCD_WriteData_8Bit(0x01); |
DimiterK | 0:48d0ba737b93 | 169 | |
DimiterK | 0:48d0ba737b93 | 170 | LCD_WriteReg(0xF6); //Disable ram power save mode |
DimiterK | 0:48d0ba737b93 | 171 | LCD_WriteData_8Bit(0x00); |
DimiterK | 0:48d0ba737b93 | 172 | |
DimiterK | 0:48d0ba737b93 | 173 | LCD_WriteReg(0x3A); //65k mode |
DimiterK | 0:48d0ba737b93 | 174 | LCD_WriteData_8Bit(0x05); |
DimiterK | 0:48d0ba737b93 | 175 | |
DimiterK | 0:48d0ba737b93 | 176 | } |
DimiterK | 0:48d0ba737b93 | 177 | |
DimiterK | 0:48d0ba737b93 | 178 | |
DimiterK | 0:48d0ba737b93 | 179 | /******************************************************************************** |
DimiterK | 0:48d0ba737b93 | 180 | function: Set the display scan and color transfer modes |
DimiterK | 0:48d0ba737b93 | 181 | parameter: |
DimiterK | 0:48d0ba737b93 | 182 | Scan_dir : Scan direction |
DimiterK | 0:48d0ba737b93 | 183 | Colorchose : RGB or GBR color format |
DimiterK | 0:48d0ba737b93 | 184 | ********************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 185 | void LCD_SetGramScanWay(LCD_SCAN_DIR Scan_dir) |
DimiterK | 0:48d0ba737b93 | 186 | { |
DimiterK | 0:48d0ba737b93 | 187 | //Get the screen scan direction |
DimiterK | 0:48d0ba737b93 | 188 | sLCD_DIS.LCD_Scan_Dir = Scan_dir; |
DimiterK | 0:48d0ba737b93 | 189 | |
DimiterK | 0:48d0ba737b93 | 190 | //Get GRAM and LCD width and height |
DimiterK | 0:48d0ba737b93 | 191 | if(Scan_dir == L2R_U2D || Scan_dir == L2R_D2U || Scan_dir == R2L_U2D || Scan_dir == R2L_D2U) { |
DimiterK | 0:48d0ba737b93 | 192 | sLCD_DIS.LCD_Dis_Column = LCD_HEIGHT ; |
DimiterK | 0:48d0ba737b93 | 193 | sLCD_DIS.LCD_Dis_Page = LCD_WIDTH ; |
DimiterK | 0:48d0ba737b93 | 194 | } else { |
DimiterK | 0:48d0ba737b93 | 195 | sLCD_DIS.LCD_Dis_Column = LCD_WIDTH ; |
DimiterK | 0:48d0ba737b93 | 196 | sLCD_DIS.LCD_Dis_Page = LCD_HEIGHT ; |
DimiterK | 0:48d0ba737b93 | 197 | } |
DimiterK | 0:48d0ba737b93 | 198 | |
DimiterK | 0:48d0ba737b93 | 199 | // Gets the scan direction of GRAM |
DimiterK | 0:48d0ba737b93 | 200 | uint16_t MemoryAccessReg_Data=0; //0x36 |
DimiterK | 0:48d0ba737b93 | 201 | switch (Scan_dir) { |
DimiterK | 0:48d0ba737b93 | 202 | case L2R_U2D: |
DimiterK | 0:48d0ba737b93 | 203 | MemoryAccessReg_Data = 0X00 | 0x00;//x Scan direction | y Scan direction |
DimiterK | 0:48d0ba737b93 | 204 | break; |
DimiterK | 0:48d0ba737b93 | 205 | case L2R_D2U: |
DimiterK | 0:48d0ba737b93 | 206 | MemoryAccessReg_Data = 0x00 | 0x80;//0xC8 | 0X10 |
DimiterK | 0:48d0ba737b93 | 207 | break; |
DimiterK | 0:48d0ba737b93 | 208 | case R2L_U2D:// 0X4 |
DimiterK | 0:48d0ba737b93 | 209 | MemoryAccessReg_Data = 0x40 | 0x00; |
DimiterK | 0:48d0ba737b93 | 210 | break; |
DimiterK | 0:48d0ba737b93 | 211 | case R2L_D2U:// 0XC |
DimiterK | 0:48d0ba737b93 | 212 | MemoryAccessReg_Data = 0x40 | 0x80; |
DimiterK | 0:48d0ba737b93 | 213 | break; |
DimiterK | 0:48d0ba737b93 | 214 | case U2D_L2R://0X2 |
DimiterK | 0:48d0ba737b93 | 215 | MemoryAccessReg_Data = 0X00 | 0X00 | 0x20; |
DimiterK | 0:48d0ba737b93 | 216 | break; |
DimiterK | 0:48d0ba737b93 | 217 | case U2D_R2L://0X6 |
DimiterK | 0:48d0ba737b93 | 218 | MemoryAccessReg_Data = 0x00 | 0X40 | 0x20; |
DimiterK | 0:48d0ba737b93 | 219 | break; |
DimiterK | 0:48d0ba737b93 | 220 | case D2U_L2R://0XA |
DimiterK | 0:48d0ba737b93 | 221 | MemoryAccessReg_Data = 0x80 | 0x00 | 0x20; |
DimiterK | 0:48d0ba737b93 | 222 | break; |
DimiterK | 0:48d0ba737b93 | 223 | case D2U_R2L://0XE |
DimiterK | 0:48d0ba737b93 | 224 | MemoryAccessReg_Data = 0x40 | 0x80 | 0x20; |
DimiterK | 0:48d0ba737b93 | 225 | break; |
DimiterK | 0:48d0ba737b93 | 226 | } |
DimiterK | 0:48d0ba737b93 | 227 | |
DimiterK | 0:48d0ba737b93 | 228 | //please set (MemoryAccessReg_Data & 0x10) != 1 |
DimiterK | 0:48d0ba737b93 | 229 | if((MemoryAccessReg_Data && 0x20) != 1) { |
DimiterK | 0:48d0ba737b93 | 230 | sLCD_DIS.LCD_X_Adjust = LCD_X; |
DimiterK | 0:48d0ba737b93 | 231 | sLCD_DIS.LCD_Y_Adjust = LCD_Y; |
DimiterK | 0:48d0ba737b93 | 232 | } else { |
DimiterK | 0:48d0ba737b93 | 233 | sLCD_DIS.LCD_X_Adjust = LCD_Y; |
DimiterK | 0:48d0ba737b93 | 234 | sLCD_DIS.LCD_Y_Adjust = LCD_X; |
DimiterK | 0:48d0ba737b93 | 235 | } |
DimiterK | 0:48d0ba737b93 | 236 | |
DimiterK | 0:48d0ba737b93 | 237 | // Set the read / write scan direction of the frame memory |
DimiterK | 0:48d0ba737b93 | 238 | LCD_WriteReg(0x36); //MX, MY, RGB mode |
DimiterK | 0:48d0ba737b93 | 239 | #if defined(LCD_1IN44) |
DimiterK | 0:48d0ba737b93 | 240 | LCD_WriteData_8Bit( MemoryAccessReg_Data | 0x08); //0x08 set RGB |
DimiterK | 0:48d0ba737b93 | 241 | #elif defined(LCD_1IN8) |
DimiterK | 0:48d0ba737b93 | 242 | LCD_WriteData_8Bit( MemoryAccessReg_Data & 0xf7); //RGB color filter panel |
DimiterK | 0:48d0ba737b93 | 243 | #endif |
DimiterK | 0:48d0ba737b93 | 244 | |
DimiterK | 0:48d0ba737b93 | 245 | } |
DimiterK | 0:48d0ba737b93 | 246 | |
DimiterK | 0:48d0ba737b93 | 247 | /*********************************************************************************************************************** |
DimiterK | 0:48d0ba737b93 | 248 | ------------------------------------------------------------------------ |
DimiterK | 0:48d0ba737b93 | 249 | |\\\ ///| |
DimiterK | 0:48d0ba737b93 | 250 | |\\\ App layer ///| |
DimiterK | 0:48d0ba737b93 | 251 | ------------------------------------------------------------------------ |
DimiterK | 0:48d0ba737b93 | 252 | ***********************************************************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 253 | |
DimiterK | 0:48d0ba737b93 | 254 | /******************************************************************************** |
DimiterK | 0:48d0ba737b93 | 255 | function: |
DimiterK | 0:48d0ba737b93 | 256 | initialization |
DimiterK | 0:48d0ba737b93 | 257 | ********************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 258 | void LCD_Init( LCD_SCAN_DIR Lcd_ScanDir ) |
DimiterK | 0:48d0ba737b93 | 259 | { |
DimiterK | 0:48d0ba737b93 | 260 | |
DimiterK | 0:48d0ba737b93 | 261 | //Hardware reset |
DimiterK | 0:48d0ba737b93 | 262 | LCD_Reset(); |
DimiterK | 0:48d0ba737b93 | 263 | |
DimiterK | 0:48d0ba737b93 | 264 | //Set the initialization register |
DimiterK | 0:48d0ba737b93 | 265 | LCD_InitReg(); |
DimiterK | 0:48d0ba737b93 | 266 | |
DimiterK | 0:48d0ba737b93 | 267 | //Set the display scan and color transfer modes |
DimiterK | 0:48d0ba737b93 | 268 | LCD_SetGramScanWay( Lcd_ScanDir ); |
DimiterK | 0:48d0ba737b93 | 269 | wait_ms(200); |
DimiterK | 0:48d0ba737b93 | 270 | |
DimiterK | 0:48d0ba737b93 | 271 | //sleep out |
DimiterK | 0:48d0ba737b93 | 272 | LCD_WriteReg(0x11); |
DimiterK | 0:48d0ba737b93 | 273 | wait_ms(120); |
DimiterK | 0:48d0ba737b93 | 274 | |
DimiterK | 0:48d0ba737b93 | 275 | //Turn on the LCD display |
DimiterK | 0:48d0ba737b93 | 276 | LCD_WriteReg(0x29); |
DimiterK | 0:48d0ba737b93 | 277 | } |
DimiterK | 0:48d0ba737b93 | 278 | |
DimiterK | 0:48d0ba737b93 | 279 | /******************************************************************************** |
DimiterK | 0:48d0ba737b93 | 280 | function: Sets the start position and size of the display area |
DimiterK | 0:48d0ba737b93 | 281 | parameter: |
DimiterK | 0:48d0ba737b93 | 282 | Xstart : X direction Start coordinates |
DimiterK | 0:48d0ba737b93 | 283 | Ystart : Y direction Start coordinates |
DimiterK | 0:48d0ba737b93 | 284 | Xend : X direction end coordinates |
DimiterK | 0:48d0ba737b93 | 285 | Yend : Y direction end coordinates |
DimiterK | 0:48d0ba737b93 | 286 | ********************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 287 | void LCD_SetWindows( POINT Xstart, POINT Ystart, POINT Xend, POINT Yend ) |
DimiterK | 0:48d0ba737b93 | 288 | { |
DimiterK | 0:48d0ba737b93 | 289 | |
DimiterK | 0:48d0ba737b93 | 290 | //set the X coordinates |
DimiterK | 0:48d0ba737b93 | 291 | LCD_WriteReg ( 0x2A ); |
DimiterK | 0:48d0ba737b93 | 292 | LCD_WriteData_8Bit ( 0x00 ); //Set the horizontal starting point to the high octet |
DimiterK | 0:48d0ba737b93 | 293 | LCD_WriteData_8Bit ( (Xstart & 0xff) + sLCD_DIS.LCD_X_Adjust); //Set the horizontal starting point to the low octet |
DimiterK | 0:48d0ba737b93 | 294 | LCD_WriteData_8Bit ( 0x00 ); //Set the horizontal end to the high octet |
DimiterK | 0:48d0ba737b93 | 295 | LCD_WriteData_8Bit ( (( Xend - 1 ) & 0xff) + sLCD_DIS.LCD_X_Adjust); //Set the horizontal end to the low octet |
DimiterK | 0:48d0ba737b93 | 296 | |
DimiterK | 0:48d0ba737b93 | 297 | //set the Y coordinates |
DimiterK | 0:48d0ba737b93 | 298 | LCD_WriteReg ( 0x2B ); |
DimiterK | 0:48d0ba737b93 | 299 | LCD_WriteData_8Bit ( 0x00 ); |
DimiterK | 0:48d0ba737b93 | 300 | LCD_WriteData_8Bit ( (Ystart & 0xff) + sLCD_DIS.LCD_Y_Adjust); |
DimiterK | 0:48d0ba737b93 | 301 | LCD_WriteData_8Bit ( 0x00 ); |
DimiterK | 0:48d0ba737b93 | 302 | LCD_WriteData_8Bit ( ( (Yend - 1) & 0xff )+ sLCD_DIS.LCD_Y_Adjust); |
DimiterK | 0:48d0ba737b93 | 303 | |
DimiterK | 0:48d0ba737b93 | 304 | LCD_WriteReg(0x2C); |
DimiterK | 0:48d0ba737b93 | 305 | |
DimiterK | 0:48d0ba737b93 | 306 | } |
DimiterK | 0:48d0ba737b93 | 307 | |
DimiterK | 0:48d0ba737b93 | 308 | /******************************************************************************** |
DimiterK | 0:48d0ba737b93 | 309 | function: Set the display point (Xpoint, Ypoint) |
DimiterK | 0:48d0ba737b93 | 310 | parameter: |
DimiterK | 0:48d0ba737b93 | 311 | xStart : X direction Start coordinates |
DimiterK | 0:48d0ba737b93 | 312 | xEnd : X direction end coordinates |
DimiterK | 0:48d0ba737b93 | 313 | ********************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 314 | void LCD_SetCursor ( POINT Xpoint, POINT Ypoint ) |
DimiterK | 0:48d0ba737b93 | 315 | { |
DimiterK | 0:48d0ba737b93 | 316 | LCD_SetWindows ( Xpoint, Ypoint, Xpoint , Ypoint ); |
DimiterK | 0:48d0ba737b93 | 317 | } |
DimiterK | 0:48d0ba737b93 | 318 | |
DimiterK | 0:48d0ba737b93 | 319 | /******************************************************************************** |
DimiterK | 0:48d0ba737b93 | 320 | function: Set show color |
DimiterK | 0:48d0ba737b93 | 321 | parameter: |
DimiterK | 0:48d0ba737b93 | 322 | Color : Set show color |
DimiterK | 0:48d0ba737b93 | 323 | ********************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 324 | void LCD_SetColor( COLOR Color ,POINT Xpoint, POINT Ypoint) |
DimiterK | 0:48d0ba737b93 | 325 | { |
DimiterK | 0:48d0ba737b93 | 326 | LCD_WriteData_NLen16Bit(Color ,(uint32_t)Xpoint * (uint32_t)Ypoint); |
DimiterK | 0:48d0ba737b93 | 327 | } |
DimiterK | 0:48d0ba737b93 | 328 | |
DimiterK | 0:48d0ba737b93 | 329 | /******************************************************************************** |
DimiterK | 0:48d0ba737b93 | 330 | function: Point (Xpoint, Ypoint) Fill the color |
DimiterK | 0:48d0ba737b93 | 331 | parameter: |
DimiterK | 0:48d0ba737b93 | 332 | Xpoint : The x coordinate of the point |
DimiterK | 0:48d0ba737b93 | 333 | Ypoint : The y coordinate of the point |
DimiterK | 0:48d0ba737b93 | 334 | Color : Set the color |
DimiterK | 0:48d0ba737b93 | 335 | ********************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 336 | void LCD_SetPointlColor ( POINT Xpoint, POINT Ypoint, COLOR Color ) |
DimiterK | 0:48d0ba737b93 | 337 | { |
DimiterK | 0:48d0ba737b93 | 338 | if ( ( Xpoint <= sLCD_DIS.LCD_Dis_Column ) && ( Ypoint <= sLCD_DIS.LCD_Dis_Page ) ) { |
DimiterK | 0:48d0ba737b93 | 339 | LCD_SetCursor (Xpoint, Ypoint); |
DimiterK | 0:48d0ba737b93 | 340 | LCD_SetColor ( Color , 1 , 1); |
DimiterK | 0:48d0ba737b93 | 341 | } |
DimiterK | 0:48d0ba737b93 | 342 | } |
DimiterK | 0:48d0ba737b93 | 343 | |
DimiterK | 0:48d0ba737b93 | 344 | /******************************************************************************** |
DimiterK | 0:48d0ba737b93 | 345 | function: Fill the area with the color |
DimiterK | 0:48d0ba737b93 | 346 | parameter: |
DimiterK | 0:48d0ba737b93 | 347 | Xstart : Start point x coordinate |
DimiterK | 0:48d0ba737b93 | 348 | Ystart : Start point y coordinate |
DimiterK | 0:48d0ba737b93 | 349 | Xend : End point coordinates |
DimiterK | 0:48d0ba737b93 | 350 | Yend : End point coordinates |
DimiterK | 0:48d0ba737b93 | 351 | Color : Set the color |
DimiterK | 0:48d0ba737b93 | 352 | ********************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 353 | void LCD_SetArealColor (POINT Xstart, POINT Ystart, POINT Xend, POINT Yend, COLOR Color) |
DimiterK | 0:48d0ba737b93 | 354 | { |
DimiterK | 0:48d0ba737b93 | 355 | if((Xend > Xstart) && (Yend > Ystart)) { |
DimiterK | 0:48d0ba737b93 | 356 | LCD_SetWindows( Xstart , Ystart , Xend , Yend ); |
DimiterK | 0:48d0ba737b93 | 357 | LCD_SetColor ( Color ,Xend - Xstart , Yend - Ystart ); |
DimiterK | 0:48d0ba737b93 | 358 | } |
DimiterK | 0:48d0ba737b93 | 359 | } |
DimiterK | 0:48d0ba737b93 | 360 | |
DimiterK | 0:48d0ba737b93 | 361 | /******************************************************************************** |
DimiterK | 0:48d0ba737b93 | 362 | function: |
DimiterK | 0:48d0ba737b93 | 363 | Clear screen |
DimiterK | 0:48d0ba737b93 | 364 | ********************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 365 | void LCD_Clear(COLOR Color) |
DimiterK | 0:48d0ba737b93 | 366 | { |
DimiterK | 0:48d0ba737b93 | 367 | LCD_SetArealColor(0,0, sLCD_DIS.LCD_Dis_Column , sLCD_DIS.LCD_Dis_Page, Color); |
DimiterK | 0:48d0ba737b93 | 368 | } |
DimiterK | 0:48d0ba737b93 | 369 | |
DimiterK | 0:48d0ba737b93 | 370 | /********************************************************************************************/ |
DimiterK | 0:48d0ba737b93 | 371 | |
DimiterK | 0:48d0ba737b93 | 372 | void DC_LOW(void) |
DimiterK | 0:48d0ba737b93 | 373 | { |
DimiterK | 0:48d0ba737b93 | 374 | dc = 0; |
DimiterK | 0:48d0ba737b93 | 375 | } |
DimiterK | 0:48d0ba737b93 | 376 | void DC_HIGH(void) |
DimiterK | 0:48d0ba737b93 | 377 | { |
DimiterK | 0:48d0ba737b93 | 378 | dc= 1; |
DimiterK | 0:48d0ba737b93 | 379 | } |
DimiterK | 0:48d0ba737b93 | 380 | |
DimiterK | 0:48d0ba737b93 | 381 | void RST_LOW(void) |
DimiterK | 0:48d0ba737b93 | 382 | { |
DimiterK | 0:48d0ba737b93 | 383 | rst = 0; |
DimiterK | 0:48d0ba737b93 | 384 | } |
DimiterK | 0:48d0ba737b93 | 385 | void RST_HIGH(void) |
DimiterK | 0:48d0ba737b93 | 386 | { |
DimiterK | 0:48d0ba737b93 | 387 | rst = 1; |
DimiterK | 0:48d0ba737b93 | 388 | } |
DimiterK | 0:48d0ba737b93 | 389 | |
DimiterK | 0:48d0ba737b93 | 390 |