久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10836|回復(fù): 12
收起左側(cè)

ds18b20溫度報(bào)警器單片機(jī)源代碼

  [復(fù)制鏈接]
ID:188744 發(fā)表于 2017-4-12 10:55 | 顯示全部樓層 |閱讀模式
ds18b20  溫度液晶顯示
0.png

單片機(jī)源代碼:
  1. //------------------------------------------------------
  2. //用數(shù)碼管與DS18B20設(shè)計(jì)溫度報(bào)警器
  3. //------------------------------------------------------
  4. //本例將報(bào)警溫度設(shè)為高:40度 低:-3度,當(dāng)DS18B20感知到溫度達(dá)到此臨界值時
  5. //系統(tǒng)發(fā)出報(bào)警聲
  6. #include <REG52.H>
  7. #include <intrins.h>
  8. #include "delay.h"
  9. #include "DS18B20.h"

  10. uchar display_digit[4]={0,0,0,0};                  //待顯示的各溫度數(shù)位
  11. uchar LCD_display[16]="                ";                  //LCD顯示的溫度值
  12. uchar LCD_alarm_display[16]="H:      L:      ";          //顯示報(bào)警溫度
  13. bit HI_Alarm=0,LO_Alarm=0;                 //高低溫報(bào)警標(biāo)志
  14. bit DS18B20_IS_OK;                        //傳感器正常標(biāo)志

  15. //溫度小數(shù)位對照表
  16. uchar code df_table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
  17. //報(bào)警溫度上下限,為進(jìn)行正負(fù)數(shù)比較,此處注意設(shè)為char類型
  18. //取值范圍為-128~+127,DS18B20支持范圍為-50~+125
  19. char Alarm_temp_HL[4]={30,-3,0,0};//報(bào)警溫度預(yù)設(shè)及存儲

  20. uchar currentT=0;                                                  //當(dāng)前讀取的溫度整數(shù)部分
  21. uchar temp_value[]={0x00,0x00};                          //從DS18B20讀取的溫度值
  22. //初始化DS18B20
  23. uchar init_DS18B20()
  24. {
  25.         uchar status;
  26.         DQ=1; delay(8);
  27.         DQ=0; delay(90);
  28.         DQ=1; delay(8);
  29.         status=DQ;
  30.         delay(100);
  31.         DQ=1;
  32.         return status;          //初始化成功時返回0
  33. }

  34. //讀一字節(jié)
  35. uchar readonebyte()
  36. {
  37.         uchar i,dat=0;
  38.         DQ=1; _nop_();
  39.         for(i=0;i<8;i++)
  40.         {
  41.            DQ=0;dat>>=1;
  42.            DQ=1;_nop_();_nop_();//拉高,延時進(jìn)行采樣 單總線是進(jìn)行與的
  43.            if(DQ) dat|=0x80;  //如果DQ是1,把1存到dat里
  44.            delay(30);DQ=1;
  45.         }
  46.         return dat;
  47. }

  48. //寫一字節(jié)
  49. void writeonebyte(uchar dat)
  50. {
  51.         uchar i;
  52.         for(i=0;i<8;i++)
  53.         {
  54.                 DQ=0;DQ=dat&0x01; //先取最低位,先讀的也是最低位
  55.                 delay(5);DQ=1;dat>>=1;
  56.         }
  57. }

  58. //讀取溫度值
  59. void read_temp()
  60. {
  61.         if(init_DS18B20()==1)        //DS18B20故障
  62.                 DS18B20_IS_OK=0;
  63.         else
  64.         {
  65.                 writeonebyte(0xcc);          //跳過序列號
  66.                 writeonebyte(0x44);          //啟動溫度轉(zhuǎn)換
  67.                 init_DS18B20();
  68.                 writeonebyte(0xcc);          //跳過序列號
  69.                 writeonebyte(0xbe);          //讀取溫度寄存器
  70.                 temp_value[0]=readonebyte(); //        溫度低8位
  71.                 temp_value[1]=readonebyte(); //        溫度高8位
  72.                 Alarm_temp_HL[2]=readonebyte(); //報(bào)警溫度TH
  73.                 Alarm_temp_HL[3]=readonebyte(); //報(bào)警溫度TL
  74.                 DS18B20_IS_OK=1;
  75.         }       
  76. }

  77. //設(shè)置DS18B20溫度報(bào)警值
  78. void set_Alarm_temp()
  79. {
  80.         init_DS18B20();
  81.         writeonebyte(0xcc);          //跳過序列號
  82.         writeonebyte(0x4e);          //將設(shè)定的溫度報(bào)警值寫入DS18B20
  83.         writeonebyte(Alarm_temp_HL[0]);  //寫TH
  84.     writeonebyte(Alarm_temp_HL[1]);  //寫TL
  85.     writeonebyte(0x7f);                                //12位精度
  86.         init_DS18B20();
  87.         writeonebyte(0xcc);          //跳過序列號
  88.         writeonebyte(0x48);          //溫度報(bào)警值存入DS18B20
  89. }

  90. //在液晶上顯示溫度處理
  91. void chuli_temp()
  92. {
  93. //------------------顯示溫度處理-------------------------
  94.         uchar ng=0;           //負(fù)數(shù)標(biāo)識
  95.         uchar t=150;                 //延時值
  96.         char signed_current_temp;                //注意類型為char
  97.         //如果為負(fù)數(shù)則取反加1,并設(shè)置負(fù)號標(biāo)識及負(fù)號顯示位置
  98.         if((temp_value[1]&0xf8)==0xf8)
  99.         {
  100.                 temp_value[1]=~temp_value[1];
  101.                 temp_value[0]=~temp_value[0]+1;
  102.                 if(temp_value[0]==0x00) temp_value[1]++;
  103.                 ng=1;
  104.        
  105.         }
  106.   //查表得到溫度小數(shù)部分
  107.   display_digit[0]=df_table[temp_value[0]&0x0f];
  108.   //獲取溫度整數(shù)部分(無符號)
  109.   currentT=((temp_value[0]&0xf0)>>4)|((temp_value[1]&0x07)<<4);
  110.   //有符號的當(dāng)前溫度值,注意定義為char,其值可為-128~+127
  111.   signed_current_temp=ng?-currentT:currentT;
  112.   //高低溫報(bào)警標(biāo)志設(shè)置(與定義為char類型的Alarm_temp_HL比較,這樣可區(qū)分正負(fù)比較)
  113.   HI_Alarm=signed_current_temp>=Alarm_temp_HL[2]? 1 : 0;
  114.   LO_Alarm=signed_current_temp<=Alarm_temp_HL[3]? 1 : 0;
  115.   //將整數(shù)部分分解為三位待顯示數(shù)字
  116.   display_digit[3]=currentT/100;
  117.   display_digit[2]=currentT%100/10;
  118.   display_digit[1]=currentT%10;
  119.   //LCD顯示數(shù)據(jù)
  120.   LCD_display[2]=display_digit[3]+'0';          //bai
  121.   LCD_display[3]=display_digit[2]+'0';          //shi
  122.   LCD_display[4]=display_digit[1]+'0';          //ge
  123.   LCD_display[5]='.';
  124.   LCD_display[6]=display_digit[0]+'0';          //xiaoshu
  125.   LCD_display[7]=0xdf;                                 //。
  126.   LCD_display[8]=0x43;                                 // C

  127.   if(display_digit[3]==0)                          
  128.           {
  129.                     LCD_display[2]=' ';                        //高位為0則不顯示               
  130.                   if(display_digit[2]==0)
  131.                   {
  132.                           LCD_display[3]=' ';
  133.                   }
  134.           }
  135.         //負(fù)號顯示在恰當(dāng)位置
  136.         if(ng)
  137.                   {
  138.                           if(LCD_display[3]==' ')
  139.                                 LCD_display[3]='-';
  140.                         else if(LCD_display[2]==' ')
  141.                                 LCD_display[2]='-';
  142.                         else LCD_display[1]='-';
  143.                   }
  144. //------------------------------------------------------

  145. }

  146. void chuli_alarm_temp()
  147. {
  148. //---------------------報(bào)警溫度處理---------------------
  149.    uchar ng;
  150.    //由于Alarm_temp_HL類型為char 故可以直接進(jìn)行正負(fù)比較
  151.    //高溫報(bào)警值
  152.    ng=0;
  153.    if(Alarm_temp_HL[2]<0)
  154.    {
  155.               Alarm_temp_HL[2]=~Alarm_temp_HL[2]+1;
  156.            ng=1;
  157.    }
  158.    //分解高溫各數(shù)位到待顯示數(shù)組中
  159.    LCD_alarm_display[3]=Alarm_temp_HL[2]/100+'0';
  160.    LCD_alarm_display[4]=Alarm_temp_HL[2]%100/10+'0';
  161.    LCD_alarm_display[5]=Alarm_temp_HL[2]%10+'0';
  162.    //屏蔽高位不為0的
  163.    if(LCD_alarm_display[3]=='0') LCD_alarm_display[3]=' ';
  164.    if(LCD_alarm_display[3]==' ' && LCD_alarm_display[4]=='0')
  165.        LCD_alarm_display[4]=' ';
  166.         //'-' 顯示
  167.    if(ng)
  168.    {
  169.                    if(LCD_alarm_display[4]==' ') LCD_alarm_display[4]='-';
  170.                 else
  171.                 if(LCD_alarm_display[3]==' ') LCD_alarm_display[3]='-';
  172.                 else LCD_alarm_display[2]='-';
  173.    }
  174.    //低溫報(bào)警值
  175.    
  176.    

  177. …………限于本文篇幅 余下代碼請從51黑下載附件…………

復(fù)制代碼

完整代碼下載:
ds18b20液晶顯示.zip (63.44 KB, 下載次數(shù): 177)

評分

參與人數(shù) 1黑幣 +3 收起 理由
XINB + 3 絕世好帖!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:280132 發(fā)表于 2018-5-10 20:19 | 顯示全部樓層
好帖,頂一個
回復(fù)

使用道具 舉報(bào)

ID:359622 發(fā)表于 2018-6-27 15:29 | 顯示全部樓層
好帖,頂一個
回復(fù)

使用道具 舉報(bào)

ID:609429 發(fā)表于 2019-9-9 11:46 | 顯示全部樓層
謝謝,找這個來參考一下
回復(fù)

使用道具 舉報(bào)

ID:606251 發(fā)表于 2019-9-9 12:39 | 顯示全部樓層
非常感謝!
回復(fù)

使用道具 舉報(bào)

ID:491435 發(fā)表于 2019-9-10 11:25 | 顯示全部樓層
很好很強(qiáng)大
回復(fù)

使用道具 舉報(bào)

ID:609917 發(fā)表于 2019-9-10 11:37 | 顯示全部樓層
非常感謝
回復(fù)

使用道具 舉報(bào)

ID:617456 發(fā)表于 2019-9-28 09:28 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:734832 發(fā)表于 2020-4-26 13:38 | 顯示全部樓層
絕世好帖,謝謝,解決了我很多疑惑的地方
回復(fù)

使用道具 舉報(bào)

ID:786925 發(fā)表于 2020-6-22 17:50 | 顯示全部樓層
絕世好貼!點(diǎn)贊+1
回復(fù)

使用道具 舉報(bào)

ID:340765 發(fā)表于 2021-3-16 15:26 | 顯示全部樓層
謝謝,找這個來參考一下
回復(fù)

使用道具 舉報(bào)

ID:28992 發(fā)表于 2021-3-17 04:44 | 顯示全部樓層
great job, thank you so much.
回復(fù)

使用道具 舉報(bào)

ID:1070572 發(fā)表于 2023-4-8 22:20 | 顯示全部樓層
需要源代碼下載學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品视频免费看 | 6080yy精品一区二区三区 | 亚洲在线一区二区 | 久久综合av| 欧美亚洲综合久久 | 羞羞网站在线观看 | 中文字幕av在线一二三区 | 黄色毛片免费 | 一级黄色片美国 | 日韩中文视频 | 欧美一区二区在线观看 | 蜜月va乱码一区二区三区 | 亚洲精品久久久一区二区三区 | 精品一区二区三区在线观看 | 综合精品久久久 | 欧美日韩一二三区 | 一区观看 | 福利网址 | 在线中文字幕视频 | 久久久久精| 久久99精品久久久久久青青日本 | 色婷婷综合久久久中文字幕 | 成人精品鲁一区一区二区 | 久久精品二区 | 成人二区 | 99久久精品免费看国产四区 | 亚洲一区在线日韩在线深爱 | 久久高清 | 天天搞天天搞 | cao在线| 国产精品免费在线 | 男人天堂网址 | 国产999精品久久久 午夜天堂精品久久久久 | 午夜视频一区 | 久久国产精品-久久精品 | www.99re | 亚洲一区二区三区欧美 | 国产亚洲欧美在线视频 | 久久综合狠狠综合久久 | 狠狠狠 | 日韩电影一区二区三区 |