找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1274|回复: 0
收起左侧

W014-多功能数字温度表(DS18B20)单片机程序

[复制链接]
ID:436321 发表于 2018-11-30 09:56 | 显示全部楼层 |阅读模式
温度仪表资料

单片机源程序如下:
  1. /*******************************************************************************
  2. * 实验名称: 多功能数字温度表(DS18B20)                                          *
  3. ********************************************************************************
  4. * 实验描述: 多功能数字温度表具有测温、预设温度上下限、声光报警等功能           *                               *
  5. * 实验说明: 各功能键如下:                                                                       *
  6. *                        S1      温度上下限设置及确认键                                                                *
  7. *                        S2             温度上(下)限加1键                                                                       *
  8. *           S3             温度上(下)限减1键                                          *
  9. *           BELL    声音报警                                                                                                   *
  10. *           D04     光报警                                                                                                           *
  11. *                                                                                                                                              *
  12. *                    温度上下限设置过程:                                                                                           *
  13. *                    (1)按S1进入温度上限设置界面,然后按S2或S3设置温度上限值,                   *
  14. *                       最后按S1确认,自动进入温度下限设置界面。                                                   *
  15. *                        (2)按S2或S3设置温度下限值,按S1确认,自动进入温度测量状态                   *
  16. *                                                                                                                                                           *
  17. *                       当温度超过上下限时,会发出声光报警,并显示相关信息                           *
  18. *******************************************************************************/

  19. #include <reg52.h>
  20. #include <intrins.h>

  21. #define uchar unsigned char
  22. #define uint  unsigned int


  23. sbit DQ = P3^7 ;         //定义DS18B20端口DQ
  24. sbit BEEP = P1^4 ;       //定义蜂鸣器端口
  25. sbit RED_Light = P1^3 ;         //报警灯

  26. sbit LCD_RS = P2^3;
  27. sbit LCD_RW = P2^4;

  28. sbit HC138_A = P2^5;
  29. sbit HC138_B = P2^6;
  30. sbit HC138_C = P2^7;

  31. #define SELECT_LCD()        HC138_A=0; HC138_B=1; HC138_C=0
  32. #define NOSELECT_LCD()        HC138_A=1; HC138_B=1; HC138_C=1

  33. sbit S1 = P1^5 ;         //设置键和确认键
  34. sbit S2 = P1^6 ;         //加1键
  35. sbit S3 = P1^7 ;         //减1键

  36. bit presence  ;

  37. uchar TH=30;        //初始温度上限值
  38. uchar TL=25;        //初始温度下限值

  39. uchar Keyset_Flag = 0;        //S1键扫描标志位
  40. uchar BEEP_Flag = 0;    //蜂鸣器报警标志位

  41. uchar code  dis_code1[ ] = {"   DS18B20 OK   "} ;
  42. uchar code  dis_code2[ ] = {"  TEMP:    .  C "} ;
  43. uchar code  dis_code3[ ] = {" DS18B20  ERR0R "} ;
  44. uchar code  dis_code4[ ] = {"  PLEASE CHECK  "} ;

  45. uchar data  temp_data[2] = {0x00,0x00} ;   //温度数据缓存
  46. uchar data  display_TH[2] = {0x00,0x00} ;  //温度上限值十位个位
  47. uchar data  display_TL[2] = {0x00,0x00} ;  //温度下限值十位个位

  48. uchar data  dis_data[5] =   {0x00,0x00,0x00,0x00,0x00} ;  //温度值百十个小数位及一个数据缓存

  49. /*温度小数部分查表*/
  50. uchar code  ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
  51.                          0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ;

  52. /*自定义字符*/
  53. uchar code  mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ; //度的符号



  54. /*******************************************************************/
  55. /*                                                                 */
  56. /* us级延时函数                                                    */
  57. /*                                                                 */
  58. /*******************************************************************/
  59. void Delay(unsigned int num)
  60. {
  61.   while( --num ) ;
  62. }

  63. /*******************************************************************/
  64. /*                                                                 */
  65. /* ms级延时函数                                                    */
  66. /*                                                                 */
  67. /*******************************************************************/
  68. void Delayms(unsigned char ms)
  69. {                                                
  70.         unsigned char i;
  71.         while(ms--)
  72.         {
  73.                 for(i = 0; i < 120; i++);
  74.         }
  75. }

  76. /*******************************************************************/
  77. /*                                                                 */
  78. /* 检测LCD的忙碌状态                                               */
  79. /*                                                                 */
  80. /*******************************************************************/
  81. bit LCD_Busy()               
  82. {                                                        
  83.         bit result;
  84.         LCD_RS = 0;                           
  85.         LCD_RW = 1;
  86.         SELECT_LCD();
  87.         _nop_();
  88.         _nop_();
  89.         _nop_();
  90.         _nop_();
  91.         result = (bit)(P0 & 0x80);        //检查LCD的DB7的值 1为忙 0为空闲,可写指令与数据
  92.         NOSELECT_LCD();
  93.         return result;        
  94. }

  95. /*******************************************************************/
  96. /*                                                                 */
  97. /* 写指令数据到LCD                                                 */
  98. /*                                                                 */
  99. /*******************************************************************/
  100. LCD_WriteCommand(uchar cmd)         
  101. {                                                           
  102.         while(LCD_Busy());
  103.         LCD_RS = 0;
  104.         LCD_RW = 0;
  105.         NOSELECT_LCD();
  106.         _nop_();
  107.         _nop_();        
  108.         P0 = cmd;
  109.         _nop_();
  110.         _nop_();
  111.         _nop_();
  112.         _nop_();
  113.         SELECT_LCD();
  114.         _nop_();
  115.         _nop_();
  116.         _nop_();
  117.         _nop_();
  118.         NOSELECT_LCD();               
  119. }

  120. /*******************************************************************/
  121. /*                                                                 */
  122. /* 写显示数据到LCD                                                 */
  123. /*                                                                 */
  124. /*******************************************************************/
  125. LCD_WriteDate(uchar dat)
  126. {                                                        
  127.         while(LCD_Busy());
  128.         LCD_RS = 1;
  129.         LCD_RW = 0;
  130.         NOSELECT_LCD();
  131.         P0 = dat;
  132.         _nop_();
  133.         _nop_();
  134.         _nop_();
  135.         _nop_();
  136.         SELECT_LCD();
  137.         _nop_();
  138.         _nop_();
  139.         _nop_();
  140.         _nop_();
  141.         NOSELECT_LCD();        
  142. }

  143. /*******************************************************************/
  144. /*                                                                 */
  145. /* 设定字符在LCD上显示的位置                                       */
  146. /*                                                                 */
  147. /*******************************************************************/
  148. LCD_DisplayPosit(uchar pos)           
  149. {                                                        
  150.         LCD_WriteCommand(pos | 0x80);
  151. }

  152. /*******************************************************************/
  153. /*                                                                 */
  154. /* LCD初始化                                                       */
  155. /*                                                                 */
  156. /*******************************************************************/
  157. LCD_Init()                        
  158. {                                                        
  159.         LCD_WriteCommand(0x38);           
  160.         Delay(5);
  161.         LCD_WriteCommand(0x0c);         
  162.         Delay(5);
  163.         LCD_WriteCommand(0x06);           
  164.         Delay(5);
  165.         LCD_WriteCommand(0x01);           
  166.         Delay(5);
  167. }

  168. /*******************************************************************/
  169. /*                                                                 */
  170. /* 自定义字符写入CGRAM函数                                         */
  171. /*                                                                 */
  172. /*******************************************************************/
  173. void  LCD_WriteMytab()  
  174. {  
  175.     unsigned char i ;
  176.     LCD_WriteCommand(0x40) ;      //写CGRAM
  177.     for (i = 0 ; i< 8 ; i++)      
  178.     LCD_WriteDate(mytab[ i ]) ;        
  179. }

  180. /*******************************************************************/
  181. /*                                                                 */
  182. /* LCD上显示两行字符函数                                           */
  183. /*                                                                 */
  184. /*******************************************************************/
  185. void LCD_DisplayLine(uchar a[ ],uchar b[ ])        
  186. {
  187.     uchar  m ;
  188.     LCD_Init() ;               
  189.             
  190.     LCD_DisplayPosit(0) ;      //设置显示位置为第一行的第1个字符
  191.      m = 0 ;
  192.     while(a[m] != '\0')
  193.      {                         //显示第一行字符
  194.        LCD_WriteDate(a[m]) ;
  195.        m++ ;
  196.      }

  197.     LCD_DisplayPosit(0x40) ;   //设置显示位置为第二行第1个字符
  198.      m = 0 ;
  199.     while(b[m] != '\0')
  200.      {
  201.        LCD_WriteDate(b[m]) ;   //显示第二行字符
  202.        m++ ;
  203.      }
  204. }

  205. /*******************************************************************/
  206. /*                                                                 */
  207. /* DS18B20初始化                                                   */
  208. /*                                                                 */
  209. /*******************************************************************/
  210. DS18B20_Init(void)         
  211. {  
  212.      DQ = 1 ;        //DQ复位
  213.      Delay(8) ;      //延时

  214.      DQ = 0 ;        //将DQ拉低
  215.      Delay(90) ;     //精确延时 大于 480us

  216.      DQ = 1 ;        //拉高总线
  217.      Delay(8) ;

  218.      presence = DQ ;    //如果 presence=0则初始化成功 presence=1则初始化失败
  219.      Delay(100) ;
  220.      DQ = 1 ;
  221.      
  222.      return(presence) ; //返回presence
  223. }

  224. /*******************************************************************/
  225. /*                                                                 */
  226. /* 读一个字节数据                                                  */
  227. /*                                                                 */
  228. /*******************************************************************/
  229. ReadOneChar(void)         
  230. {
  231.   unsigned char i = 0 ;
  232.   unsigned char dat = 0 ;

  233.   for (i = 8 ; i > 0 ; i--)
  234.     {
  235.       DQ = 0 ;   
  236.       dat >>= 1 ;
  237.       DQ = 1 ;   

  238.       if(DQ)
  239.         dat |= 0x80 ;
  240.         Delay(4) ;
  241.     }

  242.     return (dat) ;
  243. }

  244. /*******************************************************************/
  245. /*                                                                 */
  246. /* 写一个字节数据                                                  */
  247. /*                                                                 */
  248. /*******************************************************************/
  249. WriteOneChar(unsigned char dat)
  250. {
  251.   unsigned char i = 0 ;
  252.   for (i = 8 ; i > 0 ; i--)
  253.   {
  254.     DQ = 0 ;
  255.     DQ = dat&0x01 ;
  256.     Delay(5) ;

  257.     DQ = 1 ;
  258.     dat>>=1 ;
  259.   }
  260. }

  261. /*******************************************************************/
  262. /*                                                                 */
  263. /* 读取温度数据                                                    */
  264. /*                                                                 */
  265. /*******************************************************************/
  266. ReadTemperature(void)         
  267. {
  268.      DS18B20_Init() ;
  269.   
  270.      WriteOneChar(0xCC) ;  //跳过读序号列号的操作
  271.      WriteOneChar(0x44) ;  //启动温度转换

  272.      DS18B20_Init() ;
  273.      WriteOneChar(0xCC) ;  //跳过读序号列号的操作
  274.      WriteOneChar(0xBE) ;  //读取温度寄存器

  275.      temp_data[0] = ReadOneChar() ;   //读温度低8位
  276.      temp_data[1] = ReadOneChar() ;   //读温度高8位
  277. }

  278. /*******************************************************************/
  279. /*                                                                 */
  280. /* 温度数据转换和显示                                              */
  281. /*                                                                 */
  282. /*******************************************************************/
  283. TemperatureDisplay()        
  284. {
  285.   dis_data[4]=temp_data[0]&0x0f ;               //temp_data[0]低4为有效
  286.   dis_data[3]=ditab[dis_data[4]]+0x30;     //查表得小数位的值
  287.   
  288.   dis_data[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
  289.   dis_data[2]=dis_data[4]%10+0x30;                   //个位
  290.   dis_data[1]=(dis_data[4]/10)%10+0x30;           //十位
  291.   dis_data[0]=dis_data[4]/100+0x30;                   //百位

  292.     if(dis_data[0]==0x30)        //百位为0,不显示
  293.    {
  294.      dis_data[0]=0x20;
  295.                        
  296.      if(dis_data[1]==0x30)       //十位为0,不显示
  297.        dis_data[1]=0x20 ;
  298.    }

  299.      LCD_DisplayPosit(0x48) ;            
  300.      LCD_WriteDate(dis_data[0]) ;        //百位数显示
  301.      LCD_DisplayPosit(0x49) ;            
  302.      LCD_WriteDate(dis_data[1]) ;        //十位数显示
  303.      LCD_DisplayPosit(0x4a) ;            
  304.      LCD_WriteDate(dis_data[2]) ;        //个位数显示
  305.      LCD_DisplayPosit(0x4c) ;            
  306.      LCD_WriteDate(dis_data[3]) ;        //小数位数显示
  307.          LCD_WriteMytab() ;                  //自定义字符(度的符号)写入CGRAM
  308.      Delay(5) ;
  309.      LCD_DisplayPosit(0x4d) ;
  310.      LCD_WriteDate(0x00) ;               //显示自定义字符(度的符号)

  311. }

  312. /*******************************************************************/
  313. /*                                                                 */
  314. /* DS18B20 OK 界面显示                                             */
  315. /*                                                                 */
  316. /*******************************************************************/
  317. void  DS18B20_OkMenu ()         
  318. {
  319.      LCD_DisplayLine(dis_code1,dis_code2);
  320. }

  321. /*******************************************************************/
  322. /*                                                                 */
  323. /* DS18B20 ERROR 界面显示                                          */
  324. /*                                                                 */
  325. /*******************************************************************/
  326. void  DS18B20_ErrorMenu ()
  327. {
  328.      LCD_DisplayLine(dis_code3,dis_code4);
  329. }


  330. /*******************************************************************/
  331. /*                                                                 */
  332. /* 蜂鸣器响一声                                                    */
  333. /*                                                                 */
  334. /*******************************************************************/
  335. void Beep()
  336.   {
  337.     unsigned char y ;
  338.     for (y=0 ;y<100 ;y++)
  339.     {
  340.       Delay(60) ;
  341.       BEEP=!BEEP ;      //BEEP取反
  342.     }
  343.     BEEP=1 ;            //关闭蜂鸣器
  344.     Delayms(20) ;
  345.   }


  346. /*******************************************************************/
  347. /*                                                                 */
  348. /* 温度高于上限时显示                                              */
  349. /*                                                                 */
  350. /*******************************************************************/

  351. void DisplayTHMenu()
  352. {
  353.      uchar code  dis_code5[ ] = {"  TEMP>TH     C "} ;
  354.          uchar code  dis_code6[ ] = {"  TEMP:    .  C "} ;

  355.      LCD_DisplayLine(dis_code5,dis_code6);

  356.          LCD_WriteMytab() ;        //自定义字符写入CGRAM
  357.      Delay(5) ;                                   //显示自定义字符
  358.      LCD_DisplayPosit(0x0D) ;
  359.      LCD_WriteDate(0x00) ;
  360.      Delay(5) ;
  361.      LCD_DisplayPosit(0x4d) ;
  362.      LCD_WriteDate(0x00) ;

  363.          display_TH[0] = TH/10+0x30;
  364.      display_TH[1] = TH%10+0x30;

  365.          LCD_DisplayPosit(0x0B) ;            
  366.      LCD_WriteDate(display_TH[0]) ;
  367.          LCD_DisplayPosit(0x0C) ;            
  368.      LCD_WriteDate(display_TH[1]) ;
  369. }

  370. /*******************************************************************/
  371. /*                                                                 */
  372. /* 温度低于下限时显示                                              */
  373. /*                                                                 */
  374. /*******************************************************************/

  375. void DisplayTLMenu()
  376. {
  377.      uchar code  dis_code5[ ] = {"  TEMP<TL     C "} ;
  378.          uchar code  dis_code6[ ] = {"  TEMP:    .  C "} ;

  379.      LCD_DisplayLine(dis_code5,dis_code6);

  380.          LCD_WriteMytab() ;        //自定义字符写入CGRAM
  381.      Delay(5) ;                                   //显示自定义字符
  382.      LCD_DisplayPosit(0x0D) ;
  383.      LCD_WriteDate(0x00) ;
  384.      Delay(5) ;
  385.      LCD_DisplayPosit(0x4d) ;
  386.      LCD_WriteDate(0x00) ;         

  387.          display_TL[0] = TL/10+0x30;
  388.      display_TL[1] = TL%10+0x30;

  389.          LCD_DisplayPosit(0x0B) ;            
  390.      LCD_WriteDate(display_TL[0]) ;
  391.          LCD_DisplayPosit(0x0C) ;            
  392.      LCD_WriteDate(display_TL[1]) ;


  393. }

  394. /*******************************************************************/
  395. /*                                                                 */
  396. /* 扫描设置键                                                      */
  397. /*                                                                 */
  398. /*******************************************************************/
  399. void SetKeyScan()
  400. {
  401.   if(S1==0)
  402.   {        
  403.     Delay(1000);
  404.         if(S1==0)
  405.         {
  406.           Keyset_Flag = 1;
  407.           Delay(200);
  408.         }
  409.   }
  410. }

  411. /*******************************************************************/
  412. /*                                                                 */
  413. /* 扫描处理键                                                      */
  414. /*                                                                 */
  415. /*******************************************************************/
  416. unsigned char KeyworthScan()
  417. {
  418.         unsigned char key_s;
  419.         key_s = 0x00;
  420.         key_s |= S1;
  421.         key_s <<= 1;
  422.         key_s |= S2;
  423.         key_s <<= 1;
  424.         key_s |= S3;
  425.         return key_s;               
  426. }

  427. /*******************************************************************/
  428. /*                                                                 */
  429. /* 温度上限设置界面上限值显示                                      */
  430. /*                                                                 */
  431. /*******************************************************************/
  432. void DisplayTH()
  433. {
  434.    display_TH[0] = TH/10+0x30;
  435.    display_TH[1] = TH%10+0x30;

  436.      LCD_DisplayPosit(0x4b) ;            
  437.      LCD_WriteDate(display_TH[0]) ;
  438.          LCD_DisplayPosit(0x4c) ;            
  439.      LCD_WriteDate(display_TH[1]) ;
  440. }

  441. /*******************************************************************/
  442. /*                                                                 */
  443. /* 温度上限设置界面显示                                            */
  444. /*                                                                 */
  445. /*******************************************************************/
  446. void SetTHMenu()
  447. {
  448.      uchar code  dis_code5[ ] = {"  SET THE TH ?  "} ;
  449.      uchar code  dis_code6[ ] = {"  NOW TH =    C "} ;

  450.      LCD_DisplayLine(dis_code5,dis_code6);

  451.          LCD_WriteMytab() ;               
  452.      Delay(10) ;
  453.      LCD_DisplayPosit(0x4d) ;
  454.      LCD_WriteDate(0x00) ;
  455. }

  456. /*******************************************************************/
  457. /*                                                                 */
  458. /* 温度上限值设置时显示                                            */
  459. /*                                                                 */
  460. /*******************************************************************/
  461. void SetTH()
  462. {
  463.    uchar key_v = 0x07;
  464.    uchar a = 1;
  465.    SetTHMenu();
  466.    DisplayTH();
  467.    while(a==1)
  468.    {
  469.       uchar key;
  470.       key = KeyworthScan();
  471.                              
  472.       if(key!=key_v)
  473.      {
  474.        Delayms(10);
  475.            key = KeyworthScan();
  476.            DisplayTH();

  477.            if(key!=key_v)
  478.            {
  479.              key_v = key;
  480.              if(key_v==0x05)
  481.              {
  482.                TH++;
  483.                 if(TH>99)TH=99;
  484.                         Keyset_Flag = 2;
  485.              }
  486.              else if(key_v==0x06)
  487.              {
  488.                 TH--;
  489.                 if(TH<0)TH=0;
  490.                         Keyset_Flag = 2;
  491.              }
  492.              else if(key_v==0x03&&Keyset_Flag == 2)
  493.                  {
  494.                        a = 0;
  495.                  }
  496.            }

  497.          }

  498.    }
  499. }

  500. /*******************************************************************/
  501. /*                                                                 */
  502. /* 温度下限设置界面显示                                            */
  503. /*                                                                 */
  504. /*******************************************************************/
  505. void SetTLMenu()
  506. {
  507.      uchar code  dis_code5[ ] = {"  SET THE TL ?  "} ;
  508.      uchar code  dis_code6[ ] = {"  NOW TL =    C "} ;

  509.      LCD_DisplayLine(dis_code5,dis_code6);

  510.          LCD_WriteMytab() ;            
  511.      Delay(10) ;
  512.      LCD_DisplayPosit(0x4d) ;
  513.      LCD_WriteDate(0x00) ;
  514. }

  515. /*******************************************************************/
  516. /*                                                                 */
  517. /* 温度下限设置界面下限值显示                                      */
  518. /*                                                                 */
  519. /*******************************************************************/
  520. void DisplayTL()
  521. {
  522.      display_TL[0] = TL/10+0x30;
  523.      display_TL[1] = TL%10+0x30;

  524.      LCD_DisplayPosit(0x4b) ;            
  525.      LCD_WriteDate(display_TL[0]) ;
  526.          LCD_DisplayPosit(0x4c) ;            
  527.      LCD_WriteDate(display_TL[1]) ;
  528. }

  529. /*******************************************************************/
  530. /*                                                                 */
  531. /* 温度下限值设置时显示                                            */
  532. /*                                                                 */
  533. /*******************************************************************/
  534. void SetTL()
  535. {
  536.    uchar key_v = 0x07;
  537.    uchar a=1;

  538.    SetTLMenu();
  539.    DisplayTL();
  540.    while(a==1)
  541.    {
  542.       uchar key_s;
  543.       key_s = KeyworthScan();
  544.                              
  545.       if(key_s!=key_v)
  546.      {
  547.        Delayms(10);
  548.            key_s = KeyworthScan();
  549.            DisplayTL();

  550.            if(key_s!=key_v)
  551.            {
  552.              key_v = key_s;
  553.              if(key_v==0x05)
  554.              {
  555.                 TL++;
  556.                 if(TL>99)TL=99;
  557.                         Keyset_Flag = 3;
  558.              }
  559.              else if(key_v==0x06)
  560.              {
  561.                 TL--;
  562.                 if(TL<0)TL=0;
  563.                         Keyset_Flag = 3;
  564.              }
  565.              else if(key_v==0x03&&Keyset_Flag == 3)
  566.                  {
  567.                             a=0;
  568.                  }
  569.            }

  570.          }

  571.    }
  572. }

  573. /*******************************************************************/
  574. /*                                                                 */
  575. /* 温度上下限设置                                                  */
  576. /*                                                                 */
  577. /*******************************************************************/
  578. void SetTH_TL()
  579. {
  580.     SetTH();
  581.     Delay(100);
  582.     SetTL();
  583.         Keyset_Flag=0;
  584.     DS18B20_OkMenu();
  585. }
  586. /*******************************************************************/
  587. /*                                                                 */
  588. /* 主函数                                                          */
  589. /*                                                                 */
  590. /*******************************************************************/

  591. void main()
  592. {
  593. do
  594. {
  595.    if((presence==0)&&(dis_data[4]<TH)&&(dis_data[4]>=TL))  //温度正常
  596.     {
  597.           DS18B20_OkMenu() ;

  598.       while((dis_data[4]<TH)&&(dis_data[4]>=TL))
  599.        {         
  600.          ReadTemperature() ;
  601.          TemperatureDisplay() ;

  602.              BEEP_Flag=0;
  603.              RED_Light=1;

  604.              SetKeyScan();
  605.              if(Keyset_Flag==1)
  606.               {
  607.                 SetTH_TL();
  608.                         Delayms(500);
  609.               }
  610.        }
  611.         }

  612.    if((presence==0)&&(dis_data[4]>=TH))         //温度高于上限
  613.          {
  614.            DisplayTHMenu();

  615.        while(dis_data[4]>=TH)
  616.         {
  617.               ReadTemperature() ;
  618.           TemperatureDisplay() ;

  619.              if(BEEP_Flag==0)Beep();
  620.                 BEEP_Flag=1;
  621.                 RED_Light=0;

  622.                 SetKeyScan();
  623.              if(Keyset_Flag==1)
  624.                {
  625.                  SetTH_TL();
  626.                          Delayms(500);
  627.                }
  628.         }
  629.           }

  630.    if((presence==0)&&(dis_data[4]<TL))        //温度低于下限
  631.     {
  632.           DisplayTLMenu();

  633.       while(dis_data[4]<TL)
  634.        {
  635.               ReadTemperature() ;
  636.           TemperatureDisplay() ;

  637.               if(BEEP_Flag==0)Beep();
  638.                 BEEP_Flag=1;
  639.                 RED_Light=0;

  640.                 SetKeyScan();
  641.               if(Keyset_Flag==1)
  642.                {
  643.                  SetTH_TL();
  644.                          Delayms(500);
  645.                }
  646.         }
  647.         }
  648. }
  649. while(!presence);


  650.     DS18B20_ErrorMenu() ;                //未检测到DS18B20

  651.     do
  652.     {  
  653.       DS18B20_Init() ;

  654.       if(BEEP_Flag==0)Beep();
  655.            BEEP_Flag=1;
  656.     }
  657.      while(presence);
  658. }
  659. /*******************************************************************/
复制代码

所有资料51hei提供下载:
多功能数字温度表.rar (35.25 KB, 下载次数: 17)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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