Rev 4 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4 | Rev 5 | ||
|---|---|---|---|
| Line 18... | Line 18... | ||
| 18 | This code is taken from the ADAfruit library - it is used for playing with an OLED screen |
18 | This code is taken from the ADAfruit library - it is used for playing with an OLED screen |
| 19 | 19 | ||
| 20 | *********************************************************************/ |
20 | *********************************************************************/ |
| 21 | #include <stdint.h> |
21 | #include <stdint.h> |
| 22 | #include <string.h> |
22 | #include <string.h> |
| 23 | #include "stm32f1xx_hal.h" |
- | |
| 24 | #include "SSD1306.h" |
23 | #include "SSD1306.h" |
| - | 24 | #include "stm32f1xx_hal_conf.h" |
|
| - | 25 | #include "stm32f1xx_hal.h" |
|
| - | 26 | ||
| 25 | 27 | ||
| 26 | #define swap(x,y) { typeof(x)t = x; x=y; y=t; } |
28 | #define swap(x,y) { typeof(x)t = x; x=y; y=t; } |
| 27 | #define abs(x) ((x)>0?(x):-(x)) |
29 | #define abs(x) ((x)>0?(x):-(x)) |
| 28 | 30 | ||
| 29 | static uint8_t rotation = 0; |
31 | static uint8_t rotation = 0; |
| Line 86... | Line 88... | ||
| 86 | 88 | ||
| 87 | inline void fastSPIwrite(uint8_t d) { |
89 | inline void fastSPIwrite(uint8_t d) { |
| 88 | uint8_t buffer[1]; |
90 | uint8_t buffer[1]; |
| 89 | buffer[0] = d; |
91 | buffer[0] = d; |
| 90 | // todo chipselect based on 'cd' buffer choice |
92 | // todo chipselect based on 'cd' buffer choice |
| - | 93 | if(cd==0) |
|
| - | 94 | { |
|
| - | 95 | HAL_GPIO_WritePin(SPI_NSS1_GPIO_Port, SPI_NSS1_Pin, GPIO_PIN_RESET); |
|
| - | 96 | } |
|
| - | 97 | if(cd==1) |
|
| - | 98 | { |
|
| - | 99 | HAL_GPIO_WritePin(SPI_NSS2_GPIO_Port, SPI_NSS2_Pin, GPIO_PIN_RESET); |
|
| - | 100 | } |
|
| - | 101 | ||
| 91 | 102 | ||
| 92 | HAL_SPI_Transmit(&hspi1, buffer, 1, 2); |
103 | HAL_SPI_Transmit(&hspi1, buffer, 1, 2); |
| 93 | 104 | ||
| - | 105 | if(cd==0) |
|
| - | 106 | { |
|
| - | 107 | HAL_GPIO_WritePin(SPI_NSS1_GPIO_Port, SPI_NSS1_Pin, GPIO_PIN_SET); |
|
| - | 108 | } |
|
| - | 109 | if(cd==1) |
|
| - | 110 | { |
|
| - | 111 | HAL_GPIO_WritePin(SPI_NSS2_GPIO_Port, SPI_NSS2_Pin, GPIO_PIN_SET); |
|
| - | 112 | } |
|
| - | 113 | ||
| - | 114 | ||
| - | 115 | ||
| 94 | } |
116 | } |
| 95 | 117 | ||
| 96 | // the most basic function, set a single pixel |
118 | // the most basic function, set a single pixel |
| 97 | inline void drawPixel(int16_t x, int16_t y, uint16_t color) { |
119 | inline void drawPixel(int16_t x, int16_t y, uint16_t color) { |
| 98 | if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) |
120 | if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) |
| Line 146... | Line 168... | ||
| 146 | // bring out of reset |
168 | // bring out of reset |
| 147 | HAL_GPIO_WritePin(SPI_RESET_GPIO_Port, SPI_RESET_Pin, GPIO_PIN_SET); |
169 | HAL_GPIO_WritePin(SPI_RESET_GPIO_Port, SPI_RESET_Pin, GPIO_PIN_SET); |
| 148 | // turn on VCC (9V?) |
170 | // turn on VCC (9V?) |
| 149 | 171 | ||
| 150 | for (cd = 0; cd < 2; cd++) { |
172 | for (cd = 0; cd < 2; cd++) { |
| - | 173 | select_display(cd); |
|
| 151 | #if defined SSD1306_128_32 |
174 | #if defined SSD1306_128_32 |
| 152 | // Init sequence for 128x32 OLED module |
175 | // Init sequence for 128x32 OLED module |
| 153 | ssd1306_command(SSD1306_DISPLAYOFF);// 0xAE |
176 | ssd1306_command(SSD1306_DISPLAYOFF);// 0xAE |
| 154 | ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV);// 0xD5 |
177 | ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV);// 0xD5 |
| 155 | ssd1306_command(0x80);// the suggested ratio 0x80 |
178 | ssd1306_command(0x80);// the suggested ratio 0x80 |
| Line 222... | Line 245... | ||
| 222 | ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6 |
245 | ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6 |
| 223 | #endif |
246 | #endif |
| 224 | 247 | ||
| 225 | ssd1306_command(SSD1306_DISPLAYON); //--turn on oled panel |
248 | ssd1306_command(SSD1306_DISPLAYON); //--turn on oled panel |
| 226 | } |
249 | } |
| - | 250 | select_display(0); |
|
| 227 | } |
251 | } |
| 228 | 252 | ||
| 229 | void invertDisplay(uint8_t i) { |
253 | void invertDisplay(uint8_t i) { |
| 230 | if (i) { |
254 | if (i) { |
| 231 | ssd1306_command(SSD1306_INVERTDISPLAY); |
255 | ssd1306_command(SSD1306_INVERTDISPLAY); |
| Line 341... | Line 365... | ||
| 341 | // set the cursor to |
365 | // set the cursor to |
| 342 | ssd1306_command(0xB0 + row); //set page address |
366 | ssd1306_command(0xB0 + row); //set page address |
| 343 | ssd1306_command(col & 0xf); //set lower column address |
367 | ssd1306_command(col & 0xf); //set lower column address |
| 344 | ssd1306_command(0x10 | (col >> 4)); //set higher column address |
368 | ssd1306_command(0x10 | (col >> 4)); //set higher column address |
| 345 | 369 | ||
| - | 370 | ||
| 346 | HAL_GPIO_WritePin(SPI1CD_GPIO_Port, SPI1CD_Pin, GPIO_PIN_SET); |
371 | HAL_GPIO_WritePin(SPI1CD_GPIO_Port, SPI1CD_Pin, GPIO_PIN_SET); |
| - | 372 | if(cd==0) |
|
| - | 373 | { |
|
| - | 374 | HAL_GPIO_WritePin(SPI_NSS1_GPIO_Port, SPI_NSS1_Pin, GPIO_PIN_RESET); |
|
| - | 375 | } |
|
| - | 376 | if(cd==1) |
|
| - | 377 | { |
|
| - | 378 | HAL_GPIO_WritePin(SPI_NSS2_GPIO_Port, SPI_NSS2_Pin, GPIO_PIN_RESET); |
|
| - | 379 | } |
|
| - | 380 | ||
| - | 381 | ||
| - | 382 | ||
| - | 383 | ||
| 347 | HAL_SPI_Transmit(&hspi1, |
384 | HAL_SPI_Transmit(&hspi1, |
| 348 | (uint8_t *) (&display_buffer[cd]) + row * SSD1306_LCDWIDTH, |
385 | (uint8_t *) (&display_buffer[cd]) + row * SSD1306_LCDWIDTH, |
| 349 | SSD1306_LCDWIDTH, 100); |
386 | SSD1306_LCDWIDTH, 100); |
| - | 387 | if(cd==0) |
|
| - | 388 | { |
|
| - | 389 | HAL_GPIO_WritePin(SPI_NSS1_GPIO_Port, SPI_NSS1_Pin, GPIO_PIN_SET); |
|
| - | 390 | } |
|
| - | 391 | if(cd==1) |
|
| - | 392 | { |
|
| - | 393 | HAL_GPIO_WritePin(SPI_NSS2_GPIO_Port, SPI_NSS2_Pin, GPIO_PIN_SET); |
|
| - | 394 | } |
|
| - | 395 | ||
| 350 | } |
396 | } |
| 351 | 397 | ||
| 352 | } |
398 | } |
| 353 | 399 | ||
| 354 | // clear everything |
400 | // clear everything |