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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12239|回復: 7
收起左側

51單片機數碼管顯示DS18B20溫度測量報警控制板

  [復制鏈接]
ID:76686 發表于 2015-4-11 18:16 | 顯示全部樓層 |閱讀模式
    51單片機數碼管顯示DS18B20溫度測量報警控制板功能簡介:K1為進入/退出設置鍵;K2為增加鍵;K3為減少鍵。,溫度測量范圍0-99.9℃,可設置上限報警溫度、下限報警溫度(即高于上限值或者低于下限值時蜂鳴器報警),默認上限報警溫度為38℃、默認下限報警溫度為5℃。報警值可設置范圍:最低上限報警值等于當前下限報警值,最高下限報警值等于當前上限報警值。將下限報警值調為0時為關閉下限報警功能。電源電壓VCC為5V,可以焊一只USB座到板上,然后用相應的USB線連接至電腦,通過電腦USB口供電;DS18B20也可以根據需要用屏蔽電纜引出來。







51單片機數碼管顯示DS18B20溫度測量報警控制板源程序,一共有2個文件:

復制代碼
  1. #include <AT89X52.h>

  2. #include "DS18B20.h"   

  3. #define uint unsigned int

  4. #define uchar unsigned char   //宏定義

  5. #define SET  P3_1    //定義調整鍵

  6. #define DEC  P3_2    //定義減少鍵

  7. #define ADD  P3_3    //定義增加鍵

  8. #define BEEP P3_7    //定義蜂鳴器

  9. bit shanshuo_st;    //閃爍間隔標志

  10. bit beep_st;     //蜂鳴器間隔標志

  11. sbit DIAN = P2^7;        //小數點

  12. uchar x=0;      //計數器

  13. signed char m;     //溫度值全局變量

  14. uchar n;      //溫度值全局變量

  15. uchar set_st=0;     //狀態標志

  16. signed char shangxian=38;  //上限報警溫度,默認值為38

  17. signed char xiaxian=5;   //下限報警溫度,默認值為38

  18. uchar code  LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};

  19. /*****延時子程序*****/

  20. void Delay(uint num)

  21. {

  22. while( --num );

  23. }

  24. /*****初始化定時器0*****/

  25. void InitTimer(void)

  26. {

  27.   TMOD=0x1;

  28.   TH0=0x3c;

  29.   TL0=0xb0;     //50ms(晶振12M)

  30. }

  31. /*****定時器0中斷服務程序*****/

  32. void timer0(void) interrupt 1

  33. {

  34. TH0=0x3c;

  35. TL0=0xb0;

  36. x++;

  37. }

  38. /*****外部中斷0服務程序*****/

  39. void int0(void) interrupt 0

  40. {



  41. EX0=0;      //關外部中斷0

  42. if(DEC==0&&set_st==1)

  43. {

  44.   shangxian--;

  45.   if(shangxian<xiaxian)shangxian=xiaxian;

  46. }

  47. else if(DEC==0&&set_st==2)

  48. {

  49.   xiaxian--;

  50.   if(xiaxian<0)xiaxian=0;

  51. }

  52. }

  53. /*****外部中斷1服務程序*****/

  54. void int1(void) interrupt 2

  55. {

  56. EX1=0;      //關外部中斷1

  57. if(ADD==0&&set_st==1)

  58. {

  59.   shangxian++;

  60.   if(shangxian>99)shangxian=99;

  61. }

  62. else if(ADD==0&&set_st==2)

  63. {

  64.   xiaxian++;

  65.   if(xiaxian>shangxian)xiaxian=shangxian;

  66. }  

  67. }

  68. /*****讀取溫度*****/

  69. void check_wendu(void)

  70. {

  71. uint a,b,c;

  72. c=ReadTemperature()-5;  //獲取溫度值并減去DS18B20的溫漂誤差

  73. a=c/100;     //計算得到十位數字

  74. b=c/10-a*10;    //計算得到個位數字

  75. m=c/10;      //計算得到整數位

  76. n=c-a*100-b*10;    //計算得到小數位

  77. if(m<0){m=0;n=0;}   //設置溫度顯示上限

  78. if(m>99){m=99;n=9;}   //設置溫度顯示上限   

  79. }

  80. /*****顯示開機初始化等待畫面*****/

  81. Disp_init()   

  82. {

  83. P2 = 0xbf;      //顯示-

  84. P1 = 0xf7;

  85. Delay(200);

  86. P1 = 0xfb;

  87. Delay(200);   

  88. P1 = 0xfd;

  89. Delay(200);

  90. P1 = 0xfe;

  91. Delay(200);

  92. P1 = 0xff;         //關閉顯示

  93. }

  94. /*****顯示溫度子程序*****/

  95. Disp_Temperature()     //顯示溫度

  96. {

  97. P2 =0xc6;      //顯示C

  98. P1 = 0xf7;

  99. Delay(300);

  100. P2 =LEDData[n];    //顯示個位

  101. P1 = 0xfb;

  102. Delay(300);

  103. P2 =LEDData[m%10];    //顯示十位

  104. DIAN = 0;         //顯示小數點

  105. P1 = 0xfd;

  106. Delay(300);

  107. P2 =LEDData[m/10];    //顯示百位

  108. P1 = 0xfe;

  109. Delay(300);

  110. P1 = 0xff;         //關閉顯示

  111. }

  112. /*****顯示報警溫度子程序*****/

  113. Disp_alarm(uchar baojing)

  114. {

  115. P2 =0xc6;      //顯示C

  116. P1 = 0xf7;

  117. Delay(200);

  118. P2 =LEDData[baojing%10]; //顯示十位

  119. P1 = 0xfb;

  120. Delay(200);

  121. P2 =LEDData[baojing/10]; //顯示百位

  122. P1 = 0xfd;

  123. Delay(200);

  124. if(set_st==1)P2 =0x89;

  125. else if(set_st==2)P2 =0xc7; //上限H、下限L標示

  126. P1 = 0xfe;

  127. Delay(200);

  128. P1 = 0xff;         //關閉顯示

  129. }

  130. /*****報警子程序*****/

  131. void Alarm()

  132. {

  133. if(x>=10){beep_st=~beep_st;x=0;}

  134. if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0;

  135. else BEEP=1;

  136. }

  137. /*****主函數*****/

  138. void main(void)

  139. {

  140.     uint z;

  141. InitTimer();    //初始化定時器

  142. EA=1;      //全局中斷開關

  143. TR0=1;

  144. ET0=1;      //開啟定時器0

  145. IT0=1;        

  146. IT1=1;

  147. check_wendu();

  148. check_wendu();

  149. for(z=0;z<300;z++)

  150. {

  151.   Disp_init();        

  152.   }

  153. while(1)

  154.   {

  155.   if(SET==0)

  156.   {

  157.    Delay(2000);

  158.    do{}while(SET==0);

  159.    set_st++;x=0;shanshuo_st=1;

  160.    if(set_st>2)set_st=0;

  161.   }

  162.   if(set_st==0)

  163.   {

  164.    EX0=0;    //關閉外部中斷0

  165.    EX1=0;    //關閉外部中斷1

  166.     check_wendu();

  167.       Disp_Temperature();

  168.    Alarm();   //報警檢測

  169.   }

  170.   else if(set_st==1)

  171.   {

  172.    BEEP=1;    //關閉蜂鳴器

  173.    EX0=1;    //開啟外部中斷0

  174.    EX1=1;    //開啟外部中斷1

  175.    if(x>=10){shanshuo_st=~shanshuo_st;x=0;}

  176.    if(shanshuo_st) {Disp_alarm(shangxian);}

  177.   }

  178.   else if(set_st==2)

  179.   {

  180.    BEEP=1;    //關閉蜂鳴器

  181.    EX0=1;    //開啟外部中斷0

  182.    EX1=1;    //開啟外部中斷1

  183.    if(x>=10){shanshuo_st=~shanshuo_st;x=0;}

  184.    if(shanshuo_st) {Disp_alarm(xiaxian);}

  185.   }

  186.     }

  187. }

  188. /*****END*****/













  189. DS18B20.h:

  190. #include <AT89X52.h>

  191. #define  DQ  P3_6     //定義DS18B20總線I/O

  192. /*****延時子程序*****/

  193. void Delay_DS18B20(int num)

  194. {

  195.   while(num--) ;

  196. }

  197. /*****初始化DS18B20*****/

  198. void Init_DS18B20(void)

  199. {

  200.   unsigned char x=0;

  201.   DQ = 1;         //DQ復位

  202.   Delay_DS18B20(8);    //稍做延時

  203.   DQ = 0;         //單片機將DQ拉低

  204.   Delay_DS18B20(80);   //精確延時,大于480us

  205.   DQ = 1;         //拉高總線

  206.   Delay_DS18B20(14);

  207.   x = DQ;           //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗

  208.   Delay_DS18B20(20);

  209. }

  210. /*****讀一個字節*****/

  211. unsigned char ReadOneChar(void)

  212. {

  213.   unsigned char i=0;

  214.   unsigned char dat = 0;

  215.   for (i=8;i>0;i--)

  216.   {

  217.     DQ = 0;     // 給脈沖信號

  218.     dat>>=1;

  219.     DQ = 1;     // 給脈沖信號

  220.     if(DQ)

  221.     dat|=0x80;

  222.     Delay_DS18B20(4);

  223.   }

  224.   return(dat);

  225. }

  226. /*****寫一個字節*****/

  227. void WriteOneChar(unsigned char dat)

  228. {

  229.   unsigned char i=0;

  230.   for (i=8; i>0; i--)

  231.   {

  232.     DQ = 0;

  233.     DQ = dat&0x01;

  234.     Delay_DS18B20(5);

  235.     DQ = 1;

  236.     dat>>=1;

  237.   }

  238. }

  239. /*****讀取溫度*****/

  240. unsigned int ReadTemperature(void)

  241. {

  242.   unsigned char a=0;

  243.   unsigned char b=0;

  244.   unsigned int t=0;

  245.   float tt=0;

  246.   Init_DS18B20();

  247.   WriteOneChar(0xCC);  //跳過讀序號列號的操作

  248.   WriteOneChar(0x44);  //啟動溫度轉換

  249.   Init_DS18B20();

  250.   WriteOneChar(0xCC);  //跳過讀序號列號的操作

  251.   WriteOneChar(0xBE);  //讀取溫度寄存器

  252.   a=ReadOneChar();     //讀低8位

  253.   b=ReadOneChar();    //讀高8位

  254.   t=b;

  255.   t<<=8;

  256.   t=t|a;

  257.   tt=t*0.0625;

  258.   t= tt*10+0.5;     //放大10倍輸出并四舍五入

  259.   return(t);

  260. }
