打印
[AVR单片机]

谁帮我看下这个驱动1602液晶的程序~~谢谢啦

[复制链接]
1627|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuxindd|  楼主 | 2009-7-23 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void show(unsigned int dis_val)


    write_com(0x80+0x00);
   delay(5);
    write_com(0x01);
      delay(5);
      write_dat(table[(dis_val/1000)%10]);
     delay(1);
      write_dat(table[(dis_val/100)%10]);
     delay(1);
     write_dat(table[(dis_val/10)%10]);
     delay(1);
     write_dat(table[dis_val%10]);
     delay(1);

     }  

void main()
 {  uint i=1234;
    DDRD=0xff;
    DDRB=0x07;
   
   write_com(0x38);
   delay(5);
   write_com(0x01);
   delay(5);
   write_com(0x0c);
   delay(5);
   write_com(0x06);
   delay(5);
   write_com(0x80+0x00);
   delay(5);
   while(1)
    {
    show(i);
    //delay(100);
     }
    
 }



前面对于写指令和写数据的函数定义应该不会错  就不发了
 可是当我执行一次show函数的时候  液晶显示没问题 是从第一位开始显示  并且能够保持   后来想用它显示下动态数字  便在前面加了一个while循环  可是之后就不行显示正常了  他没有按我想象的不停地在第一个地址重复显示数字  而是在前一次的显示后面接着显示  然后就出现了滚屏  完全没办法控制   请问这个是什么问题导致的?  是不是因为单片机的处理速度和1602的处理速度差距造成的?  请教下高人了  谢谢~~~

对了 单片机是16的

相关帖子

沙发
bin362422| | 2009-7-29 20:35 | 只看该作者

说明程序是按程序跑的

你在那些跑完后他的那地址指针加上去了,并且你在没有定义从写的起始地址,所以程序就是那样跑的啊。
你可以把起始地址放到while中来,看看可以不啊,我没试的。

使用特权

评论回复
板凳
zhaoweige| | 2009-8-8 17:37 | 只看该作者
显示地址没有重新设置,当然滚屏了

使用特权

评论回复
地板
lszhang3120| | 2009-8-9 11:02 | 只看该作者
因为你的while中应该包含清屏,并重新负地址

使用特权

评论回复
5
new1988| | 2009-8-25 09:26 | 只看该作者
1602液晶每显示一个字符它的地址就自动加一,你没有把地址固定它肯定是会出现滚屏的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

153

帖子

0

粉丝