鄒全勝
(滁州職業(yè)技術學院,安徽 滁州 239000)
顯示模塊在單片機中不可或缺,如用數(shù)碼管顯示溫度,12864液晶顯示漢字或工作界面。而用12864液晶顯示圖片作為開始界能夠是整個單片機項目增色不少,我們在這里將加以介紹。
圖一 效果圖
本方案的實現(xiàn)主要包括:單片機最小系統(tǒng)、12864液晶與單片機的連接、顯示函數(shù)的編寫、圖片轉換、圖片字模的生成及系統(tǒng)的調試。
單片機微型計算機是微型計算機的一個重要分支,它是單片機微型計算機簡稱,通常用于控制領域,故又稱為微控制器。
單片機由單塊集成電路芯片構成,內部集成計算機的基本功能部件:中央處理器、存儲器和I/O接口電路等。因此,單片機只需要和適當?shù)能浖巴獠吭O備相結合,便可成為一個單片機控制系統(tǒng)。
本項目采用AT89s52單片機,AT89S52是Atmel公司采用高密度非易失性存儲器技術制造,與工業(yè)80C51產品指令和引腳完全兼容,并且具有8K在系統(tǒng)可編程Flash存儲器。
AT89s52具有32位I/O口,分別是P0口、P1口、P2口、P3口各8位,總共32位。每個口的8位都可作為通用的輸入輸出口,其中P3口還兼有第二功能:P3.0(RXD)串行數(shù)據(jù)接收端P3.1(TXD)串行數(shù)據(jù)發(fā)送端,P3.2(INT0)外部中斷源0輸入端,P3.3(INT1)外部中斷源1輸入端,P3.4(T0)定時/計數(shù)器T0計數(shù)脈沖輸入端,P3.5(T1)定時/計數(shù)器T1計數(shù)脈沖輸入端,P3.6(WR)外部RAM寫選通端,P3.7(RD)外部RAM讀選通端。另外P0和P2口用作地址線端口時,分別對應地址的低8位和高8位。[1]
圖二 12864方塊圖
1、模塊簡介
12864液晶主要由顯示模塊、驅動器、控制器及背景光幾部分組成。12864液晶顯示分左右半屏,其中左半屏64列,右半屏64列,加在一起128列。左右半屏又各有64行,所以稱之為12864液晶。其中液晶的64行又分為8頁(0~7),每頁8行。左右半屏的選擇,依靠控制器的CS1、CS2來選擇。屏幕的亮度取決與背景光的亮度,亮度的調節(jié)又取決于背景光的電壓值。
2、接口的定義
圖三 接口定義示意圖
12864共有20個接口:
1腳VSS和2腳VDD分別為電壓的負極和正極。
4腳R/S端為控制寄存器操作選擇端,即選擇是對數(shù)據(jù)還是指令進行操作:H(高電平)時為對數(shù)據(jù)進行操作,L(低電平)時為對指令進行操作。
5腳R/W端為讀寫控制端:H(高電平)時表示“讀“,即數(shù)據(jù)從12864中讀出,L(低電平)是表示”寫“,即數(shù)據(jù)被寫入到12864中。
6腳E為控制使能:只有此腳從高電平向低電平跳變時(即下降沿),相關的讀寫的數(shù)據(jù)才能有效。
7~14腳為數(shù)據(jù)總線。
15腳CS1為右半屏選擇信號,H高電平時選中。
16腳CS2為左半屏選擇信號,H高電平時選中。
17腳RET為復位信號,低電平復位。
18腳為LCD驅動負電壓。
19、20腳分別為LED背光板電源。
圖四 12864液晶的寫時序圖
3、寫指令和寫數(shù)據(jù)函數(shù)的編寫通過以上接口的定義我們再來看看12864的時
序圖:從圖中我們看出,如果我們要往12864液晶中
寫數(shù)據(jù),首先R/W要為0,其次在數(shù)據(jù)DB0-7數(shù)據(jù)有
效時,E要從高電平向低電平跳變,由此我們可得出
寫指令和寫數(shù)據(jù)的函數(shù)的如下寫法:
寫指令函數(shù):
寫數(shù)據(jù)函數(shù):
從兩個函數(shù)可看出它們的不同之處在于,寫指令函數(shù)的RS=0,而寫數(shù)據(jù)的函數(shù)RS=1。而它們的相同之處在于同樣RW=0,代表向12864中寫,同時E都在P0口數(shù)據(jù)穩(wěn)定時有1向0跳變,也即從高電平向低電平跳變。[2]
4、指令介紹
圖五 12864顯示控制指令
知道的12864液晶寫數(shù)據(jù)和寫指令函數(shù)的編寫,我們在來看看12864各指令的含義。
之前我們說12864液晶分左右屏,有分8頁和左右屏各64列,那么怎么樣把數(shù)據(jù)精準的定位到我們要顯示的位置呢?靠的就是12864液晶的顯示控制指令,下面我們一一解釋:
開關顯示:從表中看出,首先RS要為L,因為我們要寫的是控制12864顯示的指令而不是要顯示的數(shù)據(jù)。R/W為L代表向12864中寫(下面同此,不再說明)。在看DB7-DB0只有DB0是可變的,L代表關,H代表開。所以開關顯示的二進制碼就為00111110(關)(十六進制 0X3E),00111111(開)(十六進制0X3F)。
設置Y地址:可見此指令預留的6位用于指定12864的64列的地址,那么起始地址的二進制碼為:01000000(十六進制0X40)。
設置X地址:X地址即為128654的頁地址,共有8頁,所以此字節(jié)預留的3位用于指定8頁的地址,起始地址的二進制碼為10111000(十六進制0XB8)。
顯示開始線:此指令用于指定從12864的64行中的那一行開始顯示,我們一般從第一行開始顯示,這樣Z地址的起始地址的二進制碼為:11000000(十六進制0XC0)。
12864液晶與單片機的連接如圖。AT89S52單片機的P0口與12864的DB0-DB7相連,作為單片機與12864交換數(shù)據(jù)的數(shù)據(jù)口。RST接P2.4口,CS1和CS2分別接P2.4和P2.3,E接P2.2口,R/W接P2.1口,RS接P2.0口。VCC和GND分別接電源正極和負極。由于此圖為仿真圖,其它接口忽略(實際中不可)。[3]
圖六12864與單片機連接圖
圖片轉換的目的,由于我們12864的像素有限,只有128×64,所以我們要將下載的黑白圖片進行轉換。
這里我們以下載好的黑白圖片為類:首先我們打開畫圖軟件,用畫圖軟件打開我們下載好的黑白圖片。
圖七
由于圖片較大,我們選擇查看,進行縮小。然后用選擇工具選擇要截取的部分然后復制。
新建文件,在新建的畫圖板中粘貼。選擇圖片右下角進行拖動,直到下面的像素顯示為128×64為止。(如下圖)
圖八
這時打開文件的屬性面板
圖九屬性面板設置
設置屬性中的寬度為128,高度為64,單位為像素,顏色為黑白,最后進行保存。這樣我們的圖片的轉換就做好了。
12864的顯示原理是:每次向12864寫一個字節(jié)的數(shù)據(jù),一個字節(jié)8位,高電平1在12864上顯示的黑點,低電平0在12864上顯示的是個空白(或白點)。且這一個字節(jié)的8位是縱向方式寫入的,所以我們在取字模時一定要縱向取模,字節(jié)倒序也要勾選上。
參數(shù)設置如下圖所示:
設置完成后,點擊“基本操作”,“打開圖像圖標”。
打開我們事先轉換好的黑白圖片,打開后的效果如圖所示。
最后點擊“取模方式”,選擇“C51格式”即可在“點陣生成區(qū)”看到生成后的十六進制代碼。賦值生成的所有代碼,在主函數(shù)中以數(shù)據(jù)的形式保存即可。
主程序的編寫我們主要介紹顯示圖片函數(shù)的寫法。圖片顯示函數(shù)是我們本系統(tǒng)的關鍵,它用到了以上我們介紹的所有知識,下面我們來詳細介紹。
首先,整個圖片是以整個屏幕的大小實現(xiàn)處理好的,取模方式我們也是采用的縱向取模,所以整個字模的個數(shù)為8×128個字模(8×128字節(jié)的數(shù)據(jù))。8代表有8也,128代表有128列,其中左半屏64列,右半屏64列。每列從0開始計數(shù)也就是0列-63列,頁也是從0開始計數(shù)即0頁-7頁。所以我們用兩個局部變量i和j,分別代表頁和列。
其次,在寫每一頁的128列時要能自動識別左右半屏,采用的方法就是看列參數(shù)j是否小于64和大于63。小于64也即0-63在左半屏,大于63即64-128在右半屏,在右半屏時,左右半屏要切換(CS1、CS2的高低電平要互換),同時列數(shù)的值要在j的基礎上減去 64(64-64=0、127-64=63,符號右半屏0列-63列的原則)。
再次,每寫完128列要換行(也即換頁),采用的方法是每寫完128個數(shù)據(jù),列數(shù)據(jù)要在參數(shù)j的基礎上加上i×128,這樣隨主i的增加j就在127的基礎上加上逐漸128,從而實現(xiàn)自動換行。
圖片顯示函數(shù)如下:
系統(tǒng)的調試我們采用PROTEUS單片機仿真,線路的連接我們采用的是網(wǎng)絡標號的方法,相同的網(wǎng)絡標號代表兩端是連接在一起的。程序用keil軟件別寫好之后,生成相對應HEX文件。雙擊仿真軟件中的單片機(我們實際使用的是AT89S52,仿真時我們用 AT89CF51代替),在“program file”欄中選擇剛生成好的HEX文件,點擊“確定按鈕”。最后點擊PROTEUS軟件左下角的“開始按鈕”,即可實現(xiàn)本系統(tǒng)設計。
最終的效果如下圖: