淺談?dòng)脝纹瑱C(jī)控制12864液晶_第1頁(yè)
淺談?dòng)脝纹瑱C(jī)控制12864液晶_第2頁(yè)
淺談?dòng)脝纹瑱C(jī)控制12864液晶_第3頁(yè)
淺談?dòng)脝纹瑱C(jī)控制12864液晶_第4頁(yè)
淺談?dòng)脝纹瑱C(jī)控制12864液晶_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、從現(xiàn)在開始,慢慢的寫一寫口己在學(xué)習(xí)過(guò)程中的感想,作為一個(gè)系列吧,沒有什么固定順序, 學(xué)到哪寫到哪。給它起個(gè)統(tǒng)一的名字叫做我的學(xué)習(xí)筆記:*,話不多說(shuō),第一記開 始:話說(shuō)起來(lái)12864,有愛有恨。先引出一段背景話:前段時(shí)間做電了人賽,題目是無(wú)線遙控繪圖小車,意思即 為制作一個(gè)a端,作為遠(yuǎn)程遙控部分;制作一個(gè)b端,作為繪圖主體部分。每個(gè)部分均由 主控ic來(lái)控制,我們采用的是增強(qiáng)型51單片機(jī)stc12c5a32s2,選擇它的原因無(wú)非冇兩個(gè): 一是普通51單片機(jī)無(wú)論從主頻、ram上來(lái)講均不能滿足耍求;二是在大賽前突然得知avr 系列的128停產(chǎn)了,市面上僅剩的128于是身價(jià)倍增,已經(jīng)達(dá)到4555元/片,

2、成本過(guò)高。 于是驚呼:avr的時(shí)代已經(jīng)馬上就要過(guò)去了。最后我們選用了 stc12c5a32s2單片機(jī),主 頻選用24m,不分頻,相當(dāng)于傳統(tǒng)51單片機(jī)的288m頻率,速度夠用;32k+28k的存儲(chǔ)器, 相比51的4k、8k存儲(chǔ)空間夠用了;而它的價(jià)格僅僅為7元/片(從芯片商直接購(gòu)進(jìn))。這 樣無(wú)論從性能和價(jià)格上均滿足耍求,可謂性價(jià)比相當(dāng)高的一款單片機(jī)了。好了,主控介紹完 畢。因?yàn)楸敬沃饕胝f(shuō)說(shuō)12864液晶,所以主要介紹a端及其控制。a端主要有五部分組成:電源模塊、主控芯片及其工作電路、歐姆龍非編碼4*4 矩陣鍵盤、nrf24l()l無(wú)線傳輸模塊、12864液晶顯示模塊。下面主要介紹在使用12864

3、液晶 中遇到的一些問題及其解決方案:(拋磚引玉,歡迎高手指點(diǎn))12864液品,從字面意思上來(lái)理解,就是-塊分辨率為128*64的液品屏幕,和電 腦中提到的顯示器分辨率是一樣的。只不過(guò)12864是一塊單色的液品屏,市面上最常見的為 藍(lán)綠色和藍(lán)色。我們采用的是藍(lán)色液晶屏,內(nèi)冇中文字庫(kù),使用起來(lái)方便很多。關(guān)于漢字和 ascii碼:漢字在12864 +占用16*16的屏幕空間,ascii碼字符占用16*8的屏幕空間。 于是我們可以知道:一塊12864使用內(nèi)部字庫(kù),最多可以顯示32個(gè)漢字或者64個(gè)ascii 碼字符。如果我們感覺這樣屏幕顯示的東西太少,可以舍棄液晶內(nèi)部字庫(kù),白己制作一個(gè)字 庫(kù),其中漢字和

4、ascii碼均町以占用8*8的屛幕空間,這樣我們的12864最多可以顯示128 個(gè)漢字或ascii碼字符。所以在顯示內(nèi)容較多時(shí)可以采用這種方法。作為背景,下而說(shuō)一下12864的驅(qū)動(dòng)。關(guān)于液晶的驅(qū)動(dòng)電路是相當(dāng)復(fù)雜的,一個(gè)有 兒年工作經(jīng)驗(yàn)的工程師也不一定能自己獨(dú)立設(shè)計(jì)出一個(gè)12864驅(qū)動(dòng),但是比較好的是,我們 一般在買12864的時(shí)候,制造商都已經(jīng)將驅(qū)動(dòng)做好了,我們要做的就是通過(guò)制造商簾給我們 的20p接口去使用它(這也就是術(shù)業(yè)冇專攻吧,我們不必關(guān)心它的內(nèi)部驅(qū)動(dòng),只要會(huì)用就 行了),關(guān)于制造商留給我們的這20p引腳的具體名稱和功能 我就不贅述了,網(wǎng)上一把 一把的。將單片機(jī)的i/o、電源線與液晶焊接

