文号
t32773
阅读
14022
回复
14
收藏
8
基础不好,求C51怎么算这个?
2011/03/26
IP:广东
temp=(ADC-5.58)/-0.035          突然发现我什么都不懂。
14
15年9个月前IP:未同步
286780
1楼
如果ADC是ADC数据寄存器的名称,那么你写的是对的。
引用
评论
15年9个月前IP:未同步
286849
2楼
float temp;
temp=((float)ADC-5.58)/0.035*(-1);
引用
评论
15年9个月前IP:未同步
286877
3楼
uint16 temp;

temp=(ADC-5.58)/-0.035;//ADC=4.8;
shi=temp/10;
ge=temp%10;
结果数码管显示57;用计算器算出来是20左右。
引用
评论
15年9个月前IP:未同步
286878
4楼
回 2楼(refinder) 的帖子
你的我会试试看!谢谢/
引用
评论
15年9个月前IP:未同步
286990
5楼
ADC的值是不是电压值,需要根据AD分辨率和REF电压变成电压后再进行计算。
引用
评论
15年9个月前IP:未同步
286992
6楼
之前对它加工过了。ADC是转换之后真正的电压、KEIL 定义float temp;就出错。怎么回事?
引用
评论
15年9个月前IP:未同步
287048
7楼
许久没用keil了,你也没说咋错误了,貌似你包含头文件不对了。楼主是否在编温度显示程序?呵呵,怀念啊
你ADC是什么数据类型的?需要转换吗?temp就用unsigned char试下吧,
unsigned char temp;
temp=(5.58-ADC)/0.035;//ADC=4.8;
shi=temp/10;
ge=temp%10;
这个看看如何。
引用
评论
15年9个月前IP:未同步
290246
8楼
51单片机浮点需要软件模拟,尽量避免浮点运算,精度要求不高的话可以用整数运算代替。
如果非要用浮点keil c51好像需要额外的库
引用
评论
15年9个月前IP:未同步
290248
9楼
当然是用定点运算,怎么用浮点运算呢?
引用
评论
15年8个月前IP:未同步
292921
10楼
算是做得差不多了,有兴趣的可以指点一下。
attachment icon ceshi.rar 69.47KB RAR 43次下载
引用
评论
15年8个月前IP:未同步
292922
11楼
if(u==10)
       {                                                
             u=0;
             flag++;
        
            temp=read_AD(CH1)*2;//电阻分压过,值要乘2
              
            if(temp<5590)//高于0度
            {
                LED=1;
              temp=(temp-5590)/-40;
            }
            if(temp>5590)//低于0度
            {
                LED=0;
                temp=(temp-5590)/40;
            
            }    
        
                 shi=temp%100/10;  //取十位
                ge=temp%10;          //取个位
        }
引用
评论
15年8个月前IP:未同步
292923
12楼
uint16 read_AD(uint8 channel)
{
    uint8 AD_finished=0;      
    uint16 h_val;
    uint16 l_val;
    ADC_RES = 0;
    ADC_RESL = 0;

    channel &= 0x01;      
    ADC_CONTR = AD_SPEED;  //转换速度90个时钟一次
    delay_us(1);
    ADC_CONTR |= channel; //选通道、      
    delay_us(1);
    ADC_CONTR |= 0x80;   //开ADC电源
    delay_us(1);            
    ADC_CONTR |= 0x08;   //启动AD转换  
    AD_finished = 0;
    while ( AD_finished ==0 )  
    {
        AD_finished = (ADC_CONTR & 0x10); //查询标志位
    }
    ADC_CONTR &= 0xE7;//标志手动清0        
    h_val = ADC_RES;//AD寄存器高8位。
    h_val = h_val<<2;
    l_val = ADC_RESL & 0X03; //AD寄存器低8位,2位有效。
    
        
    h_val = h_val | l_val;
     h_val=(h_val*5/1024)*1000;    //换算成电压放大1000倍
    return (h_val);              
}
引用
评论
12年5个月前IP:未同步
708745
13楼
天啊51做浮点运算
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的