1602液晶顯示漢字程序_第1頁(yè)
1602液晶顯示漢字程序_第2頁(yè)
1602液晶顯示漢字程序_第3頁(yè)
1602液晶顯示漢字程序_第4頁(yè)
1602液晶顯示漢字程序_第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、1602 液晶顯示漢字程序利用 1602 顯示漢字也不是新鮮的內(nèi)容,今天不想頹廢了。只是需要自己事先定義一下 漢字的字模,就是顯示出來(lái)的漢子字體結(jié)構(gòu)。要定義字模就需要知道 1602 的 CG RAM 地址和顯示字符的地址 DD RAM圖 1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 第一行第一個(gè)字符的地址是 ( 0x80) ,后面的字符地址以此類推 第二行第一個(gè)字符的地

2、址為 ( 0x80 + 0x40) ,需要在第一行的基地址后面加上一個(gè)偏移 量 0x40 ,后面的地址在此基址上再依次加一。void delay(unsigned int time_i) int i;for (;tim0;tim-)for (i=0;i10;i+); void command_out (char out_data) RW=0;RS=0;EN=1;DB=out_data;EN=0;delay(10);void OUTD(char out_data)RS=1;RW=0;EN=1;DB= out_data;EN=0;delay(10);OUTI() 是寫(xiě)入指令的函數(shù), OUTD()

3、是寫(xiě)入數(shù)據(jù)的函數(shù)。 如: 左上角第一個(gè) 5*7 的顯示數(shù)據(jù)為:0x00,0x01,0x81,0x12,0x24,0x41,0x81,0x10藍(lán)色區(qū)域的相應(yīng)位為 1這樣就可以寫(xiě)出全部 4 個(gè) 5*7 點(diǎn)陣的顯示數(shù)據(jù)了,把它封裝在一個(gè)數(shù)組中,如數(shù)組, hanzi=OxOO,OxO1,Ox81,Ox12,Ox24,Ox41,Ox81,Ox1O, 之后利用命令:OUTI(0X40); for (i=0;i64;i+) OUTD(neui); 將這個(gè)數(shù)組中的數(shù)據(jù)賦值到 1602 內(nèi)部 CGRAM 中。完成后,再設(shè)置數(shù)據(jù)在 1602 上的 顯示地址,根據(jù)圖 1 的結(jié)構(gòu),設(shè)置好位置,如在第一行第一個(gè)字符和第

4、二個(gè)字符以及第二 行 第一個(gè)字符和第二個(gè)字符處顯示: Command_out (0x80+0x00);for (i=0;i4;i+) data_out (i); Command_out(0x80+0x40);for (i=4;i8;i+) data_out(i); command_out() 的作用是設(shè)置顯示的起始地址,data_out() 的作用是將 hanzi 數(shù)組中的 16 1 行第 1 個(gè)字 2 行的兩個(gè)字進(jìn)制數(shù)據(jù)發(fā)送出去,每一個(gè)1 6進(jìn)制數(shù)字對(duì)應(yīng)之 5*7 點(diǎn)陣上的每一行內(nèi)容。第符需要 8 個(gè) 16 進(jìn)制數(shù)據(jù),第 1 行第 2 個(gè)字符處也需要 816 進(jìn)制數(shù)據(jù)。還有第 符點(diǎn)陣,這樣顯

