電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 702|回復(fù): 0
收起左側(cè)

【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】OLED屏驅(qū)動(dòng)

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級(jí)會(huì)員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-12-22 09:56:29 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】OLED屏驅(qū)動(dòng), 既然有了gpio,那就先看看基于gpio實(shí)現(xiàn)的iic通信吧。別的不多說(shuō)先弄清楚板子上的oLED引腳號(hào)



OLED
VCC
GND
SCL GPIO14
SDA GPIO13






把支持I2C的宏定義打開,該宏定義所在位置為:

vendor\hisi\hi3861\hi3861\build\config\usr_config.mk

找到后修改如下:CONFIG_I2C_SUPPORT=y





示例一個(gè)寫字節(jié)函數(shù)

void OLED_WR_Byte(uint8_t dat,uint8_t cmd){

     hi_u8 m_send_data[2] = { 0 };

     hi_u32 status;

     hi_i2c_data hi3861_i2c_data = { 0 };

     if(cmd)    {

         m_send_data[0] = 0x40;

     }

     else     {

        m_send_data[0] = 0x00;

     }

     m_send_data[1] = dat;

     hi3861_i2c_data.send_buf = m_send_data;

     hi3861_i2c_data.send_len = 2;

     status = hi_i2c_write(HI_I2C_IDX_0, 0x78, &hi3861_i2c_data);

     if (status != HI_ERR_SUCCESS) {

         printf(“ Error: I2C write status = 0x%x! \r\n“, status);

return;

}

}





初始化oled還是跟以前一樣

void OLED_Init(void){

OLED_WR_Byte(0xAE,OLED_CMD);        //--turn off oled panel        OLED_WR_Byte(0x00,OLED_CMD);        //---set low column address        OLED_WR_Byte(0x10,OLED_CMD);        //---set high column address        OLED_WR_Byte(0x40,OLED_CMD);        //--set start line address  Set Mapping RAM display Start Line (0x00~0x3F)

OLED_WR_Byte(0x81,OLED_CMD);        //--set contrast control register        OLED_WR_Byte(0xCF,OLED_CMD);         // Set SEG Output Current Brightness        OLED_WR_Byte(0xA1,OLED_CMD);        //--Set SEG/Column Mapping     0xa0左右反置 0xa1正常

OLED_WR_Byte(0xC8,OLED_CMD);        //Set COM/Row Scan Direction   0xc0上下反置 0xc8正常

OLED_WR_Byte(0xA6,OLED_CMD);        //--set normal display        OLED_WR_Byte(0xA8,OLED_CMD);        //--set multiplex ratio(1 to 64)        OLED_WR_Byte(0x3f,OLED_CMD);        //--1/64 duty        OLED_WR_Byte(0xD3,OLED_CMD);        //-set display offset        Shift Mapping RAM Counter (0x00~0x3F)

OLED_WR_Byte(0x00,OLED_CMD);        //-not offset        OLED_WR_Byte(0xd5,OLED_CMD);        //--set display clock divide ratio/oscillator frequency

OLED_WR_Byte(0x80,OLED_CMD);        //--set divide ratio, Set Clock as 100 Frames/Sec

OLED_WR_Byte(0xD9,OLED_CMD);        //--set pre-charge period        OLED_WR_Byte(0xF1,OLED_CMD);        //Set Pre-Charge as 15 Clocks & Discharge as 1 Clock

OLED_WR_Byte(0xDA,OLED_CMD);        //--set com pins hardware configuration        OLED_WR_Byte(0x12,OLED_CMD);

OLED_WR_Byte(0xDB,OLED_CMD);        //--set vcomh        OLED_WR_Byte(0x40,OLED_CMD);        //Set VCOM Deselect Level        OLED_WR_Byte(0x20,OLED_CMD);        //-Set Page Addressing Mode (0x00/0x01/0x02)

OLED_WR_Byte(0x02,OLED_CMD);        //

OLED_WR_Byte(0x8D,OLED_CMD);        //--set Charge Pump enable/disable        OLED_WR_Byte(0x14,OLED_CMD);        //--set(0x10) disable        OLED_WR_Byte(0xA4,OLED_CMD);        // Disable Entire Display On (0xa4/0xa5)        OLED_WR_Byte(0xA6,OLED_CMD);        // Disable Inverse Display On (0xa6/a7)         OLED_WR_Byte(0xAF,OLED_CMD);        //--turn on oled panel                OLED_WR_Byte(0xAF,OLED_CMD);         /*display ON*/         OLED_Clear();        OLED_Set_Pos(0,0);         }





void OLED_Demo(void){

OLED_Init();

OLED_Clear();

for(i=0;i<8;i++)    {

OLED_ShowCHinese(i*16,0,i+0);

}

for(i=0;i<7;i++)    {

OLED_ShowCHinese(i*16,2,i+8);

}

for(i=0;i<4;i++)    {

OLED_ShowCHinese(i*16,4,i+15);

}

for(i=0;i<4;i++)    {

OLED_ShowCHinese(i*16,6,i+19);

}

}





SYS_RUN(OLED_Demo);



編譯燒錄即可

發(fā)表回復(fù)

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表