久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9954|回復: 9
打印 上一主題 下一主題
收起左側

單片機怎么把AD讀出來的10位二進制的數轉化為10進制數?

[復制鏈接]
回帖獎勵 500 黑幣 回復本帖可獲得 100 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:428298 發表于 2018-12-9 19:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
怎么把AD讀出來的10位二進制的數轉化為10進制數?我用的STC12C5A60S2單片機。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2018-12-10 08:19 | 只看該作者
你的問題有兩個方面:
第一:將讀到的AD值(10位),放到一個int類型的變量里。
第二:逐位(只管有用的10位),做數學計算。
舉例:
假設取得的10位數據是1010101010,那么變量中的值就是0000001010101010
這個值的十進制數的值(從最左高位算起),就是1*2^9+0*2^8+1*2^7+0*2^6+1*2^5+0*2^4+1*2^3+0*2^2+1*2^1+0*2^0=512+0+128+0+32+0+8+0+2+0=682
這就是二進制與十進制的換算過程。

評分

參與人數 1黑幣 +15 收起 理由
czjlovezy + 15 很給力!

查看全部評分

回復

使用道具 舉報

板凳
ID:354282 發表于 2018-12-10 08:25 | 只看該作者

STC12C5A60S2 AD 轉換
  STC系列單片機中的STC89LE516AD/X2提供了8路8位精度的高速A/D轉換器,位于P1口上,從而省去了片外ADC的麻煩。這8路ADC為電壓輸入型,可做按鍵掃描,電池電壓檢測,頻譜檢測等。ADC轉換過程需要17個機器周期。通過對相關功能寄存器的適當配置,就可以控制其工作。下面就對相關功能寄存器進行介紹。

    A/D轉換寄存器總表:



(1)       P1_ADC_EN:特殊功能寄存器

P1.x作為A/D轉換輸入通道來用允許特殊功能寄存器。相應位為“1”時,對應的P1.x口作為A/D轉換使用,內部上拉電阻自動斷開。



ADC_START是模擬/數字轉換(ADC)啟動控制位,設置為1時,開始轉換。

      ADC_FLAG是模擬/數字轉換結束標志位,當A/D轉換完成后,ADC_FLAG=1。

(3)       ADC_DATA: A/D轉換結果特殊功能寄存器

模擬/數字轉換結果計算公式為 結果=256×Vin/Vcc

Vin是模擬輸入通道輸入電壓,Vcc為單片機實際工作電壓,用單片機工作電壓作為模擬參考電壓。

         

    內置ADC的使用例程:

          STC_ADC.h:

sfr P1_ADC_EN=0x97;

sfr ADC_CONTR=0xc5;

sfr ADC_DATA=0xc6;



int GetAD(unsigned char channel)//channel為要取的通道號(0~7)

{

    unsigned char AD_finished=0;

    ADC_DATA=0;

    ADC_CONTR=channel;

    ADC_CONTR|=0x08;

    while(!AD_finished)

      AD_finished=(ADC_CONTR&0x10);

    ADC_CONTR&=0xF7;

    return (ADC_DATA);

}



void AD_Init(unsigned char ADin)// ADC 初始化,ADin為八位2進制數,分別對應AD7~0,置1代表打開此路

{

P1=P1|ADin;//要設置為A/D轉換的P1.x口,先設為高

P1_ADC_EN=ADin;

}











      _main.c:

#include

#include <stc_adc.h>



/*

-------------------------------------------------

    此程序用以說明STC單片機ADC的使用方法

-------------------------------------------------

*/



void delay(unsigned time)

{

while(time--);

}



void main()

{

AD_Init(0x63);//0110,0011,要設置為A/D轉換的P1.x口,先設置為高

             //0110,0011,P1的P1.0,P1.1,P1.5,P1.6設置為A/D轉換輸入腳

                     //斷開P1.0,P1.1,P1.5,P1.6內部上拉電阻

while(1)

{

  P2=GetAD(0);

  delay(10000);

  P2=GetAD(1);

  delay(10000);

  P2=GetAD(5);

  delay(10000);

  P2=GetAD(6);

  delay(10000);

}

}


回復

使用道具 舉報

地板
ID:428298 發表于 2018-12-10 16:37 | 只看該作者
HC6800-ES-V2.0 發表于 2018-12-10 08:19
你的問題有兩個方面:
第一:將讀到的AD值(10位),放到一個int類型的變量里。
第二:逐位(只管有用的10位 ...

那在程序中怎么實現?比如說從左到右的二位1*2^1要先把數全部向左移使高位全部清零然后右移回來讓地位也全部清零再相乘?
回復

使用道具 舉報

5#
ID:428298 發表于 2018-12-10 16:41 | 只看該作者
HC6800-ES-V2.0 發表于 2018-12-10 08:19
你的問題有兩個方面:
第一:將讀到的AD值(10位),放到一個int類型的變量里。
第二:逐位(只管有用的10位 ...

我之前有把AD的值讀到一個16位的變量中,然后把這個變量直接和10進制數相乘,然后這個結果是幾進制的?
回復

使用道具 舉報

6#
ID:699785 發表于 2020-3-27 23:38 | 只看該作者
czjlovezy 發表于 2018-12-10 16:41
我之前有把AD的值讀到一個16位的變量中,然后把這個變量直接和10進制數相乘,然后這個結果是幾進制的?

與多少進制的數相運算自動變成多少進制!
回復

使用道具 舉報

7#
ID:707815 發表于 2020-3-28 17:15 | 只看該作者
數據幾進制沒有區別,只是機器碼與人類習慣的區別,跟數值大小沒有任何關系的,就相當于十六0X10與十進制16,是相等的,你可以直接拿你轉換出來的二進制數據直接與十進制進行比較的,你要是拿轉換出來的數據進行其他處理的話,就另說了,如果要自己比較就是數學運算轉化一下
回復

使用道具 舉報

8#
ID:316880 發表于 2020-3-28 18:55 | 只看該作者
STC單片機讀出來的數據本來就是十進制數,0-1023
回復

使用道具 舉報

9#
ID:201555 發表于 2020-4-1 22:42 來自觸屏版 | 只看該作者
adad/1024*οVrefλλ
回復

使用道具 舉報

10#
ID:450849 發表于 2020-4-2 08:03 | 只看該作者
為什么要轉換?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂一区| 国产成人精品一区二区三 | 少妇一级淫片aaaaaaaaa | 亚洲欧美成人在线 | 精品国产欧美一区二区三区成人 | 欧美a v在线| 久久人人爽人人爽 | 久久国内精品 | 欧美精品在线视频 | 中文字幕一级毛片视频 | 久久久精品 | 亚洲一级二级三级 | 亚洲国产精品精华素 | 自拍 亚洲 欧美 老师 丝袜 | 欧美一区二区三区在线观看 | 国产精品揄拍一区二区久久国内亚洲精 | av网站在线免费观看 | 久久精品亚洲成在人线av网址 | 综合九九 | 免费在线视频精品 | 精品日韩一区 | 精品欧美一区二区中文字幕视频 | 亚洲成人一区 | 91日日| 久久69精品久久久久久久电影好 | 一区二区三区亚洲 | 91极品视频 | 欧美日韩在线观看一区二区三区 | 日日夜夜精品 | www..99re| 成人性生交大片 | 中文字幕国产精品 | 天天干,夜夜操 | 羞羞的视频在线观看 | 一区二区三区四区不卡视频 | 亚洲成人福利在线观看 | 请别相信他免费喜剧电影在线观看 | 日韩在线小视频 | 欧美综合一区二区 | 黄色免费av| 日韩成人免费视频 |