| 
 
| <font color=#000000>执行写命令OK,</font>例如我W_cmd(0x85); 光标会跑到第一行第五列的位置并闪烁.<br />但是当我执行写数据指令把要显示的内容写入的时候,屏幕就什么也没有了.<br />我怀疑是W_data();有问题,可是我试了把    LCD_DATA=lcddata;放在LCD_EN=1;前面,也不行,而且我看别人的demo程序时序也是这样的,实在找不出问题了.<br />以前没有搞过LCD,请高手帮忙看看,<br />/*-------------------------------------------------------------<br /><br />-------------------------------------------------------------*/<br />#include "REG52.H"<br />  <br />#define uchar unsigned char <br /><br /><br />/*-------------------------------------------------------------<br />sbit分别定义CPU 管脚对应的硬件连接<br />-------------------------------------------------------------*/<br />sfr   LCD_DATA  = 0xA0;<br /><br />sbit  LCD_EN     = 0xB3;//------P3.3 Enable Pin<br />sbit  LCD_RS    = 0xB4;//------P3.4 RS pin<br />sbit  LCD_RW    = 0xB5;//------P3.5 R/W pin<br /><br />sbit led0        = 0x80;//------LED, for debug<br />sbit led1        = 0x82;//------LED, for debug<br />sbit led2        = 0x84;//------LED, for debug<br />sbit led3        = 0x86;//------LED, for debug<br />sbit bflag=P2^7;       //------busy bit<br /><br /><br />LCD_busy(void);        //判断LCD BUSY<br />void W_cmd(uchar);     //写命令<br />void R_data(void);     //读数据<br />void W_data(uchar);    //写数据<br />void Delay_xMs(unsigned int x);//延时;<br /><br /><br />LCD_busy(void)            //----判断LCD BUSY<br />{<br />unsigned char Lcdbusy;<br />   LCD_EN=0;               //clear enable<br />   led0=0;<br />   Delay_xMs(3);<br />   LCD_RS=0;               //clear RS<br />   led1=0;<br />   Delay_xMs(3);<br />   LCD_RW=1;                //set R/W<br />   led2=1;<br />   Delay_xMs(3);<br />   LCD_EN=1;                //set enable<br />   led0=1;<br />   Delay_xMs(3);<br />  Lcdbusy=P2;              //读P2口,取得BF状态 <br />  while( bflag==1)       <br />  {  Lcdbusy=P2;}<br />  LCD_EN=0;                //clear EN<br />        led0=0;<br /><br />}<br />void W_cmd(uchar lcdcmd)    //---写命令<br />{   <br />   LCD_busy();             //判断BUSY<br />   LCD_EN=0;               //clear  EN<br />    led0=0;<br />    Delay_xMs(3);<br />   LCD_RS=0;               //clear  RS<br />   led1=0;<br />    Delay_xMs(3);<br />    LCD_RW=0;              //clear RW<br />    led2=0;<br />    Delay_xMs(3);<br />    LCD_EN=1;              //set EN<br />    led0=1;<br />    Delay_xMs(3);<br />    LCD_DATA=lcdcmd;       //send command to LCD<br />    LCD_EN=0;              //clear  EN<br />    led1=0;<br />    Delay_xMs(128);<br />}<br /><br />void W_data(uchar lcddata)    //--写数据到LCD<br />{<br />   LCD_busy();                //判断BUSY<br />   LCD_EN=0;                  //clear  EN<br />   led0=0;<br />    Delay_xMs(3);<br />    LCD_RS=1;                 //set RS<br />    led1=1;<br />    Delay_xMs(3);<br />    LCD_RW=0;                 //clear  RW<br />    led2=0;<br />    Delay_xMs(3);<br />    LCD_EN=1;                //set EN<br />     led0=1;<br />    Delay_xMs(3);<br />    LCD_DATA=lcddata;        //send data to LCD<br /><br />    LCD_EN=0;               //clear  EN<br />    led0=0;<br />    Delay_xMs(128);<br />}<br /><br /><br /><br /><br />/*------------------------------------------------<br />功能:显示码.<br />-------------------------------------------------*/<br />unsigned char code LCD_Show[]={0x50,0xf5,0x68,0x4a,0x47,0xc2,0xc0,0x5b,0x40,0x42,0x41,0xc4,0xf0,0x4c,0xe0,0xe1,0xff};<br /><br /><br />/*-------------------------------------------------<br />功能:1MS延时子程序<br />-------------------------------------------------*/<br />void Delay_xMs(unsigned int x)<br />{<br />    unsigned int i,j;<br />    for( i =0;i < x;i++ )<br />    {<br />        for( j =0;j<500;j++ );<br />    }<br />}<br /><br />/*-------------------------------------------------<br />主程序<br />--------------------------*/<br />void main()<br />{  <br /><br />   uchar i;<br />  LCD_EN=0;<br />     led0=0;<br />   LCD_RW=0;<br />            led2=0;<br /><br />//          led0=0;<br />        W_cmd(0x38);//显示模式设置,这个命令的格式为:001,DL,N,F,-,-<br />        ; ------------------------------------------------请看第6条命令的说明,因这是一个16字符<br />        ;--------------------------------------------------2行的模组,用并行传输,因此将DL设定为1,将N设定<br />        ;--------------------------------------------------为1表示有两行,将F设定为0,表示用5X8的点的字符<br />//        led1=0;<br />        W_cmd(0x01);//清屏<br />        W_cmd(0x0E);;-----------------显示,光标,闪动控制,这个命令的格式为:00001,D,C,B<br />        ;--------------------------------------------------D为1,表示显示开,C为0表示光标关,B为0表示闪动关<br />        W_cmd(0x80);//设定首行地址<br /><br />           W_data(0x55);//写入要显示的内容--------<b><font color=#000000>问题就在这行执行以后</font></b><br /><br /><br />//      led2=0;<br />      while(1); <br /><br /> | 
 |