找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 24712|回复: 49
收起左侧

51单片机数码管显示DS18B20温度传感器+声光报警 Proteus仿真图+完整程序

  [复制链接]
ID:202308 发表于 2017-7-10 21:10 | 显示全部楼层 |阅读模式
这是我的课程设计

0.png 0.png

单片机源程序如下:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char           //宏定义
  4. sbit DQ=P3^7;                                     //定义DS18B20 的 I/O       
  5. sbit DIAN = P0^5;                        //显示小数点用
  6. sbit LED=P1^6;
  7. sbit BEEP=P1^7;
  8. uchar x=0;                                      //计数器
  9. signed char m;                                     //温度值全局变量
  10. uchar n;                                              //温度值全局变量
  11. uint z;
  12. uint c;
  13. uint gaowen=35;                         //高温报警温度,默认值为35
  14. uint diwen=0;                                    //低温报警温度,默认值0
  15. uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,
  16.                         0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};

  17. /*****延时子程序*****/
  18. void Delay_DS18B20(int num)
  19. {
  20.         while(num--) ;
  21. }
  22. /*****初始化DS18B20*****/
  23. void Init_DS18B20(void)
  24. {
  25.         unsigned char x=0;
  26.         DQ = 1;                 //DQ复位
  27.         Delay_DS18B20(8);   //稍做延时
  28.         DQ = 0;                           //单片机将DQ拉低
  29.         Delay_DS18B20(80);  //精确延时,大于480us
  30.         DQ = 1;                 //拉高总线
  31.         Delay_DS18B20(14);
  32.         x = DQ;                   //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
  33.         Delay_DS18B20(20);
  34. }
  35. /*****读一个字节*****/
  36. unsigned char ReadOneChar(void)
  37. {
  38.         unsigned char i=0;
  39.         unsigned char dat = 0;
  40.         for (i=8;i>0;i--)
  41.           {
  42.             DQ = 0;                         //给脉冲信号
  43.             dat>>=1;
  44.             DQ = 1;                     //给脉冲信号
  45.             if(DQ)
  46.             dat|=0x80;
  47.             Delay_DS18B20(4);
  48.           }
  49.           return(dat);
  50. }
  51. /*****写一个字节*****/
  52. void WriteOneChar(unsigned char dat)
  53. {
  54.         unsigned char i=0;
  55.           for (i=8; i>0; i--)
  56.           {
  57.             DQ = 0;
  58.             DQ = dat&0x01;
  59.             Delay_DS18B20(5);
  60.             DQ = 1;
  61.             dat>>=1;
  62.           }
  63. }
  64. /*****读取温度*****/
  65. unsigned int ReadTemperature(void)
  66. {
  67.         unsigned char a=0;
  68.           unsigned char b=0;
  69.           unsigned int t=0;
  70.           float tt=0;
  71.           Init_DS18B20();
  72.           WriteOneChar(0xCC);  //跳过读序号列号的操作
  73.           WriteOneChar(0x44);  //启动温度转换
  74.           Init_DS18B20();
  75.           WriteOneChar(0xCC);  //跳过读序号列号的操作
  76.           WriteOneChar(0xBE);  //读取温度寄存器
  77.           a=ReadOneChar();     //读低8位
  78.           b=ReadOneChar();         //读高8位
  79.           t=b;                                 //高8位转移到t
  80.           t<<=8;                             //t数据左移8位
  81.           t=t|a;                             //将t和a按位或,得到一个16位的数
  82.           tt=t*0.0625;                 //将t乘以0.0625得到实际温度值
  83.                                              //(温度传感器设置12位精度,最小分辨率是0.0625)
  84.           t= tt*10+0.5;        //放大10倍(将小数点后一位显示出来)输出并四舍五入
  85.           return(t);                     //返回温度值
  86. }
  87. /*****延时子程序*****/
  88. void Delay(uint num)
  89. {
  90.         while( --num );
  91. }                       
  92. /*****读取温度*****/
  93. void check_wendu(void)
  94. {
  95.         uint a,b;
  96.         c=ReadTemperature();                  //获取温度值
  97.         a=c/100;                                     //计算得到十位数字
  98.         b=c/10-a*10;                            //计算得到个位数字
  99.         m=c/10;                                      //计算得到整数位
  100.         if(m<=0)                                    //如果温度小于0,限制显示为0
  101.         {
  102.                 m=0;
  103.         }
  104.         n=c-a*100-b*10;                            //计算得到小数位
  105. }
  106. /*****显示开机初始化等待画面*****/
  107. void Disp_init(void)   
  108. {
  109.         P0 = ~0x80;                       //显示-
  110.         P2 = 0x7F;
  111.         Delay(200);
  112.         P2 = 0xDF;
  113.         Delay(200);   
  114.         P2 = 0xF7;
  115.         Delay(200);
  116.         P2 = 0xFD;
  117.         Delay(200);
  118.         P2 = 0xFF;                        //关闭显示
  119. }
  120. /*****显示温度子程序*****/
  121. void Disp_Temperature(void)   
  122. {
  123.         P0 = ~0x98;                        //显示c
  124.         P2 = 0x7F;
  125.         Delay(1000);
  126.         P2=0xff;                                //关闭显示

  127.         P0=~LEDData[n];             //显示小数位
  128.         P2 = 0xDF;
  129.         Delay(1000);
  130.         P2=0xff;                           //关闭显示

  131.         P0 =~LEDData[m%10];    //显示个位
  132.         DIAN = 0;                    //显示小数点
  133.         P2 = 0xF7;
  134.         Delay(1000);
  135.         P2=0xff;                           //关闭显示

  136.         P0 =~LEDData[m/10];    //显示十位
  137.         P2 = 0xFD;
  138.         Delay(1000);
  139.         P2 = 0xff;                   //关闭显示
  140. }

  141. /*****主函数*****/
  142. void main(void)
  143. {
  144.         LED=0;                                       //默认关闭报警
  145.         BEEP=0;                                        //默认关闭蜂鸣器
  146.         check_wendu();
  147. ……………………

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

所有资料51hei提供下载:
51单片机数码管显示DS18B20温度传感器 声光报警 Proteus仿真图 完整程序.zip (95.51 KB, 下载次数: 998)

评分

参与人数 3黑币 +70 收起 理由
azi1974 + 10 共享资料的黑币奖励!
dww465757120 + 10 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:851536 发表于 2020-12-14 10:32 来自手机 | 显示全部楼层
善莫大焉MK 发表于 2018-11-27 23:05
这个怎么确定能不能用

试试看吧
回复

使用道具 举报

ID:787318 发表于 2020-6-23 10:01 | 显示全部楼层
提问   温度范围 可以达到  -20°  ~  80°吗   精确值 在  0.5吗
回复

使用道具 举报

ID:781377 发表于 2020-6-23 09:26 | 显示全部楼层
这个怎么修改温度范围
回复

使用道具 举报

ID:767792 发表于 2020-6-2 19:33 | 显示全部楼层
学习一下,推荐
回复

使用道具 举报

ID:765299 发表于 2020-6-1 20:51 | 显示全部楼层
温度精度是多少啊
回复

使用道具 举报

ID:761920 发表于 2020-5-31 20:52 | 显示全部楼层
不错的资料
回复

使用道具 举报

ID:471440 发表于 2020-5-31 09:54 | 显示全部楼层
怎么无法使用?
回复

使用道具 举报

ID:763828 发表于 2020-5-28 22:48 来自手机 | 显示全部楼层
真的很有用处,很棒
回复

使用道具 举报

ID:757379 发表于 2020-5-21 14:41 | 显示全部楼层
很好,非常的有用处
回复

使用道具 举报

ID:425432 发表于 2020-5-11 11:13 | 显示全部楼层
为什么数码管显示不了
回复

使用道具 举报

ID:699690 发表于 2020-3-29 00:36 | 显示全部楼层
谢谢楼主的分析
回复

使用道具 举报

ID:706009 发表于 2020-3-11 18:03 | 显示全部楼层
下载下来仔细看看
回复

使用道具 举报

ID:647470 发表于 2019-12-21 17:35 | 显示全部楼层
陈鹏飞15 发表于 2019-1-20 16:07
uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x ...

他P0口的接线没有按顺序来
回复

使用道具 举报

ID:651497 发表于 2019-11-28 15:41 | 显示全部楼层
做的很棒哦
回复

使用道具 举报

ID:628216 发表于 2019-11-28 15:08 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:646042 发表于 2019-11-20 20:21 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:640789 发表于 2019-11-13 08:10 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:611687 发表于 2019-10-24 19:55 | 显示全部楼层
真厉害!
回复

使用道具 举报

ID:520050 发表于 2019-6-25 17:16 | 显示全部楼层
可以共享吗?
回复

使用道具 举报

ID:551121 发表于 2019-5-30 15:51 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

ID:538101 发表于 2019-5-29 21:36 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:549887 发表于 2019-5-29 11:04 | 显示全部楼层
感谢作者的分享
回复

使用道具 举报

ID:489680 发表于 2019-5-23 14:53 | 显示全部楼层
想问一下R1~R4的作用是什么   为什么不能去掉
回复

使用道具 举报

ID:540467 发表于 2019-5-17 17:48 来自手机 | 显示全部楼层
这个程序有错误吗
回复

使用道具 举报

ID:539393 发表于 2019-5-16 11:03 | 显示全部楼层
对我帮助很大
回复

使用道具 举报

ID:532628 发表于 2019-5-11 23:47 | 显示全部楼层
为什么编码cope到keil里编译知识有错
回复

使用道具 举报

ID:503018 发表于 2019-5-11 16:11 | 显示全部楼层
楼主,求两个18B20的程序,就在这个图的基础上,两个温度同时显示   ,,,同时也是非常感谢
回复

使用道具 举报

ID:424725 发表于 2019-5-4 13:50 | 显示全部楼层
谢谢分享!!学习一下
回复

使用道具 举报

ID:490858 发表于 2019-4-3 19:52 | 显示全部楼层
你好我想问一下,为什么低于25度,数码管就会闪烁
回复

使用道具 举报

ID:498978 发表于 2019-4-2 18:58 | 显示全部楼层
仿真图不能用Altium designer打开吗
回复

使用道具 举报

ID:500275 发表于 2019-3-28 22:45 | 显示全部楼层
感谢你,学习了
回复

使用道具 举报

ID:488831 发表于 2019-3-25 13:04 | 显示全部楼层
陈鹏飞15 发表于 2019-1-20 16:07
uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x ...

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
回复

使用道具 举报

ID:497521 发表于 2019-3-24 21:06 | 显示全部楼层

这个程序值得学习,谢谢!
回复

使用道具 举报

ID:489294 发表于 2019-3-21 02:35 | 显示全部楼层
谢谢楼主!!!!!!!!!!!!!
回复

使用道具 举报

ID:46381 发表于 2019-3-8 20:08 | 显示全部楼层
谢谢分享!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

ID:46381 发表于 2019-3-8 20:07 | 显示全部楼层
好东西,谢谢分享!!!
回复

使用道具 举报

ID:484809 发表于 2019-3-5 13:20 | 显示全部楼层
可以吧后面的程序补上来么。。。
回复

使用道具 举报

ID:19315 发表于 2019-1-23 16:53 | 显示全部楼层
这个程序值得学习,很有参考考
回复

使用道具 举报

ID:468274 发表于 2019-1-20 16:07 | 显示全部楼层
uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};
请问这是数码管0—F的显示代码吗?共阴极和共阳极代码都对不上啊
回复

使用道具 举报

ID:321495 发表于 2019-1-13 20:30 | 显示全部楼层
真棒真棒,急需仿真
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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