找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS18B20温度显示仿真 程序 中文资料

[复制链接]
跳转到指定楼层
楼主
DS18B20温度显示仿真



下载所有资料包含中文资料: 温度显示.rar (156.57 KB, 下载次数: 16)

DS18B20温度显示仿真图:


  1. #include <reg52.h>
  2. #include "typedef.h"
  3. #include "device_init.h"
  4. #include "ds18b20.h"

  5. code u8 float_tab[16] = {0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//小数表
  6. code u8 DisCode[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xff, 0xbf};

  7. u8 DisNum[4] = {0x0a, 0x0a, 0x00, 0x00};
  8. u8 DisPosition = 0;

  9. /************************************************
  10. * 函数名称:dynamic_display
  11. * 输    入:
  12. * 输    出:
  13. * 功能描述:
  14. *************************************************/
  15. void dynamic_display(void)
  16. {
  17.         static u8 DisPinOn = 0x01;

  18.         DisPinOn <<= 1;
  19.         if(DisPinOn == 0x10)
  20.         {
  21.                 DisPosition = 0;
  22.                 DisPinOn = 0x01;
  23.         }
  24.         DIS_DAT = 0xff;
  25.         DIS_POS = DisPinOn;
  26.         DIS_DAT = DisCode[DisNum[DisPosition++]];
  27.         if(DisPinOn == 0x04)
  28.                 DIS_DAT &= 0x7f;
  29. }
  30. /************************************************
  31. * 函数名称:set_temp_data
  32. * 输    入:
  33. * 输    出:
  34. * 功能描述:
  35. *************************************************/
  36. void set_temp_data(void)
  37. {
  38.         u16 TempData;
  39.         float Temp;
  40.         u8 Negative;
  41.         s8 i;

  42.         TempData = ds18b20_get_temp();                //度温度数据


  43.         /* 小于零 */
  44.         if(TempData & 0xf000)
  45.         {
  46.                 TempData = ~TempData + 1;
  47.                 TempData &= 0x0fff;
  48.                 Negative = 1;
  49.         }
  50.         /* 大于零 */
  51.         else
  52.         {
  53.                 Negative = 0;
  54.         }

  55.         Temp = (TempData >> 4) * 10;                //温度读数乘以精度(0.0625),显示小数点一位,所以乘以10
  56.         Temp = Temp + float_tab[(TempData & 0x000f)] + 0.5;        //加上小数部分,四舍五入所以加0.5
  57.         TempData = Temp;

  58.         for(i=3; i>=0; i--)
  59.         {
  60.                 DisNum[i] = TempData % 10;
  61.                 TempData /= 10;
  62.         }

  63.         for(i=0; i<2; i++)
  64.         {
  65.                 if(DisNum[i] != 0)
  66.                 {
  67.                         break;
  68.                 }
  69.                 else
  70.                 {
  71.                         DisNum[i] = 0x0a;                        //前面为0不显示
  72.                 }
  73.         }
  74.         /*  显示负号 */
  75.         if(Negative == 1)
  76.         {
  77.                 for(i=2; i>=0; i--)
  78.                 {
  79.                         if(DisNum[i] == 0x0a)
  80.                         {
  81.                                 DisNum[i] = 0x0b;                //'-'
  82.                                 break;
  83.                         }
  84.                 }
  85.         }
  86. }
复制代码


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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