LCD12864程序_第1頁(yè)
LCD12864程序_第2頁(yè)
LCD12864程序_第3頁(yè)
LCD12864程序_第4頁(yè)
LCD12864程序_第5頁(yè)
已閱讀5頁(yè),還剩6頁(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、#define uint unsigned int#define uchar unsigned char/*= 變量宏定義=*/#define x1 0x80/第1頁(yè)的起始地址#define x2 0x88/第2頁(yè)的起始地址#define y 0x80/豎向的起始地址#define comm 0/選擇寫命令#define dat 1/選擇寫數(shù)據(jù)/*= 單片機(jī)管腳定義=*/sbit rs = P25; /H=data; L=comm;sbit rw = P26; /H=read; L=wr_lcd;sbit e = P27; /input enable;sbit psb= P24; /H=并口;

2、 L=串口;sbit rst= P23; /Reset Signal 低電平有效sbit busy=P07; /lcd busy bituchar code tab1="Dig-Oscillograph"/*= 子函數(shù)聲明=*/void Delay_12864(uchar num);void chk_busy(void);void wr_lcd (uchar dat_comm,uchar content);void init_lcd_12864(void);void clear_Wdisp(void);void disp(uchar c,uchar r,uchar data

3、1,uchar data2);void word_disp(uchar c,uchar r,uchar word1,uchar word2) ;void disp_frame(void);uchar rd_lcd(void);void Clear_DDRAM(void);void dot(uchar c,uchar r);void clear_Bdisp (void);void DrawLine_12864( uchar StartX, uchar StartY, uchar EndX, uchar EndY);void DrawLineY_12864( uchar xx, uchar Y0,

4、 uchar Y1);void DrawLineX_12864( uchar X0, uchar X1, uchar Y);void Con_Disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl);void str_disp (uchar code *str,uchar col);void SINword_disp (uchar code *str,uchar c,uchar num);/*= 延時(shí)函數(shù)=*/void Delay_12864(uchar num)while(num-);/*= 查忙函數(shù)=*/void

5、chk_busy (void) P0=0xff;/先將P0的BF忙標(biāo)志位置高,如果當(dāng)前狀態(tài)不忙則自動(dòng)清零,防止誤判。 rs=0; rw=1; /這兩條設(shè)置參見(jiàn)上文中寄存器讀寫狀態(tài) e =1; /使能LCD while(busy=1);/等待BF位不為1 e =0; /關(guān)閉LCD/*= 寫函數(shù)=*/void wr_lcd (uchar dat_comm,uchar content) chk_busy (); /查忙,不為忙時(shí)才執(zhí)行下面的語(yǔ)句 if(dat_comm) / dat_comm=1時(shí)表示寫數(shù)據(jù) rs=1; rw=0; /參見(jiàn)上文寄存器讀寫狀態(tài) else / dat_comm=0時(shí)表示寫

6、指令 rs=0; rw=0; /參見(jiàn)上文寄存器讀寫狀態(tài) P0=content;/將8位數(shù)據(jù)代碼或指令代碼先付給數(shù)據(jù)端口P0, /確保在有效地脈沖信號(hào)到來(lái)時(shí)數(shù)據(jù)已到位 e=1; /脈沖信號(hào) Delay_12864(10);/確保TPW的持續(xù)時(shí)間大于1500ns e=0;/*= 讀函數(shù)=*/uchar rd_lcd(void)uchar shuju;chk_busy();/查忙,不為忙時(shí)才執(zhí)行下面的語(yǔ)句rs=1; rw=1; /參見(jiàn)上文寄存器讀寫狀態(tài) e=1; /脈沖信號(hào)Delay_12864(10); /確保讀取的數(shù)據(jù)穩(wěn)定在P0口shuju=P0; /將P0口對(duì)應(yīng)的值賦予變量 e=0;retur