5、完畢后,硬件也就搭建好了。下面開始軟件編 程來(lái)控制12864液品讓它顯示。說(shuō)到軟件編程,首先我們需要準(zhǔn)備一下平臺(tái):第一:給單片機(jī)焊接一個(gè)下載電路, 51單片機(jī)最常用的就是串口下載,需要串口頭一個(gè)、104電容5個(gè)、max232芯片一個(gè)、串 口線/usb轉(zhuǎn)串口連接線(后者主要為筆記本等沒有串口的電腦設(shè)計(jì))一條、導(dǎo)線若干。這 個(gè)下載電路在網(wǎng)上也是一把一把的,我也不贅述了。第二 需要一臺(tái)電腦(編程用)。第三: 需要相應(yīng)的開發(fā)平臺(tái),51單片機(jī)最常用的是kcil,現(xiàn)在比較流行的是kcil2和kcil3,各冇特 點(diǎn),可以根據(jù)自己的習(xí)慣選擇,我個(gè)人選用的是keil3平臺(tái)。有了以上3點(diǎn),軟硬件開發(fā)平 臺(tái)就己經(jīng)搭

6、建好了,卜面介紹一卜程序編寫。首先,打開keil軟件,建立一個(gè)工程,并添加一個(gè)文件到工程里面,然后就可以寫 程序了。首先把基本程序架構(gòu)寫好:頭文件、主函數(shù)、while循環(huán)。為了讓程序比較好理解, 采用編寫函數(shù)在主函數(shù)屮調(diào)用的形式。下而介紹一下各種功能函數(shù)的編寫。首先是最基本的初始化操作,需要參考制造商給出的操作時(shí)序圖(這里不贅述,只 列出代碼)void init_ 12864()led 12864_psb= 1;選擇并行模式write_cmd()x30);選擇基本指令write_cmd(oxoc);/把顯示打開,關(guān)閉游標(biāo)wiite_cmd(0x01);清屏,地址歸零接下來(lái)是基本的讀寫操作:參考

7、制造商給岀的操作時(shí)序圖(這里不贅述,只列岀代碼)往12864內(nèi)部寫入一個(gè)命令字節(jié)void write_cmd(uchar cmd)led 12864s二0;/把rs引腳拉低,表示命令led 12864w=0;表示寫,而非讀p0=cmd;/把命令字節(jié)送到數(shù)據(jù)線上lcdl2864_en=0; 給en引腳一個(gè)高脈沖delay_ms(5);lcdl2864_en=l;delay_ms(5);lcd!2864_en=0;往12864內(nèi)部寫入一個(gè)字節(jié)的數(shù)據(jù)void write_dat(uchar dat)led 12864_rs= 1;表示寫數(shù)據(jù)lcdl2864_rw=0;/ 表示寫p0=da(;把數(shù)據(jù)送

8、到數(shù)據(jù)線上lcdl2864_en=0; 給en引腳一個(gè)高脈沖 delay_ms(5);lcdl2864_cn=l;delay_ms(5);lcd!2864_en=0;這樣基本的函數(shù)便寫好了,關(guān)于12864的操作是這樣的:首先礙要對(duì)其進(jìn)行配置,即執(zhí)行初始化函數(shù),然示就可以進(jìn)行進(jìn)行顯示字符了。如果我們要在屏幕上顯示漢字妝f', 需要這樣操作:首先寫入命令,內(nèi)容為顯示地址(第一行首空間為0x80),然后寫入數(shù)據(jù), 內(nèi)容為我們要顯示的字符(內(nèi)容為“好',),于是我們的代碼這樣寫:init_l 2864();writc_cmd(0x80);write_dat(“ 好”);這樣我們進(jìn)行代碼

9、編譯,將文件下載到單片機(jī)就可以在12864上看見在屏幕最左上 角的“好”字了。下面進(jìn)行一些更加復(fù)雜一點(diǎn)的操作。即在屏幕任意的地方顯示任意的字符冷(當(dāng)然需要 的顯示空間要夠,不然會(huì)沒有地方顯示的),代碼如,void set_xy(uchar row,uchar line) /設(shè)置顯示地址為第 x 行 y 歹!jswitch(row) /對(duì)彳亍進(jìn)行判斷case 1: write_cmd(0x80lline);break; 第一行,則設(shè)定列位置case 2: write_cmd(0x90lline);break;) /第二行,則設(shè)定列位置case 3: write_cmd(0x88lline);br

