延长延时试一试,(附我的完整程序,已经通过调试)
我用的是P2口读写数据口,P3.0--P3.2连接RS,RW,E.也没有使用查忙,而使用延时足够长的时间来满足写指令和数据.
#include <reg52.h> #include "intrins.h"
#define nop _nop_() #define PtData P2 #define uint unsigned int #define uchar unsigned char sbit RS=P3^0; sbit RW=P3^1; sbit E=P3^2;
void WriteInstr(uint); void WriteData(uint); void Delay(uint);
main() { nop; P0=0;//调试时候用于观察,P0口共阳极LED亮 WriteInstr(0x01);//初始化 WriteInstr(0x02); WriteInstr(0x06); WriteInstr(0x0c); WriteInstr(0x38); WriteInstr(0x01); Delay(30000); P0^=0x01;//调试时候用于观察,P0.0口LED状态取反 while(1) { WriteInstr(0x81);//写第一行DDRAM WriteData(0x65); WriteData(0x6c); WriteData(0x65); WriteData(0x63); WriteData(0x6c); WriteData(0x69); WriteData(0x6b); WriteData(0x65);
WriteInstr(0xc1);//写第二行DDRAM WriteData(0x31); WriteData(0x36); WriteData(0x30); WriteData(0x32);
Delay(10000); P0^=0x02;//调试时候用于观察一次循环,P0.1口LED状态取反 } }
//---写指令 void WriteInstr(uint Temp) { Delay(10);//晶振为6M时,延时0.272ms RS=0; RW=0; E=0; nop; nop; nop; E=1; nop; PtData=Temp; nop; E=0; } //---写数据 void WriteData(uint Temp) { Delay(10); RS=1; RW=0; E=0; nop; nop; nop; E=1; nop; PtData=Temp; nop; E=0; }
//---延时 void Delay(uint N) {uint i; for(i=0;i<N;i++){} }
|
|