7、n(shuju); /*= 初始化函數(shù)=*/void init_lcd_12864 (void)rst=1;/rst=0時(shí)復(fù)位psb=1; /并行傳輸方式wr_lcd (comm,0x30); /進(jìn)入基本指令動(dòng)作,8位MPU wr_lcd (comm,0x01); /清DDRAMwr_lcd (comm,0x06); /光標(biāo)左移,AC自動(dòng)加一wr_lcd (comm,0x0c); /開(kāi)顯示,關(guān)游標(biāo)clear_Wdisp();/清除GDRAMdisp_frame();/str_disp(tab1,4);/*= DDRAM清除函數(shù)=*/*void Clear_DDRAM(void) wr_lcd

8、(comm,0x30);/確保在基本指令模式下 wr_lcd (comm,0x01);/清DDRAM/*= 全清屏函數(shù)=*/void clear_Wdisp (void) uchar i,j,k,x; x=x1; for(k=0;k<2;k+) for(j=0;j<32;j+) for(i=0;i<8;i+) wr_lcd (comm,0x34);/擴(kuò)展功能:繪圖顯示關(guān) wr_lcd (comm,y+j); wr_lcd (comm,x+i); wr_lcd (dat,0x00); wr_lcd (dat,0x00); x=x2; wr_lcd (comm,0x36);/擴(kuò)展

9、功能:繪圖顯示開(kāi)/*= 清波形顯示區(qū)函數(shù)=*/void clear_Bdisp (void) uchar i,j,x; x=0x80; for(j=1;j<32;j+)/第一行不清除,控制行 for(i=0;i<8;i+)/控制列 wr_lcd (comm,0x36);/擴(kuò)展功能:繪圖顯示開(kāi) 不必關(guān)顯示,可防止閃爍 wr_lcd (comm,y+j); wr_lcd (comm,x+i);if(j=12)|(j=24)wr_lcd (dat,0x11); wr_lcd (dat,0x11); else if(i%2=1)&&(i!=7)&&(j%4=

10、0) wr_lcd (dat,0x00); wr_lcd (dat,0x01);else wr_lcd (dat,0x00); wr_lcd (dat,0x00); x=x2; for(j=0;j<17;j+) for(i=0;i<8;i+) wr_lcd (comm,0x36);/擴(kuò)展功能:繪圖顯示關(guān) wr_lcd (comm,y+j); wr_lcd (comm,x+i);if(j=4)wr_lcd (dat,0x11); wr_lcd (dat,0x11);else if(i%2=1)&&(i!=7)&&(j%4=0) wr_lcd (dat,

11、0x00); wr_lcd (dat,0x01); else wr_lcd (dat,0x00); wr_lcd (dat,0x00); /wr_lcd (comm,0x36);/擴(kuò)展功能:繪圖顯示開(kāi)/*= 顯示點(diǎn)函數(shù)=*/void disp(uchar c,uchar r,uchar data1,uchar data2)wr_lcd (comm,0x34);/確保關(guān)閉繪圖模式wr_lcd (comm,r);/列地址wr_lcd (comm,c);/行地址wr_lcd (dat,data1);/在(x,y)處前八個(gè)點(diǎn)的數(shù)據(jù),將寫入GDRAMwr_lcd (dat,data2);/ 在(x,y)

12、處后八個(gè)點(diǎn)的數(shù)據(jù) wr_lcd (comm,0x36); /開(kāi)啟繪圖模式,即顯示GDRAM中的內(nèi)容/先X后Y/*= 顯示字符函數(shù)=*/void word_disp(uchar c,uchar r,uchar word1,uchar word2) wr_lcd (comm,0x30);/確保在基本指令模式,此模式下所寫的數(shù)據(jù)存在DDRAM中 wr_lcd (comm,r); /列地址wr_lcd (comm,c); /行地址,此處的行地址只能是0x80或0x90wr_lcd (dat,word1); / 以(x,y)為起點(diǎn)的8*16區(qū)域內(nèi)顯示一個(gè)字符,格式為'字符',如顯示a則寫

