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

QQ登錄

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

搜索
查看: 8793|回復(fù): 6
收起左側(cè)

AD轉(zhuǎn)換值怎樣分離個(gè)位十位百小數(shù)位

[復(fù)制鏈接]
ID:12816 發(fā)表于 2011-3-22 00:15 | 顯示全部樓層 |閱讀模式
請(qǐng)問(wèn)如下程序AD轉(zhuǎn)換值怎樣分離個(gè)位十位百小數(shù)位謝謝!

float voltage = 0.0; 
//uint V;
float VCC = 4.99;

//======== AD轉(zhuǎn)換程序 ======================================
uint ADC(uchar Od) 
 {
 uint AD_Result_Temp = 0 ;
 ADC_CONTR = ADC_CONTR|0x80; //1000,0000打開(kāi)A/D轉(zhuǎn)換電源
   P1ASF = SET_IO[Od];//
   delayms(20); //20   
   ADC_CONTR = ADC_CONTR & 0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位
   ADC_CONTR = ADC_CONTR|((ADC_ID[Od])& 0x07); //設(shè)置當(dāng)前通道號(hào)00000111
   delayms(1); //延時(shí)使輸入電壓達(dá)到穩(wěn)定
   ADC_RES = 0; //STC12C5A16AD系列單片機(jī)_清A/D轉(zhuǎn)換結(jié)果寄存器高八位
   ADC_RESL = 0; //STC12C5A16AD系列單片機(jī)_清A/D轉(zhuǎn)換結(jié)果寄存器低二位
   ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,啟動(dòng)轉(zhuǎn)換
   do { ; }    
   while((ADC_CONTR & 0x10)==0);     //0001,0000等待A/D轉(zhuǎn)換結(jié)束
   ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,停止A/D轉(zhuǎn)換
   AD_Result_Temp = ((AD_Result_Temp|ADC_RES)<<2)|(ADC_RESL&0x03);//高八位+低二位
  return AD_Result_Temp;//ADC_RES;
 } 
//====檢測(cè)============================================
void PIS1()  //0.6V~0.8V   0.7V +_ 0.1V
 {
  //VCC = 2.499 * 1024 / ADC(0); //先讀取基準(zhǔn)電壓算出供電電壓
  voltage = ADC(1) * VCC / 1024;
   } 

如果要將voltage 這個(gè)值用lcd顯示出來(lái)應(yīng)該怎樣分離個(gè)位十位百。小數(shù)位呢?謝謝!
回復(fù)

使用道具 舉報(bào)

ID:40740 發(fā)表于 2012-5-24 22:32 | 顯示全部樓層

/* Temperature data convert *
void TEMCONV()
{
  if(TEM_DATA[1]>127)
  {
    TEM_DATA[0] = (~TEM_DATA[0])+1;
    if((~TEM_DATA[0]) >= 0XFF)
    TEM_DATA[1] = (~TEM_DATA[1])+1;
    else TEM_DATA[1] = ~TEM_DATA[1];
    TEM_SIGN = 1;
  }
  TEMP = TEM_DATA[0]&0X0F;
  TEM_DIS[0] = (TEMP * 10/16);
  TEMP = ((TEM_DATA[0]&0XF0 >> 4) | (TEM_DATA[1]&0X0F) << 4);
  TEM_DIS[3] = TEMP/100;
  TEMP = TEMP%100;
  TEM_DIS[2] = TEMP/10;
  TEM_DIS[1] = TEMP%10;
  if(!TEM_DIS[3])
  {
    TEM_DIS[3] = 10;
    if(!TEM_DIS[2])
    {
    TEM_DIS[2] = 10;
    }
  }
}

/*  Display function *
void DISPLAY()
{

  P2 = SEG_DATA[TEM_DIS[0]];
  P0 = 0X0D;                   //小數(shù)點(diǎn)位
      MSDELAY(10);
  P2 = 0XFF;
  P0 = 0X0F;
  P2 = SEG_DATA[TEM_DIS[2]];
  P0 = 0X0B;                 //十位
  MSDELAY(10);
      P2 = 0XFF;
  P0 = 0X0F;
  P2 = SEG_DATA[TEM_DIS[1]];
  P0 = 0X0E;                 //個(gè)位
      MSDELAY(10);     
  P2 = 0XFF;
  P0 = 0X0F;
  P2 = 0X7F;
  P0 = 0X0E;                 //小數(shù)點(diǎn)
      MSDELAY(10);     
  P2 = 0XFF;
  P0 = 0X0F;
  P2 = SEG_DATA[TEM_DIS[3]];
  P0 = 0X07;                 //百位
      MSDELAY(10);
      P2 = 0XFF;
  P0 = 0X0F;
}

 

 

這是我的溫度數(shù)值轉(zhuǎn)換,你看看

回復(fù)

使用道具 舉報(bào)

ID:40045 發(fā)表于 2012-5-10 22:04 | 顯示全部樓層
看不懂    看不……
回復(fù)

使用道具 舉報(bào)

ID:28704 發(fā)表于 2011-3-25 13:17 | 顯示全部樓層
這個(gè)問(wèn)題很好,我也想知道怎么解決,希望有高手一起來(lái)討論。
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2011-3-22 19:38 | 顯示全部樓層
  http://www.torrancerestoration.com/mcu/1206.html
回復(fù)

使用道具 舉報(bào)

ID:12816 發(fā)表于 2011-3-22 03:37 | 顯示全部樓層
以下是引用admin在2011-3-22 1:36:59的發(fā)言:

你這個(gè)是adc0804?

stc12c5a16ad

voltage本身是個(gè)浮點(diǎn)數(shù)請(qǐng)問(wèn)怎樣分離?謝謝!

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2011-3-22 01:36 | 顯示全部樓層

你這個(gè)是adc0804?

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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