stm32f767 stm32l010 oled hal

Dependents:   HAL_oled_16x24_767_1 HAL_oled_16x24_010_2 HAL_oled_16x24_031_1

Committer:
caa45040
Date:
Sat Aug 06 22:37:41 2022 +0000
Revision:
1:4ec114ea55dc
Parent:
0:896a43c93cd9
Child:
2:9b41b26677a2
reset ta i sa ku

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caa45040 0:896a43c93cd9 1
caa45040 0:896a43c93cd9 2 #include "mbed.h"
caa45040 0:896a43c93cd9 3 #include "SSD1308.h"
caa45040 0:896a43c93cd9 4
caa45040 0:896a43c93cd9 5 //#include "font_8x8.h"
caa45040 0:896a43c93cd9 6 #include "font_16x24.h"
caa45040 0:896a43c93cd9 7
caa45040 1:4ec114ea55dc 8 //最初に呼ばれるプログラム
caa45040 1:4ec114ea55dc 9 SSD1308::SSD1308(I2C_HandleTypeDef* hi2c, uint8_t deviceAddress )
caa45040 1:4ec114ea55dc 10 {
caa45040 1:4ec114ea55dc 11 _hi2c = hi2c;
caa45040 0:896a43c93cd9 12
caa45040 1:4ec114ea55dc 13 _writeOpcode = deviceAddress & 0xFE; // low order bit = 0 for write
caa45040 1:4ec114ea55dc 14 _readOpcode = deviceAddress | 0x01; // low order bit = 1 for read
caa45040 0:896a43c93cd9 15
caa45040 1:4ec114ea55dc 16 initialize();
caa45040 0:896a43c93cd9 17 }//SSD1308
caa45040 0:896a43c93cd9 18
caa45040 0:896a43c93cd9 19 //イニシャライズ
caa45040 0:896a43c93cd9 20 void SSD1308::initialize()
caa45040 0:896a43c93cd9 21 {
caa45040 1:4ec114ea55dc 22 //リセット対策
caa45040 1:4ec114ea55dc 23 wait_ms(100);
caa45040 1:4ec114ea55dc 24 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,(uint8_t*)"\200\215\200\024\200\257", 6, 3000);
caa45040 1:4ec114ea55dc 25 wait_ms(100);
caa45040 1:4ec114ea55dc 26 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,(uint8_t*)"\200\215\200\024\200\257", 6, 3000);
caa45040 1:4ec114ea55dc 27 wait_ms(100);
caa45040 1:4ec114ea55dc 28 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,(uint8_t*)"\200\215\200\024\200\257", 6, 3000);
caa45040 1:4ec114ea55dc 29 wait_ms(100);
caa45040 0:896a43c93cd9 30
caa45040 0:896a43c93cd9 31 setHorizontalAddressingMode(); //メモリーアクセスモード
caa45040 0:896a43c93cd9 32
caa45040 0:896a43c93cd9 33 clearDisplay();
caa45040 0:896a43c93cd9 34
caa45040 1:4ec114ea55dc 35 setDisplayOn();
caa45040 0:896a43c93cd9 36
caa45040 0:896a43c93cd9 37 //charge pump add=>ca45040
caa45040 1:4ec114ea55dc 38 //0x80,0x8d,0x80,0x14
caa45040 1:4ec114ea55dc 39 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,(uint8_t*)"\200\215\200\024", 4, 3000);
caa45040 0:896a43c93cd9 40 //set access
caa45040 0:896a43c93cd9 41 //setDisplayFlip(false, false);
caa45040 0:896a43c93cd9 42 }//initialize
caa45040 0:896a43c93cd9 43
caa45040 0:896a43c93cd9 44 //クリアディスプレー
caa45040 0:896a43c93cd9 45 void SSD1308::clearDisplay()
caa45040 0:896a43c93cd9 46 {
caa45040 0:896a43c93cd9 47 setPageAddress(0, MAX_PAGE); // all pages
caa45040 0:896a43c93cd9 48 setColumnAddress(0, MAX_COL); // all columns
caa45040 0:896a43c93cd9 49
caa45040 1:4ec114ea55dc 50 //128*64/8=1024
caa45040 1:4ec114ea55dc 51 uint8_t databytes[2] = {DATA_MODE,0x00};
caa45040 1:4ec114ea55dc 52 for (int icount = 0; icount < 1024; icount++) {
caa45040 1:4ec114ea55dc 53 HAL_I2C_Master_Transmit(_hi2c, _writeOpcode, databytes, 2, 3000);
caa45040 0:896a43c93cd9 54 }
caa45040 0:896a43c93cd9 55 }//clearDisplay
caa45040 0:896a43c93cd9 56
caa45040 0:896a43c93cd9 57 //ライトビットマップ
caa45040 0:896a43c93cd9 58 void SSD1308::writeBitmap(uint8_t* data,
caa45040 0:896a43c93cd9 59 uint8_t start_page, uint8_t end_page,
caa45040 0:896a43c93cd9 60 uint8_t start_col, uint8_t end_col)
caa45040 0:896a43c93cd9 61 {
caa45040 0:896a43c93cd9 62 int count = (end_page - start_page + 1) * (end_col - start_col + 1);
caa45040 0:896a43c93cd9 63
caa45040 0:896a43c93cd9 64 setPageAddress(start_page, end_page); // set page window
caa45040 0:896a43c93cd9 65 setColumnAddress(start_col, end_col); // set column window
caa45040 0:896a43c93cd9 66
caa45040 1:4ec114ea55dc 67 uint8_t databytes[2] = {DATA_MODE,0x00};
caa45040 0:896a43c93cd9 68 for (int i=0; i<count; i++) {
caa45040 0:896a43c93cd9 69 databytes[1] = data[i];
caa45040 1:4ec114ea55dc 70 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode, databytes, 2, 3000);
caa45040 0:896a43c93cd9 71 }
caa45040 0:896a43c93cd9 72 }//writeBitmap
caa45040 0:896a43c93cd9 73
caa45040 0:896a43c93cd9 74 //ライトビッグキャラ
caa45040 0:896a43c93cd9 75 void SSD1308::writeBigChar(uint8_t row, uint8_t col, char chr)
caa45040 0:896a43c93cd9 76 {
caa45040 0:896a43c93cd9 77 writeBitmap((uint8_t*) font_16x24[int(chr) - FONT16x24_START],
caa45040 0:896a43c93cd9 78 row, (row + FONT16x24_BYTES - 1),
caa45040 0:896a43c93cd9 79 col, (col + FONT16x24_WIDTH - 1));
caa45040 0:896a43c93cd9 80 }//writeBigChar
caa45040 0:896a43c93cd9 81
caa45040 1:4ec114ea55dc 82 //セットホリゾンタルアドレシングモード(水平)
caa45040 0:896a43c93cd9 83 void SSD1308::setHorizontalAddressingMode()
caa45040 0:896a43c93cd9 84 {
caa45040 0:896a43c93cd9 85 setMemoryAddressingMode(HORIZONTAL_ADDRESSING_MODE);
caa45040 0:896a43c93cd9 86 }//setHorizontalAddressingMode
caa45040 0:896a43c93cd9 87
caa45040 0:896a43c93cd9 88 //セットメモリーアドレシングモード
caa45040 0:896a43c93cd9 89 void SSD1308::setMemoryAddressingMode(uint8_t mode)
caa45040 0:896a43c93cd9 90 {
caa45040 1:4ec114ea55dc 91 uint8_t databytes[4] = {COMMAND_MODE,SET_MEMORY_ADDRESSING_MODE,COMMAND_MODE,mode};
caa45040 1:4ec114ea55dc 92 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,databytes, 4, 3000);
caa45040 0:896a43c93cd9 93 }//setMemoryAddressingMode
caa45040 0:896a43c93cd9 94
caa45040 0:896a43c93cd9 95 //セットページアドレス
caa45040 0:896a43c93cd9 96 void SSD1308::setPageAddress(uint8_t start, uint8_t end)
caa45040 0:896a43c93cd9 97 {
caa45040 1:4ec114ea55dc 98 uint8_t databytes[6] = {COMMAND_MODE,SET_PAGE_ADDRESS,COMMAND_MODE,start,COMMAND_MODE,end};
caa45040 1:4ec114ea55dc 99 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode, databytes, 6, 3000);
caa45040 0:896a43c93cd9 100 }//setPageAddress
caa45040 0:896a43c93cd9 101
caa45040 1:4ec114ea55dc 102 //セットカラムアドレス
caa45040 0:896a43c93cd9 103 void SSD1308::setColumnAddress(uint8_t start, uint8_t end)
caa45040 0:896a43c93cd9 104 {
caa45040 1:4ec114ea55dc 105 uint8_t databytes[6] = {COMMAND_MODE,SET_COLUMN_ADDRESS,COMMAND_MODE,start,COMMAND_MODE,end};
caa45040 1:4ec114ea55dc 106 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode, databytes, 6, 3000);
caa45040 0:896a43c93cd9 107 }//setColumnAddress
caa45040 0:896a43c93cd9 108
caa45040 0:896a43c93cd9 109 //セットディスプレーオン
caa45040 0:896a43c93cd9 110 void SSD1308::setDisplayOn()
caa45040 0:896a43c93cd9 111 {
caa45040 1:4ec114ea55dc 112 uint8_t databytes[2] = {COMMAND_MODE,SET_DISPLAY_POWER_ON};
caa45040 1:4ec114ea55dc 113 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode, databytes, 2, 3000);
caa45040 0:896a43c93cd9 114 }//setDisplayOn
caa45040 0:896a43c93cd9 115
caa45040 0:896a43c93cd9 116 /*
caa45040 0:896a43c93cd9 117 //セットディスプレーオフ
caa45040 0:896a43c93cd9 118 void SSD1308::setDisplayOff()
caa45040 0:896a43c93cd9 119 {
caa45040 0:896a43c93cd9 120 _sendCommand(SET_DISPLAY_POWER_OFF);
caa45040 0:896a43c93cd9 121 }//setDisplayOff
caa45040 0:896a43c93cd9 122 */
caa45040 0:896a43c93cd9 123
caa45040 0:896a43c93cd9 124 /*
caa45040 0:896a43c93cd9 125 //セットディスプレー Flip
caa45040 0:896a43c93cd9 126 void SSD1308::setDisplayFlip(bool left, bool down)
caa45040 0:896a43c93cd9 127 {
caa45040 0:896a43c93cd9 128 if (left) {
caa45040 0:896a43c93cd9 129 // column address 0 is mapped to SEG0 (Reset)
caa45040 0:896a43c93cd9 130 _sendCommand(SET_SEGMENT_REMAP_0);
caa45040 0:896a43c93cd9 131 } else {
caa45040 0:896a43c93cd9 132 // column address 127 is mapped to SEG0
caa45040 0:896a43c93cd9 133 _sendCommand(SET_SEGMENT_REMAP_127);
caa45040 0:896a43c93cd9 134 }
caa45040 0:896a43c93cd9 135
caa45040 0:896a43c93cd9 136 if (down) {
caa45040 0:896a43c93cd9 137 // Reset mode
caa45040 0:896a43c93cd9 138 _sendCommand(SET_COMMON_REMAP_0);
caa45040 0:896a43c93cd9 139 } else {
caa45040 0:896a43c93cd9 140 // Flip Up/Down (Need to rewrite display before H effect shows)
caa45040 0:896a43c93cd9 141 _sendCommand(SET_COMMON_REMAP_63);
caa45040 0:896a43c93cd9 142 }
caa45040 0:896a43c93cd9 143
caa45040 0:896a43c93cd9 144 }//setDisplayFlip
caa45040 1:4ec114ea55dc 145 */