淺談?dòng)脝纹瑱C(jī)控制12864液晶
從現(xiàn)在開始,慢慢的寫一寫自己在學(xué)習(xí)過程中的感想,作為一個(gè)系列吧,沒有什么固定順序,學(xué)到哪寫到哪。給它起個(gè)統(tǒng)一的名字叫做《我的學(xué)習(xí)筆記:*****》,話不多說,第一記開始:
話說起來12864,有愛有恨。
先引出一段背景話:前段時(shí)間做電子大賽,題目是《無線遙控繪圖小車》,意思即為制作一個(gè)A端,作為遠(yuǎn)程遙控部分;制作一個(gè)B端,作為繪圖主體部分。每個(gè)部分均由主控IC來控制,我們采用的是增強(qiáng)型51單片機(jī)STC12C5A32S2,選擇它的原因無非有兩個(gè):一是普通51單片機(jī)無論從主頻、RAM上來講均不能滿足要求;二是在大賽前突然得知AVR系列的128停產(chǎn)了,市面上僅剩的128于是身價(jià)倍增,已經(jīng)達(dá)到45~55元/片,成本過高。于是驚呼:AVR的時(shí)代已經(jīng)馬上就要過去了。最后我們選用了STC12C5A32S2單片機(jī),主頻選用24M,不分頻,相當(dāng)于傳統(tǒng)51單片機(jī)的288M頻率,速度夠用;32K+28K的存儲器,相比51的4K、8K存儲空間夠用了;而它的價(jià)格僅僅為7元/片(從芯片商直接購進(jìn))。這樣無論從性能和價(jià)格上均滿足要求,可謂性價(jià)比相當(dāng)高的一款單片機(jī)了。好了,主控介紹完畢。因?yàn)楸敬沃饕胝f說12864液晶,所以主要介紹A端及其控制。
A端主要有五部分組成:電源模塊、主控芯片及其工作電路、歐姆龍非編碼4*4矩陣鍵盤、nrf24L01無線傳輸模塊、12864液晶顯示模塊。下面主要介紹在使用12864液晶中遇到的一些問題及其解決方案:(拋磚引玉,歡迎高手指點(diǎn))
12864液晶,從字面意思上來理解,就是一塊分辨率為128*64的液晶屏幕,和電腦中提到的顯示器分辨率是一樣的。只不過12864是一塊單色的液晶屏,市面上最常見的為藍(lán)綠色和藍(lán)色。我們采用的是藍(lán)色液晶屏,內(nèi)有中文字庫,使用起來方便很多。關(guān)于漢字和ASCII碼:漢字在12864中占用16*16的屏幕空間,ASCII碼字符占用16*8的屏幕空間。于是我們可以知道:一塊12864使用內(nèi)部字庫,最多可以顯示32個(gè)漢字或者64個(gè)ASCII碼字符。如果我們感覺這樣屏幕顯示的東西太少,可以舍棄液晶內(nèi)部字庫,自己制作一個(gè)字庫,其中漢字和ASCII碼均可以占用8*8的屏幕空間,這樣我們的12864最多可以顯示128個(gè)漢字或ASCII碼字符。所以在顯示內(nèi)容較多時(shí)可以采用這種方法。
作為背景,下面說一下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)做好了,我們要做的就是通過制造商留給我們的20P接口去使用它(這也就是術(shù)業(yè)有專攻吧,我們不必關(guān)心它的內(nèi)部驅(qū)動(dòng),只要會用就行了),關(guān)于制造商留給我們的這20P引腳的具體名稱和功能 我就不贅述了,網(wǎng)上一把一把的。將單片機(jī)的I/O、電源線與液晶焊接完畢后,硬件也就搭建好了。下面開始軟件編程來控制12864液晶讓它顯示。
說到軟件編程,首先我們需要準(zhǔn)備一下平臺:第一:給單片機(jī)焊接一個(gè)下載電路,51單片機(jī)最常用的就是串口下載,需要串口頭一個(gè)、104電容5個(gè)、max232芯片一個(gè)、串口線/USB轉(zhuǎn)串口連接線(后者主要為筆記本等沒有串口的電腦設(shè)計(jì))一條、導(dǎo)線若干。這個(gè)下載電路在網(wǎng)上也是一把一把的,我也不贅述了。第二:需要一臺電腦(編程用)。第三:需要相應(yīng)的開發(fā)平臺,51單片機(jī)最常用的是keil,現(xiàn)在比較流行的是keil2和keil3,各有特點(diǎn),可以根據(jù)自己的習(xí)慣選擇,我個(gè)人選用的是keil3平臺。有了以上3點(diǎn),軟硬件開發(fā)平臺就已經(jīng)搭建好了,下面介紹一下程序編寫。
首先,打開keil軟件,建立一個(gè)工程,并添加一個(gè)文件到工程里面,然后就可以寫程序了。首先把基本程序架構(gòu)寫好:頭文件、主函數(shù)、while循環(huán)。為了讓程序比較好理解,采用編寫函數(shù)在主函數(shù)中調(diào)用的形式。下面介紹一下各種功能函數(shù)的編寫。
首先是最基本的初始化操作,需要參考制造商給出的操作時(shí)序圖(這里不贅述,只列出代碼)
void init_12864()
{
lcd12864_psb=1;//選擇并行模式
write_cmd(0x30);//選擇基本指令
write_cmd(0x0C);//把顯示打開,關(guān)閉游標(biāo)
write_cmd(0x01);//清屏,地址歸零
}
接下來是基本的讀寫操作:參考制造商給出的操作時(shí)序圖(這里不贅述,只列出代碼)
//往12864內(nèi)部寫入一個(gè)命令字節(jié)
void write_cmd(uchar cmd)
{
lcd12864_rs=0;//把rs引腳拉低,表示命令
lcd12864_rw=0;//表示寫,而非讀
P0=cmd;//把命令字節(jié)送到數(shù)據(jù)線上
lcd12864_en=0; //給en引腳一個(gè)高脈沖
delay_ms(5);
lcd12864_en=1;
delay_ms(5);
lcd12864_en=0;
}
//往12864內(nèi)部寫入一個(gè)字節(jié)的數(shù)據(jù)
void write_dat(uchar dat)
{
lcd12864_rs=1;//表示寫數(shù)據(jù)
lcd12864_rw=0;//表示寫
P0=dat;//把數(shù)據(jù)送到數(shù)據(jù)線上
lcd12864_en=0; //給en引腳一個(gè)高脈沖
delay_ms(5);
lcd12864_en=1;
delay_ms(5);
lcd12864_en=0;
}
萬能遙控器相關(guān)文章:萬能遙控器代碼
51單片機(jī)相關(guān)文章:51單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
led顯示器相關(guān)文章:led顯示器原理
評論