www.pudn.com > 16021CM.rar > Z1602.c


/*=================================================================== 
 
			KS0070(44780) 16x2 字符液晶屏驱动演示程序         晓奇 
===================================================================== 
连接线图:	LCM-------51 	LCM-------51 	LCM--------51 
        	DB0-----P0.0 	DB4-----P0.4 	RS-------P2.0 
        	DB1-----P0.1 	DB5-----P0.5 	RW-------P2.1 
        	DB2-----P0.2 	DB6-----P0.6 	E--------P2.7 
        	DB3-----P0.3 	DB7-----P0.7 	VLCD接1K2电阻到GND 
 
[注]:AT89C51的晶振频率为12MHz 
====================================================================*/ 
 
#include  
#include 
 
//变量类型标识的宏定义,大家都喜欢这么做 
#define	Uchar unsigned char 
#define Uint unsigned int 
 
// 控制引脚定义,不同的连接必须修改的部分 
sbit	RS	= P2^0; 
sbit	RW	= P2^1; 
sbit	Elcm	= P2^7; 
#define DataPort P0				// 数据端口 
 
#define Busy	0x80 
 
 
code char exampl[]="For an example.     - By xiaoqi\n"; 
 
void Delay400Ms(void); 
void Delay5Ms(void); 
void WaitForEnable( void ); 
void LcdWriteData( char dataW ); 
void LcdWriteCommand( Uchar CMD,Uchar AttribC ); 
void LcdReset( void ); 
void Display( Uchar dd ); 
void DispOneChar(Uchar x,Uchar y,Uchar Wdata); 
void ePutstr(Uchar x,Uchar y, Uchar code *ptr); 
 
//测试主程序 
void main(void) 
{ 
	Uchar temp; 
	 
	Delay400Ms(); 
 
	LcdReset(); 
	temp = 32; 
	ePutstr(0,0,exampl);		// 上面一行显示一个预定字符串 
 
	Delay400Ms(); 
	Delay400Ms(); 
	Delay400Ms(); 
	Delay400Ms(); 
	Delay400Ms(); 
	Delay400Ms(); 
	Delay400Ms(); 
	Delay400Ms(); 
 
	while(1) 
	{ 
		temp &= 0x7f;			// 只显示ASCII字符 
		if (temp<32)temp=32;	// 屏蔽控制字符,不予显示 
		Display( temp++ ); 
		Delay400Ms(); 
	} 
} 
 
/*======================================================= 
 显示字符串 
=======================================================*/ 
void ePutstr(Uchar x,Uchar y, Uchar code *ptr) { 
Uchar i,l=0; 
	while (ptr[l] >31){l++;}; 
	for (i=0;i