找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2670|回复: 1
收起左侧

单片机温度监测Proteus仿真和程序

[复制链接]
ID:213477 发表于 2017-6-21 20:09 | 显示全部楼层 |阅读模式
基于51单片机的温度监测,proteus仿真,有程序。
0.png 0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit DQ=P3^7;  
  6. sbit beep=P3^0;         
  7. void reset();                                //DS18B20复位函数         
  8. void write_byte(uchar val);       //DS18B20写命令函数  
  9. uchar read_byte(void);            //DS18B20读1字节函数  
  10. void read_temp();                 //温度读取函数
  11. void LED_display();
  12. void  alarm();
  13. uchar tempH,tempL,num;
  14. uchar table[10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //0~9的LED字符编码
  15. uchar setValue_low=15;
  16. uchar setValue_high=30;
  17. main()
  18. {
  19.         while(1)
  20.         {
  21.                 read_temp();
  22.                  LED_display();
  23.                  alarm();
  24.         }
  25. }
  26. void delay(uint t)
  27. {
  28.         for(;t>0;t--);
  29. }
  30. void reset()          //DS18B20的复位
  31. {
  32.         uchar presence=1;
  33.         while(presence)
  34.     {
  35.             while(presence)
  36.              {
  37.                DQ=1;_nop_();_nop_();
  38.                DQ=0;
  39.                delay(50);
  40.                DQ=1;
  41.                delay(6);
  42.                presence=DQ;
  43.              }
  44.             delay(45);
  45.             presence=~DQ;
  46.    }
  47.         DQ=1;
  48. }
  49. void write_byte(uchar val)                        //DS18B20写一个字节
  50. {
  51.         uchar i;
  52.         for(i=8;i>0;i--)
  53.     {
  54.             DQ=1;_nop_();_nop_();
  55.             DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
  56.             DQ=val&0x01;
  57.             delay(6);
  58.             val=val>>1;
  59.     }
  60.         DQ=1;
  61.         _nop_();
  62. }
  63. uchar read_byte(void)                                        //DS18B20读一个字节
  64. {
  65.         uchar i;
  66.         uchar value=0;
  67.         for(i=8;i>0;i--)
  68.     {
  69.              DQ=1;_nop_();_nop_();
  70.              value>>=1;
  71.              DQ=0;
  72.              _nop_();_nop_();_nop_();_nop_();
  73.              DQ=1;_nop_();_nop_();_nop_();_nop_();
  74.              if(DQ)
  75.                     value|=0x80;
  76.              delay(6);
  77.    }
  78.         DQ=1;
  79.         return(value);
  80. }
  81. void read_temp()                           //从DS18B20读取温度值
  82. {   
  83.         uchar ch1,ch2;
  84.         reset();
  85.         write_byte(0xcc);
  86.         write_byte(0x44);
  87.         reset();
  88.         write_byte(0xcc);
  89.         write_byte(0xbe);
  90.         ch1=read_byte();   //DS18B20的温度数值是16位的二进制,精度高,最后四位是温度的小数部分,最高五位为符号位(即正负温度)
  91.         ch2=read_byte();
  92.         num=(ch2<<4)|(ch1>>4);           //只取温度值的中间八位,小数部分舍去,符号位舍去四位。
  93.         tempH=num/10;                                //温度的十位
  94.         tempL=num-tempH*10;                        //温度的个位
  95. }
  96. void LED_display()                                         //显示检测的温度
  97. {
  98.   P2=0x0;
  99.   P2=2;
  100.   P0=table[tempL];
  101.   delay(50);
  102. ……………………

  103. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
温度监测.zip (64.79 KB, 下载次数: 29)


回复

使用道具 举报

ID:257097 发表于 2017-12-4 11:16 | 显示全部楼层
好东西一定要分享
回复

使用道具 举报

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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