找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5294|回复: 0
打印 上一主题 下一主题
收起左侧

简易单片机温度报警器源程序与电路原理图

[复制链接]
跳转到指定楼层
楼主


原理图下载:
原理图.pdf (39.12 KB, 下载次数: 21)

单片机源码:
  1. #include<reg52.h>
  2. #define ui unsigned int
  3. #define uc unsigned char    //宏定义
  4. sbit DQ =P3^7;        //定义DS18B20总线I/O
  5. bit bdata fuhao;
  6. uc qian,bai,shi,ge;
  7. uc code led[]  = {0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7};
  8. uc code led_dian[] = {0x7f,0x64,0xbd,0xf5,0xe6,0xf3,0xfb,0x67,0xff,0xf7};
  9. //============================================================================================
  10. //====================================DS18B20=================================================
  11. //============================================================================================
  12. /*****延时子程序*****/
  13. void Delay(int num)
  14. {
  15. while(num--) ;
  16. }
  17. /*****初始化DS18B20*****/
  18. void Init_DS18B20()
  19. {
  20. DQ = 1;         //DQ复位
  21. Delay(8);    //稍做延时
  22. DQ = 0;         //单片机将DQ拉低
  23. Delay(80);   //精确延时,大于480us
  24. DQ = 1;         //拉高总线
  25. Delay(40);
  26. }
  27. /*****读一个字节*****/
  28. uc ReadOneChar()
  29. {
  30. uc i=0;
  31. uc dat = 0;
  32. for (i=8;i>0;i--)
  33. {
  34.   DQ = 0;     // 给脉冲信号
  35.   dat>>=1;
  36.   DQ = 1;     // 给脉冲信号
  37.   if(DQ)
  38.   dat|=0x80;
  39.   Delay(4);
  40. }
  41. return(dat);
  42. }
  43. /*****写一个字节*****/
  44. void WriteOneChar(uc dat)
  45. {
  46. uc i=0;
  47. for (i=8; i>0; i--)
  48. {
  49.   DQ = 0;
  50.   DQ = dat&0x01;
  51.   Delay(5);
  52.   DQ = 1;
  53.   dat>>=1;
  54. }
  55. }
  56. /*****读取温度*****/
  57. ui ReadTemperature()
  58. {
  59.   ui a=0,b=0,t=0;
  60.   float tt=0;
  61.   Init_DS18B20();
  62.   WriteOneChar(0xCC);  //跳过读序号列号的操作
  63.   WriteOneChar(0x44);  //启动温度转换
  64.   Init_DS18B20();
  65.   WriteOneChar(0xCC);  //跳过读序号列号的操作
  66.   WriteOneChar(0xBE);  //读取温度寄存器
  67.   a=ReadOneChar();     //读低8位
  68.   b=ReadOneChar();    //读高8位
  69.   t=b;
  70.   t<<=8;
  71.   t=t|a;
  72.   if(t&0xf800)
  73.   {
  74. t=~t+1;
  75. fuhao=1;
  76.   }
  77.   else
  78.   fuhao=0;
  79.   tt=t*0.0625;
  80.   t=tt*10+0.5;     //放大10倍输出并四舍五入
  81.   return(t);
  82. }
  83. /*****读取温度*****/
  84. void check_wendu()
  85. {
  86. ui f;
  87. f=ReadTemperature();     //获取温度值并减去DS18B20的温漂误差
  88. qian=f/1000;
  89. bai=(f%1000)/100;           //计算得到十位数字
  90. shi=((f%1000)%100)/10;         //计算得到个位数字
  91. ge=((f%1000)%100)%10;            //计算得到小数位
  92. }
  93. /*****显示开机初始化等待画面*****/
  94. void Disp_init()
  95. {
  96. P0 = 0x7f;      //显示----
  97. P2 = 0x7f;
  98. Delay(100);
  99. P2 = 0xdf;
  100. Delay(100);   
  101. P2 = 0xf7;
  102. Delay(100);
  103. P2 = 0xfd;
  104. Delay(100);
  105. P2 = 0xff;         //关闭显示
  106. }
  107. /*****显示温度子程序*****/
  108. void Disp_Temperature()     //显示温度
  109. {
  110. if(qian==0)
  111. {
  112.   if(fuhao==1)
  113.   P0=0x7f;      //1011 1111
  114.   else
  115.   P0=0xff;
  116.   P2=0xfd;
  117.   Delay(10);
  118.   P2 = 0xff;
  119. }
  120. else if(qian!=0)
  121. {
  122.   P0 =~led[qian];
  123.   P2 = 0xfd;
  124.   Delay(10);
  125.   P2 = 0xff;
  126. }
  127. if((bai==0)&&(qian==0))
  128. {
  129.   P0=0xff;    //
  130.   P2=0xf7;
  131.   Delay(10);
  132.   P2=0xff;
  133. }
  134. else if((bai==0)&&(qian!=0))
  135. {
  136.   P0=~led[bai];
  137.   P2=0xf7;
  138.   Delay(10);
  139.   P2=0xff;
  140. }
  141. else if(bai!=0)
  142. {
  143.   P0=~led[bai];    //
  144.   P2=0xf7;
  145.   Delay(10);
  146.   P2=0xff;
  147. }
  148. P0=~led_dian[shi];    //
  149. P2=0xdf;
  150. Delay(10);
  151. P2=0xff;
  152. P0=~led[ge];    //显示符号
  153. P2=0x7f;
  154. Delay(10);
  155. P2=0xff;         //关闭显示
  156. }
  157. /*****主函数*****/
  158. void main()
  159. {
  160. uc z;
  161. for(z=0;z<100;z++)
  162. {
  163.   Disp_init();
  164.   check_wendu();
  165. }
  166. while(1)
  167. {
  168.   check_wendu();
  169.   for(z=0;z<10;z++)
  170.   Disp_Temperature();
  171. }
  172. }
复制代码



评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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