#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); } |