• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于STC8F1K08S2 的串口驅(qū)動(dòng)OLED 顯示系統(tǒng)設(shè)計(jì)*

      2022-06-02 14:41:16任克強(qiáng)王傳強(qiáng)
      電子器件 2022年1期
      關(guān)鍵詞:字庫(kù)波特率串口

      任克強(qiáng),王傳強(qiáng)

      (江西理工大學(xué)信息工程學(xué)院,江西 贛州 341000)

      常用的顯示屏有LED、LCD、OLED 等[1-2],小型OLED 屏幕以其顯示效果好、顯示質(zhì)量?jī)?yōu)、價(jià)格便宜等特點(diǎn),被廣泛地應(yīng)用在小型嵌入式系統(tǒng)、單片機(jī)系統(tǒng)、電子產(chǎn)品等領(lǐng)域[3-5]。OLED 屏幕的驅(qū)動(dòng)方式主要有8080 并口、IIC、SPI 等驅(qū)動(dòng)方式[6-8]。對(duì)于8080 并口驅(qū)動(dòng)方式,可使用高端處理器模擬8080接口時(shí)序或者使用帶有FSMC 接口的處理器完成驅(qū)動(dòng);對(duì)于IIC 和SPI 驅(qū)動(dòng)方式,一些低端的處理器通過模擬時(shí)序也可以實(shí)現(xiàn)OLED 屏幕的驅(qū)動(dòng),但增加了處理器的負(fù)擔(dān),并且OLED 屏幕顯示的字符、漢字、圖片等信息都需要取模后寫入到內(nèi)部程序存儲(chǔ)器中,需占用大量的內(nèi)存空間,對(duì)于內(nèi)存較小的處理器,很容易被占滿,導(dǎo)致處理器無法處理其他任務(wù)[9-10]。

      針對(duì)上述問題,本文設(shè)計(jì)了一種串口控制的小型OLED 屏幕驅(qū)動(dòng)顯示系統(tǒng)。該系統(tǒng)采用了低成本的MCU 方案,外擴(kuò)FLASH 存儲(chǔ)器用于存儲(chǔ)16×16、24×24、32×32 三種尺寸的GB2312 中文字庫(kù)[11];系統(tǒng)通過串口通道完成與外界的數(shù)據(jù)交換,實(shí)現(xiàn)OLED 屏幕上數(shù)字、字符、漢字、圖像等信息的顯示;因此只需要具有串口功能的處理器或者通過IO 口模擬串口功能即可使用該系統(tǒng),從而使得OLED 屏幕的使用得到簡(jiǎn)化,一般的處理器均可使用OLED屏幕,擴(kuò)展了OLED 屏幕的適應(yīng)性和應(yīng)用范圍。

      1 系統(tǒng)硬件設(shè)計(jì)

      本文設(shè)計(jì)的OLED 驅(qū)動(dòng)顯示系統(tǒng)主要由OLED屏幕、接口轉(zhuǎn)換電路、STC8F1K08S2 處理器和W25Q16 FLASH 存儲(chǔ)器組成。系統(tǒng)硬件組成如圖1所示。

      圖1 系統(tǒng)硬件框圖

      本文使用的STC8F1K08S2 處理器采用SOP16封裝,體積小,易于嵌入,不需要配合任何外圍電路即可使用;內(nèi)置晶振,頻率可選,最小5.529 6 MHz,最大27 MHz,本文選用22.118 4 MHz;處理器有14個(gè)IO 接口,內(nèi)置硬件SPI 電路,并使用內(nèi)置SPI 實(shí)現(xiàn)W25Q16 數(shù)據(jù)讀寫。本文將OLED 屏幕通過硬件接口轉(zhuǎn)換為SPI 驅(qū)動(dòng)接口,并使用處理器IO 模擬SPI 時(shí)序?qū)崿F(xiàn)對(duì)OLED 的驅(qū)動(dòng),之所以沒有使用硬件SPI,主要是避免2 個(gè)SPI 器件在驅(qū)動(dòng)中互相影響。

      W25Q16 內(nèi)部Block 的內(nèi)存劃分如表1 所示。

      表1 W25Q16 內(nèi)部Block 劃分

      W25Q16 具有2 Mbyte 的FLASH 存儲(chǔ)空間,劃分為32 個(gè)Block,每個(gè)Block 有64 kbyte 空間[12]。在這些空間存儲(chǔ)了3 種尺寸 GB2312 字庫(kù):256 kbyte 的16×16 尺寸字庫(kù)、576 kbyte 的24×24 尺寸字庫(kù)、1 024 kbyte 的32×32 尺寸字庫(kù)。字庫(kù)在FLASH 中地址分配如表2 所示,根據(jù)字庫(kù)的存儲(chǔ)地址和字庫(kù)尺寸,可以計(jì)算出不同字的偏移地址,根據(jù)偏移地址可以讀取字庫(kù)數(shù)據(jù)進(jìn)行顯示。

      表2 字庫(kù)在FLASH 中地址分配

      小型OLED 屏幕有0.42、0.49、0.91、0.96、1.3 寸等多種不同尺寸,都可以通過硬件轉(zhuǎn)換成SPI 驅(qū)動(dòng)方式與本系統(tǒng)連接。對(duì)于不同驅(qū)動(dòng)IC 的OLED 屏幕,主要是屏幕的初始化不同,上層對(duì)屏幕的各種操作是相同的,因此可以根據(jù)不同驅(qū)動(dòng)IC 調(diào)用不同初始化函數(shù)即可。本文采用0.96 寸驅(qū)動(dòng)IC 為SSD1306 和1.3 寸驅(qū)動(dòng)IC 為SH1106 兩種OLED 進(jìn)行驅(qū)動(dòng)測(cè)試。

      2 系統(tǒng)軟件設(shè)計(jì)

      系統(tǒng)軟件流程如圖2 所示。首先對(duì)系統(tǒng)和各個(gè)模塊進(jìn)行初始化操作,打開串口接收中斷,然后進(jìn)入系統(tǒng)控制部分,等待外部處理器發(fā)來的設(shè)置波特率指令,串口波特率控制指令如表3 所示,可通過發(fā)送對(duì)應(yīng)的控制指令改變系統(tǒng)的波特率,從而可以適應(yīng)不同性能的處理器,波特率設(shè)置完成后,將該波特率保存并覆蓋原有的默認(rèn)波特率,系統(tǒng)初始默認(rèn)波特率為9 600 bit/s。為了防止用戶設(shè)置外部處理器波特率出現(xiàn)不一致情況,在OLED 上電后會(huì)在屏幕顯示5 s 當(dāng)前波特率。設(shè)置完波特率,等待串口接收來自外部的數(shù)據(jù)顯示和設(shè)置坐標(biāo)指令:0x01 代表接收數(shù)字?jǐn)?shù)據(jù),0x02 代表接收字符或者漢字?jǐn)?shù)據(jù),0x03 代表接收?qǐng)D像數(shù)據(jù);坐標(biāo)軸為X軸和Y軸,X軸范圍0~127,Y軸范圍為0~7。通過指令對(duì)系統(tǒng)設(shè)置后,就開始接收來自外部處理器發(fā)來的數(shù)據(jù),驅(qū)動(dòng)OLED 顯示相應(yīng)的內(nèi)容。

      表3 串口波特率控制指令

      圖2 系統(tǒng)軟件流程圖

      2.1 FLASH 字庫(kù)讀寫

      通過串口將字庫(kù)文件寫入W25Q16 FLASH 中,為了準(zhǔn)確判斷字庫(kù)文件是否成功地寫入到FLASH中,首先獲取各尺寸字庫(kù)的結(jié)束地址(即尾地址),然后根據(jù)尾地址和存儲(chǔ)在W25Q16 中的首地址進(jìn)行計(jì)算可得各尺寸字庫(kù)在W25Q16 中的尾地址,字庫(kù)尾地址如表4 所示。在寫入過程中,串口每接收到一個(gè)數(shù)據(jù),地址自動(dòng)加1,通過地址對(duì)比,就可判斷字庫(kù)文件是否成功寫入。字庫(kù)寫入程序流程如圖3 所示,三種尺寸的字庫(kù)依次寫入,首先寫入16×16 的,從W25Q16 的0 地址開始寫,每寫入1 byte,地址數(shù)據(jù)加1,直到地址等于0x03FE41 完成16×16 字庫(kù)的寫入;然后設(shè)置偏移地址為 0x040000,并從0x040000 開始寫入24×24 字庫(kù),每寫1 byte 地址加1,直到地址等于0x0CFC11 完成24×24 字庫(kù)寫入;最后設(shè)置偏移地址為0x0D0000,并從0x0D0000 開始寫入32×32 字庫(kù),每寫1 byte 地址加1,直到地址等于0x1CF901 完成32×32 字庫(kù)寫入。

      表4 字庫(kù)尾地址

      圖3 字庫(kù)寫入程序流程圖

      在GB2312 中將漢字劃分為94 個(gè)區(qū),每個(gè)區(qū)有94 個(gè)位,即區(qū)和位。通過漢字的區(qū)和位就可以確定一個(gè)漢字在字庫(kù)中的偏移地址,然后就可以確定漢字的點(diǎn)陣數(shù)據(jù)。一個(gè)漢字是由兩個(gè)擴(kuò)展的ASCII 碼表示,一個(gè)用來存放區(qū)碼,另一個(gè)用來存放位碼,也可以說漢字的高字節(jié)和低字節(jié),并且在區(qū)碼和位碼上分別加上了32,因此可以通過式(1)、式(2)求出漢字的區(qū)碼和位碼。

      計(jì)算出區(qū)碼和位碼,根據(jù)式(3)可獲取漢字在字庫(kù)中的偏移地址,然后通過訪問該偏移地址,即可獲取該地址中存放的漢字點(diǎn)陣數(shù)據(jù)。

      2.2 OLED 顯示驅(qū)動(dòng)

      OLED 采用模擬4 線SPI 的方式進(jìn)行驅(qū)動(dòng),驅(qū)動(dòng)時(shí)序如圖4 所示。CS 在低電平時(shí),芯片被選中,開始數(shù)據(jù)通信,在SCLK 低電平時(shí),SDIN 作為信號(hào)線,而在每個(gè)SCLK 的上升沿,SDIN 會(huì)發(fā)出1 bit 數(shù)據(jù),在每個(gè)周期發(fā)送8 bit 的數(shù)據(jù),然后CS 拉高,完成一次數(shù)據(jù)通信。

      圖4 OLED 4 線SPI 驅(qū)動(dòng)時(shí)序

      整個(gè)OLED 上層驅(qū)動(dòng)主要包括波特率修改函數(shù)、顯示選擇函數(shù)、坐標(biāo)定位函數(shù)、字體選擇函數(shù)、數(shù)字顯示函數(shù)、字符漢字顯示函數(shù)、圖像顯示函數(shù)。上述函數(shù)的數(shù)據(jù)均讀取自串口接收的數(shù)據(jù)。由于GB2312 中的每個(gè)字符都占有2 byte,因此對(duì)于單字節(jié)的字符可調(diào)用處理器內(nèi)部的取模數(shù)據(jù),漢字調(diào)用外部FLASH 字庫(kù)數(shù)據(jù)。

      3 系統(tǒng)測(cè)試

      在硬件方面,整個(gè)系統(tǒng)與市場(chǎng)上較流行的小型OLED 模塊相差無幾,兩者對(duì)比如圖5 所示,左邊為本文設(shè)計(jì)制作的OLED 驅(qū)動(dòng)系統(tǒng),右邊為市場(chǎng)上較流行的小型OLED 模塊。

      圖5 OLED 模塊對(duì)比圖

      為了測(cè)試本文設(shè)計(jì)的小型OLED 屏幕驅(qū)動(dòng)顯示系統(tǒng)的性能,通過控制OLED 驅(qū)動(dòng)顯示,并調(diào)整不同的波特率,對(duì)數(shù)字、字符、漢字、圖像進(jìn)行測(cè)試。

      通過設(shè)定不同的坐標(biāo)值,將不同尺寸的數(shù)字、字符、漢字進(jìn)行顯示,顯示測(cè)試結(jié)果如圖6 所示。通過測(cè)試,整體顯示效果流暢,漢字、字符、數(shù)字能準(zhǔn)確識(shí)別,顯示無亂碼現(xiàn)象,顯示位置可任意設(shè)置。

      圖6 不同尺寸字體顯示測(cè)試

      對(duì)圖像顯示進(jìn)行測(cè)試,將一幅圖像完整顯示在屏幕上,測(cè)試結(jié)果如圖7 所示。顯示一張圖片,一次讀取的數(shù)據(jù)較多,由于不同波特率下數(shù)據(jù)讀取速率不同,因此圖片顯示的流暢度存在差異,在9 600 bit/s及以上波特率顯示效果較為流暢,刷新速率較快。在9 600 bit/s 以下波特率,顯示刷新速度較慢,在對(duì)速度要求不高的低端處理器可使用。

      圖7 圖像顯示測(cè)試

      4 結(jié)論

      OLED 屏幕被廣泛地應(yīng)用在小型嵌入式系統(tǒng)、單片機(jī)系統(tǒng)、電子產(chǎn)品等,但OLED 屏幕的顯示內(nèi)容需采用取字模的方式,很容易使得內(nèi)存被占滿或溢出,并且OLED 屏幕的驅(qū)動(dòng)也具有一定的復(fù)雜度。為方便用戶使用OLED 屏幕,本文采用MCU 控制方案,外加FLASH 芯片,通過串口對(duì)OLED 屏幕進(jìn)行控制;可使用多種處理器通過串口或者模擬串口的方式進(jìn)行OLED 屏幕驅(qū)動(dòng);本系統(tǒng)加入了3 種漢字字庫(kù),大量節(jié)約了處理器的程序存儲(chǔ)空間;所有驅(qū)動(dòng)都已載入本系統(tǒng),用戶不需考慮OLED 屏幕的驅(qū)動(dòng)問題,只需通過串口發(fā)送指令數(shù)據(jù)即可完成驅(qū)動(dòng),簡(jiǎn)化了OLED 屏幕的驅(qū)動(dòng)使用。針對(duì)不同性能的處理器,可調(diào)節(jié)波特率,以適應(yīng)不同處理器性能。由于使用串口通信,也可以使用藍(lán)牙等串口無線通信模塊,進(jìn)行無線數(shù)據(jù)傳輸,拓展了OLED 的應(yīng)用場(chǎng)景和適應(yīng)范圍。經(jīng)測(cè)試整個(gè)系統(tǒng)運(yùn)行穩(wěn)定可靠,可在不同波特率下正確接收串口指令和數(shù)據(jù),能夠正常顯示數(shù)字、字符、漢字和圖像,顯示效果流暢,能夠較好地滿足各種OLED 屏幕的顯示需求。

      猜你喜歡
      字庫(kù)波特率串口
      淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
      No.2 喜茶聯(lián)合漢儀字庫(kù)推出微型書和書簽
      CAN 總線波特率自適應(yīng)程序設(shè)計(jì)
      智能制造(2020年5期)2020-07-03 06:24:00
      基于FPGA的異步串行通信波特率容錯(cuò)設(shè)計(jì)
      某型號(hào)產(chǎn)品的字庫(kù)遷移優(yōu)化設(shè)計(jì)
      電子世界(2018年7期)2018-04-26 08:51:35
      USB接口的多串口數(shù)據(jù)并行接收方法探索
      基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無線通信
      相同字庫(kù)條件下激光打印文件特征的變化規(guī)律和特點(diǎn)
      基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
      再議字庫(kù)知識(shí)產(chǎn)權(quán)保護(hù)
      鄂托克旗| 仙游县| 辽源市| 乐清市| 鄂州市| 商南县| 娄底市| 四川省| 潼南县| 阿图什市| 会昌县| 大关县| 内乡县| 乌兰浩特市| 朔州市| 镇远县| 安多县| 太湖县| 桂林市| 读书| 兴安盟| 诸暨市| 永年县| 南宫市| 耿马| 河南省| 靖西县| 丹棱县| 华亭县| 深水埗区| 陈巴尔虎旗| 五指山市| 南康市| 齐河县| 凤山县| 双峰县| 时尚| 桓仁| 安平县| 阿合奇县| 彭泽县|