找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3988|回复: 7
收起左侧

数码管显示温度及报警 仿真+程序

[复制链接]
ID:128596 发表于 2016-6-29 20:51 | 显示全部楼层 |阅读模式
数码管显示温度及报警

0.png

  1. #include "main.h"
  2. unsigned char idata flag;
  3. uchar show[4] = {1,2,3,4};
  4. //*******************DS18B20***************

  5. //**************************延时程序,一个是1us的延时。一个是1ms的延时 **************
  6. void delay_us(uchar a)//when crystal is 12M ,a*2+5 us  ,子程序调用要5us,while 就等于DJNZ指令
  7. {
  8.     while(--a);
  9. }

  10. //********************1820初始化,读和写的子程序,延时
  11. //*******initial**********
  12. void init1820()
  13. {
  14. DQ = 1; _nop_();
  15. DQ = 0;      //拉低数据线,准备Reset OneWire Bus;
  16. delay_us(125);  //延时510us,Reset One-Wire Bus.
  17. delay_us(125);

  18. DQ = 1;      //提升数据线;
  19. delay_us(15);  //延时35us;

  20. while(DQ)     //等待Slave 器件Ack 信号;
  21. { _nop_(); }
  22. delay_us(60);  //延时125us;
  23. DQ = 1;      //提升数据线,准备数据传输;
  24. }

  25. //******write********
  26. void write1820(uchar a)
  27. {
  28.     uchar i;
  29. for(i=0;i<8;i++)
  30. {if(a & 0x01)  //低位在前;
  31.    {DQ = 0;    //结束Recovery time;
  32.     _nop_();_nop_();_nop_();
  33.     DQ = 1;   } //发送数据;
  34.   else
  35.    DQ = 0;    //结束Rec time;
  36.     _nop_();_nop_();_nop_();  
  37.     //DQ = 0;  } //发送数据;
  38.   delay_us(30);  //等待Slave Device采样;
  39.   DQ = 1;      //Recovery;
  40.   _nop_();      //Recovery Time Start;
  41.   a >>= 1;
  42.   }

  43. }

  44. //*******read************
  45. unsigned char read1820(void)
  46. {
  47. unsigned char i;
  48. unsigned char tmp=0;
  49. DQ = 1;  _nop_();     //准备读;
  50. for(i=0;i<8;i++)
  51. {
  52.   tmp >>= 1;    //低位先发;
  53.   DQ = 0;      //Read init;
  54.   _nop_();     //2ms;
  55.   DQ = 1;      //必须写1,否则读出来的将是不预期的数据;
  56.   delay_us(2);   //延时9us;
  57.   _nop_();
  58.   if(DQ)      //在12us处读取数据;
  59.    tmp |= 0x80;
  60.   delay_us(30);  //延时55us;
  61.   DQ = 1;   _nop_();   //恢复One Wire Bus;
  62.   }
  63. return tmp; }

  64. //**********************************************************
  65. uchar gettemp()
  66. {  unsigned int tp;
  67.    init1820();
  68.    write1820(0xcc);
  69. //  delay_ms(2);
  70.    write1820(0x44);
  71.   // _nop_();
  72.   // DQ=1;
  73.   // delay_ms(250);     //多个1820时要延时,单个就不用,数据手册里看
  74.   // delay_ms(250);
  75.   // delay_ms(250);
  76.    init1820();
  77.    write1820(0xcc);
  78.    write1820(0xbe);
  79.    show[0]=read1820();
  80.    show[1]=read1820();
  81.    init1820();
  82.    tp=show[1]*256+show[0];
  83.    flag = show[1] >> 7;               //判断温度正负,正时flag = 0;负时flag = 1;
  84.    if(flag == 0)
  85.    {
  86.            tp = tp >> 4;
  87.    }
  88.    if(flag == 1)
  89.    {
  90.            tp = tp >> 4;
  91.            tp = 256 - tp;
  92.    }
  93.   // show[0]=(unsigned char)(tp/10);
  94.   // show[1]=(unsigned char)(tp%10);
  95.    return tp;
  96. }
复制代码

0.png

数码管显示温度及报警.rar

126.17 KB, 下载次数: 90, 下载积分: 黑币 -5

评分

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

查看全部评分

回复

使用道具 举报

ID:59151 发表于 2016-10-2 01:35 来自手机 | 显示全部楼层
正学这方面知识,谢谢分享!
回复

使用道具 举报

ID:108622 发表于 2016-10-22 08:00 来自手机 | 显示全部楼层
迷上温度计
回复

使用道具 举报

ID:110866 发表于 2017-6-25 08:52 | 显示全部楼层
资料完整,很好,谢谢
回复

使用道具 举报

ID:108622 发表于 2017-11-2 02:59 | 显示全部楼层
下载试试……
回复

使用道具 举报

ID:245158 发表于 2017-11-2 08:13 | 显示全部楼层
还是属于看不懂系列
回复

使用道具 举报

ID:249304 发表于 2017-12-19 14:31
有bagel

ID:107616 发表于 2018-5-30 00:01 | 显示全部楼层
学习了,下载下来研究下
回复

使用道具 举报

ID:331226 发表于 2018-5-30 10:06 来自手机 | 显示全部楼层
请问楼主 DBK文件怎么打开
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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