diff --git a/lib/ssd1306/ssd1306.c b/lib/ssd1306/ssd1306.c --- a/lib/ssd1306/ssd1306.c +++ b/lib/ssd1306/ssd1306.c @@ -20,219 +20,219 @@ static void setStartColumn(unsigned char // Initialize OLED void ssd1306_init(void) { - __SPI3_CLK_ENABLE(); - __GPIOA_CLK_ENABLE(); - __GPIOB_CLK_ENABLE(); - GPIO_InitTypeDef GPIO_InitStruct; + __SPI3_CLK_ENABLE(); + __GPIOA_CLK_ENABLE(); + __GPIOB_CLK_ENABLE(); + GPIO_InitTypeDef GPIO_InitStruct; - // GPIO - GPIO_InitStruct.Pin = OLED_CS_Pin|OLED_RESET_Pin|OLED_DC_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(OLED_DC_GPIO_Port, &GPIO_InitStruct); + // GPIO + GPIO_InitStruct.Pin = OLED_CS_Pin|OLED_RESET_Pin|OLED_DC_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(OLED_DC_GPIO_Port, &GPIO_InitStruct); - // Set up MOSI/MISO/SCK - GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + // Set up MOSI/MISO/SCK + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - // Set up SPI port for OLED - hspi1.Instance = SPI3; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; - hspi1.Init.CLKPhase = SPI_PHASE_2EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLED; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLED; - HAL_SPI_Init(&hspi1); + // Set up SPI port for OLED + hspi1.Instance = SPI3; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_8BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; + hspi1.Init.CLKPhase = SPI_PHASE_2EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLED; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; + hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLED; + HAL_SPI_Init(&hspi1); - // Generate a reset - SSD_Reset_Low(); - uint32_t i; - for(i=5000; i>1; i--) - SSD_Reset_High(); + // Generate a reset + SSD_Reset_Low(); + uint32_t i; + for(i=5000; i>1; i--) + SSD_Reset_High(); - WriteCommand(0xAE); - WriteCommand(0xD5); - WriteCommand(0x80); - WriteCommand(0xA8); - WriteCommand(0x1F); - WriteCommand(0xD3); - WriteCommand(0x00); - WriteCommand(0x40 | 0x00); // line #0 - WriteCommand(0x8D); - WriteCommand(0x14); //10 or 14 if not externalvcc - WriteCommand(0x20); - WriteCommand(0x00); - // WriteCommand(0xA0 | 0x1); // segremap (normal) - WriteCommand(0xA0); // segremap (flip) - // WriteCommand(0xC8); // comscandec (normal) - WriteCommand(0xC0); // comscandec (flip) - WriteCommand(0xDA); // setcompins - WriteCommand(0x02); - WriteCommand(0x81); // contrast - WriteCommand(0x0F); // contrast value. 8f is a good one. - WriteCommand(0xD9); - WriteCommand(0xF1); //22 or F1 if not externalvcc - WriteCommand(0xDB); - WriteCommand(0x40); - WriteCommand(0xA4); // dispalyallon_resume - WriteCommand(0xA6); // normaldisplay + WriteCommand(0xAE); + WriteCommand(0xD5); + WriteCommand(0x80); + WriteCommand(0xA8); + WriteCommand(0x1F); + WriteCommand(0xD3); + WriteCommand(0x00); + WriteCommand(0x40 | 0x00); // line #0 + WriteCommand(0x8D); + WriteCommand(0x14); //10 or 14 if not externalvcc + WriteCommand(0x20); + WriteCommand(0x00); + // WriteCommand(0xA0 | 0x1); // segremap (normal) + WriteCommand(0xA0); // segremap (flip) + // WriteCommand(0xC8); // comscandec (normal) + WriteCommand(0xC0); // comscandec (flip) + WriteCommand(0xDA); // setcompins + WriteCommand(0x02); + WriteCommand(0x81); // contrast + WriteCommand(0x0F); // contrast value. 8f is a good one. + WriteCommand(0xD9); + WriteCommand(0xF1); //22 or F1 if not externalvcc + WriteCommand(0xDB); + WriteCommand(0x40); + WriteCommand(0xA4); // dispalyallon_resume + WriteCommand(0xA6); // normaldisplay - WriteCommand(0xAF); // display on + WriteCommand(0xAF); // display on } // Times New Roman font static const char fontData[][5] = { // Refer to "Times New Roman" Font Database - // Basic Characters - {0x00,0x00,0x00,0x00,0x00}, // ( 0) - 0x0020 No-Break Space - {0x00,0x00,0x4F,0x00,0x00}, // ( 1) ! - 0x0021 Exclamation Mark - {0x00,0x07,0x00,0x07,0x00}, // ( 2) " - 0x0022 Quotation Mark - {0x14,0x7F,0x14,0x7F,0x14}, // ( 3) # - 0x0023 Number Sign - {0x24,0x2A,0x7F,0x2A,0x12}, // ( 4) $ - 0x0024 Dollar Sign - {0x23,0x13,0x08,0x64,0x62}, // ( 5) % - 0x0025 Percent Sign - {0x36,0x49,0x55,0x22,0x50}, // ( 6) & - 0x0026 Ampersand - {0x00,0x05,0x03,0x00,0x00}, // ( 7) ' - 0x0027 Apostrophe - {0x00,0x1C,0x22,0x41,0x00}, // ( 8) ( - 0x0028 Left Parenthesis - {0x00,0x41,0x22,0x1C,0x00}, // ( 9) ) - 0x0029 Right Parenthesis - {0x14,0x08,0x3E,0x08,0x14}, // ( 10) * - 0x002A Asterisk - {0x08,0x08,0x3E,0x08,0x08}, // ( 11) + - 0x002B Plus Sign - {0x00,0x50,0x30,0x00,0x00}, // ( 12) , - 0x002C Comma - {0x08,0x08,0x08,0x08,0x08}, // ( 13) - - 0x002D Hyphen-Minus - {0x00,0x60,0x60,0x00,0x00}, // ( 14) . - 0x002E Full Stop - {0x20,0x10,0x08,0x04,0x02}, // ( 15) / - 0x002F Solidus - {0x3E,0x51,0x49,0x45,0x3E}, // ( 16) 0 - 0x0030 Digit Zero - {0x00,0x42,0x7F,0x40,0x00}, // ( 17) 1 - 0x0031 Digit One - {0x42,0x61,0x51,0x49,0x46}, // ( 18) 2 - 0x0032 Digit Two - {0x21,0x41,0x45,0x4B,0x31}, // ( 19) 3 - 0x0033 Digit Three - {0x18,0x14,0x12,0x7F,0x10}, // ( 20) 4 - 0x0034 Digit Four - {0x27,0x45,0x45,0x45,0x39}, // ( 21) 5 - 0x0035 Digit Five - {0x3C,0x4A,0x49,0x49,0x30}, // ( 22) 6 - 0x0036 Digit Six - {0x01,0x71,0x09,0x05,0x03}, // ( 23) 7 - 0x0037 Digit Seven - {0x36,0x49,0x49,0x49,0x36}, // ( 24) 8 - 0x0038 Digit Eight - {0x06,0x49,0x49,0x29,0x1E}, // ( 25) 9 - 0x0039 Dight Nine - {0x00,0x36,0x36,0x00,0x00}, // ( 26) : - 0x003A Colon - {0x00,0x56,0x36,0x00,0x00}, // ( 27) ; - 0x003B Semicolon - {0x08,0x14,0x22,0x41,0x00}, // ( 28) < - 0x003C Less-Than Sign - {0x14,0x14,0x14,0x14,0x14}, // ( 29) = - 0x003D Equals Sign - {0x00,0x41,0x22,0x14,0x08}, // ( 30) > - 0x003E Greater-Than Sign - {0x02,0x01,0x51,0x09,0x06}, // ( 31) ? - 0x003F Question Mark - {0x32,0x49,0x79,0x41,0x3E}, // ( 32) @ - 0x0040 Commercial At - {0x7E,0x11,0x11,0x11,0x7E}, // ( 33) A - 0x0041 Latin Capital Letter A - {0x7F,0x49,0x49,0x49,0x36}, // ( 34) B - 0x0042 Latin Capital Letter B - {0x3E,0x41,0x41,0x41,0x22}, // ( 35) C - 0x0043 Latin Capital Letter C - {0x7F,0x41,0x41,0x22,0x1C}, // ( 36) D - 0x0044 Latin Capital Letter D - {0x7F,0x49,0x49,0x49,0x41}, // ( 37) E - 0x0045 Latin Capital Letter E - {0x7F,0x09,0x09,0x09,0x01}, // ( 38) F - 0x0046 Latin Capital Letter F - {0x3E,0x41,0x49,0x49,0x7A}, // ( 39) G - 0x0047 Latin Capital Letter G - {0x7F,0x08,0x08,0x08,0x7F}, // ( 40) H - 0x0048 Latin Capital Letter H - {0x00,0x41,0x7F,0x41,0x00}, // ( 41) I - 0x0049 Latin Capital Letter I - {0x20,0x40,0x41,0x3F,0x01}, // ( 42) J - 0x004A Latin Capital Letter J - {0x7F,0x08,0x14,0x22,0x41}, // ( 43) K - 0x004B Latin Capital Letter K - {0x7F,0x40,0x40,0x40,0x40}, // ( 44) L - 0x004C Latin Capital Letter L - {0x7F,0x02,0x0C,0x02,0x7F}, // ( 45) M - 0x004D Latin Capital Letter M - {0x7F,0x04,0x08,0x10,0x7F}, // ( 46) N - 0x004E Latin Capital Letter N - {0x3E,0x41,0x41,0x41,0x3E}, // ( 47) O - 0x004F Latin Capital Letter O - {0x7F,0x09,0x09,0x09,0x06}, // ( 48) P - 0x0050 Latin Capital Letter P - {0x3E,0x41,0x51,0x21,0x5E}, // ( 49) Q - 0x0051 Latin Capital Letter Q - {0x7F,0x09,0x19,0x29,0x46}, // ( 50) R - 0x0052 Latin Capital Letter R - {0x46,0x49,0x49,0x49,0x31}, // ( 51) S - 0x0053 Latin Capital Letter S - {0x01,0x01,0x7F,0x01,0x01}, // ( 52) T - 0x0054 Latin Capital Letter T - {0x3F,0x40,0x40,0x40,0x3F}, // ( 53) U - 0x0055 Latin Capital Letter U - {0x1F,0x20,0x40,0x20,0x1F}, // ( 54) V - 0x0056 Latin Capital Letter V - {0x3F,0x40,0x38,0x40,0x3F}, // ( 55) W - 0x0057 Latin Capital Letter W - {0x63,0x14,0x08,0x14,0x63}, // ( 56) X - 0x0058 Latin Capital Letter X - {0x07,0x08,0x70,0x08,0x07}, // ( 57) Y - 0x0059 Latin Capital Letter Y - {0x61,0x51,0x49,0x45,0x43}, // ( 58) Z - 0x005A Latin Capital Letter Z - {0x00,0x7F,0x41,0x41,0x00}, // ( 59) [ - 0x005B Left Square Bracket - {0x02,0x04,0x08,0x10,0x20}, // ( 60) \ - 0x005C Reverse Solidus - {0x00,0x41,0x41,0x7F,0x00}, // ( 61) ] - 0x005D Right Square Bracket - {0x04,0x02,0x01,0x02,0x04}, // ( 62) ^ - 0x005E Circumflex Accent - {0x40,0x40,0x40,0x40,0x40}, // ( 63) _ - 0x005F Low Line - {0x01,0x02,0x04,0x00,0x00}, // ( 64) ` - 0x0060 Grave Accent - {0x20,0x54,0x54,0x54,0x78}, // ( 65) a - 0x0061 Latin Small Letter A - {0x7F,0x48,0x44,0x44,0x38}, // ( 66) b - 0x0062 Latin Small Letter B - {0x38,0x44,0x44,0x44,0x20}, // ( 67) c - 0x0063 Latin Small Letter C - {0x38,0x44,0x44,0x48,0x7F}, // ( 68) d - 0x0064 Latin Small Letter D - {0x38,0x54,0x54,0x54,0x18}, // ( 69) e - 0x0065 Latin Small Letter E - {0x08,0x7E,0x09,0x01,0x02}, // ( 70) f - 0x0066 Latin Small Letter F - {0x06,0x49,0x49,0x49,0x3F}, // ( 71) g - 0x0067 Latin Small Letter G - {0x7F,0x08,0x04,0x04,0x78}, // ( 72) h - 0x0068 Latin Small Letter H - {0x00,0x44,0x7D,0x40,0x00}, // ( 73) i - 0x0069 Latin Small Letter I - {0x20,0x40,0x44,0x3D,0x00}, // ( 74) j - 0x006A Latin Small Letter J - {0x7F,0x10,0x28,0x44,0x00}, // ( 75) k - 0x006B Latin Small Letter K - {0x00,0x41,0x7F,0x40,0x00}, // ( 76) l - 0x006C Latin Small Letter L - {0x7C,0x04,0x18,0x04,0x7C}, // ( 77) m - 0x006D Latin Small Letter M - {0x7C,0x08,0x04,0x04,0x78}, // ( 78) n - 0x006E Latin Small Letter N - {0x38,0x44,0x44,0x44,0x38}, // ( 79) o - 0x006F Latin Small Letter O - {0x7C,0x14,0x14,0x14,0x08}, // ( 80) p - 0x0070 Latin Small Letter P - {0x08,0x14,0x14,0x18,0x7C}, // ( 81) q - 0x0071 Latin Small Letter Q - {0x7C,0x08,0x04,0x04,0x08}, // ( 82) r - 0x0072 Latin Small Letter R - {0x48,0x54,0x54,0x54,0x20}, // ( 83) s - 0x0073 Latin Small Letter S - {0x04,0x3F,0x44,0x40,0x20}, // ( 84) t - 0x0074 Latin Small Letter T - {0x3C,0x40,0x40,0x20,0x7C}, // ( 85) u - 0x0075 Latin Small Letter U - {0x1C,0x20,0x40,0x20,0x1C}, // ( 86) v - 0x0076 Latin Small Letter V - {0x3C,0x40,0x30,0x40,0x3C}, // ( 87) w - 0x0077 Latin Small Letter W - {0x44,0x28,0x10,0x28,0x44}, // ( 88) x - 0x0078 Latin Small Letter X - {0x0C,0x50,0x50,0x50,0x3C}, // ( 89) y - 0x0079 Latin Small Letter Y - {0x44,0x64,0x54,0x4C,0x44}, // ( 90) z - 0x007A Latin Small Letter Z - {0x00,0x08,0x36,0x41,0x00}, // ( 91) { - 0x007B Left Curly Bracket - {0x00,0x00,0x7F,0x00,0x00}, // ( 92) | - 0x007C Vertical Line - {0x00,0x41,0x36,0x08,0x00}, // ( 93) } - 0x007D Right Curly Bracket - {0x02,0x01,0x02,0x04,0x02}, // ( 94) ~ - 0x007E Tilde - {0x08,0x14,0x2A,0x14,0x22}, // ( 95) << - 0x00AB Left-Pointing Double Angle Quotation Mark - {0x00,0x02,0x05,0x02,0x00}, // ( 96) - 0x00B0 Degree Sign - {0x44,0x44,0x5F,0x44,0x44}, // ( 97) +- - 0x00B1 Plus-Minus Sign - {0x7E,0x20,0x20,0x10,0x3E}, // ( 98) u - 0x00B5 Micro Sign - {0x22,0x14,0x2A,0x14,0x08}, // ( 99) >> - 0x00BB Right-Pointing Double Angle Quotation Mark - {0x30,0x48,0x45,0x40,0x20}, // (100) ? - 0x00BF Inverted Question Mark - {0x22,0x14,0x08,0x14,0x22}, // (101) x - 0x00D7 Multiplication Sign - {0x08,0x08,0x2A,0x08,0x08}, // (102) + - 0x00F7 Division Sign - {0x18,0x14,0x08,0x14,0x0C}, // (103) - 0x221E Infinity - {0x44,0x4A,0x4A,0x51,0x51}, // (104) < - 0x2264 Less-Than or Equal to - {0x51,0x51,0x4A,0x4A,0x44}, // (105) > - 0x2265 Greater-Than or Equal to - {0x54,0x14,0x64,0x08,0x70}, // (106) .: - RF Symbol - {0x70,0x7C,0x72,0x7C,0x70}, // (107) ^ - Lock symbol - {0x70,0x5C,0x52,0x54,0x70}, // (108) / - Unlock symbol - {0x0C,0x1E,0x3C,0x1E,0x0C}, // (109) <3 - Heart Symbol - {0x18,0x22,0xFF,0x12,0x0C}, // (110) U - USB Symbol - {0x22,0x5d,0x22,0x00,0x00}, // (111) ez updown - {0x14,0x3e,0x14,0x00,0x00}, // (112) ez updown short + // Basic Characters + {0x00,0x00,0x00,0x00,0x00}, // ( 0) - 0x0020 No-Break Space + {0x00,0x00,0x4F,0x00,0x00}, // ( 1) ! - 0x0021 Exclamation Mark + {0x00,0x07,0x00,0x07,0x00}, // ( 2) " - 0x0022 Quotation Mark + {0x14,0x7F,0x14,0x7F,0x14}, // ( 3) # - 0x0023 Number Sign + {0x24,0x2A,0x7F,0x2A,0x12}, // ( 4) $ - 0x0024 Dollar Sign + {0x23,0x13,0x08,0x64,0x62}, // ( 5) % - 0x0025 Percent Sign + {0x36,0x49,0x55,0x22,0x50}, // ( 6) & - 0x0026 Ampersand + {0x00,0x05,0x03,0x00,0x00}, // ( 7) ' - 0x0027 Apostrophe + {0x00,0x1C,0x22,0x41,0x00}, // ( 8) ( - 0x0028 Left Parenthesis + {0x00,0x41,0x22,0x1C,0x00}, // ( 9) ) - 0x0029 Right Parenthesis + {0x14,0x08,0x3E,0x08,0x14}, // ( 10) * - 0x002A Asterisk + {0x08,0x08,0x3E,0x08,0x08}, // ( 11) + - 0x002B Plus Sign + {0x00,0x50,0x30,0x00,0x00}, // ( 12) , - 0x002C Comma + {0x08,0x08,0x08,0x08,0x08}, // ( 13) - - 0x002D Hyphen-Minus + {0x00,0x60,0x60,0x00,0x00}, // ( 14) . - 0x002E Full Stop + {0x20,0x10,0x08,0x04,0x02}, // ( 15) / - 0x002F Solidus + {0x3E,0x51,0x49,0x45,0x3E}, // ( 16) 0 - 0x0030 Digit Zero + {0x00,0x42,0x7F,0x40,0x00}, // ( 17) 1 - 0x0031 Digit One + {0x42,0x61,0x51,0x49,0x46}, // ( 18) 2 - 0x0032 Digit Two + {0x21,0x41,0x45,0x4B,0x31}, // ( 19) 3 - 0x0033 Digit Three + {0x18,0x14,0x12,0x7F,0x10}, // ( 20) 4 - 0x0034 Digit Four + {0x27,0x45,0x45,0x45,0x39}, // ( 21) 5 - 0x0035 Digit Five + {0x3C,0x4A,0x49,0x49,0x30}, // ( 22) 6 - 0x0036 Digit Six + {0x01,0x71,0x09,0x05,0x03}, // ( 23) 7 - 0x0037 Digit Seven + {0x36,0x49,0x49,0x49,0x36}, // ( 24) 8 - 0x0038 Digit Eight + {0x06,0x49,0x49,0x29,0x1E}, // ( 25) 9 - 0x0039 Dight Nine + {0x00,0x36,0x36,0x00,0x00}, // ( 26) : - 0x003A Colon + {0x00,0x56,0x36,0x00,0x00}, // ( 27) ; - 0x003B Semicolon + {0x08,0x14,0x22,0x41,0x00}, // ( 28) < - 0x003C Less-Than Sign + {0x14,0x14,0x14,0x14,0x14}, // ( 29) = - 0x003D Equals Sign + {0x00,0x41,0x22,0x14,0x08}, // ( 30) > - 0x003E Greater-Than Sign + {0x02,0x01,0x51,0x09,0x06}, // ( 31) ? - 0x003F Question Mark + {0x32,0x49,0x79,0x41,0x3E}, // ( 32) @ - 0x0040 Commercial At + {0x7E,0x11,0x11,0x11,0x7E}, // ( 33) A - 0x0041 Latin Capital Letter A + {0x7F,0x49,0x49,0x49,0x36}, // ( 34) B - 0x0042 Latin Capital Letter B + {0x3E,0x41,0x41,0x41,0x22}, // ( 35) C - 0x0043 Latin Capital Letter C + {0x7F,0x41,0x41,0x22,0x1C}, // ( 36) D - 0x0044 Latin Capital Letter D + {0x7F,0x49,0x49,0x49,0x41}, // ( 37) E - 0x0045 Latin Capital Letter E + {0x7F,0x09,0x09,0x09,0x01}, // ( 38) F - 0x0046 Latin Capital Letter F + {0x3E,0x41,0x49,0x49,0x7A}, // ( 39) G - 0x0047 Latin Capital Letter G + {0x7F,0x08,0x08,0x08,0x7F}, // ( 40) H - 0x0048 Latin Capital Letter H + {0x00,0x41,0x7F,0x41,0x00}, // ( 41) I - 0x0049 Latin Capital Letter I + {0x20,0x40,0x41,0x3F,0x01}, // ( 42) J - 0x004A Latin Capital Letter J + {0x7F,0x08,0x14,0x22,0x41}, // ( 43) K - 0x004B Latin Capital Letter K + {0x7F,0x40,0x40,0x40,0x40}, // ( 44) L - 0x004C Latin Capital Letter L + {0x7F,0x02,0x0C,0x02,0x7F}, // ( 45) M - 0x004D Latin Capital Letter M + {0x7F,0x04,0x08,0x10,0x7F}, // ( 46) N - 0x004E Latin Capital Letter N + {0x3E,0x41,0x41,0x41,0x3E}, // ( 47) O - 0x004F Latin Capital Letter O + {0x7F,0x09,0x09,0x09,0x06}, // ( 48) P - 0x0050 Latin Capital Letter P + {0x3E,0x41,0x51,0x21,0x5E}, // ( 49) Q - 0x0051 Latin Capital Letter Q + {0x7F,0x09,0x19,0x29,0x46}, // ( 50) R - 0x0052 Latin Capital Letter R + {0x46,0x49,0x49,0x49,0x31}, // ( 51) S - 0x0053 Latin Capital Letter S + {0x01,0x01,0x7F,0x01,0x01}, // ( 52) T - 0x0054 Latin Capital Letter T + {0x3F,0x40,0x40,0x40,0x3F}, // ( 53) U - 0x0055 Latin Capital Letter U + {0x1F,0x20,0x40,0x20,0x1F}, // ( 54) V - 0x0056 Latin Capital Letter V + {0x3F,0x40,0x38,0x40,0x3F}, // ( 55) W - 0x0057 Latin Capital Letter W + {0x63,0x14,0x08,0x14,0x63}, // ( 56) X - 0x0058 Latin Capital Letter X + {0x07,0x08,0x70,0x08,0x07}, // ( 57) Y - 0x0059 Latin Capital Letter Y + {0x61,0x51,0x49,0x45,0x43}, // ( 58) Z - 0x005A Latin Capital Letter Z + {0x00,0x7F,0x41,0x41,0x00}, // ( 59) [ - 0x005B Left Square Bracket + {0x02,0x04,0x08,0x10,0x20}, // ( 60) \ - 0x005C Reverse Solidus + {0x00,0x41,0x41,0x7F,0x00}, // ( 61) ] - 0x005D Right Square Bracket + {0x04,0x02,0x01,0x02,0x04}, // ( 62) ^ - 0x005E Circumflex Accent + {0x40,0x40,0x40,0x40,0x40}, // ( 63) _ - 0x005F Low Line + {0x01,0x02,0x04,0x00,0x00}, // ( 64) ` - 0x0060 Grave Accent + {0x20,0x54,0x54,0x54,0x78}, // ( 65) a - 0x0061 Latin Small Letter A + {0x7F,0x48,0x44,0x44,0x38}, // ( 66) b - 0x0062 Latin Small Letter B + {0x38,0x44,0x44,0x44,0x20}, // ( 67) c - 0x0063 Latin Small Letter C + {0x38,0x44,0x44,0x48,0x7F}, // ( 68) d - 0x0064 Latin Small Letter D + {0x38,0x54,0x54,0x54,0x18}, // ( 69) e - 0x0065 Latin Small Letter E + {0x08,0x7E,0x09,0x01,0x02}, // ( 70) f - 0x0066 Latin Small Letter F + {0x06,0x49,0x49,0x49,0x3F}, // ( 71) g - 0x0067 Latin Small Letter G + {0x7F,0x08,0x04,0x04,0x78}, // ( 72) h - 0x0068 Latin Small Letter H + {0x00,0x44,0x7D,0x40,0x00}, // ( 73) i - 0x0069 Latin Small Letter I + {0x20,0x40,0x44,0x3D,0x00}, // ( 74) j - 0x006A Latin Small Letter J + {0x7F,0x10,0x28,0x44,0x00}, // ( 75) k - 0x006B Latin Small Letter K + {0x00,0x41,0x7F,0x40,0x00}, // ( 76) l - 0x006C Latin Small Letter L + {0x7C,0x04,0x18,0x04,0x7C}, // ( 77) m - 0x006D Latin Small Letter M + {0x7C,0x08,0x04,0x04,0x78}, // ( 78) n - 0x006E Latin Small Letter N + {0x38,0x44,0x44,0x44,0x38}, // ( 79) o - 0x006F Latin Small Letter O + {0x7C,0x14,0x14,0x14,0x08}, // ( 80) p - 0x0070 Latin Small Letter P + {0x08,0x14,0x14,0x18,0x7C}, // ( 81) q - 0x0071 Latin Small Letter Q + {0x7C,0x08,0x04,0x04,0x08}, // ( 82) r - 0x0072 Latin Small Letter R + {0x48,0x54,0x54,0x54,0x20}, // ( 83) s - 0x0073 Latin Small Letter S + {0x04,0x3F,0x44,0x40,0x20}, // ( 84) t - 0x0074 Latin Small Letter T + {0x3C,0x40,0x40,0x20,0x7C}, // ( 85) u - 0x0075 Latin Small Letter U + {0x1C,0x20,0x40,0x20,0x1C}, // ( 86) v - 0x0076 Latin Small Letter V + {0x3C,0x40,0x30,0x40,0x3C}, // ( 87) w - 0x0077 Latin Small Letter W + {0x44,0x28,0x10,0x28,0x44}, // ( 88) x - 0x0078 Latin Small Letter X + {0x0C,0x50,0x50,0x50,0x3C}, // ( 89) y - 0x0079 Latin Small Letter Y + {0x44,0x64,0x54,0x4C,0x44}, // ( 90) z - 0x007A Latin Small Letter Z + {0x00,0x08,0x36,0x41,0x00}, // ( 91) { - 0x007B Left Curly Bracket + {0x00,0x00,0x7F,0x00,0x00}, // ( 92) | - 0x007C Vertical Line + {0x00,0x41,0x36,0x08,0x00}, // ( 93) } - 0x007D Right Curly Bracket + {0x02,0x01,0x02,0x04,0x02}, // ( 94) ~ - 0x007E Tilde + {0x08,0x14,0x2A,0x14,0x22}, // ( 95) << - 0x00AB Left-Pointing Double Angle Quotation Mark + {0x00,0x02,0x05,0x02,0x00}, // ( 96) - 0x00B0 Degree Sign + {0x44,0x44,0x5F,0x44,0x44}, // ( 97) +- - 0x00B1 Plus-Minus Sign + {0x7E,0x20,0x20,0x10,0x3E}, // ( 98) u - 0x00B5 Micro Sign + {0x22,0x14,0x2A,0x14,0x08}, // ( 99) >> - 0x00BB Right-Pointing Double Angle Quotation Mark + {0x30,0x48,0x45,0x40,0x20}, // (100) ? - 0x00BF Inverted Question Mark + {0x22,0x14,0x08,0x14,0x22}, // (101) x - 0x00D7 Multiplication Sign + {0x08,0x08,0x2A,0x08,0x08}, // (102) + - 0x00F7 Division Sign + {0x18,0x14,0x08,0x14,0x0C}, // (103) - 0x221E Infinity + {0x44,0x4A,0x4A,0x51,0x51}, // (104) < - 0x2264 Less-Than or Equal to + {0x51,0x51,0x4A,0x4A,0x44}, // (105) > - 0x2265 Greater-Than or Equal to + {0x54,0x14,0x64,0x08,0x70}, // (106) .: - RF Symbol + {0x70,0x7C,0x72,0x7C,0x70}, // (107) ^ - Lock symbol + {0x70,0x5C,0x52,0x54,0x70}, // (108) / - Unlock symbol + {0x0C,0x1E,0x3C,0x1E,0x0C}, // (109) <3 - Heart Symbol + {0x18,0x22,0xFF,0x12,0x0C}, // (110) U - USB Symbol + {0x22,0x5d,0x22,0x00,0x00}, // (111) ez updown + {0x14,0x3e,0x14,0x00,0x00}, // (112) ez updown short }; // Write command to OLED static void WriteCommand(unsigned char command) { - SSD_CS_Low(); - SSD_A0_Low(); - SPI_SendByte(command); - SSD_CS_High(); + SSD_CS_Low(); + SSD_A0_Low(); + SPI_SendByte(command); + SSD_CS_High(); } // Write data to OLED static void WriteData(unsigned char data) { - SSD_CS_Low(); - SSD_A0_High(); - SPI_SendByte(data); - SSD_CS_High(); + SSD_CS_Low(); + SSD_A0_High(); + SPI_SendByte(data); + SSD_CS_High(); } @@ -240,7 +240,7 @@ static void WriteData(unsigned char data static void setStartPage(unsigned char d) { WriteCommand(0xB0|d); // Set Page Start Address for Page Addressing Mode - // Default => 0xB0 (0x00) + // Default => 0xB0 (0x00) } @@ -249,19 +249,19 @@ static void setStartColumn(unsigned char { WriteCommand(0x00+d%16); // Set Lower Column Start Address for Page Addressing Mode WriteCommand(0x10+d/16); // Set Higher Column Start Address for Page Addressing Mode - // Default => 0x10 + // Default => 0x10 } // Therm logo const uint8_t row[4][32] = { - {0x00,0x00,0x01,0x03,0x07,0x0F,0x1E,0x3C,0x3C,0x7C,0x7C,0x7C,0xFC,0xFF,0xFF,0xFC,0xFC,0xFC,0xFC,0xFF,0x7F,0x7F,0x7F,0x3C,0x3C,0x1C,0x0C,0x06,0x03,0x01,0x00,0x00}, + {0x00,0x00,0x01,0x03,0x07,0x0F,0x1E,0x3C,0x3C,0x7C,0x7C,0x7C,0xFC,0xFF,0xFF,0xFC,0xFC,0xFC,0xFC,0xFF,0x7F,0x7F,0x7F,0x3C,0x3C,0x1C,0x0C,0x06,0x03,0x01,0x00,0x00}, - {0x0F,0x7F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x3F,0x3F,0x7F,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x7F,0x0F}, + {0x0F,0x7F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x3F,0x3F,0x7F,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x7F,0x0F}, - {0xF0,0xFE,0xFF,0xFF,0xFF,0xC7,0x00,0x00,0x00,0x00,0x87,0xC7,0xC7,0xFF,0xFF,0x00,0x00,0x00,0x00,0x87,0x87,0xC7,0xC3,0x03,0x07,0x07,0x0F,0x7F,0xFF,0xFF,0xFE,0xF0}, + {0xF0,0xFE,0xFF,0xFF,0xFF,0xC7,0x00,0x00,0x00,0x00,0x87,0xC7,0xC7,0xFF,0xFF,0x00,0x00,0x00,0x00,0x87,0x87,0xC7,0xC3,0x03,0x07,0x07,0x0F,0x7F,0xFF,0xFF,0xFE,0xF0}, - {0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0xFF,0xFE,0xFE,0xFE,0xFC,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00}, + {0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x1F,0xFF,0xFE,0xFE,0xFE,0xFC,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00}, };