├── Button ├── BUTTON.c └── BUTTON.h ├── CLCD ├── CLCD.c └── CLCD.h ├── CLCD_I2C ├── CLCD_I2C.c └── CLCD_I2C.h ├── DFPLAYER ├── DFPLAYER.c └── DFPLAYER.h ├── DHT ├── DHT.c └── DHT.h ├── DS18B20 ├── DS18B20.c └── DS18B20.h ├── DS3231 ├── DS3231.c └── DS3231.h ├── Delay timer ├── delay_timer.c └── delay_timer.h ├── FLASH ├── FLASH.c └── FLASH.h ├── JOYSTICK ├── JOYSTICK.c └── JOYSTICK.h ├── KEYPAD ├── KEYPAD.c └── KEYPAD.h ├── LCD_OLED_SSD1306 ├── 1.h ├── 2.h ├── 3.h ├── 4.h ├── 5.h ├── 6.h ├── 7.h ├── 8.h ├── 9.h ├── OLED_LCD_SSD1306.c ├── OLED_LCD_SSD1306.h ├── bitmap.h ├── fonts.c ├── fonts.h ├── horse_anim.h ├── logo2.h ├── test.c └── test.h ├── LCD_TFT_ST7735 ├── LOGO.H ├── ST7735_SPI.c ├── ST7735_SPI.h ├── fonts.c └── fonts.h ├── LED7SEG ├── LED7SEG.c └── LED7SEG.h ├── RC522 ├── RC522.c └── RC522.h ├── README.md └── SRF05 ├── SRF05.c └── SRF05.h /Button/BUTTON.c: -------------------------------------------------------------------------------- 1 | /***************************************************************************************************** 2 | @File: Button 3 | @Author: khuenguyen 4 | @website: khuenguyencreator.com 5 | @youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | @huong dan su dung: 7 | - Cau hinh cac chan vao Button la Input_pullup 8 | - Khoi tao Bien luu gia tri Button: 9 | BUTTON_Name Button1; 10 | - Truyen vao chan ten va chan button do 11 | BUTTON_Init(&Button1, Button_GPIO_Port, Button_Pin); 12 | - Doc gia tri Button 13 | Status = Read_Button(&Button1); 14 | *********************** *****************************************************************************/ 15 | #include "BUTTON.h" 16 | 17 | // ************************** Low Level Layer *****************************************************// 18 | static uint8_t BUTTON_ReadPin(BUTTON_Name* Button) 19 | { 20 | return HAL_GPIO_ReadPin(Button->BUTTON_PORT, Button->BUTTON_Pin); 21 | } 22 | static void BUTTON_DelayMs(uint16_t Time) 23 | { 24 | HAL_Delay(Time); 25 | } 26 | 27 | // ************************** High Level Layer *****************************************************// 28 | void BUTTON_Init(BUTTON_Name* Button, GPIO_TypeDef* BUTTON_PORT, uint16_t BUTTON_Pin) 29 | { 30 | Button->BUTTON_PORT = BUTTON_PORT; 31 | Button->BUTTON_Pin = BUTTON_Pin; 32 | } 33 | 34 | BUTTON_STATE BUTTON_Read(BUTTON_Name* Button) 35 | { 36 | Button->State = NO_CLICK; 37 | while(BUTTON_ReadPin(Button) == 0) 38 | { 39 | Button->timePress++; 40 | Button->isPress = 1; 41 | BUTTON_DelayMs(1); 42 | } 43 | if(Button->isPress) 44 | { 45 | while(BUTTON_ReadPin(Button) == 1) 46 | { 47 | Button->timeDouble++; 48 | BUTTON_DelayMs(1); 49 | if(Button->timeDouble > DOUBLE_CLICK_TIME) 50 | { 51 | if(Button->timePress > DEBOUND_TIME && Button->timePress <= SINGLE_CLICK_TIME) 52 | { 53 | Button->isPress = 0; 54 | Button->timePress = 0; 55 | Button->timeDouble = 0; 56 | Button->State = SINGLE_CLICK; 57 | return Button->State; 58 | } 59 | else if(Button->timePress > SINGLE_CLICK_TIME) 60 | { 61 | Button->isPress = 0; 62 | Button->timePress = 0; 63 | Button->timeDouble = 0; 64 | Button->State = LONGCLICK_1S; 65 | return Button->State; 66 | } 67 | } 68 | } 69 | while(BUTTON_ReadPin(Button) == 0) 70 | { 71 | Button->State = DOUBLE_CLICK; 72 | Button->isPress = 0; 73 | Button->timePress = 0; 74 | Button->timeDouble = 0; 75 | return Button->State; 76 | } 77 | } 78 | return NO_CLICK; 79 | } 80 | 81 | 82 | -------------------------------------------------------------------------------- /Button/BUTTON.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************************************** 2 | @File: Button 3 | @Author: khuenguyen 4 | @website: khuenguyencreator.com 5 | @youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | @huong dan su dung: 7 | - Cau hinh cac chan vao Button la Input_pullup 8 | - Khoi tao Bien luu gia tri Button: 9 | BUTTON_Name Button1; 10 | - Truyen vao chan ten va chan button do 11 | BUTTON_Init(&Button1, Button_GPIO_Port, Button_Pin); 12 | - Doc gia tri Button 13 | Status = Read_Button(&Button1); 14 | *********************** *****************************************************************************/ 15 | #ifndef __BUTTON_H 16 | #define __BUTTON_H 17 | 18 | #include "stm32f1xx_hal.h" 19 | 20 | #define DEBOUND_TIME 50 21 | #define SINGLE_CLICK_TIME 1000 22 | #define DOUBLE_CLICK_TIME 300 23 | 24 | typedef enum 25 | { 26 | NO_CLICK = 0x00, 27 | SINGLE_CLICK = 0x01, 28 | DOUBLE_CLICK = 0x02, 29 | LONGCLICK_1S = 0x03 30 | }BUTTON_STATE; 31 | 32 | typedef struct { 33 | GPIO_TypeDef* BUTTON_PORT; 34 | uint16_t BUTTON_Pin; 35 | BUTTON_STATE State; 36 | uint8_t isPress; 37 | uint16_t timePress; 38 | uint16_t timeDouble; 39 | }BUTTON_Name; 40 | 41 | void BUTTON_Init(BUTTON_Name* Button, GPIO_TypeDef* BUTTON_PORT, uint16_t BUTTON_Pin); 42 | BUTTON_STATE BUTTON_Read(BUTTON_Name* Button); 43 | 44 | #endif 45 | 46 | -------------------------------------------------------------------------------- /CLCD/CLCD.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: CLCD 8BIT (Character LCD 8Bit Mode) 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | 7 | Huong dan su dung: 8 | - Su dung thu vien HAL 9 | - Khoi tao bien LCD: CLCD_Name LCD1; 10 | - Khoi tao LCD do: 11 | Che do 8 bit 12 | CLCD_8BIT_Init(&LCD1, 16, 2, CS_GPIO_Port, CS_Pin, EN_GPIO_Port, EN_Pin, 13 | D0_GPIO_Port, D0_Pin, D1_GPIO_Port, D1_Pin, 14 | D2_GPIO_Port, D2_Pin, D3_GPIO_Port, D3_Pin, 15 | D4_GPIO_Port, D4_Pin, D5_GPIO_Port, D5_Pin, 16 | D6_GPIO_Port, D6_Pin, D7_GPIO_Port, D7_Pin); 17 | Che do 4 bit 18 | CLCD_4BIT_Init(&LCD1, 16, 2, CS_GPIO_Port, CS_Pin, EN_GPIO_Port, EN_Pin, 19 | D4_GPIO_Port, D4_Pin, D5_GPIO_Port, D5_Pin, 20 | D6_GPIO_Port, D6_Pin, D7_GPIO_Port, D7_Pin); 21 | - Su dung cac ham truyen dia chi cua LCD do: 22 | CLCD__SetCursor(&LCD1, 0, 0); 23 | CLCD_WriteString(&LCD1,"Hello anh em"); 24 | ******************************************************************************************************************/ 25 | #include "CLCD.h" 26 | 27 | 28 | //************************ Low Level Function *****************************************// 29 | static void CLCD_Delay(uint16_t Time) 30 | { 31 | HAL_Delay(Time); 32 | 33 | } 34 | static void CLCD_Write8(CLCD_Name* LCD, uint8_t Data, uint8_t Mode) 35 | { 36 | if(Mode == CLCD_COMMAND) 37 | { 38 | HAL_GPIO_WritePin(LCD->RS_PORT, LCD->RS_PIN, GPIO_PIN_RESET);// RS = 0, write cmd 39 | } 40 | else if(Mode == CLCD_DATA) 41 | { 42 | HAL_GPIO_WritePin(LCD->RS_PORT, LCD->RS_PIN, GPIO_PIN_SET);// RS = 1, write data 43 | } 44 | HAL_GPIO_WritePin(LCD->D0_PORT, LCD->D0_PIN, Data&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 45 | HAL_GPIO_WritePin(LCD->D1_PORT, LCD->D1_PIN, Data>>1&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 46 | HAL_GPIO_WritePin(LCD->D2_PORT, LCD->D2_PIN, Data>>2&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 47 | HAL_GPIO_WritePin(LCD->D3_PORT, LCD->D3_PIN, Data>>3&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 48 | HAL_GPIO_WritePin(LCD->D4_PORT, LCD->D4_PIN, Data>>4&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 49 | HAL_GPIO_WritePin(LCD->D5_PORT, LCD->D5_PIN, Data>>5&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 50 | HAL_GPIO_WritePin(LCD->D6_PORT, LCD->D6_PIN, Data>>6&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 51 | HAL_GPIO_WritePin(LCD->D7_PORT, LCD->D7_PIN, Data>>7&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 52 | 53 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_RESET); 54 | CLCD_Delay(1); 55 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_SET); 56 | CLCD_Delay(1); 57 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_RESET); 58 | CLCD_Delay(1); 59 | } 60 | static void CLCD_Write4(CLCD_Name* LCD, uint8_t Data, uint8_t Mode) 61 | { 62 | uint8_t Data_H = Data >>4; 63 | uint8_t Data_L = Data; 64 | if(Mode == CLCD_COMMAND) 65 | { 66 | HAL_GPIO_WritePin(LCD->RS_PORT, LCD->RS_PIN, GPIO_PIN_RESET);// RS = 0, write cmd 67 | } 68 | else if(Mode == CLCD_DATA) 69 | { 70 | HAL_GPIO_WritePin(LCD->RS_PORT, LCD->RS_PIN, GPIO_PIN_SET);// RS = 1, write data 71 | } 72 | HAL_GPIO_WritePin(LCD->D4_PORT, LCD->D4_PIN, Data_H&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 73 | HAL_GPIO_WritePin(LCD->D5_PORT, LCD->D5_PIN, Data_H>>1&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 74 | HAL_GPIO_WritePin(LCD->D6_PORT, LCD->D6_PIN, Data_H>>2&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 75 | HAL_GPIO_WritePin(LCD->D7_PORT, LCD->D7_PIN, Data_H>>3&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 76 | 77 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_RESET); 78 | CLCD_Delay(1); 79 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_SET); 80 | CLCD_Delay(1); 81 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_RESET); 82 | CLCD_Delay(1); 83 | 84 | HAL_GPIO_WritePin(LCD->D4_PORT, LCD->D4_PIN, Data_L&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 85 | HAL_GPIO_WritePin(LCD->D5_PORT, LCD->D5_PIN, Data_L>>1&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 86 | HAL_GPIO_WritePin(LCD->D6_PORT, LCD->D6_PIN, Data_L>>2&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 87 | HAL_GPIO_WritePin(LCD->D7_PORT, LCD->D7_PIN, Data_L>>3&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 88 | 89 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_RESET); 90 | CLCD_Delay(1); 91 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_SET); 92 | CLCD_Delay(1); 93 | HAL_GPIO_WritePin(LCD->EN_PORT, LCD->EN_PIN, GPIO_PIN_RESET); 94 | CLCD_Delay(1); 95 | } 96 | //************************ High Level Function *****************************************// 97 | void CLCD_8BIT_Init(CLCD_Name* LCD, uint8_t Colum, uint8_t Row, 98 | GPIO_TypeDef* RS_PORT, uint16_t RS_PIN, GPIO_TypeDef* EN_PORT, uint16_t EN_PIN, 99 | GPIO_TypeDef* D0_PORT, uint16_t D0_PIN, GPIO_TypeDef* D1_PORT, uint16_t D1_PIN, 100 | GPIO_TypeDef* D2_PORT, uint16_t D2_PIN, GPIO_TypeDef* D3_PORT, uint16_t D3_PIN, 101 | GPIO_TypeDef* D4_PORT, uint16_t D4_PIN, GPIO_TypeDef* D5_PORT, uint16_t D5_PIN, 102 | GPIO_TypeDef* D6_PORT, uint16_t D6_PIN, GPIO_TypeDef* D7_PORT, uint16_t D7_PIN) 103 | { 104 | LCD->MODE = LCD_8BITMODE; 105 | LCD->COLUMS = Colum; 106 | LCD->ROWS = Row; 107 | LCD->RS_PORT = RS_PORT; 108 | LCD->RS_PIN = RS_PIN; 109 | LCD->EN_PORT = EN_PORT; 110 | LCD->EN_PIN = EN_PIN; 111 | LCD->D0_PORT = D0_PORT; 112 | LCD->D0_PIN = D0_PIN; 113 | LCD->D1_PORT = D1_PORT; 114 | LCD->D1_PIN = D1_PIN; 115 | LCD->D2_PORT = D2_PORT; 116 | LCD->D2_PIN = D2_PIN; 117 | LCD->D3_PORT = D3_PORT; 118 | LCD->D3_PIN = D3_PIN; 119 | LCD->D4_PORT = D4_PORT; 120 | LCD->D4_PIN = D4_PIN; 121 | LCD->D5_PORT = D5_PORT; 122 | LCD->D5_PIN = D5_PIN; 123 | LCD->D6_PORT = D6_PORT; 124 | LCD->D6_PIN = D6_PIN; 125 | LCD->D7_PORT = D7_PORT; 126 | LCD->D7_PIN = D7_PIN; 127 | CLCD_Delay(50); 128 | LCD->FUNCTIONSET = LCD_FUNCTIONSET|LCD_8BITMODE|LCD_2LINE|LCD_5x8DOTS; 129 | LCD->ENTRYMODE = LCD_ENTRYMODESET|LCD_ENTRYLEFT|LCD_ENTRYSHIFTDECREMENT; 130 | LCD->DISPLAYCTRL = LCD_DISPLAYCONTROL|LCD_DISPLAYON|LCD_CURSOROFF|LCD_BLINKOFF; 131 | LCD->CURSORSHIFT = LCD_CURSORSHIFT|LCD_CURSORMOVE|LCD_MOVERIGHT; 132 | 133 | CLCD_Write8(LCD, LCD->ENTRYMODE,CLCD_COMMAND); 134 | CLCD_Write8(LCD, LCD->DISPLAYCTRL,CLCD_COMMAND); 135 | CLCD_Write8(LCD, LCD->CURSORSHIFT,CLCD_COMMAND); 136 | CLCD_Write8(LCD, LCD->FUNCTIONSET,CLCD_COMMAND); 137 | 138 | CLCD_Write8(LCD, LCD_CLEARDISPLAY,CLCD_COMMAND); 139 | CLCD_Write8(LCD, LCD_RETURNHOME,CLCD_COMMAND); 140 | } 141 | 142 | void CLCD_4BIT_Init(CLCD_Name* LCD, uint8_t Colum, uint8_t Row, 143 | GPIO_TypeDef* RS_PORT, uint16_t RS_PIN, GPIO_TypeDef* EN_PORT, uint16_t EN_PIN, 144 | GPIO_TypeDef* D4_PORT, uint16_t D4_PIN, GPIO_TypeDef* D5_PORT, uint16_t D5_PIN, 145 | GPIO_TypeDef* D6_PORT, uint16_t D6_PIN, GPIO_TypeDef* D7_PORT, uint16_t D7_PIN) 146 | { 147 | LCD->MODE = LCD_4BITMODE; 148 | LCD->COLUMS = Colum; 149 | LCD->ROWS = Row; 150 | LCD->RS_PORT = RS_PORT; 151 | LCD->RS_PIN = RS_PIN; 152 | LCD->EN_PORT = EN_PORT; 153 | LCD->EN_PIN = EN_PIN; 154 | LCD->D4_PORT = D4_PORT; 155 | LCD->D4_PIN = D4_PIN; 156 | LCD->D5_PORT = D5_PORT; 157 | LCD->D5_PIN = D5_PIN; 158 | LCD->D6_PORT = D6_PORT; 159 | LCD->D6_PIN = D6_PIN; 160 | LCD->D7_PORT = D7_PORT; 161 | LCD->D7_PIN = D7_PIN; 162 | LCD->FUNCTIONSET = LCD_FUNCTIONSET|LCD_4BITMODE|LCD_2LINE|LCD_5x8DOTS; 163 | LCD->ENTRYMODE = LCD_ENTRYMODESET|LCD_ENTRYLEFT|LCD_ENTRYSHIFTDECREMENT; 164 | LCD->DISPLAYCTRL = LCD_DISPLAYCONTROL|LCD_DISPLAYON|LCD_CURSOROFF|LCD_BLINKOFF; 165 | LCD->CURSORSHIFT = LCD_CURSORSHIFT|LCD_CURSORMOVE|LCD_MOVERIGHT; 166 | 167 | CLCD_Delay(50); 168 | CLCD_Write4(LCD, 0x33, CLCD_COMMAND); 169 | CLCD_Delay(5); 170 | CLCD_Write4(LCD, 0x33, CLCD_COMMAND); 171 | CLCD_Delay(5); 172 | CLCD_Write4(LCD, 0x32, CLCD_COMMAND); 173 | CLCD_Delay(5); 174 | 175 | CLCD_Write4(LCD, LCD->ENTRYMODE,CLCD_COMMAND); 176 | CLCD_Write4(LCD, LCD->DISPLAYCTRL,CLCD_COMMAND); 177 | CLCD_Write4(LCD, LCD->CURSORSHIFT,CLCD_COMMAND); 178 | CLCD_Write4(LCD, LCD->FUNCTIONSET,CLCD_COMMAND); 179 | 180 | CLCD_Write4(LCD, LCD_CLEARDISPLAY,CLCD_COMMAND); 181 | CLCD_Write4(LCD, LCD_RETURNHOME,CLCD_COMMAND); 182 | } 183 | void CLCD_SetCursor(CLCD_Name* LCD, uint8_t Xpos, uint8_t Ypos) 184 | { 185 | 186 | uint8_t DRAM_ADDRESS = 0x00; 187 | uint8_t DRAM_OFFSET[4] = {0x00, 0x40, 0x14, 0x54}; 188 | if(Xpos >= LCD->COLUMS) 189 | { 190 | Xpos = LCD->COLUMS - 1; 191 | } 192 | if(Ypos >= LCD->ROWS) 193 | { 194 | Ypos = LCD->ROWS -1; 195 | } 196 | DRAM_ADDRESS = DRAM_OFFSET[Ypos] + Xpos; 197 | if(LCD->MODE == LCD_8BITMODE) 198 | { 199 | CLCD_Write8(LCD, LCD_SETDDRAMADDR|DRAM_ADDRESS, CLCD_COMMAND); 200 | } 201 | else if(LCD->MODE == LCD_4BITMODE) 202 | { 203 | CLCD_Write4(LCD, LCD_SETDDRAMADDR|DRAM_ADDRESS, CLCD_COMMAND); 204 | } 205 | } 206 | void CLCD_WriteChar(CLCD_Name* LCD, char character) 207 | { 208 | if(LCD->MODE == LCD_8BITMODE) 209 | { 210 | CLCD_Write8(LCD, character, CLCD_DATA); 211 | } 212 | else if(LCD->MODE == LCD_4BITMODE) 213 | { 214 | CLCD_Write4(LCD, character, CLCD_DATA); 215 | } 216 | } 217 | void CLCD_WriteString(CLCD_Name* LCD, char *String) 218 | { 219 | while(*String)CLCD_WriteChar(LCD, *String++); 220 | } 221 | void CLCD_Clear(CLCD_Name* LCD) 222 | { 223 | if(LCD->MODE == LCD_8BITMODE) 224 | { 225 | CLCD_Write8(LCD, LCD_CLEARDISPLAY, CLCD_COMMAND); 226 | } 227 | else if(LCD->MODE == LCD_4BITMODE) 228 | { 229 | CLCD_Write4(LCD, LCD_CLEARDISPLAY, CLCD_COMMAND); 230 | } 231 | CLCD_Delay(5); 232 | } 233 | void CLCD_ReturnHome(CLCD_Name* LCD) 234 | { 235 | if(LCD->MODE == LCD_8BITMODE) 236 | { 237 | CLCD_Write8(LCD, LCD_RETURNHOME, CLCD_COMMAND); 238 | } 239 | else if(LCD->MODE == LCD_4BITMODE) 240 | { 241 | CLCD_Write4(LCD, LCD_RETURNHOME, CLCD_COMMAND); 242 | } 243 | CLCD_Delay(5); 244 | } 245 | void CLCD_CursorOn(CLCD_Name* LCD) 246 | { 247 | LCD->DISPLAYCTRL |= LCD_CURSORON; 248 | if(LCD->MODE == LCD_8BITMODE) 249 | { 250 | CLCD_Write8(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 251 | } 252 | else if(LCD->MODE == LCD_4BITMODE) 253 | { 254 | CLCD_Write4(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 255 | } 256 | } 257 | void CLCD_CursorOff(CLCD_Name* LCD) 258 | { 259 | LCD->DISPLAYCTRL &= ~LCD_CURSORON; 260 | if(LCD->MODE == LCD_8BITMODE) 261 | { 262 | CLCD_Write8(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 263 | } 264 | else if(LCD->MODE == LCD_4BITMODE) 265 | { 266 | CLCD_Write4(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 267 | } 268 | } 269 | void CLCD_BlinkOn(CLCD_Name* LCD) 270 | { 271 | LCD->DISPLAYCTRL |= LCD_BLINKON; 272 | if(LCD->MODE == LCD_8BITMODE) 273 | { 274 | CLCD_Write8(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 275 | } 276 | else if(LCD->MODE == LCD_4BITMODE) 277 | { 278 | CLCD_Write4(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 279 | } 280 | } 281 | void CLCD_BlinkOff(CLCD_Name* LCD) 282 | { 283 | LCD->DISPLAYCTRL &= ~LCD_BLINKON; 284 | if(LCD->MODE == LCD_8BITMODE) 285 | { 286 | CLCD_Write8(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 287 | } 288 | else if(LCD->MODE == LCD_4BITMODE) 289 | { 290 | CLCD_Write4(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 291 | } 292 | 293 | } 294 | -------------------------------------------------------------------------------- /CLCD/CLCD.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: CLCD 8BIT (Character LCD 8Bit Mode) 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao bien LCD: CLCD_8BIT_Name LCD1; 9 | - Khoi tao LCD do: 10 | CLCD_8BIT_Init(&LCD1, 16, 2, CS_GPIO_Port, CS_Pin, EN_GPIO_Port, EN_Pin, 11 | D0_GPIO_Port, D0_Pin, D1_GPIO_Port, D1_Pin, 12 | D2_GPIO_Port, D2_Pin, D3_GPIO_Port, D3_Pin, 13 | D4_GPIO_Port, D4_Pin, D5_GPIO_Port, D5_Pin, 14 | D6_GPIO_Port, D6_Pin, D7_GPIO_Port, D7_Pin); 15 | - Su dung cac ham truyen dia chi cua LCD do: 16 | CLCD_8BIT_SetCursor(&LCD1, 0, 0); 17 | CLCD_8BIT_WriteString(&LCD1,"Hello anh em"); 18 | ******************************************************************************************************************/ 19 | #ifndef __CLCD_H 20 | #define __CLCD_H 21 | 22 | #include "stm32f1xx_hal.h" // Chuyen doi chip dang su dung 23 | 24 | // constant 25 | #define CLCD_COMMAND 0x00 26 | #define CLCD_DATA 0x01 27 | 28 | // commands 29 | #define LCD_CLEARDISPLAY 0x01 30 | #define LCD_RETURNHOME 0x02 31 | 32 | #define LCD_ENTRYMODESET 0x04 33 | #define LCD_DISPLAYCONTROL 0x08 34 | #define LCD_CURSORSHIFT 0x10 35 | #define LCD_FUNCTIONSET 0x20 36 | #define LCD_SETCGRAMADDR 0x40 37 | #define LCD_SETDDRAMADDR 0x80 38 | 39 | // flags for display entry mode 40 | #define LCD_ENTRYRIGHT 0x00 41 | #define LCD_ENTRYLEFT 0x02 42 | #define LCD_ENTRYSHIFTINCREMENT 0x01 43 | #define LCD_ENTRYSHIFTDECREMENT 0x00 44 | 45 | // flags for display on/off control 46 | #define LCD_DISPLAYON 0x04 47 | #define LCD_DISPLAYOFF 0x00 48 | #define LCD_CURSORON 0x02 49 | #define LCD_CURSOROFF 0x00 50 | #define LCD_BLINKON 0x01 51 | #define LCD_BLINKOFF 0x00 52 | 53 | // flags for display/cursor shift 54 | #define LCD_DISPLAYMOVE 0x08 55 | #define LCD_CURSORMOVE 0x00 56 | #define LCD_MOVERIGHT 0x04 57 | #define LCD_MOVELEFT 0x00 58 | 59 | // flags for function set 60 | #define LCD_8BITMODE 0x10 61 | #define LCD_4BITMODE 0x00 62 | #define LCD_2LINE 0x08 63 | #define LCD_1LINE 0x00 64 | #define LCD_5x10DOTS 0x04 65 | #define LCD_5x8DOTS 0x00 66 | typedef struct 67 | { 68 | uint8_t MODE; 69 | uint8_t COLUMS; 70 | uint8_t ROWS; 71 | GPIO_TypeDef* RS_PORT; 72 | uint16_t RS_PIN; 73 | GPIO_TypeDef* EN_PORT; 74 | uint16_t EN_PIN; 75 | GPIO_TypeDef* D0_PORT; 76 | uint16_t D0_PIN; 77 | GPIO_TypeDef* D1_PORT; 78 | uint16_t D1_PIN; 79 | GPIO_TypeDef* D2_PORT; 80 | uint16_t D2_PIN; 81 | GPIO_TypeDef* D3_PORT; 82 | uint16_t D3_PIN; 83 | GPIO_TypeDef* D4_PORT; 84 | uint16_t D4_PIN; 85 | GPIO_TypeDef* D5_PORT; 86 | uint16_t D5_PIN; 87 | GPIO_TypeDef* D6_PORT; 88 | uint16_t D6_PIN; 89 | GPIO_TypeDef* D7_PORT; 90 | uint16_t D7_PIN; 91 | uint8_t ENTRYMODE; 92 | uint8_t DISPLAYCTRL; 93 | uint8_t CURSORSHIFT; 94 | uint8_t FUNCTIONSET; 95 | }CLCD_Name; 96 | 97 | 98 | void CLCD_8BIT_Init(CLCD_Name* LCD, uint8_t Colum, uint8_t Row, 99 | GPIO_TypeDef* RS_PORT, uint16_t RS_PIN, GPIO_TypeDef* EN_PORT, uint16_t EN_PIN, 100 | GPIO_TypeDef* D0_PORT, uint16_t D0_PIN, GPIO_TypeDef* D1_PORT, uint16_t D1_PIN, 101 | GPIO_TypeDef* D2_PORT, uint16_t D2_PIN, GPIO_TypeDef* D3_PORT, uint16_t D3_PIN, 102 | GPIO_TypeDef* D4_PORT, uint16_t D4_PIN, GPIO_TypeDef* D5_PORT, uint16_t D5_PIN, 103 | GPIO_TypeDef* D6_PORT, uint16_t D6_PIN, GPIO_TypeDef* D7_PORT, uint16_t D7_PIN); 104 | void CLCD_4BIT_Init(CLCD_Name* LCD, uint8_t Colum, uint8_t Row, 105 | GPIO_TypeDef* RS_PORT, uint16_t RS_PIN, GPIO_TypeDef* EN_PORT, uint16_t EN_PIN, 106 | GPIO_TypeDef* D4_PORT, uint16_t D4_PIN, GPIO_TypeDef* D5_PORT, uint16_t D5_PIN, 107 | GPIO_TypeDef* D6_PORT, uint16_t D6_PIN, GPIO_TypeDef* D7_PORT, uint16_t D7_PIN); 108 | void CLCD_SetCursor(CLCD_Name* LCD, uint8_t Xpos, uint8_t YPos); 109 | void CLCD_WriteChar(CLCD_Name* LCD, char character); 110 | void CLCD_WriteString(CLCD_Name* LCD, char *String); 111 | void CLCD_Clear(CLCD_Name* LCD); 112 | void CLCD_ReturnHome(CLCD_Name* LCD); 113 | void CLCD_CursorOn(CLCD_Name* LCD); 114 | void CLCD_CursorOff(CLCD_Name* LCD); 115 | void CLCD_BlinkOn(CLCD_Name* LCD); 116 | void CLCD_BlinkOff(CLCD_Name* LCD); 117 | #endif 118 | -------------------------------------------------------------------------------- /CLCD_I2C/CLCD_I2C.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: CLCD I2C Chip PCF8574 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao bien LCD: CLCD_I2C_Name LCD1; 9 | - Khoi tao LCD do: CLCD_I2C_Init(&LCD1,&hi2c1,0x4e,20,4); 10 | - Su dung cac ham phai truyen dia chi cua LCD do: 11 | CLCD_I2C_SetCursor(&LCD1, 0, 1); 12 | CLCD_I2C_WriteString(&LCD1,"hello anh em "); 13 | ******************************************************************************************************************/ 14 | #include "CLCD_I2C.h" 15 | 16 | //************************** Low Level Function ****************************************************************// 17 | static void CLCD_Delay(uint16_t Time) 18 | { 19 | HAL_Delay(Time); 20 | } 21 | static void CLCD_WriteI2C(CLCD_I2C_Name* LCD, uint8_t Data, uint8_t Mode) 22 | { 23 | char Data_H; 24 | char Data_L; 25 | uint8_t Data_I2C[4]; 26 | Data_H = Data&0xF0; 27 | Data_L = (Data<<4)&0xF0; 28 | if(LCD->BACKLIGHT) 29 | { 30 | Data_H |= LCD_BACKLIGHT; 31 | Data_L |= LCD_BACKLIGHT; 32 | } 33 | if(Mode == CLCD_DATA) 34 | { 35 | Data_H |= LCD_RS; 36 | Data_L |= LCD_RS; 37 | } 38 | else if(Mode == CLCD_COMMAND) 39 | { 40 | Data_H &= ~LCD_RS; 41 | Data_L &= ~LCD_RS; 42 | } 43 | Data_I2C[0] = Data_H|LCD_EN; 44 | CLCD_Delay(1); 45 | Data_I2C[1] = Data_H; 46 | Data_I2C[2] = Data_L|LCD_EN; 47 | CLCD_Delay(1); 48 | Data_I2C[3] = Data_L; 49 | HAL_I2C_Master_Transmit(LCD->I2C, LCD->ADDRESS, (uint8_t *)Data_I2C, sizeof(Data_I2C), 1000); 50 | } 51 | 52 | 53 | //************************** High Level Function ****************************************************************// 54 | void CLCD_I2C_Init(CLCD_I2C_Name* LCD, I2C_HandleTypeDef* hi2c_CLCD, uint8_t Address, uint8_t Colums, uint8_t Rows) 55 | { 56 | LCD->I2C = hi2c_CLCD; 57 | LCD->ADDRESS = Address; 58 | LCD->COLUMS = Colums; 59 | LCD->ROWS = Rows; 60 | 61 | LCD->FUNCTIONSET = LCD_FUNCTIONSET|LCD_4BITMODE|LCD_2LINE|LCD_5x8DOTS; 62 | LCD->ENTRYMODE = LCD_ENTRYMODESET|LCD_ENTRYLEFT|LCD_ENTRYSHIFTDECREMENT; 63 | LCD->DISPLAYCTRL = LCD_DISPLAYCONTROL|LCD_DISPLAYON|LCD_CURSOROFF|LCD_BLINKOFF; 64 | LCD->CURSORSHIFT = LCD_CURSORSHIFT|LCD_CURSORMOVE|LCD_MOVERIGHT; 65 | LCD->BACKLIGHT = LCD_BACKLIGHT; 66 | 67 | CLCD_Delay(50); 68 | CLCD_WriteI2C(LCD, 0x33, CLCD_COMMAND); 69 | // CLCD_Delay(5); 70 | CLCD_WriteI2C(LCD, 0x33, CLCD_COMMAND); 71 | CLCD_Delay(5); 72 | CLCD_WriteI2C(LCD, 0x32, CLCD_COMMAND); 73 | CLCD_Delay(5); 74 | CLCD_WriteI2C(LCD, 0x20, CLCD_COMMAND); 75 | CLCD_Delay(5); 76 | 77 | CLCD_WriteI2C(LCD, LCD->ENTRYMODE,CLCD_COMMAND); 78 | CLCD_WriteI2C(LCD, LCD->DISPLAYCTRL,CLCD_COMMAND); 79 | CLCD_WriteI2C(LCD, LCD->CURSORSHIFT,CLCD_COMMAND); 80 | CLCD_WriteI2C(LCD, LCD->FUNCTIONSET,CLCD_COMMAND); 81 | 82 | CLCD_WriteI2C(LCD, LCD_CLEARDISPLAY,CLCD_COMMAND); 83 | CLCD_WriteI2C(LCD, LCD_RETURNHOME,CLCD_COMMAND); 84 | } 85 | void CLCD_I2C_SetCursor(CLCD_I2C_Name* LCD, uint8_t Xpos, uint8_t Ypos) 86 | { 87 | uint8_t DRAM_ADDRESS = 0x00; 88 | if(Xpos >= LCD->COLUMS) 89 | { 90 | Xpos = LCD->COLUMS - 1; 91 | } 92 | if(Ypos >= LCD->ROWS) 93 | { 94 | Ypos = LCD->ROWS -1; 95 | } 96 | if(Ypos == 0) 97 | { 98 | DRAM_ADDRESS = 0x00 + Xpos; 99 | } 100 | else if(Ypos == 1) 101 | { 102 | DRAM_ADDRESS = 0x40 + Xpos; 103 | } 104 | else if(Ypos == 2) 105 | { 106 | DRAM_ADDRESS = 0x14 + Xpos; 107 | } 108 | else if(Ypos == 3) 109 | { 110 | DRAM_ADDRESS = 0x54 + Xpos; 111 | } 112 | CLCD_WriteI2C(LCD, LCD_SETDDRAMADDR|DRAM_ADDRESS, CLCD_COMMAND); 113 | } 114 | void CLCD_I2C_WriteChar(CLCD_I2C_Name* LCD, char character) 115 | { 116 | CLCD_WriteI2C(LCD, character, CLCD_DATA); 117 | } 118 | void CLCD_I2C_WriteString(CLCD_I2C_Name* LCD, char *String) 119 | { 120 | while(*String)CLCD_I2C_WriteChar(LCD, *String++); 121 | } 122 | void CLCD_I2C_Clear(CLCD_I2C_Name* LCD) 123 | { 124 | CLCD_WriteI2C(LCD, LCD_CLEARDISPLAY, CLCD_COMMAND); 125 | CLCD_Delay(5); 126 | } 127 | void CLCD_I2C_ReturnHome(CLCD_I2C_Name* LCD) 128 | { 129 | CLCD_WriteI2C(LCD, LCD_RETURNHOME, CLCD_COMMAND); 130 | CLCD_Delay(5); 131 | } 132 | void CLCD_I2C_CursorOn(CLCD_I2C_Name* LCD) 133 | { 134 | LCD->DISPLAYCTRL |= LCD_CURSORON; 135 | CLCD_WriteI2C(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 136 | } 137 | void CLCD_I2C_CursorOff(CLCD_I2C_Name* LCD) 138 | { 139 | LCD->DISPLAYCTRL &= ~LCD_CURSORON; 140 | CLCD_WriteI2C(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 141 | } 142 | void CLCD_I2C_BlinkOn(CLCD_I2C_Name* LCD) 143 | { 144 | LCD->DISPLAYCTRL |= LCD_BLINKON; 145 | CLCD_WriteI2C(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 146 | } 147 | void CLCD_I2C_BlinkOff(CLCD_I2C_Name* LCD) 148 | { 149 | LCD->DISPLAYCTRL &= ~LCD_BLINKON; 150 | CLCD_WriteI2C(LCD, LCD->DISPLAYCTRL, CLCD_COMMAND); 151 | } 152 | -------------------------------------------------------------------------------- /CLCD_I2C/CLCD_I2C.h: -------------------------------------------------------------------------------- 1 | #ifndef __CLCD_I2C_H 2 | #define __CLCD_I2C_H 3 | 4 | #include "stm32f1xx_hal.h" 5 | 6 | #define CLCD_COMMAND 0x00 7 | #define CLCD_DATA 0x01 8 | 9 | #define LCD_EN 0x04 // Enable bit 10 | #define LCD_RW 0x02 // Read/Write bit 11 | #define LCD_RS 0x01 // Register select bit 12 | 13 | #define CLCD_COMMAND 0x00 14 | #define CLCD_DATA 0x01 15 | 16 | // commands 17 | #define LCD_CLEARDISPLAY 0x01 18 | #define LCD_RETURNHOME 0x02 19 | 20 | #define LCD_ENTRYMODESET 0x04 21 | #define LCD_DISPLAYCONTROL 0x08 22 | #define LCD_CURSORSHIFT 0x10 23 | #define LCD_FUNCTIONSET 0x20 24 | #define LCD_SETCGRAMADDR 0x40 25 | #define LCD_SETDDRAMADDR 0x80 26 | 27 | // flags for display entry mode 28 | #define LCD_ENTRYRIGHT 0x00 29 | #define LCD_ENTRYLEFT 0x02 30 | #define LCD_ENTRYSHIFTINCREMENT 0x01 31 | #define LCD_ENTRYSHIFTDECREMENT 0x00 32 | 33 | // flags for display on/off control 34 | #define LCD_DISPLAYON 0x04 35 | #define LCD_DISPLAYOFF 0x00 36 | #define LCD_CURSORON 0x02 37 | #define LCD_CURSOROFF 0x00 38 | #define LCD_BLINKON 0x01 39 | #define LCD_BLINKOFF 0x00 40 | 41 | // flags for display/cursor shift 42 | #define LCD_DISPLAYMOVE 0x08 43 | #define LCD_CURSORMOVE 0x00 44 | #define LCD_MOVERIGHT 0x04 45 | #define LCD_MOVELEFT 0x00 46 | 47 | // flags for function set 48 | #define LCD_8BITMODE 0x10 49 | #define LCD_4BITMODE 0x00 50 | #define LCD_2LINE 0x08 51 | #define LCD_1LINE 0x00 52 | #define LCD_5x10DOTS 0x04 53 | #define LCD_5x8DOTS 0x00 54 | 55 | #define LCD_BACKLIGHT 0x08 56 | #define LCD_NOBACKLIGHT 0x00 57 | typedef struct 58 | { 59 | I2C_HandleTypeDef* I2C; 60 | uint8_t ADDRESS; 61 | uint8_t COLUMS; 62 | uint8_t ROWS; 63 | uint8_t ENTRYMODE; 64 | uint8_t DISPLAYCTRL; 65 | uint8_t CURSORSHIFT; 66 | uint8_t FUNCTIONSET; 67 | uint8_t BACKLIGHT; 68 | }CLCD_I2C_Name; 69 | void CLCD_I2C_Init(CLCD_I2C_Name* LCD, I2C_HandleTypeDef* hi2c_CLCD, uint8_t Address, uint8_t Colums, uint8_t Rows); 70 | void CLCD_I2C_SetCursor(CLCD_I2C_Name* LCD, uint8_t Xpos, uint8_t YPos); 71 | void CLCD_I2C_WriteChar(CLCD_I2C_Name* LCD, char character); 72 | void CLCD_I2C_WriteString(CLCD_I2C_Name* LCD, char *String); 73 | void CLCD_I2C_Clear(CLCD_I2C_Name* LCD); 74 | void CLCD_I2C_ReturnHome(CLCD_I2C_Name* LCD); 75 | void CLCD_I2C_CursorOn(CLCD_I2C_Name* LCD); 76 | void CLCD_I2C_CursorOff(CLCD_I2C_Name* LCD); 77 | void CLCD_I2C_BlinkOn(CLCD_I2C_Name* LCD); 78 | void CLCD_I2C_BlinkOff(CLCD_I2C_Name* LCD); 79 | void I2C_LCD_setCursor(uint8_t col, uint8_t row); 80 | void I2C_LCD_SendString(char *str); 81 | #endif 82 | -------------------------------------------------------------------------------- /DFPLAYER/DFPLAYER.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: DFPlayer Mini Module 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao UART Baud 9600 9 | - Khoi tao bien DFPlayer : DFPLAYER_Name MP3; 10 | - Khoi tao DFPlayer do: 11 | DFPLAYER_Init(&MP3, &huart1); 12 | - Su dung cac ham phai truyen dia chi cua DFPlayer do: 13 | DFPLAYER_Play(&MP3); 14 | ******************************************************************************************************************/ 15 | #include "DFPLAYER.h" 16 | uint8_t SendFrame[10] = {0x7E, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF}; 17 | 18 | //******************************** LOW Level Functions ****************************// 19 | static void DFPLAYER_SendUART(DFPLAYER_Name* MP3) 20 | { 21 | HAL_UART_Transmit(MP3->DFP_UART, (uint8_t *)&MP3->SendBuff, sizeof(MP3->SendBuff), 1000); 22 | } 23 | static void DFPLAYER_Delay(uint16_t Time) 24 | { 25 | HAL_Delay(Time); 26 | } 27 | 28 | static uint16_t DFPLAYER_GetChecksum (uint8_t *thebuf) 29 | { 30 | uint16_t sum = 0; 31 | for (int i=1; i<7; i++) 32 | { 33 | sum += thebuf[i]; 34 | } 35 | return -sum; 36 | } 37 | 38 | static void DFPLAYER_FillBigend (uint8_t *thebuf, uint16_t data) { 39 | *thebuf = (uint8_t)(data>>8); 40 | *(thebuf+1) = (uint8_t)data; 41 | } 42 | 43 | static void DFPLAYER_FillChecksum (DFPLAYER_Name* MP3){ 44 | uint16_t checksum = DFPLAYER_GetChecksum (MP3->SendBuff); 45 | DFPLAYER_FillBigend (MP3->SendBuff+7, checksum); 46 | } 47 | 48 | static void DFPLAYER_SendCmd(DFPLAYER_Name* MP3, uint8_t cmd, uint16_t high_arg, uint16_t low_arg) 49 | { 50 | DFPLAYER_Delay(100); 51 | MP3->SendBuff[3] = cmd; 52 | MP3->SendBuff[5] = high_arg; 53 | MP3->SendBuff[6] = low_arg; 54 | DFPLAYER_FillChecksum(MP3); 55 | DFPLAYER_SendUART(MP3); 56 | } 57 | 58 | //******************************** High Level Functions ****************************// 59 | void DFPLAYER_Init(DFPLAYER_Name* MP3, UART_HandleTypeDef* UART) 60 | { 61 | for(int i = 0; i<10; i++) 62 | { 63 | MP3->SendBuff[i] = SendFrame[i]; 64 | } 65 | MP3->DFP_UART = UART; 66 | } 67 | 68 | void DFPLAYER_PlayTrack(DFPLAYER_Name* MP3, uint16_t num) 69 | { 70 | uint8_t num1 = num>>8; 71 | uint8_t num2 = num; 72 | DFPLAYER_SendCmd(MP3, DFP_PLAYTRACK, num1, num2); 73 | } 74 | 75 | void DFPLAYER_Next(DFPLAYER_Name* MP3) 76 | { 77 | DFPLAYER_SendCmd(MP3, DFP_NEXT,00,00); 78 | } 79 | 80 | void DFPLAYER_Prev(DFPLAYER_Name* MP3) 81 | { 82 | DFPLAYER_SendCmd(MP3, DFP_PREV,00,00); 83 | } 84 | 85 | void DFPLAYER_SetVolume(DFPLAYER_Name* MP3, uint16_t volume) 86 | { 87 | uint8_t volume1 = volume>>8; 88 | uint8_t volume2 = volume; 89 | DFPLAYER_SendCmd(MP3, DFP_SETVOLUME, volume1, volume2); 90 | } 91 | 92 | void DFPLAYER_Play(DFPLAYER_Name* MP3) 93 | { 94 | DFPLAYER_SendCmd(MP3, DFP_PLAY, 00, 00); 95 | } 96 | 97 | void DFPLAYER_Pause(DFPLAYER_Name* MP3) 98 | { 99 | DFPLAYER_SendCmd(MP3, DFP_PAUSE, 00, 00); 100 | } 101 | 102 | void DFPLAYER_Stop(DFPLAYER_Name* MP3) 103 | { 104 | DFPLAYER_SendCmd (MP3, DFP_STOP, 00, 00); 105 | } 106 | 107 | void DFPLAYER_RandomPlay(DFPLAYER_Name* MP3) 108 | { 109 | DFPLAYER_SendCmd (MP3, DFP_RANDOM,0,0); 110 | } 111 | 112 | void DFPLAYER_PlayFileInFolder(DFPLAYER_Name* MP3, uint8_t folder, uint32_t num) 113 | { 114 | DFPLAYER_SendCmd (MP3, DFP_PLAYFILEINFOLDER, folder, num); 115 | } 116 | -------------------------------------------------------------------------------- /DFPLAYER/DFPLAYER.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: DFPlayer Mini Module 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao UART Baud 9600 9 | - Khoi tao bien DFPlayer : DFPLAYER_Name MP3; 10 | - Khoi tao DFPlayer do: 11 | DFPLAYER_Init(&MP3, &huart1); 12 | - Su dung cac ham phai truyen dia chi cua DFPlayer do: 13 | DFPLAYER_Play(&MP3); 14 | ******************************************************************************************************************/ 15 | #ifndef __DFPLAYER_H 16 | #define __DFPLAYER_H 17 | #include "stm32f1xx_hal.h" 18 | 19 | typedef struct 20 | { 21 | UART_HandleTypeDef* DFP_UART; 22 | uint8_t SendBuff[10]; 23 | uint16_t Checksum; 24 | }DFPLAYER_Name; 25 | 26 | #define DFP_PLAYTRACK 0X12 27 | #define DFP_NEXT 0X01 28 | #define DFP_PREV 0X02 29 | #define DFP_SETVOLUME 0X06 30 | #define DFP_PLAY 0X0D 31 | #define DFP_PAUSE 0X0E 32 | #define DFP_STOP 0X16 33 | #define DFP_RANDOM 0X18 34 | #define DFP_PLAYFILEINFOLDER 0X0F 35 | 36 | void DFPLAYER_Init(DFPLAYER_Name* MP3, UART_HandleTypeDef* UART); 37 | void DFPLAYER_PlayTrack(DFPLAYER_Name* MP3, uint16_t num); 38 | void DFPLAYER_Next(DFPLAYER_Name* MP3); 39 | void DFPLAYER_Prev(DFPLAYER_Name* MP3); 40 | void DFPLAYER_SetVolume(DFPLAYER_Name* MP3, uint16_t volume); 41 | void DFPLAYER_Play(DFPLAYER_Name* MP3); 42 | void DFPLAYER_Pause(DFPLAYER_Name* MP3); 43 | void DFPLAYER_Stop(DFPLAYER_Name* MP3); 44 | void DFPLAYER_RandomPlay(DFPLAYER_Name* MP3); 45 | void DFPLAYER_PlayFileInFolder(DFPLAYER_Name* MP3, uint8_t folder, uint32_t num); 46 | #endif 47 | -------------------------------------------------------------------------------- /DHT/DHT.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: DHT Sensor 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao bien DHT : DHT_Name DHT1; 9 | - Khoi tao chan DHT: 10 | DHT_Init(&DHT1, DHT11, &htim4, DHT_GPIO_Port, DHT_Pin); 11 | - Su dung cac ham phai truyen dia chi cua DHT do: 12 | DHT_ReadTempHum(&DHT1); 13 | ******************************************************************************************************************/ 14 | #include "DHT.h" 15 | //************************** Low Level Layer ********************************************************// 16 | #include "delay_timer.h" 17 | 18 | static void DHT_DelayInit(DHT_Name* DHT) 19 | { 20 | DELAY_TIM_Init(DHT->Timer); 21 | } 22 | static void DHT_DelayUs(DHT_Name* DHT, uint16_t Time) 23 | { 24 | DELAY_TIM_Us(DHT->Timer, Time); 25 | } 26 | 27 | static void DHT_SetPinOut(DHT_Name* DHT) 28 | { 29 | GPIO_InitTypeDef GPIO_InitStruct = {0}; 30 | GPIO_InitStruct.Pin = DHT->Pin; 31 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 32 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 33 | HAL_GPIO_Init(DHT->PORT, &GPIO_InitStruct); 34 | } 35 | static void DHT_SetPinIn(DHT_Name* DHT) 36 | { 37 | GPIO_InitTypeDef GPIO_InitStruct = {0}; 38 | GPIO_InitStruct.Pin = DHT->Pin; 39 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 40 | GPIO_InitStruct.Pull = GPIO_PULLUP; 41 | HAL_GPIO_Init(DHT->PORT, &GPIO_InitStruct); 42 | } 43 | static void DHT_WritePin(DHT_Name* DHT, uint8_t Value) 44 | { 45 | HAL_GPIO_WritePin(DHT->PORT, DHT->Pin, Value); 46 | } 47 | static uint8_t DHT_ReadPin(DHT_Name* DHT) 48 | { 49 | uint8_t Value; 50 | Value = HAL_GPIO_ReadPin(DHT->PORT, DHT->Pin); 51 | return Value; 52 | } 53 | //********************************* Middle level Layer ****************************************************// 54 | static uint8_t DHT_Start(DHT_Name* DHT) 55 | { 56 | uint8_t Response = 0; 57 | DHT_SetPinOut(DHT); 58 | DHT_WritePin(DHT, 0); 59 | DHT_DelayUs(DHT, DHT->Type); 60 | DHT_SetPinIn(DHT); 61 | DHT_DelayUs(DHT, 40); 62 | if (!DHT_ReadPin(DHT)) 63 | { 64 | DHT_DelayUs(DHT, 40); 65 | if(DHT_ReadPin(DHT)) 66 | { 67 | Response = 1; 68 | } 69 | else Response = 0; 70 | } 71 | while(DHT_ReadPin(DHT)); 72 | 73 | return Response; 74 | } 75 | static uint8_t DHT_Read(DHT_Name* DHT) 76 | { 77 | uint8_t Value = 0; 78 | DHT_SetPinIn(DHT); 79 | for(int i = 0; i<8; i++) 80 | { 81 | while(!DHT_ReadPin(DHT)); 82 | DHT_DelayUs(DHT, 40); 83 | if(!DHT_ReadPin(DHT)) 84 | { 85 | Value &= ~(1<<(7-i)); 86 | } 87 | else Value |= 1<<(7-i); 88 | while(DHT_ReadPin(DHT)); 89 | } 90 | return Value; 91 | } 92 | 93 | //************************** High Level Layer ********************************************************// 94 | void DHT_Init(DHT_Name* DHT, uint8_t DHT_Type, TIM_HandleTypeDef* Timer, GPIO_TypeDef* DH_PORT, uint16_t DH_Pin) 95 | { 96 | if(DHT_Type == DHT11) 97 | { 98 | DHT->Type = DHT11_STARTTIME; 99 | } 100 | else if(DHT_Type == DHT22) 101 | { 102 | DHT->Type = DHT22_STARTTIME; 103 | } 104 | DHT->PORT = DH_PORT; 105 | DHT->Pin = DH_Pin; 106 | DHT->Timer = Timer; 107 | DHT_DelayInit(DHT); 108 | } 109 | 110 | uint8_t DHT_ReadTempHum(DHT_Name* DHT) 111 | { 112 | uint8_t Temp1, Temp2, RH1, RH2; 113 | uint16_t Temp, Humi, SUM = 0; 114 | DHT_Start(DHT); 115 | RH1 = DHT_Read(DHT); 116 | RH2 = DHT_Read(DHT); 117 | Temp1 = DHT_Read(DHT); 118 | Temp2 = DHT_Read(DHT); 119 | SUM = DHT_Read(DHT); 120 | Temp = (Temp1<<8)|Temp2; 121 | Humi = (RH1<<8)|RH2; 122 | DHT->Temp = (float)(Temp/10.0); 123 | DHT->Humi = (float)(Humi/10.0); 124 | return SUM; 125 | } 126 | -------------------------------------------------------------------------------- /DHT/DHT.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __DHT_H 3 | #define __DHT_H 4 | 5 | #include "stm32f1xx_hal.h" 6 | #define DHT11_STARTTIME 18000 7 | #define DHT22_STARTTIME 12000 8 | #define DHT11 0x01 9 | #define DHT22 0x02 10 | typedef struct 11 | { 12 | uint16_t Type; 13 | TIM_HandleTypeDef* Timer; 14 | uint16_t Pin; 15 | GPIO_TypeDef* PORT; 16 | float Temp; 17 | float Humi; 18 | }DHT_Name; 19 | 20 | void DHT_Init(DHT_Name* DHT, uint8_t DHT_Type, TIM_HandleTypeDef* Timer, GPIO_TypeDef* DH_PORT, uint16_t DH_Pin); 21 | uint8_t DHT_ReadTempHum(DHT_Name* DHT); 22 | #endif 23 | 24 | -------------------------------------------------------------------------------- /DS18B20/DS18B20.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: DS18B20 Sensor 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao bien DS18B20 : DS18B20_Name DS1; 9 | - Khoi tao chan DS18B20: 10 | DS18B20_Init(&DS1, &htim4, DS18B20_GPIO_Port, DS18B20_Pin); 11 | - Su dung cac ham phai truyen dia chi cua DS18B20 do: 12 | Temp = DS18B20_ReadTemp(&DS1); 13 | ******************************************************************************************************************/ 14 | #include "DS18B20.h" 15 | //************************** Low Level Layer ********************************************************// 16 | #include "delay_timer.h" 17 | 18 | static void DS18B20_DelayInit(DS18B20_Name* DS18B20) 19 | { 20 | DELAY_TIM_Init(DS18B20->Timer); 21 | } 22 | static void DS18B20_DelayUs(DS18B20_Name* DS18B20, uint16_t Time) 23 | { 24 | DELAY_TIM_Us(DS18B20->Timer, Time); 25 | } 26 | static void DS18B20_DelayMs(DS18B20_Name* DS18B20, uint16_t Time) 27 | { 28 | DELAY_TIM_Ms(DS18B20->Timer, Time); 29 | } 30 | 31 | static void DS18B20_SetPinOut(DS18B20_Name* DS18B20) 32 | { 33 | GPIO_InitTypeDef GPIO_InitStruct = {0}; 34 | GPIO_InitStruct.Pin = DS18B20->Pin; 35 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 36 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 37 | HAL_GPIO_Init(DS18B20->PORT, &GPIO_InitStruct); 38 | } 39 | static void DS18B20_SetPinIn(DS18B20_Name* DS18B20) 40 | { 41 | GPIO_InitTypeDef GPIO_InitStruct = {0}; 42 | GPIO_InitStruct.Pin = DS18B20->Pin; 43 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 44 | GPIO_InitStruct.Pull = GPIO_PULLUP; 45 | HAL_GPIO_Init(DS18B20->PORT, &GPIO_InitStruct); 46 | } 47 | static void DS18B20_WritePin(DS18B20_Name* DS18B20, uint8_t Value) 48 | { 49 | HAL_GPIO_WritePin(DS18B20->PORT, DS18B20->Pin, Value); 50 | } 51 | static uint8_t DS18B20_ReadPin(DS18B20_Name* DS18B20) 52 | { 53 | return HAL_GPIO_ReadPin(DS18B20->PORT, DS18B20->Pin); 54 | } 55 | //********************************* Middle level Layer ****************************************************// 56 | static uint8_t DS18B20_Start(DS18B20_Name* DS18B20) 57 | { 58 | uint8_t Response = 0; 59 | DS18B20_SetPinOut(DS18B20); 60 | DS18B20_WritePin(DS18B20, 0); 61 | DS18B20_DelayUs(DS18B20, 480); 62 | DS18B20_SetPinIn(DS18B20); 63 | DS18B20_DelayUs(DS18B20, 80); 64 | if (!(DS18B20_ReadPin(DS18B20))) Response = 1; 65 | else Response = 0; 66 | DS18B20_DelayUs(DS18B20, 400); // 480 us delay totally. 67 | 68 | return Response; 69 | } 70 | static void DS18B20_Write(DS18B20_Name* DS18B20, uint8_t Data) 71 | { 72 | DS18B20_SetPinOut(DS18B20); 73 | for(int i = 0; i<8; i++) 74 | { 75 | if((Data&(1<PORT = DS_PORT; 115 | DS18B20->Pin = DS_Pin; 116 | DS18B20->Timer = Timer; 117 | DS18B20_DelayInit(DS18B20); 118 | } 119 | 120 | float DS18B20_ReadTemp(DS18B20_Name* DS18B20) 121 | { 122 | uint8_t Temp1, Temp2; 123 | uint16_t Temp; 124 | DS18B20_Start(DS18B20); 125 | DS18B20_DelayMs(DS18B20, 1); 126 | DS18B20_Write(DS18B20, DS18B20_SKIPROM); 127 | DS18B20_Write(DS18B20, DS18B20_CONVERT); 128 | DS18B20_DelayMs(DS18B20, 200); 129 | DS18B20_Start(DS18B20); 130 | DS18B20_DelayMs(DS18B20, 1); 131 | DS18B20_Write(DS18B20, DS18B20_SKIPROM); 132 | DS18B20_Write(DS18B20, DS18B20_READSCRAT); 133 | Temp1 = DS18B20_Read(DS18B20); 134 | Temp2 = DS18B20_Read(DS18B20); 135 | Temp = (Temp2<<8)|Temp1; 136 | DS18B20->Temp = (float)(Temp/16); 137 | return DS18B20->Temp; 138 | } 139 | -------------------------------------------------------------------------------- /DS18B20/DS18B20.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: DS18B20 Sensor 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao bien DS18B20 : DS18B20_Name DS1; 9 | - Khoi tao chan DS18B20: 10 | DS18B20_Init(&DS1, &htim4, DS18B20_GPIO_Port, DS18B20_Pin); 11 | - Su dung cac ham phai truyen dia chi cua DS18B20 do: 12 | Temp = DS18B20_ReadTemp(&DS1); 13 | ******************************************************************************************************************/ 14 | #ifndef __DS18B20_H 15 | #define __DS18B20_H 16 | 17 | #include "stm32f1xx_hal.h" 18 | typedef struct 19 | { 20 | TIM_HandleTypeDef* Timer; 21 | uint16_t Pin; 22 | GPIO_TypeDef* PORT; 23 | float Temp; 24 | }DS18B20_Name; 25 | #define DS18B20_STARTLOW 18000 26 | #define DS18B20_STARTHIGH 20 27 | 28 | #define DS18B20_READROM 0x33 29 | #define DS18B20_MATCHROM 0x55 30 | #define DS18B20_SKIPROM 0xCC 31 | #define DS18B20_SEARCHROM 0xF0 32 | #define DS18B20_ARLAMPSEARCH 0xEC 33 | #define DS18B20_WRITESCRAT 0x4E 34 | #define DS18B20_READSCRAT 0xBE 35 | #define DS18B20_COPYSCRAT 0x48 36 | #define DS18B20_CONVERT 0x44 37 | #define DS18B20_READPWR 0xB4 38 | 39 | void DS18B20_Init(DS18B20_Name* DS18B20, TIM_HandleTypeDef* Timer, GPIO_TypeDef* DS_PORT, uint16_t DS_Pin); 40 | float DS18B20_ReadTemp(DS18B20_Name* DS18B20); 41 | #endif 42 | 43 | -------------------------------------------------------------------------------- /DS3231/DS3231.c: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: DS3231 RTC Module 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao I2C cho Ds3231 9 | - Khoi tao bien luu DS3231 10 | DS3231_Name DS3231; 11 | - Khoi tao DS3231 do: 12 | DS3231_Init(&DS3231, &hi2c1); 13 | - Su dung cac ham phai truyen dia chi cua DS3231 do: 14 | DS3231_GetTime(&DS3231); 15 | DS3231_GetDate(&DS3231); 16 | ******************************************************************************************************************/ 17 | 18 | #include "DS3231.h" 19 | //*****************************************Low Level Layer ***********************************************// 20 | // Thay doi thanh IT hoac DMA neu can thiet 21 | static void I2C_WriteTime(DS3231_Name* DS3231) 22 | { 23 | HAL_I2C_Mem_Write(DS3231->I2C, DS3231_ADDRESS, 0, I2C_MEMADD_SIZE_8BIT, DS3231->TxTimeBuff, 3, 1000); 24 | } 25 | 26 | static void I2C_ReadTime(DS3231_Name* DS3231) 27 | { 28 | HAL_I2C_Mem_Read(DS3231->I2C, DS3231_ADDRESS, 0, I2C_MEMADD_SIZE_8BIT, DS3231->RxTimeBuff, 3, 1000); 29 | } 30 | 31 | static void I2C_WriteDate(DS3231_Name* DS3231) 32 | { 33 | HAL_I2C_Mem_Write(DS3231->I2C, DS3231_ADDRESS, 3, I2C_MEMADD_SIZE_8BIT, DS3231->TxDateBuff, 4, 1000); 34 | } 35 | 36 | static void I2C_ReadDate(DS3231_Name* DS3231) 37 | { 38 | HAL_I2C_Mem_Read(DS3231->I2C, DS3231_ADDRESS, 3, I2C_MEMADD_SIZE_8BIT, DS3231->RxDateBuff, 4, 1000); 39 | } 40 | 41 | static uint8_t BCD2DEC(uint8_t data) 42 | { 43 | return (data>>4)*10+ (data&0x0f); 44 | } 45 | 46 | static uint8_t DEC2BCD(uint8_t data) 47 | { 48 | return (data/10)<<4|(data%10); 49 | } 50 | 51 | //****************************************HIGH Level Layer *************************************************// 52 | void DS3231_Init(DS3231_Name* DS3231, I2C_HandleTypeDef* I2C_In) 53 | { 54 | DS3231->I2C = I2C_In; 55 | } 56 | 57 | void DS3231_SetTime(DS3231_Name* DS3231, uint8_t Hour, uint8_t Min, uint8_t Sec) 58 | { 59 | DS3231->TxTimeBuff[0] = DEC2BCD(Hour); 60 | DS3231->TxTimeBuff[1] = DEC2BCD(Min); 61 | DS3231->TxTimeBuff[2] = DEC2BCD(Sec); 62 | I2C_WriteTime(DS3231); 63 | } 64 | void DS3231_GetTime(DS3231_Name* DS3231) 65 | { 66 | I2C_ReadTime(DS3231); 67 | DS3231->Sec = BCD2DEC(DS3231->RxTimeBuff[0]); 68 | DS3231->Min = BCD2DEC(DS3231->RxTimeBuff[1]); 69 | DS3231->Hours = BCD2DEC(DS3231->RxTimeBuff[2]); 70 | } 71 | void DS3231_SetDate(DS3231_Name* DS3231, uint8_t Day, uint8_t Date, uint8_t Month, uint8_t Year) 72 | { 73 | DS3231->TxDateBuff[0] = DEC2BCD(Day); 74 | DS3231->TxDateBuff[1] = DEC2BCD(Date); 75 | DS3231->TxDateBuff[2] = DEC2BCD(Month); 76 | DS3231->TxDateBuff[3] = DEC2BCD(Year); 77 | I2C_WriteDate(DS3231); 78 | } 79 | void DS3231_GetDate(DS3231_Name* DS3231) 80 | { 81 | I2C_ReadDate(DS3231); 82 | DS3231->Day = BCD2DEC(DS3231->RxDateBuff[0]); 83 | DS3231->Date = BCD2DEC(DS3231->RxDateBuff[1]); 84 | DS3231->Month = BCD2DEC(DS3231->RxDateBuff[2]); 85 | DS3231->Year = BCD2DEC(DS3231->RxDateBuff[3]); 86 | } 87 | -------------------------------------------------------------------------------- /DS3231/DS3231.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************************************************** 2 | @File: DS3231 RTC Module 3 | @Author: Khue Nguyen 4 | @Website: khuenguyencreator.com 5 | @Youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | Huong dan su dung: 7 | - Su dung thu vien HAL 8 | - Khoi tao I2C cho Ds3231 9 | - Khoi tao bien luu DS3231 10 | DS3231_Name DS3231; 11 | - Khoi tao DS3231 do: 12 | DS3231_Init(&DS3231, &hi2c1); 13 | - Su dung cac ham phai truyen dia chi cua DS3231 do: 14 | DS3231_GetTime(&DS3231); 15 | DS3231_GetDate(&DS3231); 16 | ******************************************************************************************************************/ 17 | #ifndef __DS3231_H 18 | #define __DS3231_H 19 | 20 | #include "stm32f1xx_hal.h" 21 | 22 | #define DS3231_ADDRESS 0x68<<1 23 | 24 | typedef struct 25 | { 26 | I2C_HandleTypeDef* I2C; 27 | uint8_t TxTimeBuff[3]; 28 | uint8_t RxTimeBuff[3]; 29 | uint8_t TxDateBuff[4]; 30 | uint8_t RxDateBuff[4]; 31 | uint8_t Hours; 32 | uint8_t Min; 33 | uint8_t Sec; 34 | uint8_t Date; 35 | uint8_t Day; 36 | uint8_t Month; 37 | uint8_t Year; 38 | }DS3231_Name; 39 | 40 | void DS3231_Init(DS3231_Name* DS3231, I2C_HandleTypeDef* I2C_In); 41 | void DS3231_SetTime(DS3231_Name* DS3231, uint8_t Hour, uint8_t Min, uint8_t Sec); 42 | void DS3231_GetTime(DS3231_Name* DS3231); 43 | void DS3231_SetDate(DS3231_Name* DS3231, uint8_t Day, uint8_t Date, uint8_t Month, uint8_t Year); 44 | void DS3231_GetDate(DS3231_Name* DS3231); 45 | #endif 46 | -------------------------------------------------------------------------------- /Delay timer/delay_timer.c: -------------------------------------------------------------------------------- 1 | /***************************************************************************************************** 2 | @tac gia: khuenguyen 3 | @website: khuenguyencreator.com 4 | @youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 5 | @huong dan su dung: 6 | - Khoi tao timer dem moi 1us VD: fapb2 = 72 mhz. prescaler = 72 -1, ARR = 0xFFFF -1 7 | - Truyen timer do vao delay Init VD: DELAY_TIM_Init(&htim1) 8 | - Su dung thu vien hal 9 | 10 | *****************************************************************************************************/ 11 | #include "delay_timer.h" 12 | void DELAY_TIM_Init(TIM_HandleTypeDef *htim) 13 | { 14 | HAL_TIM_Base_Start(htim); 15 | } 16 | 17 | void DELAY_TIM_Us(TIM_HandleTypeDef *htim, uint16_t time) 18 | { 19 | __HAL_TIM_SET_COUNTER(htim,0); 20 | while(__HAL_TIM_GET_COUNTER(htim)ADC, (uint32_t*)JT->ADCvalue, 2); 6 | } 7 | static void JOYSTICK_DelayMs(uint16_t Time) 8 | { 9 | HAL_Delay(Time); 10 | } 11 | void JOYSTICK_Init(JOYSTICK_Name* JT, ADC_HandleTypeDef* ADC_In, uint32_t Xchannel, uint32_t Ychannel, 12 | GPIO_TypeDef* Button_Port, uint16_t Button_Pin) 13 | { 14 | JT->ADC = ADC_In; 15 | JT->Xchannel = Xchannel; 16 | JT->Ychannel = Ychannel; 17 | JT->Button_Port = Button_Port; 18 | JT->Button_Pin = Button_Pin; 19 | } 20 | void JOYSTICK_GetValue(JOYSTICK_Name* JT) 21 | { 22 | ADC_GetValue(JT); 23 | JOYSTICK_DelayMs(20); 24 | if((JT->ADCvalue[0] > 1548) && (JT->ADCvalue[0] < 2548)) 25 | { 26 | JT->Xdirect = No_Action; 27 | } 28 | if((JT->ADCvalue[1] > 1548) && (JT->ADCvalue[1] < 2548)) 29 | { 30 | JT->Ydirect = No_Action; 31 | } 32 | if(JT->ADCvalue[0] <= 1548) 33 | { 34 | JT->Xdirect = X_Dec; 35 | } 36 | if(JT->ADCvalue[1] <= 1548) 37 | { 38 | JT->Ydirect = Y_Dec; 39 | } 40 | if(JT->ADCvalue[0] >= 2548) 41 | { 42 | JT->Xdirect = X_Inc; 43 | } 44 | if(JT->ADCvalue[1] >= 2548) 45 | { 46 | JT->Ydirect = Y_Inc; 47 | } 48 | } 49 | JOYSTICK_Value JOYSTICK_GetButton(JOYSTICK_Name* JT) 50 | { 51 | //JT->ButtonState = noPress; 52 | if(!HAL_GPIO_ReadPin(JT->Button_Port, JT->Button_Pin)) 53 | { 54 | while(!HAL_GPIO_ReadPin(JT->Button_Port, JT->Button_Pin)){} 55 | JT->ButtonState = isPress; 56 | } 57 | return JT->ButtonState; 58 | } 59 | -------------------------------------------------------------------------------- /JOYSTICK/JOYSTICK.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __JOYSTICK_H 3 | #define __JOYSTICK_H 4 | 5 | #include "stm32f1xx_hal.h" 6 | typedef enum 7 | { 8 | No_Action = 0, 9 | X_Inc = 1, 10 | X_Dec = 2, 11 | Y_Inc = 3, 12 | Y_Dec = 4, 13 | isPress = 5, 14 | noPress = 6 15 | }JOYSTICK_Value; 16 | 17 | typedef struct 18 | { 19 | ADC_HandleTypeDef* ADC; 20 | uint32_t Xchannel; 21 | uint32_t Ychannel; 22 | GPIO_TypeDef* Button_Port; 23 | uint16_t Button_Pin; 24 | uint16_t ADCvalue[2]; 25 | JOYSTICK_Value Xdirect; 26 | JOYSTICK_Value Ydirect; 27 | JOYSTICK_Value ButtonState; 28 | }JOYSTICK_Name; 29 | void JOYSTICK_Init(JOYSTICK_Name* JT, ADC_HandleTypeDef* ADC_In, uint32_t Xchannel, uint32_t Ychannel, 30 | GPIO_TypeDef* Button_Port, uint16_t Button_Pin); 31 | void JOYSTICK_GetValue(JOYSTICK_Name* JT); 32 | JOYSTICK_Value JOYSTICK_GetButton(JOYSTICK_Name* JT); 33 | #endif 34 | -------------------------------------------------------------------------------- /KEYPAD/KEYPAD.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nguyenkhue2608/STM32_Device_Lib/08b84f6f6cddf15a8a7b31bcfdffb9c8b1dcf404/KEYPAD/KEYPAD.c -------------------------------------------------------------------------------- /KEYPAD/KEYPAD.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nguyenkhue2608/STM32_Device_Lib/08b84f6f6cddf15a8a7b31bcfdffb9c8b1dcf404/KEYPAD/KEYPAD.h -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/1.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_1[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0XC3,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X01,0X80,0XC0,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X82,0X01,0X00,0X60,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XB1,0X02,0X00,0X30,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X20,0X82,0XE0,0X10,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X40,0X84,0XE0,0X08,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X44,0XE0,0X08,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X04,0XE0,0X04,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X44,0X40,0X04, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X44,0X00, 27 | 0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X20,0X04, 28 | 0X00,0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00, 29 | 0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 30 | 0X00,0X42,0X00,0X08,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X03,0X00,0X02,0X00,0X18,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X03,0X00,0X01,0X00,0X10,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X03,0X00,0X00,0X80,0X60,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X01,0X00,0X80,0X43,0X80,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X01,0X01,0X80,0X10,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X00,0X83,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X4E,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X03,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X03,0XC0, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X1C, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X0C,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/2.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_2[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0X3B,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X00,0XE0,0XC0,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X01,0X80,0X60,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X8F,0X02,0X00,0X30,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X20,0X82,0XE0,0X10,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X40,0X84,0XE0,0X08,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X44,0XE0,0X08,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X04,0XE0,0X04,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X44,0X40,0X04, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X44,0X00, 27 | 0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X20,0X44, 28 | 0X00,0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00, 29 | 0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 30 | 0X00,0X42,0X00,0X08,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X03,0X00,0X02,0X00,0X38,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X03,0X00,0X01,0X01,0XE0,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X03,0X00,0X00,0X8C,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X01,0X00,0X80,0X70,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X01,0X0F,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X40,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X00,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X01,0XC0, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X1C, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X08,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/3.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_3[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,0XC0,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X0E,0X60,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X03,0XE0,0X10,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X0E,0X06,0XE0,0X08,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X70,0X44,0XE0,0X08,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X44,0XE0,0X04,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X44,0X40,0X04, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X04,0X00, 27 | 0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X20,0X04, 28 | 0X00,0X0C,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00, 29 | 0X00,0X03,0XE0,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 30 | 0X00,0X02,0X1C,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X03,0X00,0X42,0X60,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X03,0X3F,0XC1,0X80,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X03,0XC0,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X03,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X03,0X80, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X18, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X08,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/4.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_4[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X01,0XF0,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X1E,0X18,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0XF0,0X08,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X03,0XE0,0X08,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XC4,0XE0,0X04,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X44,0X40,0X3C, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X04,0X07, 27 | 0XE0,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X04, 28 | 0X38,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X03, 29 | 0X43,0X80,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 30 | 0XFC,0X02,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X03,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X03,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X03,0XC0, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X1C, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X08,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/5.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_5[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X30,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X06,0X00,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X00,0X60,0X00,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X00,0X01,0X80,0X00, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X7F,0XC6,0X00, 27 | 0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X00, 28 | 0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X00, 29 | 0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02, 30 | 0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X0F,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X03,0X80, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X18, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X08,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/6.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_6[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X01,0XF0,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X1E,0X18,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0XF0,0X08,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X03,0XE0,0X08,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XC4,0XE0,0X04,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X44,0X40,0X3C, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X04,0X07, 27 | 0XE0,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X04, 28 | 0X38,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X03, 29 | 0X43,0X80,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 30 | 0XFC,0X02,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X03,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X03,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X03,0XC0, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X1C, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X08,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/7.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_7[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,0XC0,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X0E,0X60,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X03,0XE0,0X10,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X0E,0X06,0XE0,0X08,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X70,0X44,0XE0,0X08,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X44,0XE0,0X04,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X44,0X40,0X04, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X04,0X00, 27 | 0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X20,0X04, 28 | 0X00,0X0C,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00, 29 | 0X00,0X03,0XE0,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 30 | 0X00,0X02,0X1C,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X03,0X00,0X42,0X60,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X03,0X3F,0XC1,0X80,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X03,0XC0,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X03,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X03,0X80, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X18, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X08,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/8.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_8[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0X3F,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X00,0XE0,0XC0,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X01,0X80,0X60,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X8F,0X02,0X00,0X10,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X20,0X82,0XE0,0X10,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X40,0X44,0XE0,0X08,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X44,0XE0,0X08,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X44,0XE0,0X04,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X44,0X60,0X04, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X04,0X00, 27 | 0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X20,0X04, 28 | 0X00,0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00, 29 | 0X02,0X00,0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 30 | 0X00,0X02,0X00,0X08,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X03,0X00,0X00,0X00,0X18,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X03,0X00,0X01,0X01,0XE0,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X03,0X00,0X40,0X8E,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X01,0X00,0X80,0X70,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X01,0X0F,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X00,0X70,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X40,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X00,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X01,0XC0, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X1C, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X08,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/9.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_9[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X70, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00, 10 | 0X18,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 11 | 0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 12 | 0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X0C,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X00,0X18,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X00,0X10,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X00,0X40,0X00,0XC3,0X00,0X30,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X00,0X40,0X01,0X80,0XC0,0X10,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X00,0X82,0X01,0X00,0X60,0X18,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XB1,0X02,0X00,0X30,0X08,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X20,0X82,0XE0,0X10,0X08,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X40,0X84,0XE0,0X08,0X0C,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X44,0XE0,0X08,0X04,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X04,0XE0,0X04,0X04, 25 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X44,0X40,0X04, 26 | 0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X30,0X44,0X00, 27 | 0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X20,0X04, 28 | 0X00,0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00, 29 | 0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, 30 | 0X00,0X42,0X00,0X08,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0X03,0X00,0X02,0X00,0X18,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0X03,0X00,0X01,0X00,0X10,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X00,0X03,0X00,0X00,0X80,0X60,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X00,0X01,0X00,0X80,0X43,0X80,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X00,0X01,0X01,0X80,0X10,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X00,0X00,0X83,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X4E,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X30,0X00,0X00,0X00,0X08,0X00,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X18,0X00,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X10,0X00, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X30, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X03,0X00, 43 | 0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X01,0XC0, 44 | 0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X1C, 45 | 0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X30, 46 | 0X60,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 47 | 0X10,0X00,0X00,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 48 | 0X00,0X0C,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 49 | 0X00,0X00,0X06,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X00,0X00,0X00,0X01,0X80,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFB,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X90,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0XD8,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X4C,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X46,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X62,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X21, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08, 61 | 0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 62 | 0X18,0X20,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 63 | 0X00,0X10,0X30,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 64 | 0X00,0X00,0X10,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 65 | 0X00,0X00,0X00,0X30,0X30,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X10,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X10,0X08,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/OLED_LCD_SSD1306.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nguyenkhue2608/STM32_Device_Lib/08b84f6f6cddf15a8a7b31bcfdffb9c8b1dcf404/LCD_OLED_SSD1306/OLED_LCD_SSD1306.c -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/OLED_LCD_SSD1306.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nguyenkhue2608/STM32_Device_Lib/08b84f6f6cddf15a8a7b31bcfdffb9c8b1dcf404/LCD_OLED_SSD1306/OLED_LCD_SSD1306.h -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/bitmap.h: -------------------------------------------------------------------------------- 1 | /* 2 | * bitmap.h 3 | * 4 | * Created on: 17-Jun-2019 5 | * Author: poe 6 | */ 7 | 8 | #ifndef BITMAP_H_ 9 | #define BITMAP_H_ 10 | 11 | const unsigned char logo [] = { 12 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 13 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x01, 0xE1, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 15 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x31, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x11, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 16 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x03, 0xF9, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3C, 0x1F, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x07, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x03, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x07, 0x70, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x30, 0x0C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x18, 0x38, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0C, 0x70, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 20 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x07, 0xC0, 0x01, 0xC0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x03, 0x80, 0x00, 0x60, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x03, 0x80, 0x00, 0x30, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x06, 0xE0, 0x00, 0x18, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 22 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x0C, 0x70, 0x00, 0x0C, 0x11, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x38, 0x00, 0x04, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 23 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x30, 0x0C, 0x00, 0x06, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x20, 0x06, 0x00, 0x03, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 24 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xE0, 0x03, 0x00, 0x01, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xC0, 0x01, 0x80, 0x00, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 25 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xC0, 0x00, 0x60, 0x01, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xE0, 0x00, 0x30, 0x01, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x30, 0x00, 0x18, 0x03, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 27 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x10, 0x00, 0x0C, 0x06, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x00, 0x06, 0x0C, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x0C, 0x00, 0x03, 0x98, 0x11, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x06, 0x00, 0x01, 0xF0, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0xF0, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x01, 0x80, 0x00, 0xF0, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0xE0, 0x01, 0x98, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x03, 0x0C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0E, 0x06, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x18, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xF0, 0x01, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x03, 0xE0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x0F, 0x78, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0xFC, 0x0F, 0xCF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC7, 0xC0, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC6, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 35 | 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC7, 0x80, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC1, 0xF0, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 37 | 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 39 | 0x0F, 0x0F, 0x8C, 0x27, 0xF7, 0xE1, 0xF0, 0xC1, 0x81, 0xF9, 0xF0, 0xFB, 0xF9, 0xF0, 0xF1, 0x8C,0x19, 0x39, 0xCE, 0x21, 0xC6, 0x33, 0x98, 0xC1, 0x81, 0x81, 0x99, 0x80, 0xE1, 0x81, 0x91, 0x8C, 40 | 0x30, 0x30, 0xCF, 0x20, 0x86, 0x33, 0x0C, 0xC1, 0x81, 0x81, 0x8D, 0x80, 0x41, 0x03, 0x01, 0x8C,0x30, 0x30, 0x4F, 0x20, 0x86, 0x32, 0x0C, 0xC1, 0x81, 0xF1, 0x98, 0xF0, 0x41, 0xF3, 0x01, 0xFC, 41 | 0x30, 0x30, 0x4D, 0xE0, 0x87, 0xE2, 0x0C, 0xC1, 0x81, 0x81, 0xF0, 0x18, 0x43, 0x83, 0x01, 0xFC,0x30, 0x30, 0xCC, 0xE0, 0x86, 0x63, 0x0C, 0xC1, 0x81, 0x81, 0xB0, 0x0C, 0x41, 0x03, 0x01, 0x8C, 42 | 0x1D, 0x9F, 0xCC, 0x60, 0x86, 0x63, 0xF8, 0xFD, 0xF9, 0xF9, 0x99, 0xD8, 0x41, 0xF1, 0xD9, 0x8C,0x0F, 0x0F, 0x0C, 0x20, 0x86, 0x30, 0xF0, 0xFD, 0xF9, 0xF9, 0x8C, 0xF0, 0x41, 0xF0, 0xF1, 0x8C, 43 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 44 | }; 45 | 46 | #endif /* BITMAP_H_ */ 47 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/fonts.h: -------------------------------------------------------------------------------- 1 | /** 2 | * original author: Tilen Majerle 3 | * modification for STM32f10x: Alexander Lutsai 4 | ---------------------------------------------------------------------- 5 | Copyright (C) Alexander Lutsai, 2016 6 | Copyright (C) Tilen Majerle, 2015 7 | 8 | This program is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program. If not, see . 20 | ---------------------------------------------------------------------- 21 | */ 22 | #ifndef FONTS_H 23 | #define FONTS_H 120 24 | 25 | /* C++ detection */ 26 | #ifdef __cplusplus 27 | extern C { 28 | #endif 29 | 30 | /** 31 | * 32 | * Default fonts library. It is used in all LCD based libraries. 33 | * 34 | * \par Supported fonts 35 | * 36 | * Currently, these fonts are supported: 37 | * - 7 x 10 pixels 38 | * - 11 x 18 pixels 39 | * - 16 x 26 pixels 40 | */ 41 | #include "stm32f1xx_hal.h" 42 | #include "string.h" 43 | 44 | /** 45 | * @defgroup LIB_Typedefs 46 | * @brief Library Typedefs 47 | * @{ 48 | */ 49 | 50 | /** 51 | * @brief Font structure used on my LCD libraries 52 | */ 53 | typedef struct { 54 | uint8_t FontWidth; /*!< Font width in pixels */ 55 | uint8_t FontHeight; /*!< Font height in pixels */ 56 | const uint16_t *data; /*!< Pointer to data font data array */ 57 | } FontDef_t; 58 | 59 | /** 60 | * @brief String length and height 61 | */ 62 | typedef struct { 63 | uint16_t Length; /*!< String length in units of pixels */ 64 | uint16_t Height; /*!< String height in units of pixels */ 65 | } FONTS_SIZE_t; 66 | 67 | /** 68 | * @} 69 | */ 70 | 71 | /** 72 | * @defgroup FONTS_FontVariables 73 | * @brief Library font variables 74 | * @{ 75 | */ 76 | 77 | /** 78 | * @brief 7 x 10 pixels font size structure 79 | */ 80 | extern FontDef_t Font_7x10; 81 | 82 | /** 83 | * @brief 11 x 18 pixels font size structure 84 | */ 85 | extern FontDef_t Font_11x18; 86 | 87 | /** 88 | * @brief 16 x 26 pixels font size structure 89 | */ 90 | extern FontDef_t Font_16x26; 91 | 92 | /** 93 | * @} 94 | */ 95 | 96 | /** 97 | * @defgroup FONTS_Functions 98 | * @brief Library functions 99 | * @{ 100 | */ 101 | 102 | /** 103 | * @brief Calculates string length and height in units of pixels depending on string and font used 104 | * @param *str: String to be checked for length and height 105 | * @param *SizeStruct: Pointer to empty @ref FONTS_SIZE_t structure where informations will be saved 106 | * @param *Font: Pointer to @ref FontDef_t font used for calculations 107 | * @retval Pointer to string used for length and height 108 | */ 109 | char* FONTS_GetStringSize(char* str, FONTS_SIZE_t* SizeStruct, FontDef_t* Font); 110 | 111 | /** 112 | * @} 113 | */ 114 | 115 | /** 116 | * @} 117 | */ 118 | 119 | /** 120 | * @} 121 | */ 122 | 123 | /* C++ detection */ 124 | #ifdef __cplusplus 125 | } 126 | #endif 127 | 128 | 129 | #endif 130 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/logo2.h: -------------------------------------------------------------------------------- 1 | const unsigned char gImage_logo2[1088] = { /* 0X00,0X01,0X84,0X00,0X40,0X00, */ 2 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 3 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 4 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 5 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 6 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 7 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 8 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 9 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 10 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 11 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 12 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 13 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 14 | 0X07,0X87,0X87,0X87,0X87,0X9F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 15 | 0X00,0X0F,0XC7,0X87,0X8F,0X8F,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 16 | 0X00,0X00,0X0F,0XC7,0X8F,0X8F,0X1E,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 17 | 0X00,0X00,0X00,0X0F,0X8F,0X8F,0X0F,0X1E,0X3F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, 18 | 0X00,0X00,0X00,0X00,0X1F,0X8F,0X0F,0X1F,0X3C,0X3C,0X00,0X00,0X00,0X00,0X00,0X00, 19 | 0X00,0X00,0X00,0X00,0X00,0X1F,0X8F,0X1F,0X1F,0X78,0X3C,0X00,0X00,0X00,0X00,0X00, 20 | 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X9F,0X1F,0X1E,0X78,0X7C,0X00,0X00,0X00,0X00, 21 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X9F,0X1E,0X1F,0XF0,0X78,0X00,0X00,0X00, 22 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X9E,0X3E,0X3F,0XE0,0X78,0X00,0X00, 23 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X9E,0X3E,0X3F,0XE0,0XF8,0X00, 24 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XBE,0X3C,0X3F,0XC0,0XFF, 25 | 0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X3C,0X7F,0XC0, 26 | 0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X7C,0X7F, 27 | 0XC0,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7B,0XFC,0X7C, 28 | 0X7F,0XC1,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFB,0XF8, 29 | 0X78,0X7F,0XC1,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFB, 30 | 0XF8,0XF8,0XFB,0XC1,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 31 | 0XF3,0XF8,0XF8,0XF3,0XC3,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 32 | 0X00,0XF3,0XF8,0XF0,0XF3,0XC3,0XC0,0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00, 33 | 0X00,0X11,0XF3,0XF0,0XF1,0XF3,0XC3,0XC0,0X00,0X07,0X80,0X00,0X00,0X00,0X00,0X00, 34 | 0X00,0X00,0X31,0XE3,0XF1,0XF1,0XE3,0XC3,0XC0,0X00,0X3E,0X00,0X00,0X00,0X00,0X00, 35 | 0X00,0X00,0X00,0X61,0XE3,0XF1,0XE1,0XE3,0XC7,0XC0,0X01,0XF8,0X00,0X00,0X00,0X00, 36 | 0X00,0X00,0X00,0X00,0X63,0XE3,0XE1,0XE3,0XE3,0XC7,0XFE,0X0F,0XC0,0X00,0X00,0X00, 37 | 0X00,0X00,0X00,0X00,0X00,0XE3,0XE3,0XE3,0XE3,0XE3,0XC7,0XFE,0XFF,0X00,0X00,0X00, 38 | 0X00,0X00,0X00,0X00,0X00,0X01,0XE3,0XC3,0XE3,0XE3,0XC3,0XCF,0XFF,0XFC,0X00,0X00, 39 | 0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XC3,0XE3,0XC3,0XC3,0XCF,0XFF,0XF0,0X00, 40 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XC0,0X00,0X00,0X00,0X00,0X03,0XFF,0XC0, 41 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XC0,0X00,0X00,0X00,0X00,0X1F,0XFF, 42 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XC0,0X00,0X00,0X00,0X00,0XFF, 43 | 0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XC0,0X00,0X00,0X00,0X0F, 44 | 0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC0,0X00,0X00,0X00, 45 | 0X7F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XE0,0X00,0X00, 46 | 0X03,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00, 47 | 0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XE0, 48 | 0X00,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F, 49 | 0XF0,0X00,0X0F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 50 | 0X7F,0XF8,0X00,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 51 | 0X00,0X7F,0XFE,0X07,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 52 | 0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 53 | 0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 54 | 0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 55 | 0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00, 56 | 0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, 57 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00, 58 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00, 59 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X00, 60 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF0,0X00,0X00, 61 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00, 62 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X00, 63 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF8, 64 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF, 65 | 0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 66 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 67 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 68 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 69 | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 70 | }; 71 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/test.c: -------------------------------------------------------------------------------- 1 | /* 2 | * test.c 3 | * 4 | * Created on: 17-Jun-2019 5 | * Author: poe 6 | */ 7 | 8 | #include "test.h" 9 | #include "OLED_LCD_SSD1306.h" 10 | #define min(a, b) (((a) < (b)) ? (a) : (b)) 11 | extern SSD1306_Name SSD1306; 12 | void TestLines(uint8_t color) 13 | { 14 | uint8_t x1, y1, x2, y2; 15 | 16 | SSD1306_Clear (&SSD1306); 17 | 18 | x1 = y1 = 0; 19 | y2 = SSD1306_HEIGHT - 1; 20 | for (x2 = 0; x2 < SSD1306_WIDTH; x2 += 6) 21 | { 22 | SSD1306_DrawLine(&SSD1306, x1, y1, x2, y2, color); 23 | HAL_Delay(1); 24 | SSD1306_UpdateScreen(&SSD1306); 25 | } 26 | x2 = SSD1306_WIDTH - 1; 27 | for (y2 = 0; y2 < SSD1306_HEIGHT; y2 += 6) 28 | { 29 | SSD1306_DrawLine(&SSD1306, x1, y1, x2, y2, color); 30 | HAL_Delay(1); 31 | SSD1306_UpdateScreen(&SSD1306); 32 | } 33 | 34 | HAL_Delay(10); 35 | 36 | 37 | SSD1306_Clear (&SSD1306); 38 | 39 | x1 = SSD1306_WIDTH - 1; 40 | y1 = 0; 41 | y2 = SSD1306_HEIGHT - 1; 42 | for (x2 = 0; x2 < SSD1306_WIDTH; x2 += 6) 43 | { 44 | SSD1306_DrawLine(&SSD1306, x1, y1, x2, y2, color); 45 | SSD1306_UpdateScreen(&SSD1306); 46 | HAL_Delay(1); 47 | } 48 | x2 = 0; 49 | for (y2 = 0; y2 < SSD1306_HEIGHT; y2 += 6) 50 | { 51 | SSD1306_DrawLine(&SSD1306, x1, y1, x2, y2, color); 52 | SSD1306_UpdateScreen(&SSD1306); 53 | HAL_Delay(1); 54 | } 55 | 56 | HAL_Delay(10); 57 | 58 | 59 | SSD1306_Clear (&SSD1306); 60 | 61 | x1 = 0; 62 | y1 = SSD1306_HEIGHT - 1; 63 | y2 = 0; 64 | for (x2 = 0; x2 < SSD1306_WIDTH; x2 += 6) 65 | { 66 | SSD1306_DrawLine(&SSD1306, x1, y1, x2, y2, color); 67 | HAL_Delay(1); 68 | SSD1306_UpdateScreen(&SSD1306); 69 | } 70 | x2 = SSD1306_WIDTH - 1; 71 | for (y2 = 0; y2 < SSD1306_HEIGHT; y2 += 6) 72 | { 73 | SSD1306_DrawLine(&SSD1306, x1, y1, x2, y2, color); 74 | HAL_Delay(1); 75 | SSD1306_UpdateScreen(&SSD1306); 76 | } 77 | 78 | HAL_Delay(10); 79 | 80 | 81 | SSD1306_Clear (&SSD1306); 82 | 83 | x1 = SSD1306_WIDTH - 1; 84 | y1 = SSD1306_HEIGHT - 1; 85 | y2 = 0; 86 | for (x2 = 0; x2 < SSD1306_WIDTH; x2 += 6) 87 | { 88 | SSD1306_DrawLine(&SSD1306, x1, y1, x2, y2, color); 89 | HAL_Delay(1); 90 | SSD1306_UpdateScreen(&SSD1306); 91 | } 92 | x2 = 0; 93 | for (y2 = 0; y2 < SSD1306_HEIGHT; y2 += 6) 94 | { 95 | SSD1306_DrawLine(&SSD1306, x1, y1, x2, y2, color); 96 | HAL_Delay(1); 97 | SSD1306_UpdateScreen(&SSD1306); 98 | } 99 | } 100 | 101 | 102 | void TestRectangles (uint8_t color) 103 | { 104 | uint8_t n, i, i2; 105 | 106 | SSD1306_Clear (&SSD1306); 107 | 108 | n = min(SSD1306_WIDTH, SSD1306_HEIGHT); 109 | 110 | for (i = 2; i < n; i += 6) 111 | { 112 | i2 = i / 2; 113 | SSD1306_DrawRectangle(&SSD1306, (SSD1306_WIDTH/2) - i2, (SSD1306_HEIGHT/2) - i2, i, i, color); 114 | SSD1306_UpdateScreen(&SSD1306); 115 | HAL_Delay (10); 116 | } 117 | } 118 | 119 | void TestFilledRectangles (uint8_t color) 120 | { 121 | uint8_t n, i, i2, 122 | cx = SSD1306_WIDTH / 2 - 1, 123 | cy = SSD1306_HEIGHT / 2 - 1; 124 | 125 | SSD1306_Clear (&SSD1306); 126 | 127 | n = min(SSD1306_WIDTH, SSD1306_HEIGHT); 128 | for (i = n; i > 0; i -= 6) 129 | { 130 | i2 = i / 2; 131 | SSD1306_DrawFilledRectangle(&SSD1306, cx - i2, cy - i2, i, i, color); 132 | SSD1306_UpdateScreen(&SSD1306); 133 | HAL_Delay (10); 134 | } 135 | } 136 | 137 | void TestFilledCircles(uint8_t radius, uint16_t color) 138 | { 139 | uint8_t x, y, w = SSD1306_WIDTH, h = SSD1306_HEIGHT, r2 = radius * 2; 140 | 141 | SSD1306_Clear (&SSD1306); 142 | 143 | for (x = radius; x < w; x += r2) 144 | { 145 | for (y = radius; y < h; y += r2) 146 | { 147 | SSD1306_DrawFilledCircle(&SSD1306, x, y, radius, color); 148 | SSD1306_UpdateScreen(&SSD1306); 149 | HAL_Delay (10); 150 | } 151 | } 152 | } 153 | 154 | void TestCircles(uint8_t radius, uint16_t color) 155 | { 156 | SSD1306_Clear (&SSD1306); 157 | 158 | uint8_t x, y, r2 = radius * 2, 159 | w = SSD1306_WIDTH + radius, 160 | h = SSD1306_HEIGHT + radius; 161 | 162 | for (x = 0; x < w; x += r2) 163 | { 164 | for (y = 0; y < h; y += r2) 165 | { 166 | SSD1306_DrawCircle(&SSD1306, x, y, radius, color); 167 | SSD1306_UpdateScreen(&SSD1306); 168 | HAL_Delay (10); 169 | } 170 | } 171 | } 172 | 173 | void TestTriangles(uint8_t color) 174 | { 175 | uint8_t n, i, cx = SSD1306_WIDTH / 2 - 1, 176 | cy = SSD1306_HEIGHT / 2 - 1; 177 | 178 | SSD1306_Clear (&SSD1306); 179 | 180 | n = min(cx, cy); 181 | for (i = 0; i < n; i += 5) 182 | { 183 | SSD1306_DrawTriangle(&SSD1306, cx , cy - i, cx - i, cy + i, cx + i, cy + i, color); 184 | SSD1306_UpdateScreen(&SSD1306); 185 | HAL_Delay (10); 186 | } 187 | 188 | } 189 | 190 | 191 | 192 | 193 | -------------------------------------------------------------------------------- /LCD_OLED_SSD1306/test.h: -------------------------------------------------------------------------------- 1 | /* 2 | * test.h 3 | * 4 | * Created on: 17-Jun-2019 5 | * Author: poe 6 | */ 7 | 8 | #ifndef TEST_H_ 9 | #define TEST_H_ 10 | 11 | #include "stdint.h" 12 | 13 | void TestLines (uint8_t color); 14 | 15 | void TestRectangles (uint8_t color); 16 | 17 | void TestFilledRectangles (uint8_t color); 18 | 19 | void TestFilledCircles(uint8_t radius, uint16_t color); 20 | 21 | void TestCircles(uint8_t radius, uint16_t color); 22 | 23 | void TestTriangles(uint8_t color); 24 | 25 | #endif /* TEST_H_ */ 26 | -------------------------------------------------------------------------------- /LCD_TFT_ST7735/ST7735_SPI.c: -------------------------------------------------------------------------------- 1 | /***************************************************************************************************************** 2 | Ten Thu Vien: ST7735 LIB 3 | Chuc Nang: Dieu khien man hinh TFT LCD 1.44, 1.8 inch 4 | Tac Gia: Khue Nguyen Creator 5 | Huong Dan Su dung: 6 | - Sua lai file Platform.h khi su dung voi thu vien khac nhau 7 | - Dinh Nghia cac chan CS, DC, RS la cac chan ouput 8 | - Cau Hinh SPI, Sua lai marco de dung voi SPI can dung: #define ST7735_SPI_PORT hspi1 9 | Pinout: 10 | 11 | ******************************************************************************************************************/ 12 | #include "ST7735_SPI.h" 13 | 14 | //*********************** Marco for HAL LIB ***************************************************/// 15 | #ifdef USE_HAL_LIB 16 | extern SPI_HandleTypeDef ST7735_SPI_PORT; 17 | /****************** Low Level Functions **********************************************************************/ 18 | void ST7735_SPI_Trans(uint8_t *buff, uint16_t buff_size) 19 | { 20 | HAL_SPI_Transmit(&ST7735_SPI_PORT, buff, buff_size, HAL_MAX_DELAY); 21 | } 22 | void delay_ms(uint32_t time_delay) 23 | { 24 | HAL_Delay(time_delay); 25 | } 26 | #endif 27 | /************************************ Middle Level Functions ************************************************/ 28 | void ST7735_Reset() 29 | { 30 | ST7735_RESET_ON(); 31 | delay_ms(5); 32 | ST7735_RESET_OFF(); 33 | } 34 | void ST7735_WriteCommand(uint8_t cmd) 35 | { 36 | ST7735_CMD(); 37 | ST7735_SPI_Trans(&cmd, sizeof(cmd)); 38 | } 39 | void ST7735_WriteData(uint8_t* buff, size_t buff_size) 40 | { 41 | ST7735_DATA(); 42 | ST7735_SPI_Trans(buff, buff_size); 43 | } 44 | 45 | void ST7735_WriteData8(uint8_t data) 46 | { 47 | ST7735_DATA(); 48 | uint8_t data8[1]; 49 | data8[0] = data; 50 | ST7735_SPI_Trans(data8, sizeof(data)); 51 | } 52 | void ST7735_WriteData16(uint16_t data) 53 | { 54 | ST7735_DATA(); 55 | uint8_t data8[2]; 56 | data8[0] = data>>8 & 0xFF; 57 | data8[1] = data &0xFF; 58 | ST7735_SPI_Trans(data8, sizeof(data8)); 59 | } 60 | 61 | void ST7735_ExecuteCommandList(const uint8_t *addr) 62 | { 63 | uint8_t numCommands, numArgs; 64 | uint16_t ms; 65 | numCommands = *addr++; 66 | while(numCommands--) { 67 | uint8_t cmd = *addr++; 68 | ST7735_WriteCommand(cmd); 69 | numArgs = *addr++; 70 | // If high bit set, delay follows args 71 | ms = numArgs & DELAY; 72 | numArgs &= ~DELAY; 73 | if(numArgs) { 74 | ST7735_WriteData((uint8_t*)addr, numArgs); 75 | addr += numArgs; 76 | } 77 | if(ms) { 78 | ms = *addr++; 79 | if(ms == 255) ms = 500; 80 | delay_ms(ms); 81 | } 82 | } 83 | } 84 | void ST7735_SetAddressWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1) { 85 | // column address set 86 | ST7735_WriteCommand(ST7735_CASET); 87 | uint8_t data[] = { 0x00, x0 + ST7735_XSTART, 0x00, x1 + ST7735_XSTART }; 88 | ST7735_WriteData(data, sizeof(data)); 89 | 90 | // row address set 91 | ST7735_WriteCommand(ST7735_RASET); 92 | data[1] = y0 + ST7735_YSTART; 93 | data[3] = y1 + ST7735_YSTART; 94 | ST7735_WriteData(data, sizeof(data)); 95 | // write to RAM 96 | ST7735_WriteCommand(ST7735_RAMWR); 97 | } 98 | 99 | void ST7735_SetCursor(uint16_t Xpos, uint16_t Ypos) 100 | { 101 | ST7735_WriteCommand(ST7735_CASET); 102 | ST7735_WriteData8(Xpos>>8); 103 | ST7735_WriteData8(Xpos&0XFF); 104 | ST7735_WriteCommand(ST7735_RASET); 105 | ST7735_WriteData8(Ypos>>8); 106 | ST7735_WriteData8(Ypos&0XFF); 107 | } 108 | 109 | void ST7735_WriteRAM_Prepare(void) 110 | { 111 | ST7735_WriteCommand(ST7735_RAMWR); 112 | } 113 | 114 | 115 | /************************* High level Functions ****************************************************************/ 116 | void ST7735_DisplayON(void) 117 | { 118 | ST7735_Select(); 119 | ST7735_WriteCommand(ST7735_DISPON); 120 | delay_ms(10); 121 | ST7735_Unselect(); 122 | } 123 | void ST7735_DisplayOFF(void) 124 | { 125 | ST7735_Select(); 126 | ST7735_WriteCommand(ST7735_DISPOFF); 127 | delay_ms(10); 128 | ST7735_Unselect(); 129 | } 130 | 131 | void ST7735_DrawPixel(uint16_t x, uint16_t y, uint16_t color) { 132 | if((x >= ST7735_WIDTH) || (y >= ST7735_HEIGHT)) 133 | return; 134 | ST7735_Select(); 135 | ST7735_SetAddressWindow(x, y, x+1, y+1); 136 | uint8_t data[] = { color >> 8, color & 0xFF }; 137 | ST7735_WriteData(data, sizeof(data)); 138 | ST7735_Unselect(); 139 | } 140 | 141 | static void ST7735_WriteChar(uint16_t x, uint16_t y, char ch, FontDef font, uint16_t color, uint16_t bgcolor) { 142 | uint32_t i, b, j; 143 | ST7735_SetAddressWindow(x, y, x+font.width-1, y+font.height-1); 144 | for(i = 0; i < font.height; i++) { 145 | b = font.data[(ch - 32) * font.height + i]; 146 | for(j = 0; j < font.width; j++) { 147 | if((b << j) & 0x8000) { 148 | uint8_t data[] = { color >> 8, color & 0xFF }; 149 | ST7735_WriteData(data, sizeof(data)); 150 | } else { 151 | uint8_t data[] = { bgcolor >> 8, bgcolor & 0xFF }; 152 | ST7735_WriteData(data, sizeof(data)); 153 | } 154 | } 155 | } 156 | } 157 | void ST7735_WriteString(uint16_t x, uint16_t y, const char* str, FontDef font, uint16_t color, uint16_t bgcolor) { 158 | ST7735_Select(); 159 | while(*str) { 160 | if(x + font.width >= ST7735_WIDTH) { 161 | x = 0; 162 | y += font.height; 163 | if(y + font.height >= ST7735_HEIGHT) { 164 | break; 165 | } 166 | if(*str == ' ') { 167 | // skip spaces in the beginning of the new line 168 | str++; 169 | continue; 170 | } 171 | } 172 | ST7735_WriteChar(x, y, *str, font, color, bgcolor); 173 | x += font.width; 174 | str++; 175 | } 176 | ST7735_Unselect(); 177 | } 178 | void ST7735_FillRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) { 179 | // clipping 180 | if((x >= ST7735_WIDTH) || (y >= ST7735_HEIGHT)) return; 181 | if((x + w - 1) >= ST7735_WIDTH) w = ST7735_WIDTH - x; 182 | if((y + h - 1) >= ST7735_HEIGHT) h = ST7735_HEIGHT - y; 183 | 184 | ST7735_Select(); 185 | ST7735_SetAddressWindow(x, y, x+w-1, y+h-1); 186 | 187 | uint8_t data[] = { color >> 8, color & 0xFF }; 188 | for(y = h; y > 0; y--) { 189 | for(x = w; x > 0; x--) { 190 | ST7735_WriteData(data, sizeof(data)); 191 | } 192 | } 193 | ST7735_Unselect(); 194 | } 195 | void ST7735_FillScreen(uint16_t color) { 196 | ST7735_FillRectangle(0, 0, ST7735_WIDTH, ST7735_HEIGHT, color); 197 | } 198 | void ST7735_InvertColors(bool invert) { 199 | ST7735_Select(); 200 | ST7735_WriteCommand(invert ? ST7735_INVON : ST7735_INVOFF); 201 | ST7735_Unselect(); 202 | } 203 | 204 | void ST7735_DrawImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint8_t* data) { 205 | if((x >= ST7735_WIDTH) || (y >= ST7735_HEIGHT)) return; 206 | if((x + w - 1) >= ST7735_WIDTH) return; 207 | if((y + h - 1) >= ST7735_HEIGHT) return; 208 | ST7735_Select(); 209 | ST7735_SetAddressWindow(x, y, x+w, y+h); 210 | for(int i =0; i< 2*w*h; i++) 211 | { 212 | ST7735_WriteData8(data[i]); 213 | } 214 | ST7735_Unselect(); 215 | } 216 | void drawHline(uint16_t xStart, uint16_t yStart, uint16_t Lenght, uint16_t Color) // Chieu Ngang 217 | { 218 | for(int i = xStart; i < Lenght + xStart - 1; i++) 219 | { 220 | ST7735_DrawPixel(i, yStart, Color); 221 | } 222 | } 223 | void drawVline(uint16_t xStart, uint16_t yStart, uint16_t Lenght, uint16_t Color) // Chieu Doc 224 | { 225 | for(int i = yStart; i < Lenght + yStart - 1; i++) 226 | { 227 | ST7735_DrawPixel(xStart, i, Color); 228 | } 229 | } 230 | void drawRect(uint16_t xStart, uint16_t yStart, uint16_t Width, uint16_t Height, uint16_t Color) 231 | { 232 | drawVline(xStart, yStart, Height , Color); 233 | drawVline(xStart + Width - 1, yStart, Height, Color); 234 | drawHline(xStart, yStart, Width , Color); 235 | drawHline(xStart, yStart + Height - 1, Width , Color); 236 | 237 | } 238 | void ST7735_Init() 239 | { 240 | ST7735_Select(); 241 | ST7735_Reset(); 242 | ST7735_ExecuteCommandList(init_cmds1); 243 | ST7735_ExecuteCommandList(init_cmds2); 244 | ST7735_ExecuteCommandList(init_cmds3); 245 | ST7735_Unselect(); 246 | } 247 | -------------------------------------------------------------------------------- /LCD_TFT_ST7735/ST7735_SPI.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __ST7735_SPI_H 3 | #define __ST7735_SPI_H 4 | #include "Platform.h" 5 | #include 6 | #include "fonts.h" 7 | #define DELAY 0x80 8 | 9 | #define ST7735_MADCTL_MY 0x80 10 | #define ST7735_MADCTL_MX 0x40 11 | #define ST7735_MADCTL_MV 0x20 12 | #define ST7735_MADCTL_ML 0x10 13 | #define ST7735_MADCTL_RGB 0x00 14 | #define ST7735_MADCTL_BGR 0x08 15 | #define ST7735_MADCTL_MH 0x04 16 | 17 | #define ST7735_Select() HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET) 18 | #define ST7735_Unselect() HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET) 19 | #define ST7735_CMD() HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_RESET) 20 | #define ST7735_DATA() HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET) 21 | #define ST7735_RESET_ON() HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_RESET); 22 | #define ST7735_RESET_OFF() HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_SET); 23 | 24 | #define ST7735_SPI_PORT hspi1 25 | 26 | #define ST7735_RES_Pin GPIO_PIN_7 27 | #define ST7735_RES_GPIO_Port GPIOB 28 | #define ST7735_CS_Pin GPIO_PIN_6 29 | #define ST7735_CS_GPIO_Port GPIOB 30 | #define ST7735_DC_Pin GPIO_PIN_8 31 | #define ST7735_DC_GPIO_Port GPIOB 32 | /*** Redefine if necessary ***/ 33 | // Type LCD define 34 | // AliExpress/eBay 1.8" display, default orientation 35 | /* 36 | #define ST7735_IS_160X128 1 37 | #define ST7735_WIDTH 128 38 | #define ST7735_HEIGHT 160 39 | #define ST7735_XSTART 0 40 | #define ST7735_YSTART 0 41 | #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MY) 42 | */ 43 | 44 | // AliExpress/eBay 1.8" display, rotate right 45 | /* 46 | #define ST7735_IS_160X128 1 47 | #define ST7735_WIDTH 160 48 | #define ST7735_HEIGHT 128 49 | #define ST7735_XSTART 0 50 | #define ST7735_YSTART 0 51 | #define ST7735_ROTATION (ST7735_MADCTL_MY | ST7735_MADCTL_MV) 52 | */ 53 | 54 | // AliExpress/eBay 1.8" display, rotate left 55 | /* 56 | #define ST7735_IS_160X128 1 57 | #define ST7735_WIDTH 160 58 | #define ST7735_HEIGHT 128 59 | #define ST7735_XSTART 0 60 | #define ST7735_YSTART 0 61 | #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MV) 62 | */ 63 | 64 | // AliExpress/eBay 1.8" display, upside down 65 | /* 66 | #define ST7735_IS_160X128 1 67 | #define ST7735_WIDTH 128 68 | #define ST7735_HEIGHT 160 69 | #define ST7735_XSTART 0 70 | #define ST7735_YSTART 0 71 | #define ST7735_ROTATION (0) 72 | */ 73 | 74 | // WaveShare ST7735S-based 1.8" display, default orientation 75 | 76 | #define ST7735_IS_160X128 1 77 | #define ST7735_WIDTH 128 78 | #define ST7735_HEIGHT 160 79 | #define ST7735_XSTART 0 80 | #define ST7735_YSTART 0 81 | #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MY | ST7735_MADCTL_RGB) 82 | 83 | // WaveShare ST7735S-based 1.8" display, rotate right 84 | /* 85 | #define ST7735_IS_160X128 1 86 | #define ST7735_WIDTH 160 87 | #define ST7735_HEIGHT 128 88 | #define ST7735_XSTART 1 89 | #define ST7735_YSTART 2 90 | #define ST7735_ROTATION (ST7735_MADCTL_MY | ST7735_MADCTL_MV | ST7735_MADCTL_RGB) 91 | */ 92 | 93 | // WaveShare ST7735S-based 1.8" display, rotate left 94 | /* 95 | #define ST7735_IS_160X128 1 96 | #define ST7735_WIDTH 160 97 | #define ST7735_HEIGHT 128 98 | #define ST7735_XSTART 1 99 | #define ST7735_YSTART 2 100 | #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MV | ST7735_MADCTL_RGB) 101 | */ 102 | 103 | // WaveShare ST7735S-based 1.8" display, upside down 104 | /* 105 | #define ST7735_IS_160X128 1 106 | #define ST7735_WIDTH 128 107 | #define ST7735_HEIGHT 160 108 | #define ST7735_XSTART 2 109 | #define ST7735_YSTART 1 110 | #define ST7735_ROTATION (ST7735_MADCTL_RGB) 111 | */ 112 | 113 | // 1.44" display, default orientation 114 | //#define ST7735_IS_128X128 1 115 | //#define ST7735_WIDTH 128 116 | //#define ST7735_HEIGHT 128 117 | //#define ST7735_XSTART 2 118 | //#define ST7735_YSTART 3 119 | //#define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MY | ST7735_MADCTL_BGR) 120 | 121 | // 1.44" display, rotate right 122 | /* 123 | #define ST7735_IS_128X128 1 124 | #define ST7735_WIDTH 128 125 | #define ST7735_HEIGHT 128 126 | #define ST7735_XSTART 3 127 | #define ST7735_YSTART 2 128 | #define ST7735_ROTATION (ST7735_MADCTL_MY | ST7735_MADCTL_MV | ST7735_MADCTL_BGR) 129 | */ 130 | 131 | // 1.44" display, rotate left 132 | /* 133 | #define ST7735_IS_128X128 1 134 | #define ST7735_WIDTH 128 135 | #define ST7735_HEIGHT 128 136 | #define ST7735_XSTART 1 137 | #define ST7735_YSTART 2 138 | #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MV | ST7735_MADCTL_BGR) 139 | */ 140 | 141 | // 1.44" display, upside down 142 | /* 143 | #define ST7735_IS_128X128 1 144 | #define ST7735_WIDTH 128 145 | #define ST7735_HEIGHT 128 146 | #define ST7735_XSTART 2 147 | #define ST7735_YSTART 1 148 | #define ST7735_ROTATION (ST7735_MADCTL_BGR) 149 | */ 150 | 151 | // mini 160x80 display (it's unlikely you want the default orientation) 152 | /* 153 | #define ST7735_IS_160X80 1 154 | #define ST7735_XSTART 26 155 | #define ST7735_YSTART 1 156 | #define ST7735_WIDTH 80 157 | #define ST7735_HEIGHT 160 158 | #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MY | ST7735_MADCTL_BGR) 159 | */ 160 | 161 | // mini 160x80, rotate left 162 | /* 163 | #define ST7735_IS_160X80 1 164 | #define ST7735_XSTART 1 165 | #define ST7735_YSTART 26 166 | #define ST7735_WIDTH 160 167 | #define ST7735_HEIGHT 80 168 | #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MV | ST7735_MADCTL_BGR) 169 | */ 170 | 171 | // mini 160x80, rotate right 172 | /* 173 | #define ST7735_IS_160X80 1 174 | #define ST7735_XSTART 1 175 | #define ST7735_YSTART 26 176 | #define ST7735_WIDTH 160 177 | #define ST7735_HEIGHT 80 178 | #define ST7735_ROTATION (ST7735_MADCTL_MY | ST7735_MADCTL_MV | ST7735_MADCTL_BGR) 179 | */ 180 | 181 | /****************************/ 182 | // command define 183 | #define ST7735_NOP 0x00 184 | #define ST7735_SWRESET 0x01 185 | #define ST7735_RDDID 0x04 186 | #define ST7735_RDDST 0x09 187 | 188 | #define ST7735_SLPIN 0x10 189 | #define ST7735_SLPOUT 0x11 190 | #define ST7735_PTLON 0x12 191 | #define ST7735_NORON 0x13 192 | 193 | #define ST7735_INVOFF 0x20 194 | #define ST7735_INVON 0x21 195 | #define ST7735_DISPOFF 0x28 196 | #define ST7735_DISPON 0x29 197 | #define ST7735_CASET 0x2A 198 | #define ST7735_RASET 0x2B 199 | #define ST7735_RAMWR 0x2C 200 | #define ST7735_RAMRD 0x2E 201 | 202 | #define ST7735_PTLAR 0x30 203 | #define ST7735_COLMOD 0x3A 204 | #define ST7735_MADCTL 0x36 205 | 206 | #define ST7735_FRMCTR1 0xB1 207 | #define ST7735_FRMCTR2 0xB2 208 | #define ST7735_FRMCTR3 0xB3 209 | #define ST7735_INVCTR 0xB4 210 | #define ST7735_DISSET5 0xB6 211 | 212 | #define ST7735_PWCTR1 0xC0 213 | #define ST7735_PWCTR2 0xC1 214 | #define ST7735_PWCTR3 0xC2 215 | #define ST7735_PWCTR4 0xC3 216 | #define ST7735_PWCTR5 0xC4 217 | #define ST7735_VMCTR1 0xC5 218 | 219 | #define ST7735_RDID1 0xDA 220 | #define ST7735_RDID2 0xDB 221 | #define ST7735_RDID3 0xDC 222 | #define ST7735_RDID4 0xDD 223 | 224 | #define ST7735_PWCTR6 0xFC 225 | 226 | #define ST7735_GMCTRP1 0xE0 227 | #define ST7735_GMCTRN1 0xE1 228 | 229 | // Color definitions 230 | #define ST7735_BLACK 0x0000 231 | #define ST7735_BLUE 0x001F 232 | #define ST7735_RED 0xF800 233 | #define ST7735_GREEN 0x07E0 234 | #define ST7735_CYAN 0x07FF 235 | #define ST7735_MAGENTA 0xF81F 236 | #define ST7735_YELLOW 0xFFE0 237 | #define ST7735_WHITE 0xFFFF 238 | #define ST7735_COLOR565(r, g, b) (((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3)) 239 | 240 | // Tap Lenh dieu khien: CMD, Delay or num of arg, time delay or arg 241 | static const uint8_t 242 | init_cmds1[] = { // Init for 7735R, part 1 (red or green tab) 243 | 15, // 15 commands in list: 244 | ST7735_SWRESET, DELAY, // 1: Software reset, 0 args, w/delay 245 | 150, // 150 ms delay 246 | ST7735_SLPOUT , DELAY, // 2: Out of sleep mode, 0 args, w/delay 247 | 255, // 500 ms delay 248 | ST7735_FRMCTR1, 3 , // 3: Frame rate ctrl - normal mode, 3 args: 249 | 0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D) 250 | ST7735_FRMCTR2, 3 , // 4: Frame rate control - idle mode, 3 args: 251 | 0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D) 252 | ST7735_FRMCTR3, 6 , // 5: Frame rate ctrl - partial mode, 6 args: 253 | 0x01, 0x2C, 0x2D, // Dot inversion mode 254 | 0x01, 0x2C, 0x2D, // Line inversion mode 255 | ST7735_INVCTR , 1 , // 6: Display inversion ctrl, 1 arg, no delay: 256 | 0x07, // No inversion 257 | ST7735_PWCTR1 , 3 , // 7: Power control, 3 args, no delay: 258 | 0xA2, // 259 | 0x02, // -4.6V 260 | 0x84, // AUTO mode 261 | ST7735_PWCTR2 , 1 , // 8: Power control, 1 arg, no delay: 262 | 0xC5, // VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD 263 | ST7735_PWCTR3 , 2 , // 9: Power control, 2 args, no delay: 264 | 0x0A, // Opamp current small 265 | 0x00, // Boost frequency 266 | ST7735_PWCTR4 , 2 , // 10: Power control, 2 args, no delay: 267 | 0x8A, // BCLK/2, Opamp current small & Medium low 268 | 0x2A, // 269 | ST7735_PWCTR5 , 2 , // 11: Power control, 2 args, no delay: 270 | 0x8A, 0xEE, // 271 | ST7735_VMCTR1 , 1 , // 12: Power control, 1 arg, no delay: 272 | 0x0E, // 273 | ST7735_INVOFF , 0 , // 13: Don't invert display, no args, no delay 274 | ST7735_MADCTL , 1 , // 14: Memory access control (directions), 1 arg: 275 | ST7735_ROTATION, // row addr/col addr, bottom to top refresh 276 | ST7735_COLMOD , 1 , // 15: set color mode, 1 arg, no delay: 277 | 0x05 }, // 16-bit color 278 | 279 | #if (defined(ST7735_IS_128X128) || defined(ST7735_IS_160X128)) 280 | init_cmds2[] = { // Init for 7735R, part 2 (1.44" display) 281 | 2, // 2 commands in list: 282 | ST7735_CASET , 4 , // 1: Column addr set, 4 args, no delay: 283 | 0x00, 0x00, // XSTART = 0 284 | 0x00, 0x7F, // XEND = 127 285 | ST7735_RASET , 4 , // 2: Row addr set, 4 args, no delay: 286 | 0x00, 0x00, // XSTART = 0 287 | 0x00, 0x7F }, // XEND = 127 288 | #endif // ST7735_IS_128X128 289 | 290 | #ifdef ST7735_IS_160X80 291 | init_cmds2[] = { // Init for 7735S, part 2 (160x80 display) 292 | 3, // 3 commands in list: 293 | ST7735_CASET , 4 , // 1: Column addr set, 4 args, no delay: 294 | 0x00, 0x00, // XSTART = 0 295 | 0x00, 0x4F, // XEND = 79 296 | ST7735_RASET , 4 , // 2: Row addr set, 4 args, no delay: 297 | 0x00, 0x00, // XSTART = 0 298 | 0x00, 0x9F , // XEND = 159 299 | ST7735_INVON, 0 }, // 3: Invert colors 300 | #endif 301 | 302 | init_cmds3[] = { // Init for 7735R, part 3 (red or green tab) 303 | 4, // 4 commands in list: 304 | ST7735_GMCTRP1, 16 , // 1: Magical unicorn dust, 16 args, no delay: 305 | 0x02, 0x1c, 0x07, 0x12, 306 | 0x37, 0x32, 0x29, 0x2d, 307 | 0x29, 0x25, 0x2B, 0x39, 308 | 0x00, 0x01, 0x03, 0x10, 309 | ST7735_GMCTRN1, 16 , // 2: Sparkles and rainbows, 16 args, no delay: 310 | 0x03, 0x1d, 0x07, 0x06, 311 | 0x2E, 0x2C, 0x29, 0x2D, 312 | 0x2E, 0x2E, 0x37, 0x3F, 313 | 0x00, 0x00, 0x02, 0x10, 314 | ST7735_NORON , DELAY, // 3: Normal display on, no args, w/delay 315 | 10, // 10 ms delay 316 | ST7735_DISPON , DELAY, // 4: Main screen turn on, no args w/delay 317 | 100 }; // 100 ms delay 318 | //******************* funtion define 319 | void ST7735_Reset(void); 320 | void ST7735_WriteCommand(uint8_t cmd); 321 | void ST7735_WriteData(uint8_t* buff, size_t buff_size); 322 | void ST7735_WriteData8(uint8_t data); 323 | void ST7735_WriteData16(uint16_t data); 324 | 325 | void ST7735_Init(void); 326 | void ST7735_SetAddressWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1); 327 | void ST7735_SetCursor(uint16_t Xpos, uint16_t Ypos); 328 | void ST7735_WriteRAM_Prepare(void); 329 | void ST7735_DisplayOFF(void); 330 | void ST7735_DisplayON(void); 331 | 332 | void ST7735_DrawPixel(uint16_t x, uint16_t y, uint16_t color); 333 | void ST7735_WriteString(uint16_t x, uint16_t y, const char* str, FontDef font, uint16_t color, uint16_t bgcolor); 334 | void ST7735_FillRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color); 335 | void ST7735_FillScreen(uint16_t color); 336 | void ST7735_DrawImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint8_t* data); 337 | void ST7735_InvertColors(bool invert); 338 | void drawHline(uint16_t xStart, uint16_t yStart, uint16_t Lenght, uint16_t Color); 339 | void drawVline(uint16_t xStart, uint16_t yStart, uint16_t Lenght, uint16_t Color); 340 | void drawRect(uint16_t xStart, uint16_t yStart, uint16_t Width, uint16_t Height, uint16_t Color); 341 | #endif 342 | -------------------------------------------------------------------------------- /LCD_TFT_ST7735/fonts.c: -------------------------------------------------------------------------------- 1 | /* vim: set ai et ts=4 sw=4: */ 2 | #include "fonts.h" 3 | 4 | static const uint16_t Font7x10 [] = { 5 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // sp 6 | 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x1000, 0x0000, 0x0000, // ! 7 | 0x2800, 0x2800, 0x2800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // " 8 | 0x2400, 0x2400, 0x7C00, 0x2400, 0x4800, 0x7C00, 0x4800, 0x4800, 0x0000, 0x0000, // # 9 | 0x3800, 0x5400, 0x5000, 0x3800, 0x1400, 0x5400, 0x5400, 0x3800, 0x1000, 0x0000, // $ 10 | 0x2000, 0x5400, 0x5800, 0x3000, 0x2800, 0x5400, 0x1400, 0x0800, 0x0000, 0x0000, // % 11 | 0x1000, 0x2800, 0x2800, 0x1000, 0x3400, 0x4800, 0x4800, 0x3400, 0x0000, 0x0000, // & 12 | 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ' 13 | 0x0800, 0x1000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x1000, 0x0800, // ( 14 | 0x2000, 0x1000, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x1000, 0x2000, // ) 15 | 0x1000, 0x3800, 0x1000, 0x2800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // * 16 | 0x0000, 0x0000, 0x1000, 0x1000, 0x7C00, 0x1000, 0x1000, 0x0000, 0x0000, 0x0000, // + 17 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, // , 18 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3800, 0x0000, 0x0000, 0x0000, 0x0000, // - 19 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, // . 20 | 0x0800, 0x0800, 0x1000, 0x1000, 0x1000, 0x1000, 0x2000, 0x2000, 0x0000, 0x0000, // / 21 | 0x3800, 0x4400, 0x4400, 0x5400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 0 22 | 0x1000, 0x3000, 0x5000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // 1 23 | 0x3800, 0x4400, 0x4400, 0x0400, 0x0800, 0x1000, 0x2000, 0x7C00, 0x0000, 0x0000, // 2 24 | 0x3800, 0x4400, 0x0400, 0x1800, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 3 25 | 0x0800, 0x1800, 0x2800, 0x2800, 0x4800, 0x7C00, 0x0800, 0x0800, 0x0000, 0x0000, // 4 26 | 0x7C00, 0x4000, 0x4000, 0x7800, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 5 27 | 0x3800, 0x4400, 0x4000, 0x7800, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 6 28 | 0x7C00, 0x0400, 0x0800, 0x1000, 0x1000, 0x2000, 0x2000, 0x2000, 0x0000, 0x0000, // 7 29 | 0x3800, 0x4400, 0x4400, 0x3800, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 8 30 | 0x3800, 0x4400, 0x4400, 0x4400, 0x3C00, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 9 31 | 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, // : 32 | 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, // ; 33 | 0x0000, 0x0000, 0x0C00, 0x3000, 0x4000, 0x3000, 0x0C00, 0x0000, 0x0000, 0x0000, // < 34 | 0x0000, 0x0000, 0x0000, 0x7C00, 0x0000, 0x7C00, 0x0000, 0x0000, 0x0000, 0x0000, // = 35 | 0x0000, 0x0000, 0x6000, 0x1800, 0x0400, 0x1800, 0x6000, 0x0000, 0x0000, 0x0000, // > 36 | 0x3800, 0x4400, 0x0400, 0x0800, 0x1000, 0x1000, 0x0000, 0x1000, 0x0000, 0x0000, // ? 37 | 0x3800, 0x4400, 0x4C00, 0x5400, 0x5C00, 0x4000, 0x4000, 0x3800, 0x0000, 0x0000, // @ 38 | 0x1000, 0x2800, 0x2800, 0x2800, 0x2800, 0x7C00, 0x4400, 0x4400, 0x0000, 0x0000, // A 39 | 0x7800, 0x4400, 0x4400, 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x0000, 0x0000, // B 40 | 0x3800, 0x4400, 0x4000, 0x4000, 0x4000, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // C 41 | 0x7000, 0x4800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4800, 0x7000, 0x0000, 0x0000, // D 42 | 0x7C00, 0x4000, 0x4000, 0x7C00, 0x4000, 0x4000, 0x4000, 0x7C00, 0x0000, 0x0000, // E 43 | 0x7C00, 0x4000, 0x4000, 0x7800, 0x4000, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // F 44 | 0x3800, 0x4400, 0x4000, 0x4000, 0x5C00, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // G 45 | 0x4400, 0x4400, 0x4400, 0x7C00, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // H 46 | 0x3800, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3800, 0x0000, 0x0000, // I 47 | 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // J 48 | 0x4400, 0x4800, 0x5000, 0x6000, 0x5000, 0x4800, 0x4800, 0x4400, 0x0000, 0x0000, // K 49 | 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x7C00, 0x0000, 0x0000, // L 50 | 0x4400, 0x6C00, 0x6C00, 0x5400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // M 51 | 0x4400, 0x6400, 0x6400, 0x5400, 0x5400, 0x4C00, 0x4C00, 0x4400, 0x0000, 0x0000, // N 52 | 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // O 53 | 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // P 54 | 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x5400, 0x3800, 0x0400, 0x0000, // Q 55 | 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x4800, 0x4800, 0x4400, 0x0000, 0x0000, // R 56 | 0x3800, 0x4400, 0x4000, 0x3000, 0x0800, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // S 57 | 0x7C00, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // T 58 | 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // U 59 | 0x4400, 0x4400, 0x4400, 0x2800, 0x2800, 0x2800, 0x1000, 0x1000, 0x0000, 0x0000, // V 60 | 0x4400, 0x4400, 0x5400, 0x5400, 0x5400, 0x6C00, 0x2800, 0x2800, 0x0000, 0x0000, // W 61 | 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x2800, 0x2800, 0x4400, 0x0000, 0x0000, // X 62 | 0x4400, 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // Y 63 | 0x7C00, 0x0400, 0x0800, 0x1000, 0x1000, 0x2000, 0x4000, 0x7C00, 0x0000, 0x0000, // Z 64 | 0x1800, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1800, // [ 65 | 0x2000, 0x2000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0800, 0x0800, 0x0000, 0x0000, /* \ */ 66 | 0x3000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3000, // ] 67 | 0x1000, 0x2800, 0x2800, 0x4400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ^ 68 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFE00, // _ 69 | 0x2000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ` 70 | 0x0000, 0x0000, 0x3800, 0x4400, 0x3C00, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // a 71 | 0x4000, 0x4000, 0x5800, 0x6400, 0x4400, 0x4400, 0x6400, 0x5800, 0x0000, 0x0000, // b 72 | 0x0000, 0x0000, 0x3800, 0x4400, 0x4000, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // c 73 | 0x0400, 0x0400, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // d 74 | 0x0000, 0x0000, 0x3800, 0x4400, 0x7C00, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // e 75 | 0x0C00, 0x1000, 0x7C00, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // f 76 | 0x0000, 0x0000, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0400, 0x7800, // g 77 | 0x4000, 0x4000, 0x5800, 0x6400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // h 78 | 0x1000, 0x0000, 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // i 79 | 0x1000, 0x0000, 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0xE000, // j 80 | 0x4000, 0x4000, 0x4800, 0x5000, 0x6000, 0x5000, 0x4800, 0x4400, 0x0000, 0x0000, // k 81 | 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // l 82 | 0x0000, 0x0000, 0x7800, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x0000, 0x0000, // m 83 | 0x0000, 0x0000, 0x5800, 0x6400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // n 84 | 0x0000, 0x0000, 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // o 85 | 0x0000, 0x0000, 0x5800, 0x6400, 0x4400, 0x4400, 0x6400, 0x5800, 0x4000, 0x4000, // p 86 | 0x0000, 0x0000, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0400, 0x0400, // q 87 | 0x0000, 0x0000, 0x5800, 0x6400, 0x4000, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // r 88 | 0x0000, 0x0000, 0x3800, 0x4400, 0x3000, 0x0800, 0x4400, 0x3800, 0x0000, 0x0000, // s 89 | 0x2000, 0x2000, 0x7800, 0x2000, 0x2000, 0x2000, 0x2000, 0x1800, 0x0000, 0x0000, // t 90 | 0x0000, 0x0000, 0x4400, 0x4400, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // u 91 | 0x0000, 0x0000, 0x4400, 0x4400, 0x2800, 0x2800, 0x2800, 0x1000, 0x0000, 0x0000, // v 92 | 0x0000, 0x0000, 0x5400, 0x5400, 0x5400, 0x6C00, 0x2800, 0x2800, 0x0000, 0x0000, // w 93 | 0x0000, 0x0000, 0x4400, 0x2800, 0x1000, 0x1000, 0x2800, 0x4400, 0x0000, 0x0000, // x 94 | 0x0000, 0x0000, 0x4400, 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x1000, 0x6000, // y 95 | 0x0000, 0x0000, 0x7C00, 0x0800, 0x1000, 0x2000, 0x4000, 0x7C00, 0x0000, 0x0000, // z 96 | 0x1800, 0x1000, 0x1000, 0x1000, 0x2000, 0x2000, 0x1000, 0x1000, 0x1000, 0x1800, // { 97 | 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, // | 98 | 0x3000, 0x1000, 0x1000, 0x1000, 0x0800, 0x0800, 0x1000, 0x1000, 0x1000, 0x3000, // } 99 | 0x0000, 0x0000, 0x0000, 0x7400, 0x4C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ~ 100 | }; 101 | 102 | static const uint16_t Font11x18 [] = { 103 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // sp 104 | 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // ! 105 | 0x0000, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // " 106 | 0x0000, 0x1980, 0x1980, 0x1980, 0x1980, 0x7FC0, 0x7FC0, 0x1980, 0x3300, 0x7FC0, 0x7FC0, 0x3300, 0x3300, 0x3300, 0x3300, 0x0000, 0x0000, 0x0000, // # 107 | 0x0000, 0x1E00, 0x3F00, 0x7580, 0x6580, 0x7400, 0x3C00, 0x1E00, 0x0700, 0x0580, 0x6580, 0x6580, 0x7580, 0x3F00, 0x1E00, 0x0400, 0x0400, 0x0000, // $ 108 | 0x0000, 0x7000, 0xD800, 0xD840, 0xD8C0, 0xD980, 0x7300, 0x0600, 0x0C00, 0x1B80, 0x36C0, 0x66C0, 0x46C0, 0x06C0, 0x0380, 0x0000, 0x0000, 0x0000, // % 109 | 0x0000, 0x1E00, 0x3F00, 0x3300, 0x3300, 0x3300, 0x1E00, 0x0C00, 0x3CC0, 0x66C0, 0x6380, 0x6180, 0x6380, 0x3EC0, 0x1C80, 0x0000, 0x0000, 0x0000, // & 110 | 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ' 111 | 0x0080, 0x0100, 0x0300, 0x0600, 0x0600, 0x0400, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0400, 0x0600, 0x0600, 0x0300, 0x0100, 0x0080, // ( 112 | 0x2000, 0x1000, 0x1800, 0x0C00, 0x0C00, 0x0400, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0400, 0x0C00, 0x0C00, 0x1800, 0x1000, 0x2000, // ) 113 | 0x0000, 0x0C00, 0x2D00, 0x3F00, 0x1E00, 0x3300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // * 114 | 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0xFFC0, 0xFFC0, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // + 115 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0400, 0x0400, 0x0800, // , 116 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x1E00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // - 117 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // . 118 | 0x0000, 0x0300, 0x0300, 0x0300, 0x0600, 0x0600, 0x0600, 0x0600, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x1800, 0x1800, 0x1800, 0x0000, 0x0000, 0x0000, // / 119 | 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6D80, 0x6D80, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 0 120 | 0x0000, 0x0600, 0x0E00, 0x1E00, 0x3600, 0x2600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // 1 121 | 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6180, 0x0180, 0x0300, 0x0600, 0x0C00, 0x1800, 0x3000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // 2 122 | 0x0000, 0x1C00, 0x3E00, 0x6300, 0x6300, 0x0300, 0x0E00, 0x0E00, 0x0300, 0x0180, 0x0180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 3 123 | 0x0000, 0x0600, 0x0E00, 0x0E00, 0x1E00, 0x1E00, 0x1600, 0x3600, 0x3600, 0x6600, 0x7F80, 0x7F80, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // 4 124 | 0x0000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6E00, 0x7F00, 0x6380, 0x0180, 0x0180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 5 125 | 0x0000, 0x1E00, 0x3F00, 0x3380, 0x6180, 0x6000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x3380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 6 126 | 0x0000, 0x7F80, 0x7F80, 0x0180, 0x0300, 0x0300, 0x0600, 0x0600, 0x0C00, 0x0C00, 0x0C00, 0x0800, 0x1800, 0x1800, 0x1800, 0x0000, 0x0000, 0x0000, // 7 127 | 0x0000, 0x1E00, 0x3F00, 0x6380, 0x6180, 0x6180, 0x2100, 0x1E00, 0x3F00, 0x6180, 0x6180, 0x6180, 0x6180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 8 128 | 0x0000, 0x1E00, 0x3F00, 0x7300, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x6180, 0x7300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 9 129 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // : 130 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0400, 0x0400, 0x0800, // ; 131 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0380, 0x0E00, 0x3800, 0x6000, 0x3800, 0x0E00, 0x0380, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // < 132 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // = 133 | 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x7000, 0x1C00, 0x0700, 0x0180, 0x0700, 0x1C00, 0x7000, 0x4000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // > 134 | 0x0000, 0x1F00, 0x3F80, 0x71C0, 0x60C0, 0x00C0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0C00, 0x0C00, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // ? 135 | 0x0000, 0x1E00, 0x3F00, 0x3180, 0x7180, 0x6380, 0x6F80, 0x6D80, 0x6D80, 0x6F80, 0x6780, 0x6000, 0x3200, 0x3E00, 0x1C00, 0x0000, 0x0000, 0x0000, // @ 136 | 0x0000, 0x0E00, 0x0E00, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x3180, 0x3180, 0x3F80, 0x3F80, 0x3180, 0x60C0, 0x60C0, 0x60C0, 0x0000, 0x0000, 0x0000, // A 137 | 0x0000, 0x7C00, 0x7E00, 0x6300, 0x6300, 0x6300, 0x6300, 0x7E00, 0x7E00, 0x6300, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x0000, 0x0000, 0x0000, // B 138 | 0x0000, 0x1E00, 0x3F00, 0x3180, 0x6180, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6180, 0x3180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // C 139 | 0x0000, 0x7C00, 0x7F00, 0x6300, 0x6380, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6300, 0x6300, 0x7E00, 0x7C00, 0x0000, 0x0000, 0x0000, // D 140 | 0x0000, 0x7F80, 0x7F80, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // E 141 | 0x0000, 0x7F80, 0x7F80, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000, // F 142 | 0x0000, 0x1E00, 0x3F00, 0x3180, 0x6180, 0x6000, 0x6000, 0x6000, 0x6380, 0x6380, 0x6180, 0x6180, 0x3180, 0x3F80, 0x1E00, 0x0000, 0x0000, 0x0000, // G 143 | 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x7F80, 0x7F80, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // H 144 | 0x0000, 0x3F00, 0x3F00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x3F00, 0x3F00, 0x0000, 0x0000, 0x0000, // I 145 | 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // J 146 | 0x0000, 0x60C0, 0x6180, 0x6300, 0x6600, 0x6600, 0x6C00, 0x7800, 0x7C00, 0x6600, 0x6600, 0x6300, 0x6180, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // K 147 | 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // L 148 | 0x0000, 0x71C0, 0x71C0, 0x7BC0, 0x7AC0, 0x6AC0, 0x6AC0, 0x6EC0, 0x64C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x0000, 0x0000, 0x0000, // M 149 | 0x0000, 0x7180, 0x7180, 0x7980, 0x7980, 0x7980, 0x6D80, 0x6D80, 0x6D80, 0x6580, 0x6780, 0x6780, 0x6780, 0x6380, 0x6380, 0x0000, 0x0000, 0x0000, // N 150 | 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // O 151 | 0x0000, 0x7E00, 0x7F00, 0x6380, 0x6180, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000, // P 152 | 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6580, 0x6780, 0x3300, 0x3F80, 0x1E40, 0x0000, 0x0000, 0x0000, // Q 153 | 0x0000, 0x7E00, 0x7F00, 0x6380, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x6600, 0x6300, 0x6300, 0x6180, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // R 154 | 0x0000, 0x0E00, 0x1F00, 0x3180, 0x3180, 0x3000, 0x3800, 0x1E00, 0x0700, 0x0380, 0x6180, 0x6180, 0x3180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // S 155 | 0x0000, 0xFFC0, 0xFFC0, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // T 156 | 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // U 157 | 0x0000, 0x60C0, 0x60C0, 0x60C0, 0x3180, 0x3180, 0x3180, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0E00, 0x0400, 0x0000, 0x0000, 0x0000, // V 158 | 0x0000, 0xC0C0, 0xC0C0, 0xC0C0, 0xC0C0, 0xC0C0, 0xCCC0, 0x4C80, 0x4C80, 0x5E80, 0x5280, 0x5280, 0x7380, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // W 159 | 0x0000, 0xC0C0, 0x6080, 0x6180, 0x3300, 0x3B00, 0x1E00, 0x0C00, 0x0C00, 0x1E00, 0x1F00, 0x3B00, 0x7180, 0x6180, 0xC0C0, 0x0000, 0x0000, 0x0000, // X 160 | 0x0000, 0xC0C0, 0x6180, 0x6180, 0x3300, 0x3300, 0x1E00, 0x1E00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // Y 161 | 0x0000, 0x3F80, 0x3F80, 0x0180, 0x0300, 0x0300, 0x0600, 0x0C00, 0x0C00, 0x1800, 0x1800, 0x3000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // Z 162 | 0x0F00, 0x0F00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0F00, 0x0F00, // [ 163 | 0x0000, 0x1800, 0x1800, 0x1800, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300, 0x0300, 0x0000, 0x0000, 0x0000, /* \ */ 164 | 0x1E00, 0x1E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x1E00, 0x1E00, // ] 165 | 0x0000, 0x0C00, 0x0C00, 0x1E00, 0x1200, 0x3300, 0x3300, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ^ 166 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFE0, 0x0000, // _ 167 | 0x0000, 0x3800, 0x1800, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ` 168 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1F00, 0x3F80, 0x6180, 0x0180, 0x1F80, 0x3F80, 0x6180, 0x6380, 0x7F80, 0x38C0, 0x0000, 0x0000, 0x0000, // a 169 | 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x7F00, 0x6E00, 0x0000, 0x0000, 0x0000, // b 170 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6000, 0x6000, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // c 171 | 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0000, 0x0000, 0x0000, // d 172 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7300, 0x6180, 0x7F80, 0x7F80, 0x6000, 0x7180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // e 173 | 0x0000, 0x07C0, 0x0FC0, 0x0C00, 0x0C00, 0x7F80, 0x7F80, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // f 174 | 0x0000, 0x0000, 0x0000, 0x0000, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x6380, 0x7F00, 0x3E00, // g 175 | 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6F00, 0x7F80, 0x7180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // h 176 | 0x0000, 0x0600, 0x0600, 0x0000, 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // i 177 | 0x0600, 0x0600, 0x0000, 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x4600, 0x7E00, 0x3C00, // j 178 | 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6180, 0x6300, 0x6600, 0x6C00, 0x7C00, 0x7600, 0x6300, 0x6300, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // k 179 | 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // l 180 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD80, 0xFFC0, 0xCEC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0x0000, 0x0000, 0x0000, // m 181 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6F00, 0x7F80, 0x7180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // n 182 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // o 183 | 0x0000, 0x0000, 0x0000, 0x0000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x7F00, 0x6E00, 0x6000, 0x6000, 0x6000, 0x6000, // p 184 | 0x0000, 0x0000, 0x0000, 0x0000, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x0180, 0x0180, 0x0180, // q 185 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6700, 0x3F80, 0x3900, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x0000, 0x0000, 0x0000, // r 186 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F80, 0x6180, 0x6000, 0x7F00, 0x3F80, 0x0180, 0x6180, 0x7F00, 0x1E00, 0x0000, 0x0000, 0x0000, // s 187 | 0x0000, 0x0000, 0x0800, 0x1800, 0x1800, 0x7F00, 0x7F00, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1F80, 0x0F80, 0x0000, 0x0000, 0x0000, // t 188 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6380, 0x7F80, 0x3D80, 0x0000, 0x0000, 0x0000, // u 189 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x60C0, 0x3180, 0x3180, 0x3180, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0600, 0x0000, 0x0000, 0x0000, // v 190 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD80, 0xDD80, 0xDD80, 0x5500, 0x5500, 0x5500, 0x7700, 0x7700, 0x2200, 0x2200, 0x0000, 0x0000, 0x0000, // w 191 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x3300, 0x3300, 0x1E00, 0x0C00, 0x0C00, 0x1E00, 0x3300, 0x3300, 0x6180, 0x0000, 0x0000, 0x0000, // x 192 | 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x6180, 0x3180, 0x3300, 0x3300, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0E00, 0x1C00, 0x7C00, 0x7000, // y 193 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7FC0, 0x7FC0, 0x0180, 0x0300, 0x0600, 0x0C00, 0x1800, 0x3000, 0x7FC0, 0x7FC0, 0x0000, 0x0000, 0x0000, // z 194 | 0x0380, 0x0780, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0E00, 0x1C00, 0x1C00, 0x0E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0780, 0x0380, // { 195 | 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, // | 196 | 0x3800, 0x3C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0E00, 0x0700, 0x0700, 0x0E00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x3C00, 0x3800, // } 197 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3880, 0x7F80, 0x4700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ~ 198 | }; 199 | 200 | static const uint16_t Font16x26 [] = { 201 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [ ] 202 | 0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03C0,0x03C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [!] 203 | 0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = ["] 204 | 0x01CE,0x03CE,0x03DE,0x039E,0x039C,0x079C,0x3FFF,0x7FFF,0x0738,0x0F38,0x0F78,0x0F78,0x0E78,0xFFFF,0xFFFF,0x1EF0,0x1CF0,0x1CE0,0x3CE0,0x3DE0,0x39E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [#] 205 | 0x03FC,0x0FFE,0x1FEE,0x1EE0,0x1EE0,0x1EE0,0x1EE0,0x1FE0,0x0FE0,0x07E0,0x03F0,0x01FC,0x01FE,0x01FE,0x01FE,0x01FE,0x01FE,0x01FE,0x3DFE,0x3FFC,0x0FF0,0x01E0,0x01E0,0x0000,0x0000,0x0000, // Ascii = [$] 206 | 0x3E03,0xF707,0xE78F,0xE78E,0xE39E,0xE3BC,0xE7B8,0xE7F8,0xF7F0,0x3FE0,0x01C0,0x03FF,0x07FF,0x07F3,0x0FF3,0x1EF3,0x3CF3,0x38F3,0x78F3,0xF07F,0xE03F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [%] 207 | 0x07E0,0x0FF8,0x0F78,0x1F78,0x1F78,0x1F78,0x0F78,0x0FF0,0x0FE0,0x1F80,0x7FC3,0xFBC3,0xF3E7,0xF1F7,0xF0F7,0xF0FF,0xF07F,0xF83E,0x7C7F,0x3FFF,0x1FEF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [&] 208 | 0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03C0,0x01C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = ['] 209 | 0x003F,0x007C,0x01F0,0x01E0,0x03C0,0x07C0,0x0780,0x0780,0x0F80,0x0F00,0x0F00,0x0F00,0x0F00,0x0F00,0x0F00,0x0F80,0x0780,0x0780,0x07C0,0x03C0,0x01E0,0x01F0,0x007C,0x003F,0x000F,0x0000, // Ascii = [(] 210 | 0x7E00,0x1F00,0x07C0,0x03C0,0x01E0,0x01F0,0x00F0,0x00F0,0x00F8,0x0078,0x0078,0x0078,0x0078,0x0078,0x0078,0x00F8,0x00F0,0x00F0,0x01F0,0x01E0,0x03C0,0x07C0,0x1F00,0x7E00,0x7800,0x0000, // Ascii = [)] 211 | 0x03E0,0x03C0,0x01C0,0x39CE,0x3FFF,0x3F7F,0x0320,0x0370,0x07F8,0x0F78,0x1F3C,0x0638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [*] 212 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0xFFFF,0xFFFF,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [+] 213 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x01E0,0x01E0,0x01E0,0x01C0,0x0380, // Ascii = [,] 214 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3FFE,0x3FFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [-] 215 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [.] 216 | 0x000F,0x000F,0x001E,0x001E,0x003C,0x003C,0x0078,0x0078,0x00F0,0x00F0,0x01E0,0x01E0,0x03C0,0x03C0,0x0780,0x0780,0x0F00,0x0F00,0x1E00,0x1E00,0x3C00,0x3C00,0x7800,0x7800,0xF000,0x0000, // Ascii = [/] 217 | 0x07F0,0x0FF8,0x1F7C,0x3E3E,0x3C1E,0x7C1F,0x7C1F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x7C1F,0x7C1F,0x3C1E,0x3E3E,0x1F7C,0x0FF8,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [0] 218 | 0x00F0,0x07F0,0x3FF0,0x3FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [1] 219 | 0x0FE0,0x3FF8,0x3C7C,0x003C,0x003E,0x003E,0x003E,0x003C,0x003C,0x007C,0x00F8,0x01F0,0x03E0,0x07C0,0x0780,0x0F00,0x1E00,0x3E00,0x3C00,0x3FFE,0x3FFE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [2] 220 | 0x0FF0,0x1FF8,0x1C7C,0x003E,0x003E,0x003E,0x003C,0x003C,0x00F8,0x0FF0,0x0FF8,0x007C,0x003E,0x001E,0x001E,0x001E,0x001E,0x003E,0x1C7C,0x1FF8,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [3] 221 | 0x0078,0x00F8,0x00F8,0x01F8,0x03F8,0x07F8,0x07F8,0x0F78,0x1E78,0x1E78,0x3C78,0x7878,0x7878,0xFFFF,0xFFFF,0x0078,0x0078,0x0078,0x0078,0x0078,0x0078,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [4] 222 | 0x1FFC,0x1FFC,0x1FFC,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1FE0,0x1FF8,0x00FC,0x007C,0x003E,0x003E,0x001E,0x003E,0x003E,0x003C,0x1C7C,0x1FF8,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [5] 223 | 0x01FC,0x07FE,0x0F8E,0x1F00,0x1E00,0x3E00,0x3C00,0x3C00,0x3DF8,0x3FFC,0x7F3E,0x7E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3E0F,0x1E1F,0x1F3E,0x0FFC,0x03F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [6] 224 | 0x3FFF,0x3FFF,0x3FFF,0x000F,0x001E,0x001E,0x003C,0x0038,0x0078,0x00F0,0x00F0,0x01E0,0x01E0,0x03C0,0x03C0,0x0780,0x0F80,0x0F80,0x0F00,0x1F00,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [7] 225 | 0x07F8,0x0FFC,0x1F3E,0x1E1E,0x3E1E,0x3E1E,0x1E1E,0x1F3C,0x0FF8,0x07F0,0x0FF8,0x1EFC,0x3E3E,0x3C1F,0x7C1F,0x7C0F,0x7C0F,0x3C1F,0x3F3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [8] 226 | 0x07F0,0x0FF8,0x1E7C,0x3C3E,0x3C1E,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x3C1F,0x3E3F,0x1FFF,0x07EF,0x001F,0x001E,0x001E,0x003E,0x003C,0x38F8,0x3FF0,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [9] 227 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [:] 228 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x01E0,0x01E0,0x01E0,0x03C0,0x0380, // Ascii = [;] 229 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0003,0x000F,0x003F,0x00FC,0x03F0,0x0FC0,0x3F00,0xFE00,0x3F00,0x0FC0,0x03F0,0x00FC,0x003F,0x000F,0x0003,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [<] 230 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [=] 231 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xE000,0xF800,0x7E00,0x1F80,0x07E0,0x01F8,0x007E,0x001F,0x007E,0x01F8,0x07E0,0x1F80,0x7E00,0xF800,0xE000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [>] 232 | 0x1FF0,0x3FFC,0x383E,0x381F,0x381F,0x001E,0x001E,0x003C,0x0078,0x00F0,0x01E0,0x03C0,0x03C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x07C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [?] 233 | 0x03F8,0x0FFE,0x1F1E,0x3E0F,0x3C7F,0x78FF,0x79EF,0x73C7,0xF3C7,0xF38F,0xF38F,0xF38F,0xF39F,0xF39F,0x73FF,0x7BFF,0x79F7,0x3C00,0x1F1C,0x0FFC,0x03F8,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [@] 234 | 0x0000,0x0000,0x0000,0x03E0,0x03E0,0x07F0,0x07F0,0x07F0,0x0F78,0x0F78,0x0E7C,0x1E3C,0x1E3C,0x3C3E,0x3FFE,0x3FFF,0x781F,0x780F,0xF00F,0xF007,0xF007,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [A] 235 | 0x0000,0x0000,0x0000,0x3FF8,0x3FFC,0x3C3E,0x3C1E,0x3C1E,0x3C1E,0x3C3E,0x3C7C,0x3FF0,0x3FF8,0x3C7E,0x3C1F,0x3C1F,0x3C0F,0x3C0F,0x3C1F,0x3FFE,0x3FF8,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [B] 236 | 0x0000,0x0000,0x0000,0x01FF,0x07FF,0x1F87,0x3E00,0x3C00,0x7C00,0x7800,0x7800,0x7800,0x7800,0x7800,0x7C00,0x7C00,0x3E00,0x3F00,0x1F83,0x07FF,0x01FF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [C] 237 | 0x0000,0x0000,0x0000,0x7FF0,0x7FFC,0x787E,0x781F,0x781F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x781F,0x781E,0x787E,0x7FF8,0x7FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [D] 238 | 0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFE,0x3FFE,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [E] 239 | 0x0000,0x0000,0x0000,0x1FFF,0x1FFF,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1FFF,0x1FFF,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [F] 240 | 0x0000,0x0000,0x0000,0x03FE,0x0FFF,0x1F87,0x3E00,0x7C00,0x7C00,0x7800,0xF800,0xF800,0xF87F,0xF87F,0x780F,0x7C0F,0x7C0F,0x3E0F,0x1F8F,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [G] 241 | 0x0000,0x0000,0x0000,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7FFF,0x7FFF,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [H] 242 | 0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [I] 243 | 0x0000,0x0000,0x0000,0x1FFC,0x1FFC,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x0078,0x0078,0x38F8,0x3FF0,0x3FC0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [J] 244 | 0x0000,0x0000,0x0000,0x3C1F,0x3C1E,0x3C3C,0x3C78,0x3CF0,0x3DE0,0x3FE0,0x3FC0,0x3F80,0x3FC0,0x3FE0,0x3DF0,0x3CF0,0x3C78,0x3C7C,0x3C3E,0x3C1F,0x3C0F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [K] 245 | 0x0000,0x0000,0x0000,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [L] 246 | 0x0000,0x0000,0x0000,0xF81F,0xFC1F,0xFC1F,0xFE3F,0xFE3F,0xFE3F,0xFF7F,0xFF77,0xFF77,0xF7F7,0xF7E7,0xF3E7,0xF3E7,0xF3C7,0xF007,0xF007,0xF007,0xF007,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [M] 247 | 0x0000,0x0000,0x0000,0x7C0F,0x7C0F,0x7E0F,0x7F0F,0x7F0F,0x7F8F,0x7F8F,0x7FCF,0x7BEF,0x79EF,0x79FF,0x78FF,0x78FF,0x787F,0x783F,0x783F,0x781F,0x781F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [N] 248 | 0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x7C1F,0x780F,0x780F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0x780F,0x780F,0x7C1F,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [O] 249 | 0x0000,0x0000,0x0000,0x3FFC,0x3FFF,0x3E1F,0x3E0F,0x3E0F,0x3E0F,0x3E0F,0x3E1F,0x3E3F,0x3FFC,0x3FF0,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [P] 250 | 0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x7C1F,0x780F,0x780F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0x780F,0x780F,0x7C1F,0x3E3E,0x1FFC,0x07F8,0x007C,0x003F,0x000F,0x0003,0x0000, // Ascii = [Q] 251 | 0x0000,0x0000,0x0000,0x3FF0,0x3FFC,0x3C7E,0x3C3E,0x3C1E,0x3C1E,0x3C3E,0x3C3C,0x3CFC,0x3FF0,0x3FE0,0x3DF0,0x3CF8,0x3C7C,0x3C3E,0x3C1E,0x3C1F,0x3C0F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [R] 252 | 0x0000,0x0000,0x0000,0x07FC,0x1FFE,0x3E0E,0x3C00,0x3C00,0x3C00,0x3E00,0x1FC0,0x0FF8,0x03FE,0x007F,0x001F,0x000F,0x000F,0x201F,0x3C3E,0x3FFC,0x1FF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [S] 253 | 0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [T] 254 | 0x0000,0x0000,0x0000,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x3C1E,0x3C1E,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [U] 255 | 0x0000,0x0000,0x0000,0xF007,0xF007,0xF807,0x780F,0x7C0F,0x3C1E,0x3C1E,0x3E1E,0x1E3C,0x1F3C,0x1F78,0x0F78,0x0FF8,0x07F0,0x07F0,0x07F0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [V] 256 | 0x0000,0x0000,0x0000,0xE003,0xF003,0xF003,0xF007,0xF3E7,0xF3E7,0xF3E7,0x73E7,0x7BF7,0x7FF7,0x7FFF,0x7F7F,0x7F7F,0x7F7E,0x3F7E,0x3E3E,0x3E3E,0x3E3E,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [W] 257 | 0x0000,0x0000,0x0000,0xF807,0x7C0F,0x3E1E,0x3E3E,0x1F3C,0x0FF8,0x07F0,0x07E0,0x03E0,0x03E0,0x07F0,0x0FF8,0x0F7C,0x1E7C,0x3C3E,0x781F,0x780F,0xF00F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [X] 258 | 0x0000,0x0000,0x0000,0xF807,0x7807,0x7C0F,0x3C1E,0x3E1E,0x1F3C,0x0F78,0x0FF8,0x07F0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [Y] 259 | 0x0000,0x0000,0x0000,0x7FFF,0x7FFF,0x000F,0x001F,0x003E,0x007C,0x00F8,0x00F0,0x01E0,0x03E0,0x07C0,0x0F80,0x0F00,0x1E00,0x3E00,0x7C00,0x7FFF,0x7FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [Z] 260 | 0x07FF,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x07FF,0x07FF,0x0000, // Ascii = [[] 261 | 0x7800,0x7800,0x3C00,0x3C00,0x1E00,0x1E00,0x0F00,0x0F00,0x0780,0x0780,0x03C0,0x03C0,0x01E0,0x01E0,0x00F0,0x00F0,0x0078,0x0078,0x003C,0x003C,0x001E,0x001E,0x000F,0x000F,0x0007,0x0000, // Ascii = [\] 262 | 0x7FF0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x7FF0,0x7FF0,0x0000, // Ascii = []] 263 | 0x00C0,0x01C0,0x01C0,0x03E0,0x03E0,0x07F0,0x07F0,0x0778,0x0F78,0x0F38,0x1E3C,0x1E3C,0x3C1E,0x3C1E,0x380F,0x780F,0x7807,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [^] 264 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000, // Ascii = [_] 265 | 0x00F0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [`] 266 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FF8,0x3FFC,0x3C7C,0x003E,0x003E,0x003E,0x07FE,0x1FFE,0x3E3E,0x7C3E,0x783E,0x7C3E,0x7C7E,0x3FFF,0x1FCF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [a] 267 | 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3DF8,0x3FFE,0x3F3E,0x3E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C1F,0x3C1E,0x3F3E,0x3FFC,0x3BF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [b] 268 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03FE,0x0FFF,0x1F87,0x3E00,0x3E00,0x3C00,0x7C00,0x7C00,0x7C00,0x3C00,0x3E00,0x3E00,0x1F87,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [c] 269 | 0x001F,0x001F,0x001F,0x001F,0x001F,0x001F,0x07FF,0x1FFF,0x3E3F,0x3C1F,0x7C1F,0x7C1F,0x7C1F,0x781F,0x781F,0x7C1F,0x7C1F,0x3C3F,0x3E7F,0x1FFF,0x0FDF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [d] 270 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F8,0x0FFC,0x1F3E,0x3E1E,0x3C1F,0x7C1F,0x7FFF,0x7FFF,0x7C00,0x7C00,0x3C00,0x3E00,0x1F07,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [e] 271 | 0x01FF,0x03E1,0x03C0,0x07C0,0x07C0,0x07C0,0x7FFF,0x7FFF,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [f] 272 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07EF,0x1FFF,0x3E7F,0x3C1F,0x7C1F,0x7C1F,0x781F,0x781F,0x781F,0x7C1F,0x7C1F,0x3C3F,0x3E7F,0x1FFF,0x0FDF,0x001E,0x001E,0x001E,0x387C,0x3FF8, // Ascii = [g] 273 | 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3DFC,0x3FFE,0x3F9E,0x3F1F,0x3E1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [h] 274 | 0x01F0,0x01F0,0x0000,0x0000,0x0000,0x0000,0x7FE0,0x7FE0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [i] 275 | 0x00F8,0x00F8,0x0000,0x0000,0x0000,0x0000,0x3FF8,0x3FF8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F0,0x71F0,0x7FE0, // Ascii = [j] 276 | 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C1F,0x3C3E,0x3C7C,0x3CF8,0x3DF0,0x3DE0,0x3FC0,0x3FC0,0x3FE0,0x3DF0,0x3CF8,0x3C7C,0x3C3E,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [k] 277 | 0x7FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [l] 278 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF79E,0xFFFF,0xFFFF,0xFFFF,0xFBE7,0xF9E7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [m] 279 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3DFC,0x3FFE,0x3F9E,0x3F1F,0x3E1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [n] 280 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x3C1F,0x7C1F,0x780F,0x780F,0x780F,0x780F,0x780F,0x7C1F,0x3C1F,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [o] 281 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3DF8,0x3FFE,0x3F3E,0x3E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C1F,0x3E1E,0x3F3E,0x3FFC,0x3FF8,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00, // Ascii = [p] 282 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07EE,0x1FFE,0x3E7E,0x3C1E,0x7C1E,0x781E,0x781E,0x781E,0x781E,0x781E,0x7C1E,0x7C3E,0x3E7E,0x1FFE,0x0FDE,0x001E,0x001E,0x001E,0x001E,0x001E, // Ascii = [q] 283 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1F7F,0x1FFF,0x1FE7,0x1FC7,0x1F87,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [r] 284 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07FC,0x1FFE,0x1E0E,0x3E00,0x3E00,0x3F00,0x1FE0,0x07FC,0x00FE,0x003E,0x001E,0x001E,0x3C3E,0x3FFC,0x1FF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [s] 285 | 0x0000,0x0000,0x0000,0x0780,0x0780,0x0780,0x7FFF,0x7FFF,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x07C0,0x03FF,0x01FF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [t] 286 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C3E,0x3C7E,0x3EFE,0x1FFE,0x0FDE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [u] 287 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF007,0x780F,0x780F,0x3C1E,0x3C1E,0x3E1E,0x1E3C,0x1E3C,0x0F78,0x0F78,0x0FF0,0x07F0,0x07F0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [v] 288 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF003,0xF1E3,0xF3E3,0xF3E7,0xF3F7,0xF3F7,0x7FF7,0x7F77,0x7F7F,0x7F7F,0x7F7F,0x3E3E,0x3E3E,0x3E3E,0x3E3E,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [w] 289 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7C0F,0x3E1E,0x3E3C,0x1F3C,0x0FF8,0x07F0,0x07F0,0x03E0,0x07F0,0x07F8,0x0FF8,0x1E7C,0x3E3E,0x3C1F,0x781F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [x] 290 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF807,0x780F,0x7C0F,0x3C1E,0x3C1E,0x1E3C,0x1E3C,0x1F3C,0x0F78,0x0FF8,0x07F0,0x07F0,0x03E0,0x03E0,0x03C0,0x03C0,0x03C0,0x0780,0x0F80,0x7F00, // Ascii = [y] 291 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x001F,0x003E,0x007C,0x00F8,0x01F0,0x03E0,0x07C0,0x0F80,0x1F00,0x1E00,0x3C00,0x7FFF,0x7FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [z] 292 | 0x01FE,0x03E0,0x03C0,0x03C0,0x03C0,0x03C0,0x01E0,0x01E0,0x01E0,0x01C0,0x03C0,0x3F80,0x3F80,0x03C0,0x01C0,0x01E0,0x01E0,0x01E0,0x03C0,0x03C0,0x03C0,0x03C0,0x03E0,0x01FE,0x007E,0x0000, // Ascii = [{] 293 | 0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000, // Ascii = [|] 294 | 0x3FC0,0x03E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01C0,0x03C0,0x03C0,0x01C0,0x01E0,0x00FE,0x00FE,0x01E0,0x01C0,0x03C0,0x03C0,0x01C0,0x01E0,0x01E0,0x01E0,0x01E0,0x03E0,0x3FC0,0x3F00,0x0000, // Ascii = [}] 295 | 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3F07,0x7FC7,0x73E7,0xF1FF,0xF07E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [~] 296 | }; 297 | 298 | 299 | FontDef Font_7x10 = {7,10,Font7x10}; 300 | FontDef Font_11x18 = {11,18,Font11x18}; 301 | FontDef Font_16x26 = {16,26,Font16x26}; 302 | -------------------------------------------------------------------------------- /LCD_TFT_ST7735/fonts.h: -------------------------------------------------------------------------------- 1 | /* vim: set ai et ts=4 sw=4: */ 2 | #ifndef __FONTS_H__ 3 | #define __FONTS_H__ 4 | 5 | #include 6 | 7 | typedef struct { 8 | const uint8_t width; 9 | uint8_t height; 10 | const uint16_t *data; 11 | } FontDef; 12 | 13 | 14 | extern FontDef Font_7x10; 15 | extern FontDef Font_11x18; 16 | extern FontDef Font_16x26; 17 | 18 | #endif // __FONTS_H__ 19 | -------------------------------------------------------------------------------- /LED7SEG/LED7SEG.c: -------------------------------------------------------------------------------- 1 | #include "LED7SEG.h" 2 | 3 | char AnodeNumber[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x8F,0x80,0x90,0x80}; //0 - 9,dp 4 | char CathodeNumber[] = {0x3F,0x06,0x5B,0x40,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x7F}; //0 - 9,dp 5 | 6 | void LED7SEG_Init(LED7SEG_Device_Name* LED7SEG, LED7TYPE Led7Type, 7 | GPIO_TypeDef* SEG_A, uint16_t SEG_A_Pin, 8 | GPIO_TypeDef* SEG_B, uint16_t SEG_B_Pin, 9 | GPIO_TypeDef* SEG_C, uint16_t SEG_C_Pin, 10 | GPIO_TypeDef* SEG_D, uint16_t SEG_D_Pin, 11 | GPIO_TypeDef* SEG_E, uint16_t SEG_E_Pin, 12 | GPIO_TypeDef* SEG_F, uint16_t SEG_F_Pin, 13 | GPIO_TypeDef* SEG_G, uint16_t SEG_G_Pin, 14 | GPIO_TypeDef* SEG_H, uint16_t SEG_H_Pin) 15 | { 16 | LED7SEG->Led7Type = Led7Type; 17 | LED7SEG->SEG_A = SEG_A; 18 | LED7SEG->SEG_B = SEG_B; 19 | LED7SEG->SEG_C = SEG_C; 20 | LED7SEG->SEG_D = SEG_D; 21 | LED7SEG->SEG_E = SEG_E; 22 | LED7SEG->SEG_F = SEG_F; 23 | LED7SEG->SEG_G = SEG_G; 24 | LED7SEG->SEG_G = SEG_H; 25 | LED7SEG->SEG_A_Pin = SEG_A_Pin; 26 | LED7SEG->SEG_B_Pin = SEG_B_Pin; 27 | LED7SEG->SEG_C_Pin = SEG_C_Pin; 28 | LED7SEG->SEG_D_Pin = SEG_D_Pin; 29 | LED7SEG->SEG_E_Pin = SEG_E_Pin; 30 | LED7SEG->SEG_F_Pin = SEG_F_Pin; 31 | LED7SEG->SEG_G_Pin = SEG_G_Pin; 32 | LED7SEG->SEG_H_Pin = SEG_H_Pin; 33 | } 34 | void LED7SEG_InitScan(LED7SEG_Num* LED7_NUM, GPIO_TypeDef* LED1, uint16_t LED1_pin, 35 | GPIO_TypeDef* LED2, uint16_t LED2_pin, 36 | GPIO_TypeDef* LED3, uint16_t LED3_pin, 37 | GPIO_TypeDef* LED4, uint16_t LED4_pin) 38 | { 39 | LED7_NUM->LED1 = LED1; 40 | LED7_NUM->LED2 = LED2; 41 | LED7_NUM->LED3 = LED3; 42 | LED7_NUM->LED4 = LED4; 43 | LED7_NUM->LED1_pin = LED1_pin; 44 | LED7_NUM->LED2_pin = LED2_pin; 45 | LED7_NUM->LED3_pin = LED3_pin; 46 | LED7_NUM->LED4_pin = LED4_pin; 47 | } 48 | void LED7SEG_WriteOneNumber(LED7SEG_Device_Name* LED7SEG, uint8_t number) 49 | { 50 | if(LED7SEG->Led7Type == ANODE) 51 | { 52 | HAL_GPIO_WritePin(LED7SEG->SEG_A, LED7SEG->SEG_A_Pin, AnodeNumber[number]&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 53 | HAL_GPIO_WritePin(LED7SEG->SEG_B, LED7SEG->SEG_B_Pin, AnodeNumber[number]&0x02?GPIO_PIN_SET:GPIO_PIN_RESET); 54 | HAL_GPIO_WritePin(LED7SEG->SEG_C, LED7SEG->SEG_C_Pin, AnodeNumber[number]&0x04?GPIO_PIN_SET:GPIO_PIN_RESET); 55 | HAL_GPIO_WritePin(LED7SEG->SEG_D, LED7SEG->SEG_D_Pin, AnodeNumber[number]&0x08?GPIO_PIN_SET:GPIO_PIN_RESET); 56 | HAL_GPIO_WritePin(LED7SEG->SEG_E, LED7SEG->SEG_E_Pin, AnodeNumber[number]&0x10?GPIO_PIN_SET:GPIO_PIN_RESET); 57 | HAL_GPIO_WritePin(LED7SEG->SEG_F, LED7SEG->SEG_F_Pin, AnodeNumber[number]&0x20?GPIO_PIN_SET:GPIO_PIN_RESET); 58 | HAL_GPIO_WritePin(LED7SEG->SEG_G, LED7SEG->SEG_G_Pin, AnodeNumber[number]&0x40?GPIO_PIN_SET:GPIO_PIN_RESET); 59 | HAL_GPIO_WritePin(LED7SEG->SEG_H, LED7SEG->SEG_H_Pin, AnodeNumber[number]&0x80?GPIO_PIN_SET:GPIO_PIN_RESET); 60 | } 61 | else if(LED7SEG->Led7Type == CATHODE) 62 | { 63 | HAL_GPIO_WritePin(LED7SEG->SEG_A, LED7SEG->SEG_A_Pin, CathodeNumber[number]&0x01?GPIO_PIN_SET:GPIO_PIN_RESET); 64 | HAL_GPIO_WritePin(LED7SEG->SEG_B, LED7SEG->SEG_B_Pin, CathodeNumber[number]&0x02?GPIO_PIN_SET:GPIO_PIN_RESET); 65 | HAL_GPIO_WritePin(LED7SEG->SEG_C, LED7SEG->SEG_C_Pin, CathodeNumber[number]&0x04?GPIO_PIN_SET:GPIO_PIN_RESET); 66 | HAL_GPIO_WritePin(LED7SEG->SEG_D, LED7SEG->SEG_D_Pin, CathodeNumber[number]&0x08?GPIO_PIN_SET:GPIO_PIN_RESET); 67 | HAL_GPIO_WritePin(LED7SEG->SEG_E, LED7SEG->SEG_E_Pin, CathodeNumber[number]&0x10?GPIO_PIN_SET:GPIO_PIN_RESET); 68 | HAL_GPIO_WritePin(LED7SEG->SEG_F, LED7SEG->SEG_F_Pin, CathodeNumber[number]&0x20?GPIO_PIN_SET:GPIO_PIN_RESET); 69 | HAL_GPIO_WritePin(LED7SEG->SEG_G, LED7SEG->SEG_G_Pin, CathodeNumber[number]&0x40?GPIO_PIN_SET:GPIO_PIN_RESET); 70 | HAL_GPIO_WritePin(LED7SEG->SEG_H, LED7SEG->SEG_H_Pin, CathodeNumber[number]&0x80?GPIO_PIN_SET:GPIO_PIN_RESET); 71 | } 72 | } 73 | 74 | LED7SEG_NumberInt LED7SEG_ConvertInt(uint32_t number) //12345 75 | { 76 | LED7SEG_NumberInt numberInt; 77 | numberInt.TenOfThousands = number/10000; //1 78 | numberInt.Thousands = (number%10000)/1000; // 2 79 | numberInt.Hundreds = ((number%10000)%1000)/100; //3 80 | numberInt.Dozens = (((number%10000)%1000)%100)/10; //4 81 | numberInt.Uints = (((number%10000)%1000)%100)%10; //5 82 | return numberInt; 83 | } 84 | void LED7SEG_Scan4Led(LED7SEG_Num* LED7_NUM, LED7SEG_Device_Name* LED7SEG, uint16_t number) 85 | { 86 | LED7SEG_NumberInt number_convert; 87 | number_convert = LED7SEG_ConvertInt(number); 88 | HAL_GPIO_WritePin(LED7_NUM->LED1, LED7_NUM->LED1_pin, GPIO_PIN_SET); 89 | LED7SEG_WriteOneNumber(LED7SEG, number_convert.Thousands); 90 | 91 | HAL_GPIO_WritePin(LED7_NUM->LED1, LED7_NUM->LED1_pin, GPIO_PIN_RESET); 92 | HAL_GPIO_WritePin(LED7_NUM->LED2, LED7_NUM->LED2_pin, GPIO_PIN_SET); 93 | LED7SEG_WriteOneNumber(LED7SEG, number_convert.Hundreds); 94 | 95 | HAL_GPIO_WritePin(LED7_NUM->LED2, LED7_NUM->LED2_pin, GPIO_PIN_RESET); 96 | HAL_GPIO_WritePin(LED7_NUM->LED3, LED7_NUM->LED3_pin, GPIO_PIN_SET); 97 | LED7SEG_WriteOneNumber(LED7SEG, number_convert.Dozens); 98 | 99 | HAL_GPIO_WritePin(LED7_NUM->LED3, LED7_NUM->LED3_pin, GPIO_PIN_RESET); 100 | HAL_GPIO_WritePin(LED7_NUM->LED4, LED7_NUM->LED4_pin, GPIO_PIN_SET); 101 | LED7SEG_WriteOneNumber(LED7SEG, number_convert.Uints); 102 | } 103 | -------------------------------------------------------------------------------- /LED7SEG/LED7SEG.h: -------------------------------------------------------------------------------- 1 | #ifndef __LED7SEG_H 2 | #define __LED7SEG_H 3 | 4 | #include "stm32f1xx_hal.h" 5 | 6 | typedef enum 7 | { 8 | ANODE = 0u, 9 | CATHODE 10 | } LED7TYPE; 11 | 12 | 13 | typedef struct { 14 | LED7TYPE Led7Type; 15 | GPIO_TypeDef* SEG_A; 16 | uint16_t SEG_A_Pin; 17 | GPIO_TypeDef* SEG_B; 18 | uint16_t SEG_B_Pin; 19 | GPIO_TypeDef* SEG_C; 20 | uint16_t SEG_C_Pin; 21 | GPIO_TypeDef* SEG_D; 22 | uint16_t SEG_D_Pin; 23 | GPIO_TypeDef* SEG_E; 24 | uint16_t SEG_E_Pin; 25 | GPIO_TypeDef* SEG_F; 26 | uint16_t SEG_F_Pin; 27 | GPIO_TypeDef* SEG_G; 28 | uint16_t SEG_G_Pin; 29 | GPIO_TypeDef* SEG_H; 30 | uint16_t SEG_H_Pin; 31 | }LED7SEG_Device_Name; 32 | 33 | typedef struct { 34 | GPIO_TypeDef* LED1; 35 | uint16_t LED1_pin; 36 | GPIO_TypeDef* LED2; 37 | uint16_t LED2_pin; 38 | GPIO_TypeDef* LED3; 39 | uint16_t LED3_pin; 40 | GPIO_TypeDef* LED4; 41 | uint16_t LED4_pin; 42 | }LED7SEG_Num; 43 | 44 | typedef struct { 45 | uint8_t TenOfThousands; 46 | uint8_t Thousands; 47 | uint8_t Hundreds; 48 | uint8_t Dozens; 49 | uint8_t Uints; 50 | }LED7SEG_NumberInt; 51 | 52 | void LED7SEG_Init(LED7SEG_Device_Name* LED7SEG, LED7TYPE Led7Type, 53 | GPIO_TypeDef* SEG_A, uint16_t SEG_A_Pin, 54 | GPIO_TypeDef* SEG_B, uint16_t SEG_B_Pin, 55 | GPIO_TypeDef* SEG_C, uint16_t SEG_C_Pin, 56 | GPIO_TypeDef* SEG_D, uint16_t SEG_D_Pin, 57 | GPIO_TypeDef* SEG_E, uint16_t SEG_E_Pin, 58 | GPIO_TypeDef* SEG_F, uint16_t SEG_F_Pin, 59 | GPIO_TypeDef* SEG_G, uint16_t SEG_G_Pin, 60 | GPIO_TypeDef* SEG_H, uint16_t SEG_H_Pin); 61 | void LED7SEG_InitScan(LED7SEG_Num* LED7_NUM, GPIO_TypeDef* LED1, uint16_t LED1_pin, 62 | GPIO_TypeDef* LED2, uint16_t LED2_pin, 63 | GPIO_TypeDef* LED3, uint16_t LED3_pin, 64 | GPIO_TypeDef* LED4, uint16_t LED4_pin); 65 | void LED7SEG_WriteOneNumber(LED7SEG_Device_Name* LED7SEG, uint8_t number); 66 | LED7SEG_NumberInt LED7SEG_ConvertInt(uint32_t number); 67 | void LED7SEG_Scan4Led(LED7SEG_Num* LED7_NUM, LED7SEG_Device_Name* LED7SEG, uint16_t number); 68 | #endif 69 | -------------------------------------------------------------------------------- /RC522/RC522.c: -------------------------------------------------------------------------------- 1 | 2 | #include "RC522.h" 3 | 4 | static void MFRC522_CS(MFRC522_Name* MFRC522, uint8_t Value) 5 | { 6 | HAL_GPIO_WritePin(MFRC522->CS_PORT, MFRC522->CS_PIN, Value); 7 | } 8 | static uint8_t TM_SPI_Send(MFRC522_Name* MFRC522, uint8_t data) 9 | { 10 | uint8_t data_se[1], data_re[1]; 11 | data_se[0] = data; 12 | while(!__HAL_SPI_GET_FLAG(MFRC522->SPI, SPI_FLAG_TXE)); 13 | HAL_SPI_TransmitReceive(MFRC522->SPI, data_se, data_re, 1, 10); 14 | while(__HAL_SPI_GET_FLAG(MFRC522->SPI, SPI_FLAG_BSY)); /*!< Send byte through the SPI1 peripheral */ 15 | return data_re[0]; 16 | 17 | } 18 | static void MFRC522_WriteRegister(MFRC522_Name* MFRC522, uint8_t addr, uint8_t val) 19 | { 20 | //CS low 21 | uint8_t Address = (addr << 1) & 0x7E; 22 | MFRC522_CS(MFRC522, 0); 23 | //Send address 24 | TM_SPI_Send(MFRC522, Address); 25 | //Send data 26 | HAL_Delay(1); 27 | TM_SPI_Send(MFRC522, val); 28 | HAL_Delay(1); 29 | //CS high 30 | MFRC522_CS(MFRC522, 1); 31 | } 32 | 33 | static uint8_t MFRC522_ReadRegister(MFRC522_Name* MFRC522, uint8_t addr) 34 | { 35 | uint8_t Value; 36 | uint8_t Address = ((addr << 1) & 0x7E)|0x80; 37 | //CS low 38 | MFRC522_CS(MFRC522, 0); 39 | TM_SPI_Send(MFRC522, Address); 40 | Value = TM_SPI_Send(MFRC522, MFRC522_DUMMY); 41 | //CS high 42 | MFRC522_CS(MFRC522, 1); 43 | 44 | return Value; 45 | } 46 | 47 | static void MFRC522_SetBitMask(MFRC522_Name* MFRC522, uint8_t reg, uint8_t mask) 48 | { 49 | MFRC522_WriteRegister(MFRC522, reg, MFRC522_ReadRegister(MFRC522, reg) | mask); 50 | } 51 | 52 | static void MFRC522_ClearBitMask(MFRC522_Name* MFRC522, uint8_t reg, uint8_t mask) 53 | { 54 | MFRC522_WriteRegister(MFRC522, reg, MFRC522_ReadRegister(MFRC522, reg) & (~mask)); 55 | } 56 | static void MFRC522_AntennaOn(MFRC522_Name* MFRC522) 57 | { 58 | uint8_t temp; 59 | 60 | temp = MFRC522_ReadRegister(MFRC522, MFRC522_REG_TX_CONTROL); 61 | if (!(temp & 0x03)) { 62 | MFRC522_SetBitMask(MFRC522, MFRC522_REG_TX_CONTROL, 0x03); 63 | } 64 | } 65 | 66 | void MFRC522_AntennaOff(MFRC522_Name* MFRC522) 67 | { 68 | MFRC522_ClearBitMask(MFRC522, MFRC522_REG_TX_CONTROL, 0x03); 69 | } 70 | 71 | static void MFRC522_Reset(MFRC522_Name* MFRC522) 72 | { 73 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_COMMAND, PCD_RESETPHASE); 74 | } 75 | 76 | void MFRC522_Init(MFRC522_Name* MFRC522, SPI_HandleTypeDef* SPI_In, GPIO_TypeDef* CS_PORT, uint16_t CS_PIN) 77 | { 78 | MFRC522->SPI = SPI_In; 79 | MFRC522->CS_PORT = CS_PORT; 80 | MFRC522->CS_PIN = CS_PIN; 81 | MFRC522_Reset(MFRC522); 82 | 83 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_T_MODE, 0x8D); 84 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_T_PRESCALER, 0x3E); 85 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_T_RELOAD_L, 30); 86 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_T_RELOAD_H, 0); 87 | 88 | /* 48dB gain */ 89 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_RF_CFG, 0x70); 90 | 91 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_TX_AUTO, 0x40); 92 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_MODE, 0x3D); 93 | 94 | MFRC522_AntennaOn(MFRC522); //Open the antenna 95 | } 96 | MFRC522_Status_t MFRC522_Check(MFRC522_Name* MFRC522, uint8_t* id) 97 | { 98 | MFRC522_Status_t status; 99 | //Find cards, return card type 100 | status = MFRC522_Request(MFRC522, PICC_REQIDL, id); 101 | if (status == MI_OK) { 102 | //Card detected 103 | //Anti-collision, return card serial number 4 bytes 104 | status = MFRC522_Anticoll(MFRC522, id); 105 | } 106 | MFRC522_Halt(MFRC522); //Command card into hibernation 107 | 108 | return status; 109 | } 110 | 111 | MFRC522_Status_t MFRC522_Compare(MFRC522_Name* MFRC522, uint8_t* CardID, uint8_t* CompareID) 112 | { 113 | uint8_t i; 114 | for (i = 0; i < 5; i++) { 115 | if (CardID[i] != CompareID[i]) { 116 | return MI_ERR; 117 | } 118 | } 119 | return MI_OK; 120 | } 121 | MFRC522_Status_t MFRC522_Request(MFRC522_Name* MFRC522, uint8_t reqMode, uint8_t* TagType) 122 | { 123 | MFRC522_Status_t status; 124 | uint16_t backBits; //The received data bits 125 | 126 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_BIT_FRAMING, 0x07); //TxLastBists = BitFramingReg[2..0] ??? 127 | 128 | TagType[0] = reqMode; 129 | status = MFRC522_ToCard(MFRC522, PCD_TRANSCEIVE, TagType, 1, TagType, &backBits); 130 | 131 | if ((status != MI_OK) || (backBits != 0x10)) { 132 | status = MI_ERR; 133 | } 134 | 135 | return status; 136 | } 137 | MFRC522_Status_t MFRC522_ToCard(MFRC522_Name* MFRC522, uint8_t command, uint8_t* sendData, uint8_t sendLen, uint8_t* backData, uint16_t* backLen) 138 | { 139 | MFRC522_Status_t status = MI_ERR; 140 | uint8_t irqEn = 0x00; 141 | uint8_t waitIRq = 0x00; 142 | uint8_t lastBits; 143 | uint8_t n; 144 | uint16_t i; 145 | 146 | switch (command) { 147 | case PCD_AUTHENT: { 148 | irqEn = 0x12; 149 | waitIRq = 0x10; 150 | break; 151 | } 152 | case PCD_TRANSCEIVE: { 153 | irqEn = 0x77; 154 | waitIRq = 0x30; 155 | break; 156 | } 157 | default: 158 | break; 159 | } 160 | 161 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_COMM_IE_N, irqEn | 0x80); 162 | MFRC522_ClearBitMask(MFRC522, MFRC522_REG_COMM_IRQ, 0x80); 163 | MFRC522_SetBitMask(MFRC522, MFRC522_REG_FIFO_LEVEL, 0x80); 164 | 165 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_COMMAND, PCD_IDLE); 166 | 167 | //Writing data to the FIFO 168 | for (i = 0; i < sendLen; i++) { 169 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_FIFO_DATA, sendData[i]); 170 | } 171 | 172 | //Execute the command 173 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_COMMAND, command); 174 | if (command == PCD_TRANSCEIVE) { 175 | MFRC522_SetBitMask(MFRC522, MFRC522_REG_BIT_FRAMING, 0x80); //StartSend=1,transmission of data starts 176 | } 177 | 178 | //Waiting to receive data to complete 179 | i = 2000; //i according to the clock frequency adjustment, the operator M1 card maximum waiting time 25ms??? 180 | do { 181 | //CommIrqReg[7..0] 182 | //Set1 TxIRq RxIRq IdleIRq HiAlerIRq LoAlertIRq ErrIRq TimerIRq 183 | n = MFRC522_ReadRegister(MFRC522, MFRC522_REG_COMM_IRQ); 184 | i--; 185 | } while ((i!=0) && !(n&0x01) && !(n&waitIRq)); 186 | 187 | MFRC522_ClearBitMask(MFRC522, MFRC522_REG_BIT_FRAMING, 0x80); //StartSend=0 188 | 189 | if (i != 0) { 190 | if (!(MFRC522_ReadRegister(MFRC522, MFRC522_REG_ERROR) & 0x1B)) { 191 | status = MI_OK; 192 | if (n & irqEn & 0x01) { 193 | status = MI_NOTAGERR; 194 | } 195 | 196 | if (command == PCD_TRANSCEIVE) { 197 | n = MFRC522_ReadRegister(MFRC522, MFRC522_REG_FIFO_LEVEL); 198 | lastBits = MFRC522_ReadRegister(MFRC522, MFRC522_REG_CONTROL) & 0x07; 199 | if (lastBits) { 200 | *backLen = (n - 1) * 8 + lastBits; 201 | } else { 202 | *backLen = n * 8; 203 | } 204 | 205 | if (n == 0) { 206 | n = 1; 207 | } 208 | if (n > MFRC522_MAX_LEN) { 209 | n = MFRC522_MAX_LEN; 210 | } 211 | 212 | //Reading the received data in FIFO 213 | for (i = 0; i < n; i++) { 214 | backData[i] = MFRC522_ReadRegister(MFRC522, MFRC522_REG_FIFO_DATA); 215 | } 216 | } 217 | } else { 218 | status = MI_ERR; 219 | } 220 | } 221 | 222 | return status; 223 | } 224 | 225 | MFRC522_Status_t MFRC522_Anticoll(MFRC522_Name* MFRC522, uint8_t* serNum) 226 | { 227 | MFRC522_Status_t status; 228 | uint8_t i; 229 | uint8_t serNumCheck = 0; 230 | uint16_t unLen; 231 | 232 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_BIT_FRAMING, 0x00); //TxLastBists = BitFramingReg[2..0] 233 | 234 | serNum[0] = PICC_ANTICOLL; 235 | serNum[1] = 0x20; 236 | status = MFRC522_ToCard(MFRC522, PCD_TRANSCEIVE, serNum, 2, serNum, &unLen); 237 | 238 | if (status == MI_OK) { 239 | //Check card serial number 240 | for (i = 0; i < 4; i++) { 241 | serNumCheck ^= serNum[i]; 242 | } 243 | if (serNumCheck != serNum[i]) { 244 | status = MI_ERR; 245 | } 246 | } 247 | return status; 248 | } 249 | 250 | void MFRC522_CalculateCRC(MFRC522_Name* MFRC522, uint8_t* pIndata, uint8_t len, uint8_t* pOutData) { 251 | uint8_t i, n; 252 | 253 | MFRC522_ClearBitMask(MFRC522, MFRC522_REG_DIV_IRQ, 0x04); //CRCIrq = 0 254 | MFRC522_SetBitMask(MFRC522, MFRC522_REG_FIFO_LEVEL, 0x80); //Clear the FIFO pointer 255 | //Write_MFRC522(CommandReg, PCD_IDLE); 256 | 257 | //Writing data to the FIFO 258 | for (i = 0; i < len; i++) { 259 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_FIFO_DATA, *(pIndata+i)); 260 | } 261 | MFRC522_WriteRegister(MFRC522, MFRC522_REG_COMMAND, PCD_CALCCRC); 262 | 263 | //Wait CRC calculation is complete 264 | i = 0xFF; 265 | do { 266 | n = MFRC522_ReadRegister(MFRC522, MFRC522_REG_DIV_IRQ); 267 | i--; 268 | } while ((i!=0) && !(n&0x04)); //CRCIrq = 1 269 | 270 | //Read CRC calculation result 271 | pOutData[0] = MFRC522_ReadRegister(MFRC522, MFRC522_REG_CRC_RESULT_L); 272 | pOutData[1] = MFRC522_ReadRegister(MFRC522, MFRC522_REG_CRC_RESULT_M); 273 | } 274 | 275 | uint8_t MFRC522_SelectTag(MFRC522_Name* MFRC522, uint8_t* serNum) 276 | { 277 | uint8_t i; 278 | MFRC522_Status_t status; 279 | uint8_t size; 280 | uint16_t recvBits; 281 | uint8_t buffer[9]; 282 | 283 | buffer[0] = PICC_SElECTTAG; 284 | buffer[1] = 0x70; 285 | for (i = 0; i < 5; i++) { 286 | buffer[i+2] = *(serNum+i); 287 | } 288 | MFRC522_CalculateCRC(MFRC522, buffer, 7, &buffer[7]); //?? 289 | status = MFRC522_ToCard(MFRC522, PCD_TRANSCEIVE, buffer, 9, buffer, &recvBits); 290 | 291 | if ((status == MI_OK) && (recvBits == 0x18)) { 292 | size = buffer[0]; 293 | } else { 294 | size = 0; 295 | } 296 | 297 | return size; 298 | } 299 | 300 | MFRC522_Status_t MFRC522_Auth(MFRC522_Name* MFRC522, uint8_t authMode, uint8_t BlockAddr, uint8_t* Sectorkey, uint8_t* serNum) 301 | { 302 | MFRC522_Status_t status; 303 | uint16_t recvBits; 304 | uint8_t i; 305 | uint8_t buff[12]; 306 | 307 | //Verify the command block address + sector + password + card serial number 308 | buff[0] = authMode; 309 | buff[1] = BlockAddr; 310 | for (i = 0; i < 6; i++) { 311 | buff[i+2] = *(Sectorkey+i); 312 | } 313 | for (i=0; i<4; i++) { 314 | buff[i+8] = *(serNum+i); 315 | } 316 | status = MFRC522_ToCard(MFRC522, PCD_AUTHENT, buff, 12, buff, &recvBits); 317 | 318 | if ((status != MI_OK) || (!(MFRC522_ReadRegister(MFRC522, MFRC522_REG_STATUS2) & 0x08))) { 319 | status = MI_ERR; 320 | } 321 | 322 | return status; 323 | } 324 | 325 | MFRC522_Status_t MFRC522_Read(MFRC522_Name* MFRC522, uint8_t blockAddr, uint8_t* recvData) 326 | { 327 | MFRC522_Status_t status; 328 | uint16_t unLen; 329 | 330 | recvData[0] = PICC_READ; 331 | recvData[1] = blockAddr; 332 | MFRC522_CalculateCRC(MFRC522, recvData,2, &recvData[2]); 333 | status = MFRC522_ToCard(MFRC522, PCD_TRANSCEIVE, recvData, 4, recvData, &unLen); 334 | 335 | if ((status != MI_OK) || (unLen != 0x90)) { 336 | status = MI_ERR; 337 | } 338 | 339 | return status; 340 | } 341 | 342 | MFRC522_Status_t MFRC522_Write(MFRC522_Name* MFRC522, uint8_t blockAddr, uint8_t* writeData) 343 | { 344 | MFRC522_Status_t status; 345 | uint16_t recvBits; 346 | uint8_t i; 347 | uint8_t buff[18]; 348 | 349 | buff[0] = PICC_WRITE; 350 | buff[1] = blockAddr; 351 | MFRC522_CalculateCRC(MFRC522, buff, 2, &buff[2]); 352 | status = MFRC522_ToCard(MFRC522, PCD_TRANSCEIVE, buff, 4, buff, &recvBits); 353 | 354 | if ((status != MI_OK) || (recvBits != 4) || ((buff[0] & 0x0F) != 0x0A)) { 355 | status = MI_ERR; 356 | } 357 | 358 | if (status == MI_OK) { 359 | //Data to the FIFO write 16Byte 360 | for (i = 0; i < 16; i++) { 361 | buff[i] = *(writeData+i); 362 | } 363 | MFRC522_CalculateCRC(MFRC522, buff, 16, &buff[16]); 364 | status = MFRC522_ToCard(MFRC522, PCD_TRANSCEIVE, buff, 18, buff, &recvBits); 365 | 366 | if ((status != MI_OK) || (recvBits != 4) || ((buff[0] & 0x0F) != 0x0A)) { 367 | status = MI_ERR; 368 | } 369 | } 370 | 371 | return status; 372 | } 373 | 374 | void MFRC522_Halt(MFRC522_Name* MFRC522) 375 | { 376 | uint16_t unLen; 377 | uint8_t buff[4]; 378 | 379 | buff[0] = PICC_HALT; 380 | buff[1] = 0; 381 | MFRC522_CalculateCRC(MFRC522, buff, 2, &buff[2]); 382 | 383 | MFRC522_ToCard(MFRC522, PCD_TRANSCEIVE, buff, 4, buff, &unLen); 384 | } 385 | 386 | -------------------------------------------------------------------------------- /RC522/RC522.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __RC522_H 3 | #define __RC522_H 4 | 5 | #include "stm32f1xx_hal.h" 6 | typedef enum { 7 | MI_OK = 0, 8 | MI_NOTAGERR, 9 | MI_ERR 10 | }MFRC522_Status_t; 11 | 12 | #define MFRC522_CS_LOW MFRC522_CS_PORT->BSRRH = MFRC522_CS_PIN; 13 | #define MFRC522_CS_HIGH MFRC522_CS_PORT->BSRRL = MFRC522_CS_PIN; 14 | 15 | /* MFRC522 Commands */ 16 | #define PCD_IDLE 0x00 //NO action; Cancel the current command 17 | #define PCD_AUTHENT 0x0E //Authentication Key 18 | #define PCD_RECEIVE 0x08 //Receive Data 19 | #define PCD_TRANSMIT 0x04 //Transmit data 20 | #define PCD_TRANSCEIVE 0x0C //Transmit and receive data, 21 | #define PCD_RESETPHASE 0x0F //Reset 22 | #define PCD_CALCCRC 0x03 //CRC Calculate 23 | 24 | /* Mifare_One card command word */ 25 | #define PICC_REQIDL 0x26 // find the antenna area does not enter hibernation 26 | #define PICC_REQALL 0x52 // find all the cards antenna area 27 | #define PICC_ANTICOLL 0x93 // anti-collision 28 | #define PICC_SElECTTAG 0x93 // election card 29 | #define PICC_AUTHENT1A 0x60 // authentication key A 30 | #define PICC_AUTHENT1B 0x61 // authentication key B 31 | #define PICC_READ 0x30 // Read Block 32 | #define PICC_WRITE 0xA0 // write block 33 | #define PICC_DECREMENT 0xC0 // debit 34 | #define PICC_INCREMENT 0xC1 // recharge 35 | #define PICC_RESTORE 0xC2 // transfer block data to the buffer 36 | #define PICC_TRANSFER 0xB0 // save the data in the buffer 37 | #define PICC_HALT 0x50 // Sleep 38 | 39 | /* MFRC522 Registers */ 40 | //Page 0: Command and Status 41 | #define MFRC522_REG_RESERVED00 0x00 42 | #define MFRC522_REG_COMMAND 0x01 43 | #define MFRC522_REG_COMM_IE_N 0x02 44 | #define MFRC522_REG_DIV1_EN 0x03 45 | #define MFRC522_REG_COMM_IRQ 0x04 46 | #define MFRC522_REG_DIV_IRQ 0x05 47 | #define MFRC522_REG_ERROR 0x06 48 | #define MFRC522_REG_STATUS1 0x07 49 | #define MFRC522_REG_STATUS2 0x08 50 | #define MFRC522_REG_FIFO_DATA 0x09 51 | #define MFRC522_REG_FIFO_LEVEL 0x0A 52 | #define MFRC522_REG_WATER_LEVEL 0x0B 53 | #define MFRC522_REG_CONTROL 0x0C 54 | #define MFRC522_REG_BIT_FRAMING 0x0D 55 | #define MFRC522_REG_COLL 0x0E 56 | #define MFRC522_REG_RESERVED01 0x0F 57 | //Page 1: Command 58 | #define MFRC522_REG_RESERVED10 0x10 59 | #define MFRC522_REG_MODE 0x11 60 | #define MFRC522_REG_TX_MODE 0x12 61 | #define MFRC522_REG_RX_MODE 0x13 62 | #define MFRC522_REG_TX_CONTROL 0x14 63 | #define MFRC522_REG_TX_AUTO 0x15 64 | #define MFRC522_REG_TX_SELL 0x16 65 | #define MFRC522_REG_RX_SELL 0x17 66 | #define MFRC522_REG_RX_THRESHOLD 0x18 67 | #define MFRC522_REG_DEMOD 0x19 68 | #define MFRC522_REG_RESERVED11 0x1A 69 | #define MFRC522_REG_RESERVED12 0x1B 70 | #define MFRC522_REG_MIFARE 0x1C 71 | #define MFRC522_REG_RESERVED13 0x1D 72 | #define MFRC522_REG_RESERVED14 0x1E 73 | #define MFRC522_REG_SERIALSPEED 0x1F 74 | //Page 2: CFG 75 | #define MFRC522_REG_RESERVED20 0x20 76 | #define MFRC522_REG_CRC_RESULT_M 0x21 77 | #define MFRC522_REG_CRC_RESULT_L 0x22 78 | #define MFRC522_REG_RESERVED21 0x23 79 | #define MFRC522_REG_MOD_WIDTH 0x24 80 | #define MFRC522_REG_RESERVED22 0x25 81 | #define MFRC522_REG_RF_CFG 0x26 82 | #define MFRC522_REG_GS_N 0x27 83 | #define MFRC522_REG_CWGS_PREG 0x28 84 | #define MFRC522_REG__MODGS_PREG 0x29 85 | #define MFRC522_REG_T_MODE 0x2A 86 | #define MFRC522_REG_T_PRESCALER 0x2B 87 | #define MFRC522_REG_T_RELOAD_H 0x2C 88 | #define MFRC522_REG_T_RELOAD_L 0x2D 89 | #define MFRC522_REG_T_COUNTER_VALUE_H 0x2E 90 | #define MFRC522_REG_T_COUNTER_VALUE_L 0x2F 91 | //Page 3:TestRegister 92 | #define MFRC522_REG_RESERVED30 0x30 93 | #define MFRC522_REG_TEST_SEL1 0x31 94 | #define MFRC522_REG_TEST_SEL2 0x32 95 | #define MFRC522_REG_TEST_PIN_EN 0x33 96 | #define MFRC522_REG_TEST_PIN_VALUE 0x34 97 | #define MFRC522_REG_TEST_BUS 0x35 98 | #define MFRC522_REG_AUTO_TEST 0x36 99 | #define MFRC522_REG_VERSION 0x37 100 | #define MFRC522_REG_ANALOG_TEST 0x38 101 | #define MFRC522_REG_TEST_ADC1 0x39 102 | #define MFRC522_REG_TEST_ADC2 0x3A 103 | #define MFRC522_REG_TEST_ADC0 0x3B 104 | #define MFRC522_REG_RESERVED31 0x3C 105 | #define MFRC522_REG_RESERVED32 0x3D 106 | #define MFRC522_REG_RESERVED33 0x3E 107 | #define MFRC522_REG_RESERVED34 0x3F 108 | //Dummy byte 109 | #define MFRC522_DUMMY 0x00 110 | 111 | #define MFRC522_MAX_LEN 16 112 | 113 | typedef struct 114 | { 115 | SPI_HandleTypeDef* SPI; 116 | GPIO_TypeDef* CS_PORT; 117 | uint16_t CS_PIN; 118 | uint8_t CardID[5]; 119 | }MFRC522_Name; 120 | 121 | void MFRC522_Init(MFRC522_Name* MFRC522, SPI_HandleTypeDef* SPI_In, GPIO_TypeDef* CS_PORT, uint16_t CS_PIN); 122 | MFRC522_Status_t MFRC522_Check(MFRC522_Name* MFRC522, uint8_t* id); 123 | MFRC522_Status_t MFRC522_Compare(MFRC522_Name* MFRC522, uint8_t* CardID, uint8_t* CompareID); 124 | MFRC522_Status_t MFRC522_Request(MFRC522_Name* MFRC522, uint8_t reqMode, uint8_t* TagType) ; 125 | MFRC522_Status_t MFRC522_ToCard(MFRC522_Name* MFRC522, uint8_t command, uint8_t* sendData, uint8_t sendLen, uint8_t* backData, uint16_t* backLen); 126 | MFRC522_Status_t MFRC522_Anticoll(MFRC522_Name* MFRC522, uint8_t* serNum); 127 | void MFRC522_CalculateCRC(MFRC522_Name* MFRC522, uint8_t* pIndata, uint8_t len, uint8_t* pOutData); 128 | uint8_t MFRC522_SelectTag(MFRC522_Name* MFRC522, uint8_t* serNum) ; 129 | MFRC522_Status_t MFRC522_Auth(MFRC522_Name* MFRC522, uint8_t authMode, uint8_t BlockAddr, uint8_t* Sectorkey, uint8_t* serNum); 130 | MFRC522_Status_t MFRC522_Read(MFRC522_Name* MFRC522, uint8_t blockAddr, uint8_t* recvData); 131 | MFRC522_Status_t MFRC522_Write(MFRC522_Name* MFRC522, uint8_t blockAddr, uint8_t* writeData); 132 | void MFRC522_Halt(MFRC522_Name* MFRC522); 133 | #endif 134 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # STM32_Device_Lib 2 | -------------------------------------------------------------------------------- /SRF05/SRF05.c: -------------------------------------------------------------------------------- 1 | /***************************************************************************************************** 2 | @File: SRF05 Ultrasonic Module 3 | @Author: khuenguyen 4 | @website: khuenguyencreator.com 5 | @youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 6 | 7 | @huong dan su dung: 8 | - Cau hinh chan TRIG output no pull, Echo input no pull 9 | - Tao mot bien luu gia tri doc duoc kieu SRF05_Typedef 10 | VD: SRF05_Typedef SRF05_01; 11 | - Truyen dia chi 2 chan vao SRF05_Init 12 | VD: SRF05_Init(&SRF05_01, ECHO_GPIO_Port, ECHO_Pin, TRIG_GPIO_Port, TRIG_Pin); 13 | - Doc gia tri nhan duoc 14 | VD: Value = SRF05_Read(&SRF05_01); 15 | 16 | ***Note: #include va cau hinh ham delay truyen vao 17 | *********************** *****************************************************************************/ 18 | #include "SRF05.h" 19 | #include "delay_timer.h" 20 | //************************* Low Level Layer **********************************************************/ 21 | //#include "delay_timer.h" 22 | #define TRIG_HIGH() HAL_GPIO_WritePin(SRF05->TRIGGER_GPIOx, SRF05->TRIGGER_GPIO_Pin, GPIO_PIN_SET) 23 | #define TRIG_LOW() HAL_GPIO_WritePin(SRF05->TRIGGER_GPIOx, SRF05->TRIGGER_GPIO_Pin, GPIO_PIN_RESET) 24 | #define READ_ECHO() HAL_GPIO_ReadPin(SRF05->ECHO_GPIOx, SRF05->ECHO_GPIO_Pin) 25 | extern TIM_HandleTypeDef htim4; 26 | 27 | static void SRF05_DELAY_Us(uint16_t Time) 28 | { 29 | DELAY_TIM_Us(&htim4, Time); // thay the ham nay neu su dung ham delay khac 30 | 31 | } 32 | 33 | //************************* HIGH Level Layer **********************************************************/ 34 | // function: init SRF05 35 | // input: SRF05 target, TRIG pin, Echo Pin 36 | // output: 0 false, 1 true 37 | uint8_t SRF05_Init(SRF05_Device_Name* SRF05, GPIO_TypeDef* ECHO_GPIOx, uint16_t ECHO_GPIO_Pin, GPIO_TypeDef* TRIGGER_GPIOx, uint16_t TRIGGER_GPIO_Pin) { 38 | 39 | SRF05->ECHO_GPIOx = ECHO_GPIOx; 40 | SRF05->ECHO_GPIO_Pin = ECHO_GPIO_Pin; 41 | SRF05->TRIGGER_GPIOx = TRIGGER_GPIOx; 42 | SRF05->TRIGGER_GPIO_Pin = TRIGGER_GPIO_Pin; 43 | TRIG_LOW(); 44 | if (SRF05_Read(SRF05) >= 0) { 45 | return 1; 46 | } 47 | return 0; 48 | } 49 | 50 | float SRF05_Read(SRF05_Device_Name* SRF05) { 51 | uint32_t time, timeout; 52 | 53 | TRIG_LOW(); 54 | SRF05_DELAY_Us(2); 55 | TRIG_HIGH(); 56 | SRF05_DELAY_Us(10); 57 | TRIG_LOW(); 58 | timeout = SRF05_TIMEOUT; 59 | while (!READ_ECHO()) 60 | { 61 | if (timeout-- == 0x00) 62 | { 63 | return -1; 64 | } 65 | } 66 | time = 0; 67 | while (READ_ECHO()) 68 | { 69 | time++; 70 | SRF05_DELAY_Us(1); 71 | } 72 | SRF05->Distance = (float)time * SRF05_NUMBER; 73 | 74 | return SRF05->Distance; 75 | } 76 | -------------------------------------------------------------------------------- /SRF05/SRF05.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************************************** 2 | @tac gia: khuenguyen 3 | @website: khuenguyencreator.com 4 | @youtube: https://www.youtube.com/channel/UCt8cFnPOaHrQXWmVkk-lfvg 5 | @huong dan su dung: 6 | - Cau hinh chan TRIG output no pull, Echo input no pull 7 | - Tao mot bien luu gia tri doc duoc kieu SRF05_Typedef 8 | VD: SRF05_Typedef SRF05_01; 9 | - Truyen dia chi 2 chan vao SRF05_Init 10 | VD: SRF05_Init(&SRF05_01, ECHO_GPIO_Port, ECHO_Pin, TRIG_GPIO_Port, TRIG_Pin); 11 | - Doc gia tri nhan duoc 12 | VD: Value = SRF05_Read(&SRF05_01); 13 | 14 | ***Note: #include va cau hinh ham delay truyen vao 15 | *********************** *****************************************************************************/ 16 | #ifndef __SRF05_H 17 | #define __SRF05_H 18 | 19 | #include "stm32f1xx_hal.h" 20 | #define SRF05_TIMEOUT 1000000 21 | #define SRF05_NUMBER ((float)0.0171821) 22 | 23 | typedef struct { /*!< Distance measured from sensor in centimeters */ 24 | GPIO_TypeDef* ECHO_GPIOx; /*!< Pointer to GPIOx PORT for ECHO pin. Meant for private use only */ 25 | uint16_t ECHO_GPIO_Pin; /*!< GPIO Pin for ECHO pin. Meant for private use only */ 26 | GPIO_TypeDef* TRIGGER_GPIOx; /*!< Pointer to GPIOx PORT for TRIGGER pin. Meant for private use only */ 27 | uint16_t TRIGGER_GPIO_Pin; /*!< GPIO Pin for ECHO pin. Meant for private use only */ 28 | float Distance; 29 | }SRF05_Device_Name; 30 | 31 | uint8_t SRF05_Init(SRF05_Device_Name* SRF05, GPIO_TypeDef* ECHO_GPIOx, uint16_t ECHO_GPIO_Pin, GPIO_TypeDef* TRIGGER_GPIOx, uint16_t TRIGGER_GPIO_Pin); 32 | float SRF05_Read(SRF05_Device_Name* ); 33 | #endif 34 | --------------------------------------------------------------------------------