10、eak; 第三行,則設(shè)定列位置case 4: write_cmd(0x98lline);break; /第四行,則設(shè)定列位置void write_xy(uchar row,uchar line,uchar *string) /在坐標(biāo)為 x 彳亍 y 列的地方顯示出字符串stringuchar lcd_temp; 定義顯示數(shù)據(jù)愆存變量set_xy(row,line); /設(shè)定顯示地址為第x行y列l(wèi)cd_temp=*string; 將 string 的內(nèi)容賦給 lcd_tempwhile(lcd_temp!=oxoo) /判斷字符串截止標(biāo)志write_dat(lcd_temp); /寫入字符串的相

11、應(yīng)內(nèi)容 lcd_temp=*(+string); /讀取字符串下一位字符這樣,一個(gè)函數(shù)就編寫好了,如果我們想在笫三行第二列的位置顯示“我愛電子”, 則這樣進(jìn)行操作:行x=3,列y=2,字符串為“我愛電子”,于是我們?cè)谥骱瘮?shù)里面寫這樣的 代碼:unsigned char string二“我愛電子"write_xy(3,2,uchar string); /uchar *string (string 指向字符型變量的指針變量)這樣我們進(jìn)行代碼編譯,將文件下載到單片機(jī)就可以在12864上看見在屏幕第三行 第二列的位置顯示“我愛電子下面介紹一下在12864上進(jìn)行局部顯示圖片,在顯示圖片之前我們

12、需要獲得所顯示圖片 的二進(jìn)制編碼。這個(gè)可以借助v字模提収軟件>來(lái)進(jìn)行,然后在函數(shù)中定義一下(我定義為 logo = ),下面是局部顯示圖片的函數(shù)void lcdl2864_display(uchar code *img)/*顯示函數(shù)*/uchar x,y;uint i=0;/不可定義為uchar,數(shù)量不夠用for(y=24;y<=31 ;y+) /我們可以更改y的最小值和最大值來(lái)控制顯示區(qū)域for(x=l ;xv3;x+)每個(gè)x對(duì)應(yīng)于2個(gè)字節(jié),我們可以更改x的最小值和最大值來(lái)控制顯示區(qū)域write_cmd(0x36); 擴(kuò)充指令,同時(shí)開通圖形顯示write_cmd(0x80+y);

13、/垂直地址write_cmd(0x80+x);/ 水平地址write_cmd()x30);/改為基本指令,進(jìn)而進(jìn)彳亍基本輸入write_dat(imgi+); /數(shù)據(jù)寫入write_dat(imgi+);)for(y=();yv=23;y+)我們町以更改y的最小值和最大值來(lái)控制顯示區(qū)域for(x=l;xv3;x+)我們可以更改x的最小值和最人值來(lái)控制顯示區(qū)域wii(e_cmd(0x36);擴(kuò)充指令,同吋開通圖形顯示write_cmd()x8()+y);/ 垂直地址write_cmd(0x88+x); /顯示下半屏,y的坐標(biāo)不變,x的坐標(biāo)加 8 (看datasheet上的圖)write_cmd(

14、0x30);/改為基本指令,進(jìn)而進(jìn)行基本輸入write_dat(imgi+); / 數(shù)據(jù)寫入write_dat(imgi+j);)這樣,一個(gè)函數(shù)就編寫好了,如果我們就可以在任意區(qū)域顯示自己想要的圖片了(當(dāng)然寫入的區(qū)域不要有漢字或字符內(nèi)容,不然會(huì)重亞到一起的,關(guān)于這部分的解決方案,下而即將介紹)筆者在應(yīng)川12864的時(shí)候,由基本模式切換到繪圖模式時(shí),會(huì)出現(xiàn)屏幕花屏的情況,始終 無(wú)法解決,最后編寫了一段清除圖片內(nèi)容的函數(shù),其代碼如下:void clear_img()uchar p,q;write_cmd(0x34);writc_cmd(0x36);for(p=0;p<32;p+)write_cmd(0x80lp);write_cmd(0x80);for(q=0;q<32;q+)write_dat(o);仔細(xì)研究一下這段代碼,具實(shí)人家可以發(fā)現(xiàn)沒有什么特別的東西,主要是為了給圖 片區(qū)域的部分全部寫入0,屏蔽其顯示內(nèi)容,由此便可以解決模式切換后的花屏現(xiàn)象。然后 在主函數(shù)中,調(diào)用初始化函數(shù)后,執(zhí)行上面的clear_img()函數(shù)即nj避免模式切換后的花屏現(xiàn) 象。效果還是不錯(cuò)的,只是占用的時(shí)間比較氏。筆者最初用普通51單片機(jī)時(shí)候選用11

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論