找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3588|回复: 3
收起左侧

DS18B20两位共阳,两位共阴数码管组合显示程序

[复制链接]
ID:165276 发表于 2017-10-6 20:13 | 显示全部楼层 |阅读模式
第一次发帖。泡论坛一段时间,趁国庆有时间做了一个,程序是凑出来的,再修改。哈哈。共阴跟共阳数码管亮度不一样,算不算个性。大于99.9和负温度没有弄,毕竟室内不会出现那么极端的气温。电路图有空再补上,还没画。上图,渣渣的焊工。
IMG_20171006_151630[1].jpg IMG_20171006_151705[1].jpg IMG_20171006_151739[1].jpg IMG_20171006_151837[1].jpg IMG_20171006_151859[1].jpg IMG_20171006_151915[1].jpg

渣渣的焊接,废了不少时间。

渣渣的焊接,废了不少时间。
IMG_20171006_151946[1].jpg IMG_20171006_151948[1].jpg IMG_20171006_194812[1].jpg

单片机源程序如下:
  1. #include "CONFIG.H"
  2. #include "DS18B20.H"
  3. #include "SHUMAGUAN.H"
  4. extern uchar LedBuff[3];
  5. sbit RED = P1^5;
  6. sbit YELLOW = P1^7;
  7. sbit GREEN = P1^3;
  8. bit flag1s = 0; //1s 定时标志
  9. //bit SMG_FLAG=0;        //数码管刷新标志
  10. uchar T0RH = 0; //T0 重载值的高字节
  11. uchar T0RL = 0; //T0 重载值的低字节
  12. void ConfigTimer0(uint ms);
  13. void main()
  14. {
  15. bit res;
  16. int temperature; //读取到的当前温度值
  17. int intT, decT; //温度值的整数和小数部分
  18. EA = 1; //开总中断
  19. ConfigTimer0(2); //T0 定时 2ms
  20. Start18B20(); //启动 DS18B20
  21. while (1)
  22. {
  23.    if (flag1s) //每秒更新一次温度
  24.   {
  25.          flag1s = 0;
  26.          res = Get18B20Temp(&temperature); //读取当前温度
  27.          if (res) //读取成功时,刷新当前温度显示
  28.         {
  29.          intT = temperature >> 4; //分离出温度值整数部分          右移后不用乘精度。
  30.          decT = temperature & 0xF; //分离出温度值小数部分
  31.          LedBuff[0]=intT/10;
  32.          LedBuff[1]=intT%10;
  33.          LedBuff[2]=(decT*10)/16;
  34.          if ((intT>35)|(intT<10))
  35.          {
  36.            RED=0;
  37.            YELLOW=1;
  38.            GREEN=1;
  39.          }
  40.          else if ((intT>=15)&&(intT<=28))
  41.          {
  42.            RED=1;
  43.            YELLOW=1;
  44.            GREEN=0;
  45.          }
  46.          else if (((intT>=10)&&(intT<15))|((intT>28)&&(intT<=35)))
  47.          {
  48.            RED=1;
  49.            YELLOW=0;
  50.            GREEN=1;
  51.          }
  52.          Start18B20();
  53.     }
  54.          else //读取失败时,提示错误信息
  55.          {
  56.            Start18B20(); //重新启动下一次转换
  57.          }
  58.   }
  59.   /*if (SMG_FLAG)
  60.   {
  61.           LedRefresh();
  62.         SMG_FLAG=0;
  63.    
  64.   }*/
  65. }
  66. }
  67. /* 配置并启动 T0, ms-T0 定时时间 */
  68. void ConfigTimer0(uint ms)
  69. {
  70. ulong tmp; //临时变量
  71. tmp = 12000000 / 12; //定时器计数频率
  72. tmp = (tmp * ms) / 1000; //计算所需的计数值
  73. tmp = 65536 - tmp; //计算定时器重载值
  74. // tmp = tmp + 12; //补偿中断响应延时造成的误差
  75. T0RH = (uchar)(tmp>>8); //定时器重载值拆分为高低字节
  76. T0RL = (uchar)tmp;
  77. TMOD &= 0xF0; //清零 T0 的控制位
  78. TMOD |= 0x01; //配置 T0 为模式 1
  79. TH0 = T0RH; //加载 T0 重载值
  80. TL0 = T0RL;
  81. ET0 = 1; //使能 T0 中断
  82. TR0 = 1; //启动 T0
  83. }
  84. /* T0 中断服务函数,完成 1 秒定时 */
  85. void InterruptTimer0() interrupt 1
  86. ……………………

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

所有资料51hei提供下载:
DS18B20.rar (43.15 KB, 下载次数: 20)

评分

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

查看全部评分

回复

使用道具 举报

ID:82765 发表于 2017-10-6 22:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:165276 发表于 2017-10-7 07:59 | 显示全部楼层
cjjcjj1 发表于 2017-10-6 22:10
不错不错,有想法,这个数码管取模是关键

其实是我手头上只有这两个在身边,没办法就拼一起。数码管取模这个挺容易弄的。哈哈
回复

使用道具 举报

ID:108622 发表于 2018-7-13 05:56 | 显示全部楼层
分享下电路图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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