#include<reg51.h><br />#include<intrins.h><br />#include<absacc.h><br /><br />#define BEEP XBYTE[0x8000]<br />#define uchar unsigned char<br />#define LCD_Data P1<br />#define Busy 0X80<br /><br />sbit RS=P2^2;<br />sbit RW=P2^1;<br />sbit E=P2^0;<br /><br /><br /><br />uchar ReadStatusLCM(void);<br />void delayus(uchar i){ //延时us级<br /> while(--i);<br />}<br /><br />//5ms延时<br />void Delay5ms(void)<br /> {<br /> unsigned int TempCyc = 5552;<br /> while(TempCyc--);<br /> }<br /><br />void busy()<br />{ LCD_Data=0XFF;<br /> RS=0;<br /> RW=1;<br /> E=1;<br /> while(LCD_Data&0X80){};<br /> E=0;<br /> }<br /><br /><br />void write_cmd(uchar cmd,uchar busyflag)<br /><br />{ if(busyflag) busy();<br /> RS=0;<br /> RW=0;<br /> LCD_Data=cmd;<br /> E=1;<br /> E=1;<br /> E=0;<br /> }<br /><br />void write_dat(uchar dat)<br />{ <br /> busy();<br /> LCD_Data=dat;<br /> RS=1;<br /> RW=0;<br /> E=1;<br /> E=1;<br /> E=0;<br /> }<br /><br /> void inti_LCD()<br /> { write_cmd(0x01,1);<br /> write_cmd(0X3c,1); //显示模式设置 16 X 2显示,8<br /> <br /> write_cmd(0X0c,1);<br /> }<br /><br /> void displaystring(uchar y,uchar x,uchar *s)<br /> { if(y==0) x=x|0X80;<br /> if(y==1) x=x|0X0C0;<br /> write_cmd(x,1);<br /> <br /> while(*s)<br /> { <br /> write_dat(*s);<br /> s++;<br /> }<br /> }<br /><br />void main(void)<br /><br />{ displaystring(0x01,0x01,"LCD1602");<br /> while(1);<br />}<br /><br />其中主程序让我改来改去,不知道有没有错!<br />那些子程序都是没问题,你拿去调用!
|