找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2425|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Mega4809 Curiosity Nao 開發(fā)板驅(qū)動OLED屏顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:776997 發(fā)表于 2020-8-24 23:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
Mega4809Curiosity Nao 開發(fā)板是一款近于最小系統(tǒng)的核心板,因此其資源基本可以完全供用戶使用。
為使該開發(fā)板有一個可供直接觀查的窗口,故為它配置了一個OLED顯示屏。此外,值得指出的是在程序下載時是不可帶著顯示屏的,否則無法進(jìn)行下載。
要在該開發(fā)板上驅(qū)動OLED屏顯示,要完成的主要有3件事:
1)指定驅(qū)動OLED屏的I/O
2)設(shè)置延時程序
3)配置OLED屏的顯示函數(shù)
1. 驅(qū)動引腳的配置
為驅(qū)動OLED屏,所使用的2I/O口是PF3PF4,對應(yīng)的連接關(guān)系為:
SDA---PF3
SCL---PF4
引腳配置如圖1所示
                                          
   
1 引腳配置

2.設(shè)置延時
按圖2所示,選取DELAY函數(shù).

2 獲取延時

在生成代碼后,可得到的毫秒級的延時函數(shù),其代碼為:
  1. void DELAY_milliseconds(uint16_t milliseconds)
  2. {
  3.     while(milliseconds--){
  4.         _delay_ms(1);
  5.     }
  6. }
復(fù)制代碼

3. 配置顯示函數(shù)
由于本次所使用的OLED屏是I2C接口的,使用只需I/O口即可模擬產(chǎn)生。
其中的IIC_Start()函數(shù)和IIC_Stop()函數(shù)的內(nèi)容如下:
  1. void IIC_Start()
  2. {
  3.    SCL_SetHigh();           
  4.    SDA_SetHigh();
  5.    SDA_SetLow();
  6.    SCL_SetLow();
  7. }

  8. void IIC_Stop()
  9. {
  10.    SCL_SetLow();
  11.    SDA_SetLow();
  12.    SCL_SetHigh();
  13.    SDA_SetHigh();
  14. }
復(fù)制代碼

OLED屏的初始化函數(shù)為:
  1. void OLED_Init(void)
  2. {
  3.          DELAY_milliseconds(500);
  4.         OLED_WrCmd(0xae);//--turn off oled panel
  5.          OLED_WrCmd(0x00);//---set low column address
  6.          OLED_WrCmd(0x10);//---set high column address
  7.          OLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  8.          OLED_WrCmd(0x81);//--set contrast control register
  9.          OLED_WrCmd(Brightness); // Set SEG Output Current Brightness
  10.          OLED_WrCmd(0xa1);//--Set SEG/Column Mapping
  11.          OLED_WrCmd(0xc8);//Set COM/Row Scan Direction
  12.          OLED_WrCmd(0xa6);//--set normal display
  13.          OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
  14.          OLED_WrCmd(0x3f);//--1/64 duty
  15.          OLED_WrCmd(0xd3);//-set display offset       Shift Mapping RAM Counter (0x00~0x3F)
  16.          OLED_WrCmd(0x00);//-not offset
  17.          OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
  18.          OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
  19.          OLED_WrCmd(0xd9);//--set pre-charge period
  20.          OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  21.          OLED_WrCmd(0xda);//--set com pins hardware configuration
  22.          OLED_WrCmd(0x12);
  23.          OLED_WrCmd(0xdb);//--set vcomh
  24.          OLED_WrCmd(0x40);//Set VCOM Deselect Level
  25.          OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
  26.          OLED_WrCmd(0x02);//
  27.          OLED_WrCmd(0x8d);//--set Charge Pump enable/disable
  28.          OLED_WrCmd(0x14);//--set(0x10) disable
  29.          OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
  30.          OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
  31.          OLED_WrCmd(0xaf);//--turn on oled panel
  32.          OLED_Fill(0x00);
  33.          OLED_Set_Pos(0,0);
  34. }
復(fù)制代碼

顯示圖3所示效果的主程序為:
  1. int main(void)
  2. {
  3.       /* Initializes MCU, drivers and middleware */
  4.       SYSTEM_Initialize();
  5.       OLED_Init();
  6.       OLED_CLS();
  7.       OLED_P8x16Str(0,0,"ATmega4809");
  8.       OLED_P8x16Str(0,2,"OLED Display");
  9.      /* Replace with your application code */
  10.      while (1){
  11.         //PORTF_toggle_pin_level(5);
  12.         LED_Toggle();
  13.         DELAY_milliseconds(500);
  14.     }
  15. }
復(fù)制代碼


3 顯示效果

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表