STC15W408AS單片機IIC驅動0.96寸OLED顯示
- 不同頁的滾動效果()

- 全頁的滾動效果

- STC15W408AS最新系統板
注意圖片上的0歐姆電阻貼錯了位置,應該是與GND相連的,圖片上是P1.0與電源指示燈相連通,如果去TB購買時,請注意,不然買回來通上點,指示燈沒反應,


OLED顯示
STC15W408AS單片機并沒有提供IIC總線的介面,但是我們可以通過模擬IIC的方式實作,關于IIC總線的只是大家可以自行上網搜索,這里以驅動SSD1306芯片的0.96寸的128*64的OLED顯示屏為例,下圖為OLED的外觀圖

漢字取模軟體和方式
漢字顯示,陰碼,列行式,取模為逆向(低位在前)

顯示效果相關引數
- OLED初始化函式
void oled_init(void)//初始化ssd1306
{
delay_ms(500);//延時(必須有)
oled_wr_byte(0xAE,0);//關閉oled面板
oled_wr_byte(0x00,0);//設定低位列地址
oled_wr_byte(0x10,0);//設定高位列地址
oled_wr_byte(0x40,0);//設定起始行地址設定映射RAM顯示起始行(0x00~0x3F)
oled_wr_byte(0x81,0);//--設定對比度控制暫存器
oled_wr_byte(0xCF,0);//設定SEG輸出電流亮度
oled_wr_byte(0xA1,0);//設定分段/列映射0xa0左右反置 0xa1型正常
oled_wr_byte(0xC8,0);//設定COM/行掃描方向0xc0上下反置 0xc8型正常
oled_wr_byte(0xA6,0);//設定正常顯示
oled_wr_byte(0xA8,0);//設定復用比(1到64)
oled_wr_byte(0x3F,0);//1/64負載
oled_wr_byte(0xD3,0);//設定顯示偏移映射RAM計數器(0x00~0x3F)
oled_wr_byte(0x00,0);//不補償
oled_wr_byte(0xD5,0);//設定顯示時鐘分頻比/振蕩器頻率
oled_wr_byte(0x80,0);//設定分頻比,將時鐘設定為100幀/秒
oled_wr_byte(0xD8,0);
oled_wr_byte(0x05,0);
oled_wr_byte(0xD9,0);//設定預充電時間
oled_wr_byte(0xF1,0);//將預充電設定為15個時鐘,放電設定為1個時鐘
oled_wr_byte(0xDA,0);//設定com引腳硬體配置
oled_wr_byte(0x12,0);//
oled_wr_byte(0xDB,0);//設定vcomh
oled_wr_byte(0x40,0);//設定VCOM取消選擇級別
oled_wr_byte(0x20,0);//設定頁面尋址模式(0x00/0x01/0x02)
oled_wr_byte(0x02,0);//
oled_wr_byte(0x8D,0);//設定電荷泵啟用/禁用
oled_wr_byte(0x14,0);//設定(0x10)禁用
oled_wr_byte(0xA4,0);//禁用整個顯示打開(0xa4/0xa5)
oled_wr_byte(0xA6,0);//禁用反轉顯示打開(0xa6/a7)
oled_wr_byte(0xAF,0);//打開oled面板
fill_picture(0x00);//初始清屏
oled_set_pos(0,0);//初始游標
}
- 上下顛倒.
oled_wr_byte(0xC8,0);//設定COM/行掃描方向0xc0上下反置 0xc8型正常

- 左右翻轉.
oled_wr_byte(0xA1,0);//設定分段/列映射0xa0左右反置 0xa1型正常
- 螢屏旋轉180°顯示
也就是上下顛倒+左右翻轉
WriteCmd(0xc0); //行掃描順序: 上下顛倒
WriteCmd(0xa0); //列掃描順序:左右翻轉

滾動顯示命令
設定前需要先發關閉滾動的指令2e,接著發滾動指令29(向右)或2a(向左),接著發5條引數設定指令,用來設定持續水平滾動引數和決定滾動開始頁,結束頁,滾動速度和垂直滾動偏移的,最后才發開始滾屏指令2f
- 注意:發送開始滾屏(2f)前要先傳輸好顯示資料,如果在滾屏的時候傳輸顯示資料RAM中的內容可能被損壞,
1.0-7頁全屏內容滾動
#include"iic.h"
int main()
{
oled_init();//OLED初始化
oled_wr_byte(0x2e,0);//關滾動
oled_wr_byte(0x2a,0);//方向,29右滾動,2a左滾動
oled_wr_byte(0x00,0);//空位元組
oled_wr_byte(0x00,0);//水平起始頁
oled_wr_byte(0x00,0);//水平滾動速度
oled_wr_byte(0x07,0);//水平結束頁
oled_wr_byte(0x00,0);//每次垂直滾動位移
oled_wr_byte(0xff,0);//虛擬位元組
oled_showchinese(0,0,0);//顯示漢字
oled_showchinese(16,0,1);
oled_showchinese(32,0,2);//明
oled_showchinese(48,0,2);//明
oled_showchinese(64,0,3);
oled_showchinese(80,0,4);
oled_showstring(0,3,"Hello World!",32);//顯示字串
oled_showstring(0,5,"perseverance",32);
oled_showstring(0,6,"9527",16);
delay_ms(5);
oled_wr_byte(0x2f,0);//開滾動
delay_ms(3000);
while (1){;}
}

滾動顯示效果只能在man里面顯示,放到while里面就不正常了,這一點需要注意,
接線說明
sbit sda=P1^1;//SDA介面
sbit scl=P1^0;//SCL介面
開源驅動測驗代碼
鏈接:https://pan.baidu.com/s/1tHuYjs70l7FvvE5BL_TboA
提取碼:2f03
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/375022.html
標籤:其他
上一篇:【STM32】標準庫與HAL庫對照學習教程外設篇--紅外避障傳感器
下一篇:#ex8 C語言標準實驗報告
