




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、轉(zhuǎn)載.教你在12864上打點(diǎn)(基于ST7920控制器) 基于ST7920控制的12864液晶用于字符顯示很方便的,但它繪圖時先要關(guān)閉顯示,繪完后又要打開,速度會較慢,不如不帶字庫的,但也可用。首先,繪圖的基礎(chǔ)其實(shí)就是畫點(diǎn)。ST7920提供了用于繪圖的GDRAM(graph display RAM)。共 64×32 個字節(jié)的空間(由擴(kuò)充指令設(shè)定繪圖 RAM 地址),最多可以控制 256×64點(diǎn)陣的二維繪圖緩沖空間。在它的Datasheet給出了GDRAM的坐標(biāo)地址對照表:用坐標(biāo)表示,就是這樣:它的橫坐標(biāo)每一個地址都是16 位的。共16個地址,256位。 很明顯,它能控制256
2、*64像素的液晶屏,而我們的只是128*64像素液晶屏,顯然只用到它的一部分。 我剛開始以為它對應(yīng)屏幕的繪圖RAM是這樣分布的(如紅色部分):結(jié)果栽了大根頭,后來終于弄明白,原來它對應(yīng)屏幕的GDRAM是這樣分布的:只要我們清楚了它的GDRAM和屏幕上像素點(diǎn)的映射(對應(yīng))關(guān)系,點(diǎn)亮對應(yīng)的像素點(diǎn)就容易多了。要點(diǎn)亮某一個像素點(diǎn),就是將這個像素點(diǎn)在GDRAM中對應(yīng)的位置1打點(diǎn)步驟-給你x,y的坐標(biāo),要你點(diǎn)亮一個點(diǎn),首先,我們要確定這個點(diǎn)是在上半屏還是下半屏,然后確定它是在那一行(縱坐標(biāo)Y),再確定它是在哪一個字節(jié)的哪一個位(也就是確定它在那一列,即橫坐標(biāo)X),最后,將該位置1下面我們邊寫代碼邊討論。
3、因?yàn)檫@里僅僅是討論如何在12864上打點(diǎn)的,而不是給12864寫一個驅(qū)動,所以對于基本的數(shù)據(jù)讀寫函數(shù),我們不做討論,這里假設(shè)已經(jīng)有了如下基本函數(shù):view sourceprint?1void lcd_write_cmd(unsigned char); /lcd 命令寫 2void lcd_write_data(unsigned char); /lcd 數(shù)據(jù)寫 3unsigend char lcd_read_data(void); /lcd 數(shù)據(jù)讀 為了方便,我們定義如下宏:1#define BASIC_SET &
4、#160; 0x00 /基本指令集, 2#define EXTEND_SET 0x00 /擴(kuò)展指令集 3#define DRAW_ON 0x10 /繪圖顯示開 4#define
5、0; DRAW_OFF 0x00 /繪圖顯示關(guān)點(diǎn)亮某一個點(diǎn)的函數(shù)(不完善):01void lcd_set_dot(unsigned char x, unsigned char y) 02 03 unsigned char x_byet, x_bit; /在橫坐標(biāo)的哪一個字節(jié),哪一個位 04 unsigned char
6、 y_ping, y_bit; /在縱坐標(biāo)的哪一屏,哪一行05 x_byte = x / 16; /算出它在哪一個字節(jié)(地址) 06
7、160; /注意一個地址是16位的 07 x_bit = x % 16; /算出它在哪一個位 08 y_ping = y /32;
8、0; / 確定在上半屏還是下半屏,0:上半屏 1:下半屏11 y_bit = y % 32; /y_bit確定它是在第幾行 12 lcd_
9、write_cmd(EXTEND_SET); /擴(kuò)展指令集 13 lcd_write_cmd(DRAW_OFF); /繪圖顯示關(guān)閉,繪圖前要先關(guān)閉 14 lcd_write_cmd(0x80 + y_bit); /先寫垂直地址(第幾
10、行),繪圖要先寫垂直地址 16 lcd_write_cmd(0x80 + x_byte + 8 * y_ping); /再寫水平地址,下半屏的水平坐標(biāo)起始地址為0x88 ,(+8*y_byte)就是用來確定在上半屏還是下半屏19 if (x_bit < 8)
11、160; /如果x_bit位數(shù)小于8 20 21 lcd_write_data(0x01 << (7 - x_bit); /寫高字節(jié)。因?yàn)樽鴺?biāo)是從左向右的 22
12、; /GDRAM高位在左,底位在右23 lcd_write_data(0x00);
13、60; /低字節(jié)全部填0 24 25 else26 27 lcd_write_data(0x00);
14、 /高字節(jié)全部填0低字節(jié)打入相應(yīng)的點(diǎn) 28 lcd_write_data(0x01 << (15 - x_bit); 29 30 lcd_write_cmd(DRAW_ON); /打開繪圖顯示 31
15、;lcd_write_cmd(BASIC_SET); /回到基本指令集,畢竟ST7920是以字符為主的(不回也行) 32 return ; 33 上面的程序會出現(xiàn)問題,原因是因?yàn)槲覀儺孅c(diǎn)時對其余的位全部填0處理了,造成對原來的信息的破壞。所以我們要讀出要寫的那個地址原來的數(shù)據(jù),再進(jìn)行加工,寫回去就可以解決問題了。 改進(jìn)后的代碼:01void lcd_set_d
16、ot(unsigned char x, unsigned char y) 02 03 unsigned char x_byet, x_bit; /在橫坐標(biāo)的哪一個字節(jié),哪一個位 04 unsigned char y_ping, y_bit; /在縱坐標(biāo)的哪一屏,哪一行05 unsigned char tmph, tmpl; /
17、/定義兩個臨時變量,用于存放讀出來的數(shù)據(jù) 06 x &= 0x7F; /不太理解,不要行嗎?、?、?07 y &= 0x3F; 08 x_byte = x / 16; /算出它在哪一個字節(jié)(地址),注意一個地址是16位的10 x_bit = x&0x0F;
18、60; /算出它在哪一個位 11 Y_ping = y /32; /確定它在上半屏還是下半屏, 0:上半屏 1:下半屏 14 y_bit = y&0x3F;
19、0; /y_bit確定它是在第幾行 15 lcd_write_cmd(EXTEND_SET); /擴(kuò)展指令集 16 lcd_write_cmd(DRAW_OFF);
20、0; /繪圖顯示關(guān)閉 17 lcd_write_cmd(0x80 + y_bit); /先寫垂直地址(最高位必須為1) 19 lcd_write_cmd(0x80 + x_byte + 8 * y_ping); /水平坐標(biāo), 下半屏的水平坐標(biāo)起始地址為0x88 , (+8*y_byte)就是用來確定在上半屏還是下半屏23 lcd_read_data()
21、; /先空讀一次??這樣做對嗎? 24 tmph = lcd_read_data(); /讀高位 25 tmpl = lcd_read_data(); /讀低位26 lcd_write_cmd(0x80 + y_bit); &
22、#160; /讀操作會改變AC,所以重新設(shè)置一次 27 lcd_write_cmd(0x80 + x_byte + 8 * y_ping); 28 if (x_bit < 8)
23、/如果x_bit位數(shù)小于8 29 30 lcd_write_data(tmph | (0x01 << (7 - x_bit); /寫高字節(jié)。因?yàn)樽鴺?biāo)是從左向右的,GDRAM高位在左,底位在右 32 lcd_write_data(tmpl);
24、160; /原低位數(shù)據(jù)送回 33 34 else35 36 lcd_write_data(tmph);
25、; /原高位數(shù)據(jù)送回 37 lcd_write_data(tmpl | (0x01 << (15 - x_bit); 38 39 lcd_write_cmd(DRAW_ON); /打開繪圖顯示 40 lcd_write_cmd(BASIC_SET); /回到基本指令集,畢竟ST7920是以字符
26、為主的 41 return ; 42畫點(diǎn)函數(shù)到此就完成了,剩下的事情就是對函數(shù)的優(yōu)化了。例如對入口參數(shù)的檢查,對乘除法的優(yōu)化等等。12864(繪圖顯示)畫完一屏重畫會出現(xiàn)花屏現(xiàn)象,解決辦法1.花屏原因:帶中文字庫的LCD,使用圖形模式時,應(yīng)對所有GDRAM寫0x00才算清屏,清屏命令是對使用自帶字庫顯示時用的,對于畫圖不適用。2.GDRAM清屏程序:void LCD12864_DisplayCLR() uchar i, j, k ; LCD12864_IfBusy();/忙標(biāo)檢測LCD12864_WriteRom(0x34);/打開擴(kuò)展指令集,8位數(shù)據(jù)傳輸lcd_writ
27、e_cmd(DRAW_OFF); /繪圖顯示關(guān)閉 for( i = 0 ; i < 2 ; i+ )/分上下兩屏寫 for( j = 0 ; j < 32 ; j+ ) LCD12864_IfBusy
28、(); LCD12864_WriteRom( 0x80 + j ) ;/寫Y坐標(biāo) Delay_50us(1); if( i = 0 )
29、0; /寫X坐標(biāo) LCD12864_WriteRom( 0x80 ) ; Delay_50us(1);
30、160; else /寫下半屏 LCD12864_WriteRom( 0x88 ) ;
31、60; Delay_50us(1); for( k = 0 ; k < 16 ; k+ ) /寫一整行數(shù)據(jù)
32、160; LCD12864_IfBusy(); LCD12864_WriteData(0x00);/寫高字節(jié) LCD12864_WriteData(0x00);/寫低字節(jié)
33、0; Delay_50us(1); LCD12864_WriteRom(0x36);/打開擴(kuò)展指令集,繪圖顯示開 LCD12864_WriteRom( 0x30 ) ;/關(guān)閉擴(kuò)展指令集如何在GDRAM寫字!-用取模軟件就行了,這里只是簡單的說說方法! 從“壁畫”記事到“甲骨文”- 在GDRAM中寫字就可把字當(dāng)作圖形顯示!四、關(guān)于CGRAM的使用:CGRAM為使用者提供圖像定義(造字)功能,可以提供四組16*16點(diǎn)的自定義圖像空間,注意:網(wǎng)上說ST7920芯片同屏幕不能顯示4個以上自定義漢字(用CGRAM)。顯示CGRAM字型:將16位元資料寫入DDRAM中,一共有0000H,0002H,0004H,0006H四種編碼下載 (23.54 KB)2010-12-1 12:05下載 (21.55 KB)2010-12
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠家銷售廠房合同范本
- 供用電合同范本高壓
- 東城區(qū)恒溫配送合同范本
- 代建租賃住房合同范本
- 單方贈與協(xié)議合同范本
- 華為碎屏險合同范本
- 廠區(qū)工地勞務(wù)合同范本
- 2025重慶市安全員《B證》考試題庫及答案
- 2025河南省建筑安全員-A證考試題庫附答案
- 2025福建省安全員-B證考試題庫附答案
- 《模具制造流程》課件
- 2025年01月2025廣東深圳市何香凝美術(shù)館公開招聘應(yīng)屆高校畢業(yè)生2人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 園林聘用勞動合同
- 2025年北京電子科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 300畝文冠果樹栽培基地建設(shè)項目可行性研究報告
- 2025年菏澤職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025年江西生物科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年常考版參考題庫含答案解析
- 2025年山東力明科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年常考版參考題庫含答案解析
- 2025年上海浦東新區(qū)高三一模高考英語試卷試題(含答案詳解)
- 2025年度企業(yè)安全生產(chǎn)與環(huán)保管理服務(wù)協(xié)議范本3篇
- 2025-2030年中國巧克力產(chǎn)品市場需求狀況及發(fā)展趨勢分析報告
評論
0/150
提交評論