我最近在学习使用液晶显示,先选了比较简单的lcd1602.程序编译已经成功了,但烧进板子之后却没什么反应了,不知道怎么回事,请大家帮我看一下啊。程序如下:p0为8位数据口,<br />#include<reg52.h><br />#include<intrins.h><br />#define uchar unsigned char<br />#define uint unsigned int<br />sfr p0=0x80;<br />sfr p2=0xA0;<br />sbit EN1602=p2^5;<br />sbit RS1602=p2^7;<br />sbit RW1602=p2^6;<br /><br />char code str1[]="Welcom!";<br />void delay_10us(uchar n)<br />{do<br /> {_nop_();<br /> _nop_();<br /> _nop_();<br /> _nop_();<br /> _nop_();<br /> }while(--n);<br />}<br />void delay_ms(uint n) <br />{do<br /> {delay_10us(131);<br /> }while(--n);<br />}<br />bit lcd1602_test() /*忙测试<br />{uchar status;<br /> p0=0xff;<br /> RS1602=0;<br /> RW1602=1;<br /> EN1602=1;<br /> _nop_();<br /> status=p0;<br /> _nop_();<br /> EN1602=0;<br /> return status&0x80;<br />}<br />void lcd1602_wr_cmd(uchar cmd,bit test) /*写命令<br />{if(test) while(lcd1602_test());<br /> RS1602=0;<br /> RW1602=0;<br /> p0=cmd;<br /> EN1602=1;<br /> _nop_();<br /> EN1602=0;<br />}<br />void lcd1602_wr_dat(uchar dat) /*写数据<br />{while(lcd1602_test());<br /> RS1602=1;<br /> RW1602=0;<br /> p0=dat;<br /> EN1602=1;<br /> _nop_();<br /> EN1602=0;<br />}<br />void lcd1602_xy(uchar x,uchar y) /*定位<br />{uchar ramaddr=y*0x40+x;<br /> lcd1602_wr_cmd(ramaddr|0x80,1);<br />}<br /><br />void lcd1602_wr_str1(uchar *ptr,uchar n) /*写n个字符<br />{uchar i;<br />for(i=0;i<n;i++) lcd1602_wr_dat(*ptr++);<br />}<br /><br />void main()<br />{ EN1602=1;<br /> delay_ms(200);<br /> EN1602=0;<br /> lcd1602_wr_cmd(0x38,0); /*初始化<br /> delay_ms(5);<br /> lcd1602_wr_cmd(0x38,0);<br /> delay_ms(5);<br /> lcd1602_wr_cmd(0x38,0);<br /> delay_ms(5);<br /> lcd1602_wr_cmd(0x08,1);<br /> lcd1602_wr_cmd(0x01,1);<br /> lcd1602_wr_cmd(0x06,1);<br /> lcd1602_wr_cmd(0x0c,1);<br /> while(1)<br /> {lcd1602_wr_cmd(0x01,1);<br /> lcd1602_xy(0,0); /*从第一行第一列开始写welcom<br /> lcd1602_wr_str1(str1,8);<br />}<br /> }<br /> |
|