www.pudn.com > LCD_drivers_for240160.rar > 240160.c
//#pragma src #include#include #include #include char xdata LcmCmdPort _at_ 0x0101; // P2.7 --- CS P2.0 --- A0 char xdata LcmWdataPort _at_ 0x0000; sbit Key=P3^4; sbit BackLight=P3^5; #define Uchar unsigned char #define Uint unsigned int #define LcmRdataPort LcmCmdPort #define LcmStatusPort LcmWdataPort #define SystemSet 0x40 Uchar code ParaSysTable8[]= { 0x30,0x87,0x07,0x1d,0x3c,0xa0,0x1e,0x00 // P1-P8参数 }; #define Scroll 0x44 #define BasePart1 0x00 #define BasePart2 0x40 #define BasePart3 0x80 #define BasePart4 0x00 Uchar code ParaScrTableA[]= { 0x00,BasePart1,0xa0,0x00,BasePart2,0xa0,0x00,BasePart3,0x00,BasePart4 }; #define SleepIn 0x53 #define DispOn 0x59 #define DispOff 0x58 #define Ovlay 0x5b #define HdotScr 0x5a #define CsrForm 0x5d #define CgramAdr 0x5c #define CsrDirR 0x4c #define CsrDirL 0x4d #define CsrDirU 0x4e #define CsrDirD 0x4f #define CsrW 0x46 #define CsrR 0x47 #define mWrite 0x42 #define mRead 0x43 bit wAttrib ; #define Busy 0x40 #define paraP9 0x1e Uchar code bmp1[]; Uchar code NumberTable[]; Uchar code HZTable[]; void LcmInition( void ); void WriteData( Uchar dataW ); Uchar ReadData( void ); void WriteCommand( Uchar CommandByte ); void Delay( Uint ); void LcmClear( void ); void Displayonebmp(Uchar *puts); void Reverseonebmp (void); void DisplayDots(Uchar x,Uchar n); void DelayKey(unsigned int Second , unsigned int MS100); void Locatexy(Uchar x,Uchar y); void PutChar(Uchar col,Uchar row,Uchar number); void PutHZ(Uchar col,Uchar row,Uchar HZcode); void DisplayNumber( void ); void Main( void ) { Uchar i,j,HZ; Delay(30); LcmInition(); WriteCommand(DispOff); LcmClear(); WriteCommand(DispOn); WriteCommand( Ovlay ); WriteData( 0x0C ); while(1) { BackLight=1; Displayonebmp(bmp1); DelayKey(1,5); Reverseonebmp(); DelayKey(1,5); LcmClear(); for(i=0;i<240;i=i+20) { HZ = 0; for(j=0;j<30;j=j+2) { PutHZ(j,i,HZ++); } } DelayKey(1,5); Reverseonebmp(); DelayKey(1,5); DisplayDots(0x55,1); DelayKey(1,5); DisplayDots(0xaa,1); BackLight=0; DelayKey(1,5); BackLight=1; DisplayDots(0x33,2); DelayKey(1,5); DisplayDots(0xcc,2); DelayKey(1,5); DisplayDots(0xF0,4); DelayKey(1,5); DisplayDots(0x0F,4); DelayKey(1,5); LcmClear(); while(1) { DisplayNumber(); // DelayKey(1,5); } } } void Displayonebmp (Uchar *puts) { Uint X; Uchar i,j; X=0; WriteCommand( CsrDirR ); WriteCommand( CsrW ); WriteData(0); WriteData(0); WriteCommand( mWrite ); for(i=0;i<160;i++) { for(j=0;j<30;j++) { WriteData(puts[X]); X++; } } } void Reverseonebmp (void) { Uchar i,j,csrl=0,csrh=0,Y; Uint X; WriteCommand( CsrDirR ); WriteCommand( CsrW ); WriteData(0); WriteData(0); for(i=0;i<160;i++) { for(j=0;j<30;j++) { WriteCommand(mRead); Y=~ReadData(); WriteCommand( CsrW );//这里也可以不用后面计算得来当前指针坐标 WriteData(csrl); //而像前面Displayonebmp2()子函数里面的读取当前指针坐标,然后修正。 WriteData(csrh); WriteCommand(mWrite); WriteData(Y); X=csrh*256+csrl; ++X; csrl= X & 0xff; csrh= X / 256; } } } void DisplayDots(Uchar x,Uchar n) { Uchar i,j; WriteCommand(CsrDirR); WriteCommand(CsrW); WriteData(0); WriteData(0); WriteCommand(mWrite); for(i=0;i<160/n;i++) { for(j=0;j<30*n;j++) WriteData(x); x=~x; } } //入口参数: 横坐标col 纵坐标row 汉字位置HZcode //出口参数: 无 (HZcode表示汉字在字模表中的位置) void PutHZ(Uchar col,Uchar row,Uchar HZcode) { Uchar i,j; Uint x; x = 0x20*HZcode; WriteCommand( CsrDirR ); for(i=0;i<16;i++) { Locatexy(col,row); WriteCommand(mWrite); for(j=0;j<2;j++) { WriteData(HZTable[x]); x++; } row++; } } void PutChar(Uchar col,Uchar row,Uchar number) { Uchar i,j; Uint x; x=number*54; WriteCommand(CsrDirR); for(i=0;i<27;i++) { Locatexy(col,row); WriteCommand(mWrite); for(j=0;j<2;j++) { WriteData(NumberTable[x]); x++; } row++; } } void DisplayNumber( void ) { Uchar x,y,number; x=y=number=0; for(number=0;number<10;number++) { for(x=0;x<6;x++) { for(y=0;y<4;y++) { PutChar((x*5),(y*40),number); // Delay(10); } } // Delay(100); } } void Delay(Uint MS) { Uchar us,usn; while(MS!=0) { usn = 2; while(usn!=0) { us=0xf0; while (us!=0){us--;}; usn--; } MS--; } } void DelayKey(unsigned int Second , unsigned int MS100) { //输入精确到0.1S,是用, unsigned int i; for(i=0;i