一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 3390|回复: 9
收起左侧

[其他综合] AD转换值怎样分离个位十位百小数位

[复制链接]
发表于 2011-3-22 00:11 | 显示全部楼层 |阅读模式
请问如下程序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显示出来应该怎样分离个位十位百。小数位呢?谢谢!
发表于 2011-3-22 08:21 | 显示全部楼层
num=num-(int)num;//求小数部分,乘10,用一下方法取第一位小数。

num=(int)num%10;//取个位
num=(int)num/10%10;//取十位
num=(int)num/100;//取十位以上,或者是num=(int)num/100%10;//取百位。
发表于 2011-3-22 08:22 | 显示全部楼层
除十取模
 楼主| 发表于 2011-3-22 11:34 | 显示全部楼层
num=num-(int)num;//求小数部分,乘10,用一下方法取第一位小数。

num=(int)num%10;//取个位
num=(int) ...
chillmax 发表于 2011-3-22 08:21 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



    voltage本身是个浮点数请问按这个分离就行了吗?谢谢!
发表于 2011-3-22 15:02 | 显示全部楼层
voltage本身是个浮点数请问按这个分离就行了吗?谢谢!
LBQ691477940 发表于 2011-3-22 11:34 https://www.yleee.com.cn/images/common/back.gif



   (int)num 强制转换类型。
发表于 2011-3-22 15:41 | 显示全部楼层
浮点数会把MCU累死的
 楼主| 发表于 2011-3-22 17:05 | 显示全部楼层
本帖最后由 LBQ691477940 于 2011-3-22 17:12 编辑
num=num-(int)num;//求小数部分,乘10,用一下方法取第一位小数。

num=(int)num%10;//取个位
num=(int) ...
chillmax 发表于 2011-3-22 08:21 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



定义:
float voltage = 0.0;
float VCC = 4.99;
uchar va,vb;
运行
voltage = 0x36f * 5.0 / 1024;
va=(uchar)voltage%10;
vb=(voltage-(uchar)voltage)*10;
防真后
voltage =4.291992
va = 4 好像也正确了
vb = 2 好像也正确了
如果还想将4.2后面的919数也分离出来怎么搞呢?谢谢!
 楼主| 发表于 2011-3-22 17:07 | 显示全部楼层
浮点数会把MCU累死的
fujiachun 发表于 2011-3-22 15:41 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



    浮点数会把我累死
发表于 2011-3-22 18:09 | 显示全部楼层
用整形就可以了,这种情况用浮点数一点优势也没有,浪费时间也浪费空间
发表于 2011-3-22 19:09 | 显示全部楼层
回复 7# LBQ691477940


  
如果还想将4.2后面的919数也分离出来怎么搞呢?


乘10,原来的第一位小数不久跑到个位了嘛,把他取出来就行。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-3 02:58 , Processed in 0.071138 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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