单片机是用飞利浦的P89V51RD2,程序如下,根据“电子驿站”的代码改编而成,原连接为http://www.ourmpu.com/mcujx/lcdxx08.htm,程序在12MHz时显示正常,而22.1184,30,40MHz就显示乱码,20MHz时好时坏。 芯片资料:http://www.21icsearch.com/searchpdf/default.asp?admin= #include<reg51f.h> #include<intrins.h>//_nop_()
#define DATA P0 sbit RS=P2^7; sbit RW=P2^6; //定义引脚 sbit E=P2^5;
void ReadStatus(void); void WriteCommand(void);
void main() { ReadStatus();//判断液晶忙状态? WriteCommand();
DATA=0x01;//清屏 WriteCommand();
DATA=0x38;// WriteCommand();
DATA=0x0F; WriteCommand();
DATA=0x06; WriteCommand(); /**************************************************************/
DATA=0x80;//第一行第一个字符地址 WriteCommand(); DATA=0x41;//字母A的代码 RS=1; RW=0; E=0; ReadStatus();//判断液晶忙状态? E=1; /**************************************************************/ while(1); }
//写指令:RS=0,RW=0,E=1,D0~D7=指令代码 void WriteCommand(void) //写入控制命令的子程序 { RS=0; RW=0; E=0; E=0;//NOP ReadStatus(); E=1; }
//检测LCD忙状态; 读状态:RS=0,RW=1,E=1,输出:D0~D7=状态字 void ReadStatus(void)//判断液晶是否忙得子程序 { do{ DATA=0xFF; RS=0; RW=1; E=0; E=0;//NOP E=1; } while(DATA&0x80);//为高电平就循环等待 }
相关链接:http://www.ourmpu.com/mcujx/lcdxx08.htm |