完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
avr程序的ad采集部分已经采集到值后
将其转化为数值并通过12864显示 ad[0]=((ada*5/10)/1023)%10+0x30; ad[1]=((ada*5)/1023)%10+0x30; ad[2]=((ada*5*10)/1023)%10+0x30; ad[3]=((ada*5*100)/1023)%10+0x30; ad[4]=((ada*5*1000)/1023)%10+0x30;这个ada定义为uint类型 得到的结果有偏差。 后采取 ad[0]=(((long)ada*5/10)/1023)%10+0x30; ad[1]=(((long)ada*5)/1023)%10+0x30; ad[2]=(((long)ada*5*10)/1023)%10+0x30; ad[3]=(((long)ada*5*100)/1023)%10+0x30; ad[4]=(((long)ada*5*1000)/1023)%10+0x30; 后恢复正常,uint是两个字节已经够用,为何要强制转化为long |
|
相关推荐
4 个讨论
|
|
你的算法我没看懂呀....
ad[0]=((ada*5/10)/1023)%10+0x30; 这一句为啥要先除以10再对10取余? ad[1]=((ada*5)/1023)%10+0x30; 为什么每一句都要对10取余?...... 我按照例程也编了一个程序,但是结果偏差比较大,你可以帮我分析一下吗? adc_l0=ADCL;//先读取低八位 adc_h0=ADCH;//再读取高两位 temp0=adc_h0<<8|adc_l0; temp0=temp0>>1; //放弃一位的精度 temp0-=20; //修正 ten_3=(temp0)/100; ten_2=(temp0-(ten_3*100))/10; ten_1=temp0-(ten_3*100)-ten_2*10; ten_1+=0x30;//转换成ASCII码。 ten_2+=0x30; ten_3+=0x30; temp0 也是uint型,好像和 你的思路是一样的,但是我就是不明白红色部分那两句是啥意思.....,又好像根本就没有转换成实际的电压值,可是输出的结果又跟输入的模拟电压差不多.....晕死了,不懂算法。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5182 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7796 浏览 0 评论
3075 浏览 2 评论
3128 浏览 1 评论
10110 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 23:21 , Processed in 0.689547 second(s), Total 55, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号