5、示一個(gè)漢字需要 32 個(gè) 16進(jìn)制數(shù)據(jù)。 下面列舉一個(gè)實(shí)例( proteus 仿真通過(guò)) /*/硬件連接:1602VDD接5V, VO接地,BL1接5V, BL2接地,8根數(shù)據(jù)線接 E 分別接 P2.0、P2.1、P.4 口/*#include #include #define Busy 0x80 / 用于檢測(cè)#define LCM_Data P0sbit LCM_RS=PiO;sbit LCM_RW= PSI;sbit LCM_E=P2A4;int i,j;/自定義字符列表/=LCM 狀態(tài)字中的 Busy 標(biāo)識(shí)/寄存器選擇/讀/寫(xiě)控制/讀/寫(xiě)使能PO 口,RS RW/年unsigned ch

6、ar characterO8 = OxO8,OxOf,Ox12,OxOf,OxOa,Ox1f,OxO2,OxO2, character18 = OxOf,OxO9,OxOf,OxO9,OxOf,OxO9,OxOb,Ox11, / 月character28 = 0x0f,0x09,0x09,0x09,0x0f,0x09,0x09,0x0f, / 日 characterN8 = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; / 日 /= /=/延時(shí)程序/= void Delay5Ms(void)unsigned long int TempCyc = 5552;

7、while(TempCyc-);void Delay400Ms(void)unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-)TempCycB=7269; while(TempCycB-); /= /讀寫(xiě)子程序/= /讀數(shù)據(jù)unsigned char ReadDataLCM(void)LCM_RS = 1;LCM_RW = 1;LCM_E = 1;LCM_E = 0; for(i=0;i100;i+);LCM_E = 1;return(LCM_Data);/讀狀態(tài)unsigned char ReadStatusL

8、CM(void) LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 1;LCM_E = 0;for(i=0;i100;i+);LCM_E = 1;/while (LCM_Data & Busy); / 檢測(cè)忙信號(hào) return(LCM_Data);/寫(xiě)數(shù)據(jù)void WriteDataLCM(unsigned char WDLCM)ReadStatusLCM(); / 檢測(cè)忙 LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0; LCM_E = 1;LCM_E = 0; / 若晶振速度太高可以在這后加小的延時(shí) for(i=0;i

9、100;i+);/ 延時(shí)LCM_E = 1;/寫(xiě)指令為 0 時(shí)忽略忙檢測(cè)void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC if (BuysC) ReadStatusLCM(); / 根據(jù)需要檢測(cè)忙 LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 1;LCM_E = 0; for(i=0;i100;i+);LCM_E = 1; /= /初始化子程序/= void LCMInit(void) /LCM 初始化三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)LCM_Data = 0; WriteCommandLC

10、M(0x38,0); /Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);顯示模式設(shè)置 ,開(kāi)始要求每次檢測(cè)忙信號(hào)Delay5Ms(); WriteCommandLCM(0x38,1); /關(guān)閉顯示Delay5Ms(); WriteCommandLCM(0x08,1); /Delay5Ms();WriteCommandLCM(0x01,1); /Delay5Ms();WriteCommandLCM(0x06,1); /Delay5Ms();WriteCommandLCM(0x0c,1); /Delay5

11、Ms();清屏顯示光標(biāo)移動(dòng)設(shè)置顯示開(kāi)及光標(biāo)設(shè)置/= /按指定位置顯示一個(gè)字符/= void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)Y &= 0x1;X &= 0xF; / 限制 X 不能大于 15, Y 不能大于 1if (Y) X |= 0x40; / 當(dāng)要顯示第二行時(shí)地址碼 +0x40;X |= 0x80; / 算出指令碼WriteCommandLCM(X, 0); / 這里不檢測(cè)忙信號(hào),發(fā)送地址碼WriteDataLCM(DData); /= /按指定位置顯示一串字符/void Displ

12、ayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)/說(shuō)明 : x(0-15):x 參數(shù) y(0-1):y 參數(shù) DData( 字符串 ):要顯示的內(nèi)容 ( 英文、數(shù)字、符號(hào) ) /= void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength,j;ListLength = strlen(DData);Y &= 0x1;X &= 0xF; / 限制 X

13、不能大于 15, Y 不能大于 1if (X = 0xF) /X 坐標(biāo)應(yīng)小于 0xF for(j=0;jListLength;j+)DisplayOneChar(X, Y, DDataj); / 顯示單個(gè)字符 X+;/=/顯示自定義字符/void mychar(char xx,char yy,unsigned char *character,unsigned char saveto)/說(shuō)明 :xx(0-15): 為 x 參數(shù) .yy(0-1):y 參數(shù) .character: 要顯示的字符的列表地址, 在程序前面有定義saveto(1-7)為字符保存的 RAM,每屏最多顯示 7個(gè)自定義字符/(

14、0x00-0x0h 是自定義字符 ) /=void mychar(char xx,char yy,unsigned char *character,unsigned char saveto) unsigned char add = (saveto3) | 0x40; unsigned char t;/臨時(shí)變量,/* t=*(character+0);WriteCommandLCM(add, 0);WriteDataLCM(t); t=*(character+1);WriteCommandLCM(add+1, 0);WriteDataLCM(t); t=*(character+2);WriteC

15、ommandLCM(add+2, 0);WriteDataLCM(t); t=*(character+3);WriteCommandLCM(add+3, 0);WriteDataLCM(t); t=*(character+4);WriteCommandLCM(add+4, 0);WriteDataLCM(t); t=*(character+5);WriteCommandLCM(add+5, 0);WriteDataLCM(t); t=*(character+6);WriteCommandLCM(add+6, 0);WriteDataLCM(t); t=*(character+7);WriteC

16、ommandLCM(add+7, 0);WriteDataLCM(t);*/for(i = 0;i8;i+) WriteCommandLCM(add+i, 0); WriteDataLCM(*(character+i); DisplayOneChar(xx,yy,saveto); /=每一行的值/第 1 行/第 2 行/第 3 行/第 4 行/第 5 行/第 6 行/第 7 行/第 8 行/顯示字符/主函數(shù)/= main() Delay400Ms();LCMInit();/1602 初始化Delay400Ms(); while(1) DisplayListChar(0,0,This is ListChar); DisplayListChar(0,1,!); for(j=0;j30;j+)for(i=0;i30000;i+); WriteCommandLCM(0x01,1); / 清屏 Delay5Ms();DisplayListChar(0,0,This is OneChar:);DisplayOneChar(0,1,0x4f);DisplayOneChar(1,1,0x6e);DisplayOneChar(2,1,0x65);DisplayOneChar(3,1,0x21); for(

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論