找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC12 1T单片机读取DS18B20并数码管显示 源代码

[复制链接]
跳转到指定楼层
楼主
以前一直用STC89单片机读取DS18B20,这次换了1T单片机,以为只是改下延时就行了,谁知一直都读不出来,搜了个1T读取DS18B20的代码,带进去一测试OK!代码放出来:






单片机源程序如下:
  1. /***************************************************************************
  2. 标题:        STC12 温感实验
  3. 效果:        读取温度值数码管显示带小数显示   
  4. 工作于:LY5A-L2A开发板
  5. 作者:        林洋电子-单片机

  6. 说明:        板使用12M晶振
  7. ******************************************************************************/

  8. //头文件:
  9. #include <reg51.h>
  10. #include "ds18b20.h"        //引入DS18B20头文件

  11. //变量定义:
  12. unsigned char ly_dis[4];//定义显示缓冲区
  13. code unsigned char table[] =
  14. {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
  15. //表:共阳数码管 0-9
  16. unsigned char l_posit = 0;        //显示位置

  17. //引脚定义:
  18. sbit SMG_q = P1 ^ 0;        //定义数码管阳级控制脚(千位)
  19. sbit SMG_b = P1 ^ 1;        //定义数码管阳级控制脚(百位)
  20. sbit SMG_s = P1 ^ 2;        //定义数码管阳级控制脚(十位)
  21. sbit SMG_g = P1 ^ 3;        //定义数码管阳级控制脚(个位)

  22. //函数声明:
  23. void display(void);//显示函数,显示缓冲区内容

  24. void Delay(unsigned t); //延时函数

  25. //主函数,C语言的入口函数:
  26. void main()
  27. {
  28.     unsigned int i = 0;
  29.     float tt;
  30.     int ltemp;
  31.     while(1)
  32.     {
  33.         if(i == 10)
  34.         {
  35.             tt = ReadTemp() * 0.0625;          //得到真实十进制温度值,因为DS18B20
  36.             //可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度。
  37.                                        
  38.             ltemp = tt * 10 + 0.5;           //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
  39.             if(ltemp < 0)                 //判断第一位显示整数还是负号
  40.             {
  41.                 ly_dis[0] = 0xbf;
  42.                 ltemp = 0 - ltemp;
  43.             }
  44.             else
  45.                 ly_dis[0] = ltemp / 1000; //显示百位值
  46.                                                
  47.             if(ly_dis[0] == 0)
  48.                 ly_dis[0] = 0xff;
  49.                                                
  50.             ltemp = ltemp % 1000;
  51.             ly_dis[1] = ltemp / 100;        //显示温度十位值
  52.             ltemp = ltemp % 100;
  53.             ly_dis[2] = ltemp / 10;                //显示温度个位值
  54.             ly_dis[3] = ltemp % 10;                //显示小数点后一位
  55.         }
  56.                                        
  57.         i++;
  58.         if(i == 800)
  59.             i = 0;
  60.         display();        //调用显示
  61.                                 Delay(150);
  62.     }
  63. }

  64. //显示函数,参数为显示内容
  65. void display()
  66. {
  67.     P0 = 0XFF;                        //
  68.     switch(l_posit)
  69.     {
  70.         case 0:                //选择千位数码管,关闭其它位
  71.             SMG_q = 0;
  72.             SMG_b = 1;
  73.             SMG_s = 1;
  74.             SMG_g = 1;
  75.             P0 = table[ly_dis[0]];        //输出显示内容
  76.             break;
  77.         case 1:                //选择百位数码管,关闭其它位
  78.             SMG_q = 1;
  79.             SMG_b = 0;
  80.             SMG_s = 1;
  81.             SMG_g = 1;
  82.             P0 = table[ly_dis[1]];
  83.             //Delay(4);
  84.             break;
  85.         case 2:                //选择十位数码管,关闭其它位
  86.             SMG_q = 1;
  87.             SMG_b = 1;
  88.             SMG_s = 0;
  89.             SMG_g = 1;
  90.             P0 = table[ly_dis[2]] & 0x7f;
  91.            //Delay(3);
  92.             break;
  93.         case 3:                //选择个位数码管,关闭其它位
  94.             SMG_q = 1;
  95.             SMG_b = 1;
  96.             SMG_s = 1;
  97.             SMG_g = 0;
  98.             P0 = table[ly_dis[3]];
  99.             //Delay(2);
  100.             break;
  101.     }
  102.     l_posit++;                //每调用一次将轮流显示一位
  103.     if(l_posit > 3)
  104.         l_posit = 0;
  105. }

  106. //延时子函数,短暂延时

  107. void Delay(unsigned time) //延时函数
  108. {
  109.     unsigned int i;                             //决定延时时间长短
  110.     while(time--)
  111.     {
  112.         i = 10;
  113.         while(i--);
  114.     }
  115. }
复制代码

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



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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