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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10836|回復: 12
收起左側

ds18b20溫度報警器單片機源代碼

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

單片機源代碼:
  1. //------------------------------------------------------
  2. //用數碼管與DS18B20設計溫度報警器
  3. //------------------------------------------------------
  4. //本例將報警溫度設為高:40度 低:-3度,當DS18B20感知到溫度達到此臨界值時
  5. //系統發出報警聲
  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};                  //待顯示的各溫度數位
  11. uchar LCD_display[16]="                ";                  //LCD顯示的溫度值
  12. uchar LCD_alarm_display[16]="H:      L:      ";          //顯示報警溫度
  13. bit HI_Alarm=0,LO_Alarm=0;                 //高低溫報警標志
  14. bit DS18B20_IS_OK;                        //傳感器正常標志

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

  20. uchar currentT=0;                                                  //當前讀取的溫度整數部分
  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. //讀一字節
  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_();//拉高,延時進行采樣 單總線是進行與的
  43.            if(DQ) dat|=0x80;  //如果DQ是1,把1存到dat里
  44.            delay(30);DQ=1;
  45.         }
  46.         return dat;
  47. }

  48. //寫一字節
  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);          //啟動溫度轉換
  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(); //報警溫度TH
  73.                 Alarm_temp_HL[3]=readonebyte(); //報警溫度TL
  74.                 DS18B20_IS_OK=1;
  75.         }       
  76. }

  77. //設置DS18B20溫度報警值
  78. void set_Alarm_temp()
  79. {
  80.         init_DS18B20();
  81.         writeonebyte(0xcc);          //跳過序列號
  82.         writeonebyte(0x4e);          //將設定的溫度報警值寫入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);          //溫度報警值存入DS18B20
  89. }

  90. //在液晶上顯示溫度處理
  91. void chuli_temp()
  92. {
  93. //------------------顯示溫度處理-------------------------
  94.         uchar ng=0;           //負數標識
  95.         uchar t=150;                 //延時值
  96.         char signed_current_temp;                //注意類型為char
  97.         //如果為負數則取反加1,并設置負號標識及負號顯示位置
  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.   //查表得到溫度小數部分
  107.   display_digit[0]=df_table[temp_value[0]&0x0f];
  108.   //獲取溫度整數部分(無符號)
  109.   currentT=((temp_value[0]&0xf0)>>4)|((temp_value[1]&0x07)<<4);
  110.   //有符號的當前溫度值,注意定義為char,其值可為-128~+127
  111.   signed_current_temp=ng?-currentT:currentT;
  112.   //高低溫報警標志設置(與定義為char類型的Alarm_temp_HL比較,這樣可區分正負比較)
  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.   //將整數部分分解為三位待顯示數字
  116.   display_digit[3]=currentT/100;
  117.   display_digit[2]=currentT%100/10;
  118.   display_digit[1]=currentT%10;
  119.   //LCD顯示數據
  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.         //負號顯示在恰當位置
  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. //---------------------報警溫度處理---------------------
  149.    uchar ng;
  150.    //由于Alarm_temp_HL類型為char 故可以直接進行正負比較
  151.    //高溫報警值
  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.    //分解高溫各數位到待顯示數組中
  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.    //低溫報警值
  175.    
  176.    

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

復制代碼

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

評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:491435 發表于 2019-9-10 11:25 | 顯示全部樓層
很好很強大
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:786925 發表于 2020-6-22 17:50 | 顯示全部樓層
絕世好貼!點贊+1
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:1070572 發表于 2023-4-8 22:20 | 顯示全部樓層
需要源代碼下載學習!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 秋霞a级毛片在线看 | 久产久精国产品 | 天天曰夜夜 | 久久久久久亚洲精品 | 欧美激情综合五月色丁香小说 | 欧美性一区二区三区 | 欧美日韩高清一区 | 天天操夜夜爽 | 日韩免费网站 | 国产精品久久久久久久久久久久久 | 日本电影网站 | 九九久久精品视频 | 三a毛片| 欧美日韩精品中文字幕 | 九九久久精品 | 亚洲一区电影 | 狠狠狠| 欧美乱做爰xxxⅹ久久久 | 毛片免费在线 | 91国内外精品自在线播放 | 蜜桃视频在线观看免费视频网站www | 91久久精品| 欧美一级黄色免费 | 国内自拍真实伦在线观看 | 亚洲国产精品一区 | 最新毛片网站 | 日韩视频精品在线 | 国产亚洲精品91 | 中文字幕福利视频 | 特级丰满少妇一级aaaa爱毛片 | 欧美 日韩 国产 在线 | 欧美日韩国产传媒 | 国产福利在线视频 | 久久精品福利视频 | 日日做夜夜爽毛片麻豆 | 日韩a在线| 81精品国产乱码久久久久久 | 日韩免费视频一区二区 | 一区二区中文 | 在线成人一区 | 日本三级网站在线观看 |