|
void clrscr(void) { unsigned char i; unsigned char page; for( page=0;page<2; page ++) { for(i=0;i<5;i++) ShowChar( page,i,' '); } }/////////////////////////////////////////////////////////////////////// /*------------------------------------------------------------------------------ 調(diào)用方式:void SetPage(unsigned char page0,unsigned char page1) 函數(shù)說(shuō)明:同時(shí)設(shè)置主從顯示頁(yè)為0-3頁(yè)。(內(nèi)函數(shù),私有,用戶不直接調(diào)用) ------------------------------------------------------------------------------*/ void SetPage(unsigned char page0,unsigned char page1) { OutMI(0xB8|page1); OutSI(0xB8|page0); } /*------------------------------------------------------------------------------ 調(diào)用方式:void SetAddress(unsigned char address0,unsigned char address1) 函數(shù)說(shuō)明:同時(shí)設(shè)置主從列地址為0-121。(內(nèi)函數(shù),私有,用戶不直接調(diào)用) -------------------------------------------------------------------------------*/ void SetAddress(unsigned char address0,unsigned char address1) { OutMI(address1&0x7F); OutSI(address0&0x7F); } /*------------------------------------------------------------------------------ 調(diào)用方式:void PutChar0(unsigned char ch) 函數(shù)說(shuō)明:在左頁(yè)當(dāng)前地址畫(huà)一個(gè)字節(jié)8個(gè)點(diǎn)。(內(nèi)函數(shù),私有,用戶不直接調(diào)用) -------------------------------------------------------------------------------*/ void PutChar0(unsigned char ch) { OutSD(ch); } /*------------------------------------------------------------------------------ 調(diào)用方式:void PutChar1(unsigned char ch) 函數(shù)說(shuō)明:在右頁(yè)當(dāng)前地址畫(huà)一個(gè)字節(jié)8個(gè)點(diǎn)。(內(nèi)函數(shù),私有,用戶不直接調(diào)用) -------------------------------------------------------------------------------*/ void PutChar1(unsigned char ch) { OutMD(ch); } /*------------------------------------------------------------------------------ 調(diào)用方式:void DrawBmp(unsigned char x,bit layer,unsigned char width,unsigned char *bmp) 函數(shù)說(shuō)明:畫(huà)一個(gè)圖,橫坐標(biāo)是x,layer表示上下層,width是圖形的寬,高都是16,bmp是 圖形指針 使用zimo21軟件,采用縱向取模得到bmp數(shù)據(jù)。 ------------------------------------------------------------------------------*/ void DrawBmp(unsigned char x0,bit layer,unsigned char width,unsigned char *bmp) { unsigned char x,address,i=0; //address表示顯存的物理地址 unsigned char page=0; bit window=0; //page表示上下兩頁(yè),window表示左右兩頁(yè) if (layer) page=2; for (x=x0;x<x0+width;x++) { if (x>62) {window=1;address=x%62;} else address=x; SetPage(page,page); SetAddress(address,address); if (window) { PutChar0(bmp[i]); } else { PutChar1(bmp[i]);// Master ,畫(huà)上層 } SetPage(page+1,page+1); SetAddress(address,address); if (window) { PutChar0(bmp[i+width]); } else { PutChar1(bmp[i+width]);//畫(huà)下層 } i++; } } void ClearScreen(void) { unsigned char i; unsigned char page; for (page=0;page<4;page++) { SetPage(page,page); SetAddress(0,0); for (i=0;i<62;i++) { PutChar1(0x0); PutChar0(0x0); } } } //顯示一行字符串(漢字,字母混排,一行16字節(jié)) //lin:行 //lineheadaddr: 此行漢字代碼區(qū)首地址 void ShowLine(unsigned char lin,unsigned char linehead[]) { unsigned char i; unsigned char byte; unsigned int hzcode; for( i=0; i<16; ) { byte=linehead[i]; if(byte < 0x80) //字母 { if(i>15) return; //!!編譯器有問(wèn)題,須強(qiáng)制退出 ShowChar(lin, i , byte); i=i+1; } else // byte >= 0x80(漢字) { if(i>15) return; //!!編譯器有問(wèn)題,須強(qiáng)制退出 byte=byte & 0x7f; //最高位置0,即:減去0x8000 hzcode=(unsigned int)byte<<8; //?? //高8位 hzcode=hzcode+linehead[i+1]; //加低8位,組合成整型數(shù)地址 ShowHZ( lin,i,hzcode); i=i+2; } } } //顯示一屏漢字 //pageheadaddr:此屏漢字代碼地址區(qū)首地址 void ShowPage(unsigned char pagehead[][16]) { unsigned char i; for(i=0;i<2;i++) ShowLine(i,pagehead[i]); //1行8個(gè)漢字,16字節(jié) }unsigned char ReadByte_1() { unsigned char dat; LCD12232_E2=0; //確 LCD12232_A0=1; LCD12232_RW=1; LCD12232_E1=1; _nop_(); _nop_(); LCD12232_DATA=0xff; dat=LCD12232_DATA; _nop_(); _nop_(); LCD12232_E1=0; _nop_(); _nop_(); return dat; }unsigned char ReadByte_2() { unsigned char dat; LCD12232_E1=0; //確 LCD12232_A0=1; LCD12232_RW=1; LCD12232_E2=1; _nop_(); _nop_(); LCD12232_DATA=0xff; dat=LCD12232_DATA; _nop_(); _nop_(); LCD12232_E2=0; _nop_(); _nop_(); return dat; } //反顯一個(gè)8*8字塊 //lin:行(0-3), column: 列(0-7) void ReverseShow88(unsigned char lin,unsigned char column) { unsigned char i,j,dat[8]; if( column > 14) return;</P><P> if( column < 7 ) //8*8點(diǎn)陣都在左屏(Master) { OutMI( 0xB8 | lin); //設(shè)置顯示行 OutMI( column*8 ); //設(shè)置顯示列 dat[i]=~ReadByte_1(); for(i=0;i<8;i++) { dat[i]=~ReadByte_1(); } OutMI( 0xB8 | lin); //設(shè)置顯示行 OutMI( column*8 ); //設(shè)置顯示列 for(i=0; i<8 ; i++ ) { OutMD(dat[i]); } } if( column == 7) //8*8點(diǎn)陣,前6個(gè)在左屏(Master),后兩個(gè)在右屏(Slave) { OutMI( 0xB8 | lin); //設(shè)置顯示行 OutMI( column*8 ); //左屏 dat[i]=~ReadByte_1(); for(i=0;i<6;i++) { dat[i]=~ReadByte_1(); } OutMI( 0xB8 | lin); //設(shè)置顯示行 OutMI( column*8 ); //左屏 for(i=0; i<6 ; i++ ) { OutMD(dat[i]); } OutSI( 0xB8 | lin); //設(shè)置顯示行 OutSI( 0 ); //右屏 dat[i]=~ReadByte_2(); for(i=0;i<2;i++) { dat[i]=~ReadByte_2(); } OutSI( 0xB8 | lin); //設(shè)置顯示行 OutSI( 0 ); //右屏 for(i=0; i<2 ; i++ ) { OutSD(dat[i]); } } if( column > 7) //8*8點(diǎn)陣都在右屏(Slave) { OutSI( 0xB8 | lin); //設(shè)置顯示行 OutSI( column*8-62 ); dat[i]=~ReadByte_2(); for(i=0;i<8;i++) { dat[i]=~ReadByte_2(); } OutSI( 0xB8 | lin); //設(shè)置顯示行 OutSI( column*8-62 ); for(i=0; i<8 ; i++ ) { OutSD(dat[i]); } } } //反顯一行 ReverseShow(unsigned char lin) { unsigned char i; lin=lin*2; for(i=0;i<15;i++) { ReverseShow88(lin,i); ReverseShow88(lin+1,i); } } //反顯一個(gè)漢字 ReverseShowHZ(unsigned char lin,unsigned char col) { lin=lin*2; ReverseShow88(lin,col); ReverseShow88(lin+1,col); ReverseShow88(lin,col+1); ReverseShow88(lin+1,col+1); } //反顯一個(gè)字符 ReverseShowChar(unsigned char lin,unsigned char col) { lin=lin*2; ReverseShow88(lin,col); ReverseShow88(lin+1,col); }</P><P>void Reset() //液晶復(fù)位 { _nop_(); _nop_();}
|