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