当前位置:   article > 正文

基于51单片机的温度报警器设计

基于51单片机的温度报警器

主要实现:

    实时温度测量及显示,超出温度范围声光报警,上下限温度可通过按键设定等功能。 本数字温度报警器是基于51单片机及温度传感器DS18B20来设计的,温度测量范围-55到125.9摄氏度,精度为0.1摄氏度,可见测量温度的范围广,精度高的特点。可通过按键设置上下限报警温度值,报警设置范围0~99摄氏度,默认上限报警温度为40℃、默认下限报警温度为10℃(通过程序可以更改上下限值)。报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限报警值等于当前上限报警值。

 

 

 

  1. uint ReadTemperature();
  2. void convdata();
  3. void xianshi();
  4. void sound();
  5. void czhi();
  6. void sdong();
  7. void show();
  8. void restzhi();
  9. void datadisp();//
  10. void jingque();
  11. sbit SD=P0^0;
  12. sbit SET=P0^1;
  13. sbit Jian=P0^2;
  14. sbit Jia=P0^3;
  15. sbit Md=P0^4;
  16. sbit p05=P0^5;
  17. sbit p06=P0^6;
  18. sbit p07=P0^7;
  19. sbit CS=P3^0;
  20. sbit Clk=P3^1;
  21. sbit DATI=P3^2;
  22. sbit DATO=P3^2;
  23. sbit DQ=P3^3;
  24. sbit Ledzc=P3^4;
  25. sbit Ledrbj=P3^5;
  26. sbit Ledybj=P3^6;
  27. sbit Fmbj=P3^7;
  28. uchar led_mod[]
  29. =
  30. {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,
  31. 0xff};
  32. uchar led_com[]={0x08,0x04,0x02,0x01,0x00};
  33. uchar tg=0;tflag;//
  34. unsigned char dat0=0x00;
  35. unsigned char CH=0x00;
  36. unsigned char dis[]={0, 0, 0};
  37. uchar disdata[]={0,10,0,0,0,0};
  38. uchar shezhi[]={0,0,0,0};
  39. uchar jque[]={0,0,0,0,0};
  40. int sign=0,js,qo,temp,ywu,ybz;
  41. int Time=65000; //
  42. int pbi=500,ts=0,ys=0,is=0,ll;
  43. uint tuxian=30,yuxian=3,temp0;
  44. void Delay(uint i)
  45. {
  46. while( i-- );
  47. }
  48. void delayt(uint time)
  49. {
  50. int j;
  51. for(;time>0;time--)
  52. for(j=0;j<100;j++);
  53. }
  54. void Init_DS18B20(void)
  55. {
  56. uint x=0;
  57. DQ=1;
  58. Delay(10);
  59. DQ=0;
  60. Delay(80);
  61. DQ=1;
  62. Delay(10);
  63. x=DQ;
  64. Delay(20);
  65. }
  66. unsigned char ReadOneChar(void)
  67. {
  68. uint i=0;
  69. uint dat=0;
  70. for (i=8;i>0;i--)
  71. {
  72. DQ=0;
  73. dat>>=1;
  74. DQ=1;
  75. if(DQ);//
  76. dat|=0x80;
  77. Delay(4);
  78. }
  79. return(dat);
  80. }
  81. void WriteOneChar(uint dat)
  82. {
  83. uint i=0;
  84. for (i=8; i>0; i--)
  85. {
  86. DQ=0;
  87. DQ=dat&0x01;
  88. Delay(5);
  89. DQ=1;
  90. dat>>=1;
  91. }
  92. }
  93. void Tmpchange(void)
  94. {
  95. Init_DS18B20();
  96. WriteOneChar(0xCC);
  97. WriteOneChar(0x44);
  98. }
  99. uint ReadTemperature(void)
  100. {
  101. uint a=0;
  102. uint b=0;
  103. uint t=0;
  104. float tt=0;
  105. Tmpchange();
  106. Init_DS18B20();
  107. WriteOneChar(0xCC);
  108. WriteOneChar(0xBE);
  109. a=ReadOneChar();
  110. b=ReadOneChar();
  111. t=b;
  112. t<<=8;
  113. t=t|a;
  114. if(t<0x0fff)
  115. tflag=0;
  116. else
  117. {t=~t+1;
  118. tflag=1;
  119. }
  120. t=t*(0.0625*10);
  121. return(t);
  122. }
  123. unsigned char adc0832(unsigned char CH)
  124. {
  125. unsigned char i,test,adval;
  126. adval=0x00;
  127. test=0x00;
  128. Clk=0;
  129. DATI=1;
  130. _nop_();
  131. CS=0;
  132. _nop_();
  133. Clk=1;
  134. _nop_();
  135. if ( CH==0x00 )
  136. {
  137. Clk=0;
  138. DATI=1;
  139. _nop_();
  140. Clk=1;
  141. _nop_();
  142. Clk=0;
  143. DATI=0;
  144. _nop_();
  145. Clk=1;
  146. _nop_();
  147. }
  148. else
  149. {
  150. Clk=0;
  151. DATI=1;
  152. _nop_();
  153. Clk=1;
  154. _nop_();
  155. Clk=0;
  156. DATI=1;
  157. _nop_();
  158. Clk=1;
  159. _nop_();
  160. }
  161. Clk=0;
  162. DATI=1;
  163. for( i=0;i < 8;i++ )
  164. {
  165. _nop_();
  166. adval <<=1;
  167. Clk=1;
  168. _nop_();
  169. Clk=0;
  170. if (DATO)
  171. adval |=0x01;
  172. else
  173. adval |=0x00;
  174. }
  175. for (i=0; i < 8; i++)
  176. {
  177. test >>=1;
  178. if (DATO)
  179. test |=0x80;
  180. else
  181. test |=0x00;
  182. _nop_();
  183. Clk=1;
  184. _nop_();
  185. Clk=0;
  186. }
  187. dat0=test;
  188. _nop_();
  189. CS=1;
  190. DATO=1;
  191. Clk=1;
  192. return dat0;

 

资料借鉴于此纷传 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/752155
推荐阅读
相关标签
  

闽ICP备14008679号