永发信息网

怎样将12位AD转换器输出的二进制码用十进制数码管显示???

答案:1  悬赏:60  手机版
解决时间 2021-04-08 04:54
  • 提问者网友:寂寞撕碎了回忆
  • 2021-04-07 10:39
怎样将12位AD转换器输出的二进制码用十进制数码管显示???
最佳答案
  • 五星知识达人网友:独钓一江月
  • 2021-04-07 11:49
这个问题看似复杂,其实简单。先说基本概念:
单片机 一般都是8位,如果用十进制显示一个8位最大二进制数(十六进制为FF),换算为十进制(2的8次方)最大值256,因此3位数码管就够了。如果明白这个,下面就好办了。
12位为FFF即2的12次方,为4096,4位数码管即可。
但你忽略了最关键的问题,12位AD,8位,16位AD转换器,它们的差别是精度,不是位数。要检测一个5V以内的电压,8位的梯度=5/256=0.0195V,12位的=5/4096=0.00122,就是分辨率,如果要检测一个3V的电压,8位为256×3/5=153.6,12位为4096×3/5=2817.6,经过换算都会显示3V,其难点在于8位的计算机(任何),每条指令最大除理8位数据,因此超过8位的数学计算,要进行多字节运算才能实现。而多字节运算的编程要比单字节难得多,特别是科学运算,如果要实现浮点运算,定点显示(十进制),还要编制浮点运算库,其编程量要大5-10倍(汇编)。不过有了C51,编程省劲了,但硬件接口(得看接口方式及协议)不会变。
说道次,明白??
追问:设置做大显示为55.00,当测得电压为55V时,AD取样端口为5V,对应的是4096。
我主要想问什么样把4096转换成55.00然后在4位8段共阳数码管显示。
用的就是8位单片机!-_-!⊙﹏⊙b汗
追答:这样啊,看来我搞错了,我的理解8位以上(不含8位)的AD是应用于高精度计算机内部计算控制用的。如果需要显示的话,8位机处理12位的,这里给你个简单的方法,将4096缩小16倍,变为8位来处理,即FFF/10=FF(8位的满量程),我有个8位AD4位显示程序,因为字数限制的问题,只把计算和显示转换部分附上。你如果会8位数据显示的话,下面就无所谓了
void chuli(uint num)//显示程序,num为AD子程序中的返回的AD值为0.00-55.00
{qian=num/1000;//千,百,十,个处理
bai=num/100%10;
shi=num/10%10;
ge=num%10;
}
switch(j)
{//扫描显示部分
case 0: P0 = tb[ge]; break;
case 1: P0 = tb[shi]; break;
case 2: P0 = tb[bai]&0x7f; break;//&0x7f为在该位插入小数点
case 3: P0 = tb[qian]; break;
}
data_ad = data_ad* (500/ 256) *11; //这是AD处理中的一条语句,*11之前为5.00显示,*11在显示上调整为你对应的55V满量程的显示,附上EDA仿真,要源程序的话,给个信箱。仿真显示56.10是因为16进制定点运算的原因。这里只是示意说明,要提高显示精度,须要更好的算法。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