11786|13

10

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

51单片机AD转换结果怎么换成十进制数 [复制链接]

 
1芯积分
官方手册上面说放在ADC_RES和ADC_RESL里面,得到结果需要怎么处理才能变成十进制数?
此帖出自51单片机论坛

最新回复

看一看  详情 回复 发表于 2017-10-6 17:12
点赞 关注
 

回复
举报

1798

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
以二进制存储的数据本身可以直接当十进制计算,或者说二进制数据其实也是十进制
此帖出自51单片机论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

板凳
 
得到结果需要怎么处理才能变成十进制数?结果我就认为是adc的原始数值 ,比如12bit的话,最大0xfff.对应十进制 4095。
此帖出自51单片机论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

4
 
sint27 发表于 2017-6-29 08:31
以二进制存储的数据本身可以直接当十进制计算,或者说二进制数据其实也是十进制

存储的是二进制数,如果我要拿出来显示,要如何操作。比如与256求余或者取模什么的。
此帖出自51单片机论坛

点评

更正一下,原始数据除以一千,得到千位,原始数据对一千求余再除以一百,得到百位,原始数据对一百求余,再除以十,得到十位。。  详情 回复 发表于 2017-6-30 20:21
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

5
 
ienglgge 发表于 2017-6-29 14:08
得到结果需要怎么处理才能变成十进制数?结果我就认为是adc的原始数值 ,比如12bit的话,最大0xfff.对应十 ...

存储的是二进制数,如果我要拿出来显示,要如何操作。比如与256求余或者取模什么的。
此帖出自51单片机论坛

点评

哪有那么复杂。原始数据/1000 得到千位的数字,原始数据/100, 得到百位的数字,以此类推。  详情 回复 发表于 2017-6-30 15:18
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

6
 
初级小白 发表于 2017-6-29 21:13
存储的是二进制数,如果我要拿出来显示,要如何操作。比如与256求余或者取模什么的。

哪有那么复杂。原始数据/1000 得到千位的数字,原始数据/100, 得到百位的数字,以此类推。
此帖出自51单片机论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

7
 
初级小白 发表于 2017-6-29 21:13
存储的是二进制数,如果我要拿出来显示,要如何操作。比如与256求余或者取模什么的。

更正一下,原始数据除以一千,得到千位,原始数据对一千求余再除以一百,得到百位,原始数据对一百求余,再除以十,得到十位。。
此帖出自51单片机论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

8
 
看过例子就明白了,以下例子来源于《51单片机轻松入门-基于STC15W4K系列》,完整工程请查看附件。 第9章(ADC).rar (181.68 KB, 下载次数: 57)

#include "UART.H"   // 包含IAP15W4K58S4寄存器定义文件
#define VCC 4.972   // 存放用万用表实测的单片机供电电压

unsigned int ADC_P11()
{
        unsigned int i;                    // 用于软件延时程序
        unsigned char status;        // 用于判断AD转换结束的标志
        unsigned int AD_Dat=0;  // 10位AD转换值
        unsigned char Tmp;            // 临时变量用于将AD转换出来的2个字节合成一个字节               
        ADC_CONTR|=0x80;              // 开AD转换电源,第一次使用时要打开内部模拟电源
    for (i=0;i<10000;i++);  // 适当延时等待AD转换供电稳定,一般延时1ms以内即可,为了缩短AD
                            // 调用时间,可把这2行剪切到主程序中去。
        P1ASF|=0x02;                        // 选择P1.1作为AD转换通道,0x02= 0000 0010       
        ADC_CONTR=0xE1;         // 选择P1.1作为AD转换通道,最高转换速度,清转换完成标志。
        for (i=0;i<1000;i++);   // 如果是多通道模拟量进行AD转换,则更换AD转换通道后要适当延时,
// 使输入电压稳定,延时量取20μs~200μs即可,与输入电压源的内阻有关,如果输入电压信号源的内
// 阻在10K以下,可不加延时,如果是单通道模拟量转换,则不需要更换AD转换通道,也不需要加延时。
        ADC_CONTR|=0x08;        // 启动 A/D 转换,ADC_START=1。
        status=0;
        while(status==0)              // 等待AD转换结束。
        {
            status=ADC_CONTR&0x10;   // 判断ADC_FLAG是否等于1,0x10=0001 0000B。
        }
        ADC_CONTR&=0xE7;             // 将ADC_FLAG清0, 0xE7=1110 0111B,ADC_FLAG=0,ADC_START=0。       
        AD_Dat = ADC_RES;                // 默认高字节高8位。
        AD_Dat <<= 2;
        Tmp = ADC_RESL;         // 默认低字节低2位。
        Tmp &= 0x03;            // 屏蔽无关位
        AD_Dat |= Tmp;                // 高低字节拼接成一个10位数。
        return AD_Dat;
}  
void main(void)
{        
        float Vin;                                   // 存放计算出来的外部输入电压
        unsigned int ADvalue;               // 存放AD转换返回的结果
        UART_init();                                   // 串口初始化9600/22.1184MHz
        printf("串口初始化完毕");
        while(1)
        {                         
                ADvalue=ADC_P11();                   // 采样P1.1口模拟输入电压
                Vin=VCC*ADvalue/1023;      // 注意是1023才正确
                printf("%.3f     ",Vin);                
                delay500ms();
        }                              // 若不用串口显示,此行可设置断点仿真观察结果
}


此帖出自51单片机论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

9
 
xgliyouquan 发表于 2017-7-14 19:28
看过例子就明白了,以下例子来源于《51单片机轻松入门-基于STC15W4K系列》,完整工程请查看附件。

#incl ...

Vin=VCC*ADvalue/1023;      // 注意是1023才正确
这一句是对ADC转换结果转换为10进制的处理吗?
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

10
 
直接当十进制用就好了,要显示的话,就要一一分离,假如为123,则用 百位=x/100;十位=x/10%10;个位=x%10;的方法可以得到。
此帖出自51单片机论坛

点评

好的 大概明白了。  详情 回复 发表于 2017-7-20 22:58
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

11
 
发平爱项目 发表于 2017-7-20 09:10
直接当十进制用就好了,要显示的话,就要一一分离,假如为123,则用 百位=x/100;十位=x/10%10;个位=x%10 ...

好的 大概明白了。
此帖出自51单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
那些要芯币是不是要给钱的
此帖出自51单片机论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(高级)

13
 
MCU或计算机中的 “数”,常见的只有整形,浮点,位三种,有的时候会用到定点方式,本身是没有进制概念的,如一百就是一百,用内部数据表示的话,只要没有溢出,哪种方法都是一百;
你所说的十进制数,本身应该是一个字符串,就是我们用各种语言写出来的字符,比如“100”,或者一种编码方式,比如常见的十进制BCD码,对应 0x0100;
此帖出自51单片机论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

14
 
看一看
此帖出自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
快速回复 返回顶部 返回列表