找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 9759|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)怎么把AD讀出來(lái)的10位二進(jìn)制的數(shù)轉(zhuǎn)化為10進(jìn)制數(shù)?

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

使用道具 舉報(bào)

沙發(fā)
ID:164602 發(fā)表于 2018-12-10 08:19 | 只看該作者
你的問(wèn)題有兩個(gè)方面:
第一:將讀到的AD值(10位),放到一個(gè)int類(lèi)型的變量里。
第二:逐位(只管有用的10位),做數(shù)學(xué)計(jì)算。
舉例:
假設(shè)取得的10位數(shù)據(jù)是1010101010,那么變量中的值就是0000001010101010
這個(gè)值的十進(jìn)制數(shù)的值(從最左高位算起),就是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
這就是二進(jìn)制與十進(jìn)制的換算過(guò)程。

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

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

    A/D轉(zhuǎn)換寄存器總表:



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

P1.x作為A/D轉(zhuǎn)換輸入通道來(lái)用允許特殊功能寄存器。相應(yīng)位為“1”時(shí),對(duì)應(yīng)的P1.x口作為A/D轉(zhuǎn)換使用,內(nèi)部上拉電阻自動(dòng)斷開(kāi)。



ADC_START是模擬/數(shù)字轉(zhuǎn)換(ADC)啟動(dòng)控制位,設(shè)置為1時(shí),開(kāi)始轉(zhuǎn)換。

      ADC_FLAG是模擬/數(shù)字轉(zhuǎn)換結(jié)束標(biāo)志位,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1。

(3)       ADC_DATA: A/D轉(zhuǎn)換結(jié)果特殊功能寄存器

模擬/數(shù)字轉(zhuǎn)換結(jié)果計(jì)算公式為 結(jié)果=256×Vin/Vcc

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

         

    內(nèi)置ADC的使用例程:

          STC_ADC.h:

sfr P1_ADC_EN=0x97;

sfr ADC_CONTR=0xc5;

sfr ADC_DATA=0xc6;



int GetAD(unsigned char channel)//channel為要取的通道號(hào)(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進(jìn)制數(shù),分別對(duì)應(yīng)AD7~0,置1代表打開(kāi)此路

{

P1=P1|ADin;//要設(shè)置為A/D轉(zhuǎn)換的P1.x口,先設(shè)為高

P1_ADC_EN=ADin;

}











      _main.c:

#include

#include <stc_adc.h>



/*

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

    此程序用以說(shuō)明STC單片機(jī)ADC的使用方法

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

*/



void delay(unsigned time)

{

while(time--);

}



void main()

{

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

             //0110,0011,P1的P1.0,P1.1,P1.5,P1.6設(shè)置為A/D轉(zhuǎn)換輸入腳

                     //斷開(kāi)P1.0,P1.1,P1.5,P1.6內(nèi)部上拉電阻

while(1)

{

  P2=GetAD(0);

  delay(10000);

  P2=GetAD(1);

  delay(10000);

  P2=GetAD(5);

  delay(10000);

  P2=GetAD(6);

  delay(10000);

}

}


回復(fù)

使用道具 舉報(bào)

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

那在程序中怎么實(shí)現(xiàn)?比如說(shuō)從左到右的二位1*2^1要先把數(shù)全部向左移使高位全部清零然后右移回來(lái)讓地位也全部清零再相乘?
回復(fù)

使用道具 舉報(bào)

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

我之前有把AD的值讀到一個(gè)16位的變量中,然后把這個(gè)變量直接和10進(jìn)制數(shù)相乘,然后這個(gè)結(jié)果是幾進(jìn)制的?
回復(fù)

使用道具 舉報(bào)

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

與多少進(jìn)制的數(shù)相運(yùn)算自動(dòng)變成多少進(jìn)制!
回復(fù)

使用道具 舉報(bào)

7#
ID:707815 發(fā)表于 2020-3-28 17:15 | 只看該作者
數(shù)據(jù)幾進(jìn)制沒(méi)有區(qū)別,只是機(jī)器碼與人類(lèi)習(xí)慣的區(qū)別,跟數(shù)值大小沒(méi)有任何關(guān)系的,就相當(dāng)于十六0X10與十進(jìn)制16,是相等的,你可以直接拿你轉(zhuǎn)換出來(lái)的二進(jìn)制數(shù)據(jù)直接與十進(jìn)制進(jìn)行比較的,你要是拿轉(zhuǎn)換出來(lái)的數(shù)據(jù)進(jìn)行其他處理的話,就另說(shuō)了,如果要自己比較就是數(shù)學(xué)運(yùn)算轉(zhuǎn)化一下
回復(fù)

使用道具 舉報(bào)

8#
ID:316880 發(fā)表于 2020-3-28 18:55 | 只看該作者
STC單片機(jī)讀出來(lái)的數(shù)據(jù)本來(lái)就是十進(jìn)制數(shù),0-1023
回復(fù)

使用道具 舉報(bào)

9#
ID:201555 發(fā)表于 2020-4-1 22:42 來(lái)自手機(jī) | 只看該作者
adad/1024*οVrefλλ
回復(fù)

使用道具 舉報(bào)

10#
ID:450849 發(fā)表于 2020-4-2 08:03 | 只看該作者
為什么要轉(zhuǎn)換?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表