找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8781|回复: 6
打印 上一主题 下一主题
收起左侧

AD转换值怎样分离个位十位百小数位

[复制链接]
跳转到指定楼层
楼主
ID:12816 发表于 2011-3-22 00:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问如下程序AD转换值怎样分离个位十位百小数位谢谢!

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

//======== AD转换程序 ======================================
uint ADC(uchar Od) 
 {
 uint AD_Result_Temp = 0 ;
 ADC_CONTR = ADC_CONTR|0x80; //1000,0000打开A/D转换电源
   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); //设置当前通道号00000111
   delayms(1); //延时使输入电压达到稳定
   ADC_RES = 0; //STC12C5A16AD系列单片机_清A/D转换结果寄存器高八位
   ADC_RESL = 0; //STC12C5A16AD系列单片机_清A/D转换结果寄存器低二位
   ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,启动转换
   do { ; }    
   while((ADC_CONTR & 0x10)==0);     //0001,0000等待A/D转换结束
   ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,停止A/D转换
   AD_Result_Temp = ((AD_Result_Temp|ADC_RES)<<2)|(ADC_RESL&0x03);//高八位+低二位
  return AD_Result_Temp;//ADC_RES;
 } 
//====检测============================================
void PIS1()  //0.6V~0.8V   0.7V +_ 0.1V
 {
  //VCC = 2.499 * 1024 / ADC(0); //先读取基准电压算出供电电压
  voltage = ADC(1) * VCC / 1024;
   } 

如果要将voltage 这个值用lcd显示出来应该怎样分离个位十位百。小数位呢?谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2011-3-22 01:36 | 只看该作者

你这个是adc0804?

回复

使用道具 举报

板凳
ID:12816 发表于 2011-3-22 03:37 | 只看该作者
以下是引用admin在2011-3-22 1:36:59的发言:

你这个是adc0804?

stc12c5a16ad

voltage本身是个浮点数请问怎样分离?谢谢!

回复

使用道具 举报

地板
ID:1 发表于 2011-3-22 19:38 | 只看该作者
  http://www.51hei.com/mcu/1206.html
回复

使用道具 举报

5#
ID:28704 发表于 2011-3-25 13:17 | 只看该作者
这个问题很好,我也想知道怎么解决,希望有高手一起来讨论。
回复

使用道具 举报

6#
ID:40045 发表于 2012-5-10 22:04 | 只看该作者
看不懂    看不……
回复

使用道具 举报

7#
ID:40740 发表于 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;                   //小数点位
      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;                 //个位
      MSDELAY(10);     
  P2 = 0XFF;
  P0 = 0X0F;
  P2 = 0X7F;
  P0 = 0X0E;                 //小数点
      MSDELAY(10);     
  P2 = 0XFF;
  P0 = 0X0F;
  P2 = SEG_DATA[TEM_DIS[3]];
  P0 = 0X07;                 //百位
      MSDELAY(10);
      P2 = 0XFF;
  P0 = 0X0F;
}

 

 

这是我的温度数值转换,你看看

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表