4500|10

34

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

1602显示 [复制链接]

1602在main函数最后加while(1); lcd上就不显示了,去掉就显示,但是显示内容是闪的。本来想加个while不闪的 ,现在不显示了,怎么回事呢?
此帖出自51单片机论坛

最新回复

是的,对于每一个初学者来说,包括我,要学会耐得住寂寞。。。。打好基础啊!  详情 回复 发表于 2011-11-11 21:51
点赞 关注
 

回复
举报

535

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

回复 楼主 skyman_liu 的帖子

看看程序啊,没有程序说不清啊。。。
此帖出自51单片机论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 小小白 的帖子

#include
          #include
          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!='\0')
                   {
                        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;
          }
此帖出自51单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

4
 
你可以仿真吗?单步运行一下看看。
你可以这样试一下,把
while(*ap!='\0')
{
writedata(ap);
ap++;
delay();
}

while(1);

改成
while(1)
{
while(*ap!='\0')
{
writedata(ap);
ap++;
delay();
}
}
试一下。你不加whlie(1)的时候闪有可能是因为程序执行完一遍之后自动从头重新执行了,用C语言有的编译器会这样处理,这样的话你的1602就处于不停的复位和写入状态,所以就闪了。至于你说的加了while(1)之后显一遍表示不太理解,一般的液晶是不需要实时刷新的,不过我没用过1602,不清楚。
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

5
 
感觉像是你的单片机自己复位了,你查查电源,看门狗啥的
1602写入数据后只要供电他就一直显示着.
此帖出自51单片机论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 板凳 skyman_liu 的帖子

其实我参考人家写的,别人最后一行加while(1);让单片机原地踏步,1602里的DDRAM里的值也没有不变,所以应该显示的 。  而且以前写的都是加while(1)的 ,而且都正确的  这次加,就不正确了 ,不知道哪里出了问题 ,关键是别人写的加了while(1)都显示 就我自己写的不显示  郁闷
此帖出自51单片机论坛
 
 
 

回复

535

帖子

0

TA的资源

五彩晶圆(初级)

7
 

回复 板凳 skyman_liu 的帖子

你的延时函数有问题啊。。。。。应该这样写啊
void delay()
{
char i,j;
for(i=100;i>0;i--)
for(j=0;j<100;j++);
}
把i放到里面主要是为了好看和规范,主要问题是j没有初始化,我把你的程序下载下来在自己的单片机上调试的,可以用了,但是没有想明白为什么j没有初始化会这样啊。。。。。但是现在程序能跑了
此帖出自51单片机论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 7楼 小小白 的帖子

确实可以跑了 ,谢谢啊
此帖出自51单片机论坛
 
 
 

回复

165

帖子

2

TA的资源

纯净的硅(高级)

9
 

回复 8楼 skyman_liu 的帖子

楼主还是要从基础开始慢慢学起啊。不要黏贴程序。
此帖出自51单片机论坛
 
 
 

回复

535

帖子

0

TA的资源

五彩晶圆(初级)

10
 

回复 9楼 15075039ZQ 的帖子

是的,对于每一个初学者来说,包括我,要学会耐得住寂寞。。。。打好基础啊!
此帖出自51单片机论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 10楼 小小白 的帖子

是的,但是1602只能用数组的方式显示吗?我直接给PO口赋值怎么不显示啊
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表