13、為'a'。wr_lcd (dat,word2); /接著前一個(gè)字在顯示一個(gè)字符,均寫入DDRAM/*= 顯示框架函數(shù)=*/void disp_frame(void)uchar i, col;wr_lcd (comm,0x34);/關(guān)閉繪圖顯示col=0x80;for(i=0;i<8;i+)disp(col+i,0x80,0xff,0xff);col=0x88;for(i=0;i<8;i+)disp(col+i,0x91,0xff,0xff);col=0x98;for(i=0;i<8;i+)disp(col+i,0x9f,0xff,0xff);wr_lcd (c

14、omm,0x36);/*= 單漢字顯示函數(shù)=*/*void SINword_disp (uchar code *str,uchar c,uchar num) uchar i; wr_lcd (comm,0x30);/確認(rèn)在基本指令模式 wr_lcd (comm,c);/列坐標(biāo) for (i=0;i<num*2;i+)/num 為顯示字的個(gè)數(shù) wr_lcd (dat,stri);/*= 單行字符串顯示函數(shù)=*/void str_disp (uchar code *str,uchar col) uchar i,row_numb; wr_lcd (comm,0x30); switch(col)

15、 case 1:row_numb=0x80;break;case 2:row_numb=0x90;break;case 3:row_numb=0x88;break;case 4:row_numb=0x98;break;default:row_numb=0x98; wr_lcd (comm,row_numb); for (i=0;i<16;i+) wr_lcd (dat,stri); /*= 打點(diǎn)函數(shù)=*/void dot(uchar c,uchar r ) /在任意位置畫點(diǎn) 輸入范圍c 0-127 ,r 0-63 uchar row,tier,tier_y,Gram_old_1,Gram

16、_old_2; /wr_lcd(comm,0x34); wr_lcd(comm,0x36); tier= c>>4;/16 tier_y=c&0x0f;/%16 if(r<32) row=r; else row=r-32; tier+=8; wr_lcd(comm,row+0x80);/寫行地址 wr_lcd(comm,tier+0x80);/寫列地址 rd_lcd(); /當(dāng)前地址讀,第一次虛讀 Gram_old_1=rd_lcd(); /連續(xù)讀兩次 Gram_old_2=rd_lcd(); wr_lcd(comm,row+0x80); /寫行地址 wr_lcd(c

17、omm,tier+0x80); /寫列地址 if(tier_y<8) wr_lcd(dat,Gram_old_1|(0x01<<(7-tier_y); wr_lcd(dat,Gram_old_2); else wr_lcd(dat,Gram_old_1); wr_lcd(dat,Gram_old_2|(0x01<<(15-tier_y); wr_lcd(comm,0x30); /*= 水平線函數(shù)=*/void DrawLineX_12864( uchar X0, uchar X1, uchar Y) uchar Temp ; if( X0 > X1 ) Te

18、mp = X1 ; X1 = X0 ; X0 = Temp ; for( ; X0 <= X1 ; X0+ ) dot(X0,Y) ; /*= 反白顯示函數(shù)說(shuō)明:在x0,y0處反白顯示,寬為x1,高為y1.=*/void Con_Disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl) uchar i,j; for(j=0;j<yl;j+) for(i=0;i<xl;i+) wr_lcd (comm,0x34); wr_lcd (comm,y0+j); wr_lcd (comm,x0+i); wr_l

19、cd (comm,0x30); wr_lcd (dat,data1); wr_lcd (dat,data2); wr_lcd (comm,0x36);/*= 垂直線函數(shù)=*/void DrawLineY_12864( uchar xx, uchar Y0, uchar Y1) uchar Temp ; if( Y0 > Y1 ) Temp = Y1 ; Y1 = Y0 ; Y0 = Temp ; for(; Y0 <= Y1 ; Y0+) dot( xx, Y0);/*= 任意線函數(shù)=*/void DrawLine_12864( uchar StartX, uchar StartY, uchar EndX, uchar EndY)int t,distance,delta_x,delta_y,xx=0,yy=0;char incx, incy ;delta

溫馨提示

  • 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)論