#define Lcm P1 sbit p_csl=P2^4; sbit p_csr=P2^3; sbit p_di=P2^2; sbit p_rw=P2^1; sbit p_e=P2^0; sbit p_rst=P2^7; void delay(unsigned int k) { unsigned int i; for(;k>0;k--) for(i=0;i<124;i++); } //Lcm忙判斷 void lcd_busy(void) { p_di=0; p_rw=1; /*Lcm=0xff; while(1) { p_e=1; if(Lcm<0x80) break; p_e=0; } p_e=0; */ } //寫指令到Lcm void wcode(unsigned char c,unsigned char csl,unsigned char csr) { p_csl=csl; p_csr=csr; lcd_busy(); p_di=0; p_rw=0; Lcm=c;//將變量C賦予Lcm p_e=1; p_e=0; } //寫數據到Lcm子函數 void wdata(unsigned char c,unsigned char csl,unsigned char csr) { p_csl=csl; p_csr=csr; lcd_busy(); p_di=1; p_rw=0; //寫 Lcm=c; //將變量C賦予Lcm p_e=1; //下降沿 p_e=0; } //設定起始行 void set_startline(unsigned char i) { i=0xc0+i; wcode(i,1,1); } //定位X方向,Y方向 void set_xy(unsigned char x,unsigned char y) { x=x+0x40; y=y+0xb8; wcode(x,1,1); wcode(y,1,1); } //屏幕開啟、關閉 void dison_off(unsigned char o) { o=o+0x3e; //o為1為開,為0是關 wcode(o,1,1); } //復位子函數 void reset() { p_rst=0; delay(20); p_rst=1; delay(20); } //Lcm初始化 void lcd_init(void) { unsigned char x,y; reset(); dison_off(0); for(y=0;y<8;y++) { for(x=0;x<128;x++) lw(x,y,0); } dison_off(1); set_startline(0); } //寫數據到Lcm void lw(unsigned char x,unsigned char y,unsigned char dd) //dd代碼 { if(x>=64) { set_xy(x-64,y); wdata(dd,0,1); } else { set_xy(x,y); wdata(dd,1,0); } } /*=============================================================================================== 功能:顯示漢字函數 說明:1. xx是字顯示的列數,共8列 2.yy顯示的頁(共8頁,只給四列就行),只要給一個頁的地址與yy相鄰的下一頁就會自動顯示 3.n是要顯示第幾個字 4.縱向取模下高位,數據排列:從上到下從左到右 ================================================================================================*/ #include"HZ.H" void display_Hz(unsigned char xx,unsigned char yy,unsigned char g[2]) //xx是列,yy是頁 { unsigned char i,j,dx; for(j = 0;j < 3;j++) if ((GB16[j].Index[0]==g[0])&&(GB16[j].Index[1]==g[1])) //判斷第k個漢字的編碼是否與輸入漢字g[2]相等 { for(i=0;i<16;i++) {dx=GB16[j].Msk[2*i]; //2*i為選擇偶數行,因其為列掃描 lw(xx+i,yy,dx); dx = GB16[j].Msk[(2*i+1)]; //(2*i+1)為選擇奇數行,因其為列掃描 lw(xx+i,yy+1,dx); } } } /*============================================================================================= 功能:顯示數字或英語函數 說明:1. xx是字顯示的列數,共16列 2.yy顯示的頁(共8頁,只給四列就行行),只要給一個頁的地址與yy相鄰的下一頁就會自動顯示 3.n是要顯示第幾個字 4.縱向取模下高位,數據排列:從上到下從左到右 ===============================================================================================*/ #include"ASCII.H" void display_Ez(unsigned char xx,unsigned char yy,unsigned char Ascii_Char) //顯示數字或英語 { unsigned char i,dx; for(i=0;i<16;i++) { dx=Font8x16[(Ascii_Char-0x20)*16+i]; //提取c字符的第i個字節以,c減去0x20是由于Ascii碼庫中的0~1f被去掉 if(i<8) lw(xx+i,yy,dx); else lw(xx+i-8,yy+1,dx); } |