OLED是單片機(jī)開發(fā)中一個(gè)比較常用的外設(shè),其像素位128X64。
OLED一般有兩種驅(qū)動(dòng)方式,IIC驅(qū)動(dòng)或者SPI驅(qū)動(dòng),本文采用IIC驅(qū)動(dòng)的方式。
一、硬件連接
 IIC連接引腳
IIC連接引腳
SCL — PE3
SDA — PE2
二、創(chuàng)建工程
1. 工程創(chuàng)建可以直接參考官方的文檔,工程創(chuàng)建好了之后打開RT-ThreadSettings,添加軟件包ssd1306。
 添加ssd1306軟件包
添加ssd1306軟件包
2. 右鍵單擊ssd1306,點(diǎn)擊詳細(xì)配置,勾選ssd1306所有選項(xiàng)
 ssd1306配置
ssd1306配置
 軟件IIC配置
軟件IIC配置
4.然后編譯,下載在msh命令中斷數(shù)據(jù)ssd1306_TestAll就可以打開測(cè)試程序看到OLED測(cè)試效果。
三、修改代碼
上面的代碼可以操作OLED顯示英文字母以及數(shù)字,但是顯示不了圖片以及文字,這部分功能需要我們自行添加。下面將詳細(xì)介紹如何添加我們自己的中文字符顯示程序以及16X16,24X24,48X48,64X64像素(其他像素的圖片可以根據(jù)需要自行修改)的圖片顯示程序。
在applications目錄下創(chuàng)建五個(gè)文件分別為:
 文件目錄
文件目錄
1. 創(chuàng)建OLED線程
static void OLED_ThreadManage(void)
{
    rt_thread_t oled_thread;
    oled_thread = rt_thread_create("OLED Thread Manage",     /*線程名字*/
                                   OLED_ManageEntry,         /*線程入口函數(shù)*/
                                   RT_NULL,                  /*線程入口函數(shù)參數(shù)*/
                                   4096,                     /*線程棧大小*/
                                   8,                        /*線程優(yōu)先級(jí)*/
                                   10);                      /*線程時(shí)間片*/
        rt_thread_startup (oled_thread);
}
2. 初始化線程,將OLED_AppInit()放在main函數(shù)的while循環(huán)之前進(jìn)行初始化。
void OLED_AppInit(void)
{
    OLED_ThreadManage();
}
3. 編寫漢字顯示函數(shù)。
1)顯示原理
漢字顯示需要先使用專門的取模工具進(jìn)行取模,然后調(diào)用ssd1306的畫點(diǎn)函數(shù)ssd1306_DrawPixel()來(lái)在OLED的指定位置畫上點(diǎn)來(lái)實(shí)現(xiàn)顯示漢字的效果,取模軟件使用PCtoLCD2002 OLED取模工具,可以自行在網(wǎng)上下載。
2)取模方式選擇,選擇陰碼,逐列式,順向,我們的漢字顯示函數(shù)也將根據(jù)這個(gè)方式來(lái)編寫程序。
 漢字取模方式
漢字取模方式
3)輸入漢字,點(diǎn)擊生成字幕,復(fù)制生成的字幕到工程中codetab.h中
 漢字取模