復制代碼


評分

參與人數 1黑幣 +10 收起 理由
send + 10 很給力!

查看全部評分

回復

使用道具 舉報

ID:70614 發表于 2015-4-20 20:53 | 顯示全部樓層
謝謝分享 編譯不成功有錯誤
回復

使用道具 舉報

ID:77796 發表于 2015-5-5 00:06 來自手機 | 顯示全部樓層
看看。樓主很不錯喲
回復

使用道具 舉報

ID:82175 發表于 2015-6-6 10:04 | 顯示全部樓層
make an effort
回復

使用道具 舉報

ID:84574 發表于 2015-7-2 14:49 | 顯示全部樓層
感謝樓主啊
回復

使用道具 舉報

ID:65730 發表于 2015-8-9 22:38 | 顯示全部樓層
還沒看就知道很好,呵呵
回復

使用道具 舉報

ID:150982 發表于 2016-11-29 14:48 | 顯示全部樓層
 謝謝分享 編譯不成功有錯誤
回復

使用道具 舉報

ID:257097 發表于 2017-12-7 19:57 | 顯示全部樓層
謝謝分享 編譯不成功
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品福利在线视频 | 国产成人福利视频 | 中文一区二区 | 红桃视频一区二区三区免费 | 福利一区在线观看 | 欧美一区二区免费 | 国产精品欧美一区二区三区不卡 | www四虎影视| 日本三级全黄三级a | 亚洲精品视频一区二区三区 | 午夜一区 | 国产色 | 久久亚洲精品国产精品紫薇 | 黄a网站 | 精精国产xxxx视频在线野外 | 毛片一级片 | 久热爱 | 嫩草视频网 | 国产精品国产三级国产aⅴ入口 | 亚洲一区二区av | 国产欧美视频一区二区 | 亚洲人成在线播放 | 中文字幕 视频一区 | 一区二区三区在线 | 欧美日韩一二三区 | 免费观看一级黄色录像 | 精品国产欧美日韩不卡在线观看 | 国产精品国产精品 | 国产精品久久影院 | 农村妇女毛片精品久久久 | 亚洲97 | 久久精品亚洲精品国产欧美 | 黄色免费网站在线看 | 久久久久久免费观看 | 在线国产欧美 | a黄在线观看 | 伊人99 | 国产高清视频 | 国产成人网 | 97免费在线视频 | 在线国产视频 |