stm32f767 stm32l010 oled hal
Dependents: HAL_oled_16x24_767_1 HAL_oled_16x24_010_2 HAL_oled_16x24_031_1
SSD1308.cpp
- Committer:
- caa45040
- Date:
- 23 months ago
- Revision:
- 1:4ec114ea55dc
- Parent:
- 0:896a43c93cd9
- Child:
- 2:9b41b26677a2
File content as of revision 1:4ec114ea55dc:
#include "mbed.h" #include "SSD1308.h" //#include "font_8x8.h" #include "font_16x24.h" //最初に呼ばれるプログラム SSD1308::SSD1308(I2C_HandleTypeDef* hi2c, uint8_t deviceAddress ) { _hi2c = hi2c; _writeOpcode = deviceAddress & 0xFE; // low order bit = 0 for write _readOpcode = deviceAddress | 0x01; // low order bit = 1 for read initialize(); }//SSD1308 //イニシャライズ void SSD1308::initialize() { //リセット対策 wait_ms(100); HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,(uint8_t*)"\200\215\200\024\200\257", 6, 3000); wait_ms(100); HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,(uint8_t*)"\200\215\200\024\200\257", 6, 3000); wait_ms(100); HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,(uint8_t*)"\200\215\200\024\200\257", 6, 3000); wait_ms(100); setHorizontalAddressingMode(); //メモリーアクセスモード clearDisplay(); setDisplayOn(); //charge pump add=>ca45040 //0x80,0x8d,0x80,0x14 HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,(uint8_t*)"\200\215\200\024", 4, 3000); //set access //setDisplayFlip(false, false); }//initialize //クリアディスプレー void SSD1308::clearDisplay() { setPageAddress(0, MAX_PAGE); // all pages setColumnAddress(0, MAX_COL); // all columns //128*64/8=1024 uint8_t databytes[2] = {DATA_MODE,0x00}; for (int icount = 0; icount < 1024; icount++) { HAL_I2C_Master_Transmit(_hi2c, _writeOpcode, databytes, 2, 3000); } }//clearDisplay //ライトビットマップ void SSD1308::writeBitmap(uint8_t* data, uint8_t start_page, uint8_t end_page, uint8_t start_col, uint8_t end_col) { int count = (end_page - start_page + 1) * (end_col - start_col + 1); setPageAddress(start_page, end_page); // set page window setColumnAddress(start_col, end_col); // set column window uint8_t databytes[2] = {DATA_MODE,0x00}; for (int i=0; i<count; i++) { databytes[1] = data[i]; HAL_I2C_Master_Transmit(_hi2c,_writeOpcode, databytes, 2, 3000); } }//writeBitmap //ライトビッグキャラ void SSD1308::writeBigChar(uint8_t row, uint8_t col, char chr) { writeBitmap((uint8_t*) font_16x24[int(chr) - FONT16x24_START], row, (row + FONT16x24_BYTES - 1), col, (col + FONT16x24_WIDTH - 1)); }//writeBigChar //セットホリゾンタルアドレシングモード(水平) void SSD1308::setHorizontalAddressingMode() { setMemoryAddressingMode(HORIZONTAL_ADDRESSING_MODE); }//setHorizontalAddressingMode //セットメモリーアドレシングモード void SSD1308::setMemoryAddressingMode(uint8_t mode) { uint8_t databytes[4] = {COMMAND_MODE,SET_MEMORY_ADDRESSING_MODE,COMMAND_MODE,mode}; HAL_I2C_Master_Transmit(_hi2c,_writeOpcode,databytes, 4, 3000); }//setMemoryAddressingMode //セットページアドレス void SSD1308::setPageAddress(uint8_t start, uint8_t end) { uint8_t databytes[6] = {COMMAND_MODE,SET_PAGE_ADDRESS,COMMAND_MODE,start,COMMAND_MODE,end}; HAL_I2C_Master_Transmit(_hi2c,_writeOpcode, databytes, 6, 3000); }//setPageAddress //セットカラムアドレス void SSD1308::setColumnAddress(uint8_t start, uint8_t end) { uint8_t databytes[6] = {COMMAND_MODE,SET_COLUMN_ADDRESS,COMMAND_MODE,start,COMMAND_MODE,end}; HAL_I2C_Master_Transmit(_hi2c,_writeOpcode, databytes, 6, 3000); }//setColumnAddress //セットディスプレーオン void SSD1308::setDisplayOn() { uint8_t databytes[2] = {COMMAND_MODE,SET_DISPLAY_POWER_ON}; HAL_I2C_Master_Transmit(_hi2c,_writeOpcode, databytes, 2, 3000); }//setDisplayOn /* //セットディスプレーオフ void SSD1308::setDisplayOff() { _sendCommand(SET_DISPLAY_POWER_OFF); }//setDisplayOff */ /* //セットディスプレー Flip void SSD1308::setDisplayFlip(bool left, bool down) { if (left) { // column address 0 is mapped to SEG0 (Reset) _sendCommand(SET_SEGMENT_REMAP_0); } else { // column address 127 is mapped to SEG0 _sendCommand(SET_SEGMENT_REMAP_127); } if (down) { // Reset mode _sendCommand(SET_COMMON_REMAP_0); } else { // Flip Up/Down (Need to rewrite display before H effect shows) _sendCommand(SET_COMMON_REMAP_63); } }//setDisplayFlip */