[AVR单片机] AVR ATMEGA16写 1602液晶问题

[复制链接]
6810|28
 楼主| selfstudy 发表于 2011-7-21 10:53 | 显示全部楼层
我估计还是 十进制转字符数组函数出错了。我直接采用:
  num=1234;
        for (i=0;i<4;i++)
        {
                data=(uchar)(num %10);
                num=num/10;
                LCD_Char_Write(3-i,0,data+48);

        }
是可行的,不知道原因。
 楼主| selfstudy 发表于 2011-7-21 10:55 | 显示全部楼层
这个函数错在哪里呢??实在迷惑;猜想应该是对字符数组p操作出了问题。
//转换的AD数
//n为几位数
uchar num_to_str(int num,uchar *p,uchar n)
{
        uchar i=0;
        uchar yushu=0;
         clearstr(p,n);//清空
        do
        {
                yushu=(uchar)(num %10);//取余数,则第一次取到了个位数
                *(p+i)=  yushu  ;//字符串赋值
         
                num=num/10;//去掉个位数
                i++;
         
        } while (num != 0);
        return i;//返回位数
}
上树宝宝 发表于 2012-5-4 17:08 | 显示全部楼层
en  ~~~~~~~~~~~~~
joyme 发表于 2012-5-5 10:41 | 显示全部楼层
返回值比你想象的大1,return的是4,而你实际处理应该按3做,你可以return (i-1)
或用do 。。。 while(1),在i++;全加语句if(num==0)break;
joyme 发表于 2012-5-5 10:51 | 显示全部楼层
嗯,详细看来下,这个返回值只会影响现实的x坐标
没看到adc是怎么定义的?最好定义为固定大小的数组便于编译器分配空间
冰雅轩 发表于 2014-4-9 15:15 | 显示全部楼层
5#的程序 非常好,收藏了
凌凌7 发表于 2018-6-24 11:07 | 显示全部楼层
学习了
一路向北lm 发表于 2018-6-24 17:44 | 显示全部楼层
那些命令都是固定死的,写命令和写数据底层封装好就OK了,把延时调对基本没什么问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部