No.101786 作者:哈佛 邮件:jola2002@163.com ID:29699 登陆:81次 QQ:5822022 -- MSN:jola2005912@hotmail.com 文章数:185篇 最后登陆IP:218.17.158.164 最后登陆:2014/12/16 13:54:00 注册:2005/1/6 19:18:03 财富:1280 发帖时间:2007/1/14 1:02:44 发贴者IP:59.40.117.179 标题:哈佛:1601液晶程序 摘要:No.1017861601液晶程序 /*======生产厂家:深圳市瑞特电子有限公司=====*/ /*======型号:1601===========================*/ /*======程序来源:晓奇=======================*/ /*======日期:2003.12.31=====================*/ /*======注意:后8个字符的地址是从80+40开始的=*/ /*=================================================================== 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=P3^0; sbit RW=P3^1; sbit Elcm=P3^2; #define DataPort P1 // 数据端口 #define Busy 0x80 code char exampl[]="xiao kai good"; 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); // 上面一行显示一个预定字符串 //ePutstr(0,1,exampl); DispOneChar(0,0,0x41); DispOneChar(0,1,0x41); 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 DispOneChar(x++,y,ptr[i]); if ( x == 16 ){ x = 0; y ^= 1; } } } /*======================================================= 演示一行连续字符串,配合上位程序演示移动字串 =======================================================*/ void Display( Uchar dd ) { Uchar i; for (i=0;i <16;i++) { DispOneChar(i,1,dd++); dd &= 0x7f; if (dd <32) dd=32; ......
>>返回讨论的主题
|