stm32f767 stm32l010 oled hal

Dependents:   HAL_oled_16x24_767_1 HAL_oled_16x24_010_2 HAL_oled_16x24_031_1

Committer:
caa45040
Date:
Thu Aug 11 00:15:50 2022 +0000
Revision:
2:9b41b26677a2
Parent:
1:4ec114ea55dc
stm32l010 stm32f767 stm32g031 oled wait_ms not

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