找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机温度测试不准确显示为0

[复制链接]
跳转到指定楼层
楼主
ID:208105 发表于 2017-11-30 23:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
温度显示为0,怎么回事,急
  1. #include "reg52.h"
  2. #include "ds1302.h"
  3. #include "LCD1602.h"  
  4. #include "temp.h"
  5. #include  <stdio.h>
  6. char i;
  7. char  Display_Buffer[9]={"11:59:00"};//ʱ¼äµÄ¸ñʽ
  8. char riqi[]={"17-11-29"};
  9. unsigned char temp,displaytemp[16];
  10. unsigned char second,minute,hour,year,month,day;
  11. void time_read();
  12. void template_read();
  13. void time_read()
  14. {
  15.    second= Ds1302Read(0x81);
  16.     _nop_();
  17.     minute= Ds1302Read(0x83);
  18.     _nop_();
  19.     hour= Ds1302Read(0x85);
  20.   _nop_();
  21.   day=Ds1302Read(0x87);
  22.   _nop_();
  23.   month=Ds1302Read(0x89);
  24.   _nop_();
  25.   year=Ds1302Read(0x8d);  
  26.   _nop_();
  27.    Display_Buffer[0]=hour/16+'0';
  28.   Display_Buffer[1]=hour%16+'0';
  29.   Display_Buffer[3]=minute/16+'0';
  30.   Display_Buffer[4]=minute%16+'0';
  31.   Display_Buffer[6]=second/16+'0';
  32.   Display_Buffer[7]=second%16+'0';
  33.   riqi[0]=year/16+'0';
  34.     riqi[1]=year%16+'0';
  35.     riqi[3]=month/16+'0';
  36.     riqi[4]=month%16+'0';
  37.     riqi[6]=day/16+'0';
  38.     riqi[7]=day%16+'0';
  39. }
  40. void datapros(int temp)   
  41. {
  42.     float tp;  
  43.    if(temp< 0)   
  44.    {
  45.   temp=temp-1;
  46.   temp=~temp;
  47.   tp=temp;
  48.   temp=tp*0.0625*100+0.5;
  49.    }
  50.     else
  51.    {   
  52.   tp=temp;
  53.   temp=tp*0.0625*100+0.5;
  54. }
  55. }
  56. void main()
  57. {
  58.        LCD1602_Init();
  59.         Ds1302Init();
  60. //        Ds18b20Init();
  61.     while(1)
  62.     {
  63.       Ds1302ReadTime();
  64.       time_read();
  65. //      LCD1602_Write_String(0,9,Display_Buffer);//ÏÔʾʱ¼ä
  66. //         LCD1602_Write_String(0,0,riqi);//ÏÔʾÈÕÆÚ
  67.       datapros(Ds18b20ReadTemp());//Êý¾Ý´¦Àí
  68.       sprintf(displaytemp,"T:%5.5f",temp);//´òӡζÈÖµ
  69.          LCD1602_Write_String(0,1,displaytemp);//ÏÔʾζÈÖµ
  70.     }
  71. }


  72. 温度的函数
  73. #include"temp.h"
  74. /*******************************************************************************
  75. * º¯ Êý Ãû         : Delay1ms
  76. * º¯Êý¹¦ÄÜ     : ÑÓʱº¯Êý
  77. * Êä    Èë         : ÎÞ
  78. * Êä    ³ö         : ÎÞ
  79. *******************************************************************************/
  80. void Delay1ms(uint y)
  81. {
  82. uint x;
  83. for( ; y>0; y--)
  84. {
  85.   for(x=110; x>0; x--);
  86. }
  87. }
  88. /*******************************************************************************
  89. * º¯ Êý Ãû         : Ds18b20Init
  90. * º¯Êý¹¦ÄÜ     : ³õʼ»¯
  91. * Êä    Èë         : ÎÞ
  92. * Êä    ³ö         : ³õʼ»¯³É¹¦·µ»Ø1£¬Ê§°Ü·µ»Ø0
  93. *******************************************************************************/
  94. uchar Ds18b20Init()
  95. {
  96. uchar i;
  97. DSPORT = 0;    //½«×ÜÏßÀ­µÍ480us~960us
  98. i = 70;
  99. while(i--);//ÑÓʱ642us
  100. DSPORT = 1;   //È»ºóÀ­¸ß×ÜÏߣ¬Èç¹ûDS18B20×ö³ö·´Ó¦»á½«ÔÚ15us~60usºó×ÜÏßÀ­µÍ
  101. i = 0;
  102. while(DSPORT) //µÈ´ýDS18B20À­µÍ×ÜÏß
  103. {
  104.   Delay1ms(1);
  105.   i++;
  106.   if(i>5)//µÈ´ý>5MS
  107.   {
  108.    return 0;//³õʼ»¯Ê§°Ü
  109.   }

  110. }
  111. return 1;//³õʼ»¯³É¹¦
  112. }
  113. /*******************************************************************************
  114. * º¯ Êý Ãû         : Ds18b20WriteByte
  115. * º¯Êý¹¦ÄÜ     : Ïò18B20дÈëÒ»¸ö×Ö½Ú
  116. * Êä    Èë         : ÎÞ
  117. * Êä    ³ö         : ÎÞ
  118. *******************************************************************************/
  119. void Ds18b20WriteByte(uchar dat)
  120. {
  121. uint i, j;
  122. for(j=0; j<8; j++)
  123. {
  124.   DSPORT = 0;         //ÿдÈëһλÊý¾Ý֮ǰÏÈ°Ñ×ÜÏßÀ­µÍ1us
  125.   i++;
  126.   DSPORT = dat & 0x01;  //È»ºóдÈëÒ»¸öÊý¾Ý£¬´Ó×îµÍλ¿ªÊ¼
  127.   i=6;
  128.   while(i--); //ÑÓʱ68us£¬³ÖÐøʱ¼ä×îÉÙ60us
  129.   DSPORT = 1; //È»ºóÊÍ·Å×ÜÏߣ¬ÖÁÉÙ1us¸ø×ÜÏ߻ָ´Ê±¼ä²ÅÄܽÓ×ÅдÈëµÚ¶þ¸öÊýÖµ
  130.   dat >>= 1;
  131. }
  132. }
  133. /*******************************************************************************
  134. * º¯ Êý Ãû         : Ds18b20ReadByte
  135. * º¯Êý¹¦ÄÜ     : ¶ÁÈ¡Ò»¸ö×Ö½Ú
  136. * Êä    Èë         : ÎÞ
  137. * Êä    ³ö         : ÎÞ
  138. *******************************************************************************/

  139. uchar Ds18b20ReadByte()
  140. {
  141. uchar byte, bi;
  142. uint i, j;
  143. for(j=8; j>0; j--)
  144. {
  145.   DSPORT = 0;//ÏȽ«×ÜÏßÀ­µÍ1us
  146.   i++;
  147.   DSPORT = 1;//È»ºóÊÍ·Å×ÜÏß
  148.   i++;
  149.   i++;//ÑÓʱ6usµÈ´ýÊý¾ÝÎȶ¨
  150.   bi = DSPORT;  //¶ÁÈ¡Êý¾Ý£¬´Ó×îµÍλ¿ªÊ¼¶ÁÈ¡
  151.   /*½«byte×óÒÆһλ£¬È»ºóÓëÉÏÓÒÒÆ7λºóµÄbi£¬×¢ÒâÒƶ¯Ö®ºóÒƵôÄÇλ²¹0¡£*/
  152.   byte = (byte >> 1) | (bi << 7);        
  153.   i = 4;  //¶ÁÈ¡ÍêÖ®ºóµÈ´ý48usÔÙ½Ó×ŶÁÈ¡ÏÂÒ»¸öÊý
  154.   while(i--);
  155. }   
  156. return byte;
  157. }
  158. /*******************************************************************************
  159. * º¯ Êý Ãû         : Ds18b20ChangTemp
  160. * º¯Êý¹¦ÄÜ     : ÈÃ18b20¿ªÊ¼×ª»»Î¶È
  161. * Êä    Èë         : ÎÞ
  162. * Êä    ³ö         : ÎÞ
  163. *******************************************************************************/
  164. void  Ds18b20ChangTemp()
  165. {
  166. Ds18b20Init();
  167. Delay1ms(1);
  168. Ds18b20WriteByte(0xcc);  //Ìø¹ýROM²Ù×÷ÃüÁî   
  169. Ds18b20WriteByte(0x44);     //ζÈת»»ÃüÁî
  170. //Delay1ms(100); //µÈ´ýת»»³É¹¦£¬¶øÈç¹ûÄãÊÇһֱˢ×ŵĻ°£¬¾Í²»ÓÃÕâ¸öÑÓʱÁË
  171.    
  172. }
  173. /*******************************************************************************
  174. * º¯ Êý Ãû         : Ds18b20ReadTempCom
  175. * º¯Êý¹¦ÄÜ     : ·¢ËͶÁȡζÈÃüÁî
  176. * Êä    Èë         : ÎÞ
  177. * Êä    ³ö         : ÎÞ
  178. *******************************************************************************/
  179. void  Ds18b20ReadTempCom()
  180. {
  181. Ds18b20Init();
  182. Delay1ms(1);
  183. Ds18b20WriteByte(0xcc);  //Ìø¹ýROM²Ù×÷ÃüÁî
  184. Ds18b20WriteByte(0xbe);  //·¢ËͶÁȡζÈÃüÁî
  185. }
  186. /*******************************************************************************
  187. * º¯ Êý Ãû         : Ds18b20ReadTemp
  188. * º¯Êý¹¦ÄÜ     : ¶ÁȡζÈ
  189. * Êä    Èë         : ÎÞ
  190. * Êä    ³ö         : ÎÞ
  191. *******************************************************************************/
  192. int Ds18b20ReadTemp()
  193. {
  194. int temp = 0;
  195. uchar tmh, tml;
  196. Ds18b20ChangTemp();     //ÏÈдÈëת»»ÃüÁî
  197. Ds18b20ReadTempCom();   //È»ºóµÈ´ýת»»Íêºó·¢ËͶÁȡζÈÃüÁî
  198. tml = Ds18b20ReadByte();  //¶ÁȡζÈÖµ¹²16룬ÏȶÁµÍ×Ö½Ú
  199. tmh = Ds18b20ReadByte();  //ÔÙ¶Á¸ß×Ö½Ú
  200. temp = tmh;
  201. temp <<= 8;
  202. temp |= tml;
  203. return temp;
  204. }
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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