1602显示

2019-03-24 19:37发布

1602在main函数最后加while(1); lcd上就不显示了,去掉就显示,但是显示内容是闪的。本来想加个while不闪的 ,现在不显示了,怎么回事呢? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
小小白
1楼-- · 2019-03-25 02:56
看看程序啊,没有程序说不清啊。。。
skyman_liu
2楼-- · 2019-03-25 07:16
#include<reg52.h>
          #include<intrins.h>
          char code table[]={"hello"} ;
          sbit RS=P2^5;
          sbit RW=P2^6;
          sbit  E=P2^7;
          #define DP P0
          #define BF 0x80
          void checkby();
          void writecmd(char cmd,char b);
          void writedata(char *a);
          void lcdreset();
          void delay();
          void main()
          {
               char *ap        ;
                   ap=table;
               lcdreset();
                   delay();
                   writecmd(0x84,0);
                   while(*ap!='')
                   {
                        writedata(ap);
                                ap++;
                                delay();
                   }
           
                    while(1);
          }       
          
          void lcdreset()
          {
                writecmd(0x01,1);
                        writecmd(0x0c,1);
                        writecmd(0x06,1);
                        writecmd(0x38,1);
          }       
          
      void writecmd(char cmd,char b)
          {
               if(b==1)checkby();
                   RS=0;
                   RW=0;
                   _nop_();
                   DP=cmd;
                    _nop_();
                        E=1;
                         _nop_();
                         E=0;
          }

          void checkby()
          {
               DP=0xff;
               RS=0;
                   RW=1;
                   E=1;
                   _nop_();
                   if(DP&BF)delay();
                   E=0;
          }       
          
          
          void delay()
          {
               char i,j;
                   i=100;
                   for(;i>0;i--)
                   for(;j<100;j++);
          }  

          void writedata(char *a)
          {
                 RS=1;
                     RW=0;
                         _nop_();
                         DP=*a;
                         _nop_();
                         E=1;
                         _nop_();
                         _nop_();
                         E=0;
          }
jishuaihu
3楼-- · 2019-03-25 10:58
你可以仿真吗?单步运行一下看看。
你可以这样试一下,把
while(*ap!='')
{
writedata(ap);
ap++;
delay();
}

while(1);

改成
while(1)
{
while(*ap!='')
{
writedata(ap);
ap++;
delay();
}
}
试一下。你不加whlie(1)的时候闪有可能是因为程序执行完一遍之后自动从头重新执行了,用C语言有的编译器会这样处理,这样的话你的1602就处于不停的复位和写入状态,所以就闪了。至于你说的加了while(1)之后显一遍表示不太理解,一般的液晶是不需要实时刷新的,不过我没用过1602,不清楚。
Li_Lei
4楼-- · 2019-03-25 12:25
感觉像是你的单片机自己复位了,你查查电源,看门狗啥的
1602写入数据后只要供电他就一直显示着.
skyman_liu
5楼-- · 2019-03-25 13:03
其实我参考人家写的,别人最后一行加while(1);让单片机原地踏步,1602里的DDRAM里的值也没有不变,所以应该显示的 。  而且以前写的都是加while(1)的 ,而且都正确的  这次加,就不正确了 ,不知道哪里出了问题 ,关键是别人写的加了while(1)都显示 就我自己写的不显示  郁闷
小小白
6楼-- · 2019-03-25 16:28
 精彩回答 2  元偷偷看……

一周热门 更多>