漢字取模
代碼如下:
const unsigned char Hz[][16] ={  	  
        {0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,0x02,0x08,0x04,0x30,0x18,0xC0},
        {0xF0,0x02,0x10,0x01,0x13,0xFE,0x10,0x00,0x10,0x80,0x14,0x60,0x18,0x18,0x00,0x00},/*"你",0*/
        {0x08,0x02,0x08,0x44,0x0F,0xA8,0xF8,0x10,0x08,0x68,0x0F,0x86,0x00,0x00,0x01,0x00},
        {0x41,0x02,0x41,0x01,0x47,0xFE,0x49,0x00,0x51,0x00,0x61,0x00,0x01,0x00,0x00,0x00},/*"好",1*/
        {0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",2*/
        {0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xFE,0x04,0x02,0x04,0x02,0xFF,0xE2,0x04,0x22},
        {0x04,0x22,0x04,0x22,0xFF,0xE2,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x00,0x00,0x00},/*"世",3*/
        {0x00,0x10,0x00,0x10,0x00,0x20,0x7F,0x21,0x49,0x46,0x49,0x78,0x49,0x80,0x7F,0x00},
        {0x49,0x80,0x49,0x7F,0x49,0x40,0x7F,0x20,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x00},/*"界",4*/
};
4)函數(shù)顯示函數(shù)如下,使用ssd1306_DrawPixel(x, y, White)來(lái)畫點(diǎn):
	static void OLED_DrawHz(uint8_t x,
	           uint8_t y,
	           uint8_t chr,
	           SSD1306_COLOR color)
	{
	 uint8_t temp,t,t1;
	 uint8_t y0=y;
	 uint8_t csize=32u;
chr <<= 1u;
	 for(t=0; t {
	   if(t == 16u)
	     chr += 1;
	   temp=(White == color) ? (Hz[chr][t%16]):(~Hz[chr][t%16]);
	//    temp=Hz[chr][t];
	   for(t1=0;t1<8;t1++)
	   {
	     if(temp&0x80)
	       ssd1306_DrawPixel(x, y, White);
	     temp<<=1;
	     y++;
	     if((y-y0) == 16)
	     {
	       y=y0;
	       x++;
	       break;
	     }
	   }
	 }
	}
6)編寫漢字顯示函數(shù),在OLED顯示線程的Entry函數(shù)中編寫漢字顯示函數(shù)
static void OLED_ManageEntry(void *parameter)
{
    ssd1306_Init();    /*IIC and OLED initial*/
    OLED_DrawHz(0, 24, 0, White);     /*0 - 你*/
    OLED_DrawHz(16, 24, 1, White);    /*1 - 好*/
    OLED_DrawHz(32, 24, 2, White);   /*2 - ,*/
    OLED_DrawHz(48, 24, 3, White);     /*3 - 世*/
    OLED_DrawHz(64, 24, 4, White);     /*4 - 界*/
    ssd1306_UpdateScreen();
    
    while(1)
    {
        rt_thread_mdelay(100);
    }
}
四、實(shí)踐效果
完整代碼在下一篇帖子中,有需要請(qǐng)移步。

五、代碼
詳細(xì)代碼請(qǐng)移步gitee:https://gitee.com/hehung/ab32-vg1_-rt-thread
- 
                                單片機(jī)
                                +關(guān)注關(guān)注 6072文章 45270瀏覽量 661437
- 
                                OLED技術(shù)
                                +關(guān)注關(guān)注 1文章 67瀏覽量 13951
- 
                                OLED
                                +關(guān)注關(guān)注 121文章 6317瀏覽量 231919
- 
                                SPI
                                +關(guān)注關(guān)注 17文章 1845瀏覽量 99190
- 
                                RT-Thread
                                +關(guān)注關(guān)注 32文章 1511瀏覽量 43960
發(fā)布評(píng)論請(qǐng)先 登錄
RTT大賽作品:AB32VG1開發(fā)板OLED顯示實(shí)驗(yàn)
 
    
【RTT大賽作品連載】AB32VG1評(píng)估板到貨控制彩燈測(cè)試
 
    
【RTT大賽作品連載】CH32V103開發(fā)板資料及上電首測(cè)
 
    
【RTT大賽作品連載】中科藍(lán)訊AB32VG1開發(fā)板開箱篇
 
    
 
           
        
 
         【RTT大賽作品連載】 OLED顯示中文
【RTT大賽作品連載】 OLED顯示中文 
                 
  
     
     
     
     
            
             
             
                 
             工商網(wǎng)監(jiān)
工商網(wǎng)監(jiān)
        
評(píng)論