1. bread88lifa利发国际娱乐论坛/
  2. 嵌入式论坛/
    1. 电子论坛综合区
    2. 嵌入式论坛
    3. 电源技术论坛
    4. 硬件设计论坛
    5. 测试测量论坛
    6. 检测技术与质量
    7. EDA设计论坛
    8. 综合技术与应用
    9. 开源硬件
    10. IC设计论坛
    11. 消费电子论坛
    12. 无线通信论坛
    13. 个人版区
    14. 厂商专区
    15. 论坛服务区
    16. 高校联盟
    17. 供求信息发布
  3. 单片机/MCU论坛
    1. ARM技术论坛
    2. Android论坛
    3. Linux论坛
    4. MSP430技术论坛
    5. FPGA|CPLD|ASIC论坛
    6. STM32/STM8技术论坛
    7. NXP MCU 技术论坛
    8. PIC单片机论坛
    9. DSP论坛
    10. 瑞萨单片机论坛
    11. 嵌入式系统论坛
  4. / 求改程序,原程序中数值是0.5的变,想改成0.1的变 ...
    关闭提示

[问答] 求改程序,原程序中数值是0.5的变,想改成0.1的变

[复制链接]
实习生
发表于 2017-10-31 23:29:43   859 查看 6 回复 只看该作者 倒序浏览
分享
   #include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code lednum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//数码管字0~9
uint  temp;
uchar g,s,b,q;   //个十百千位
//uchar data disdata[5];
uint  Tvalue;     //温度值
uchar Tflag;      //温度正负标志

sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit  DQ=P3^7;//ds18b20与单片机连接口
sbit P17=P1^7;
sbit P24=P2^4;
/*****************延时函数********************/
void delay(uint x)
{  uchar k;
   while(x--)
   for(k=0;k<200;k++) ;
}
/*****************数码管扫描********************/        
void ledscan(void)
{   uchar k;
    for(k=0;k<150;k++)
{   //显示DS18B20  小数点一位,含负温度显示
    P1=lednum[g];P2=0x0e;delay(1);P1=0x00;
        P1=lednum[s];P17=1;P2=0x0d;delay(1);P1=0x00;
     P1=lednum[b];P2=0x0b;delay(1);P1=0x00;
     P1=lednum[q];P2=0x07;delay(1);P1=0x00;
  }
}
/******************************DS18B20程序(定义开始)***************************************/
void delay_18B20(unsigned int i)//延时2微秒
{
  while(i--);
}
/*****************ds1820复位****************/
void DS18B20_RST()         
{  unsigned char x=0;
  DQ = 1;           //DQ复位
  delay_18B20(8);   //延时
  DQ = 0;           //DQ拉低
  delay_18B20(80); //精确延时大于480us
  DQ = 1;           //拉高
  delay_18B20(14);
  x=DQ;
  delay_18B20(20);  
   }  
/*****************读数据*******************/  
uchar DS18B20_RD()        
  {  unsigned char i=0;
  unsigned char R_data= 0;
  for (i=8;i>0;i--)
  {    DQ = 0;      //给脉冲信号
    R_data>>=1;  //
    DQ = 1;      //给脉冲信号
    if(DQ)
    R_data|=0x80;
    delay_18B20(4);
  }
  return(R_data);
  }
/*******************写数据*******************/
  void DS18B20_WR(uchar W_data)
  {  
     unsigned char i=0;
     for (i=8; i>0; i--)
    {  DQ = 0;
       DQ = W_data&0x01;
       delay_18B20(5);
       DQ = 1;
       W_data>>=1;  //
    }
  delay_18B20(4);
}
/****************读取温度值并转换***************/
read_temp()
{  uchar a,b;
    DS18B20_RST();   
    DS18B20_WR(0xcc);  //*跳过读序列号*/
    DS18B20_WR(0x44);  //*启动温度转换*/
    DS18B20_RST();   
    DS18B20_WR(0xcc);  //*跳过读序列号*/
    DS18B20_WR(0xbe);  //*读取温度*/
    a=DS18B20_RD();
    b=DS18B20_RD();
    Tvalue=b;
    Tvalue<<=8;    //
    Tvalue=Tvalue|a;
    if(Tvalue<0x0fff)
    Tflag=0;
    else
   {
      Tvalue=~Tvalue+1;
      Tflag=1;
    }
      Tvalue=Tvalue*(0.625);//温度值扩大10倍,精确到1位小数
return(Tvalue);
  }
  /****************温度值显示***************/
void DS1820disp()
{
          b=Tvalue/100%10;//十位数
          s=Tvalue/10%10;  //个位数
          g=Tvalue%10;      //小数位
   
     if(Tflag==0)
      q=Tvalue/1000;    //正温度不显示符号,显示百位数
     else
         q=10;//负温度显示负号:-

   }
/******************************DS18B20程序(定义结束)***************************************/
/*****************主函数********************/
void main()
{   
      
while(1)
  {
    read_temp();
    DS1820disp();
          ledscan();
        
   }
}
人中狼 2017-10-31 查看ds18b20的手册,把返回的温度数据拆分成整数和小数部分,两部分分开计算,ds18b20能到125度,你现在的程序也只能到温度的十位数,看看手册,也找找例程,参考例程修改一下,既然能正确显示温度,那问题就是在数据转换上了
标签:单片机 C语言
举报
高级工程师
发表于 2017-10-31 23:29:44  
查看ds18b20的手册,把返回的温度数据拆分成整数和小数部分,两部分分开计算,ds18b20能到125度,你现在的程序也只能到温度的十位数,看看手册,也找找例程,参考例程修改一下,既然能正确显示温度,那问题就是在数据转换上了
回复 点赞 举报
高级工程师
发表于 2017-11-1 08:46:14  

回帖奖励 +1 分积分

参数改一下就好了啊
回复 点赞 举报
工程师
发表于 2017-11-1 09:06:35  
1 0 0 2 9 2 5 0 9 4   
回复 点赞 举报
实习生
发表于 2017-11-1 09:15:01    楼主|
chenwei6991627 发表于 2017-11-1 08:46
参数改一下就好了啊

可是我不清楚怎么改参数
回复 点赞 举报
实习生
发表于 2017-11-1 10:49:02  
我帮你改 加Q752810181
回复 点赞 举报
工程师
发表于 2017-11-1 12:00:38  
多次求平均值,然后显示的时候,把显示值和上一次值 求平均,这样就波动小!!!!!!!
回复 点赞 举报
高级模式
您需要登录后才可以回帖 登录 | 注册
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
  1. time最新主题
  2. recommend推荐主题
  3. hot热门主题
  4. post 我的帖子
-

推荐专区

技术干货集中营

专家问答

方案交易

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

PIC单片机论坛

DSP论坛

瑞萨单片机论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

电子展览展会专区

芯片求购|供应发布区

88lifa利发国际娱乐

百度360搜索搜狗搜索