找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2398|回复: 2
收起左侧

读温感DS18B20数码管显示温度值整数 单片机源码下载

[复制链接]
ID:256633 发表于 2018-4-9 21:14 | 显示全部楼层 |阅读模式
段控制P0到P17(共8条线)。位控制P1.0连接P16的Q1B;P1.1连接Q2B;P1.2连接Q3BP;1.3连接Q4B。
P15的2脚18B20输出脚,连接到P3.2。
0.jpg

单片机源程序如下:
  1. /***************************************************************************
  2. 标题:        温感实验
  3. 效果:        读取温度值数码管显示
  4. 工作于:光汇i51开发板
  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[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6};
  14. unsigned int i=0;
  15.         char ltemp;                                        //表:共阳数码管 0-9 C
  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. sbit SMKG=P3^6;

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

  26. //主函数,C语言的入口函数:        
  27. void main()
  28. {
  29.         
  30.         while(1){
  31.                
  32.                 display();        //调用显示        
  33.                 delay();
  34.         }
  35. }

  36. //显示函数,参数为显示内容
  37. void display()
  38. {
  39.     SMKG=0;
  40.         P0=0XFF;                        //        
  41.         switch(l_posit){
  42.         case 0:                //选择千位数码管,关闭其它位
  43.                 SMG_q=0;
  44.                 SMG_b=1;        
  45.                 SMG_s=1;               
  46.                 SMG_g=1;
  47.                 P0=table[ly_dis[0]];        //输出显示内容
  48.                 break;
  49.         case 1:                //选择百位数码管,关闭其它位
  50.                 SMG_q=1;
  51.                 SMG_b=0;        
  52.                 SMG_s=1;               
  53.                 SMG_g=1;
  54.                 P0=table[ly_dis[1]];
  55.                 break;
  56.         case 2:                //选择十位数码管,关闭其它位
  57.                 SMG_q=1;
  58.                 SMG_b=1;        
  59.                 SMG_s=0;               
  60.                 SMG_g=1;
  61.                 P0=table[ly_dis[2]];
  62.                 break;
  63.         case 3:                //选择个位数码管,关闭其它位
  64.                 SMG_q=1;
  65.                 SMG_b=1;        
  66.                 SMG_s=1;               
  67.                 SMG_g=0;
  68.                 P0=table[ly_dis[3]];
  69.                 break;
  70.         }
  71.         l_posit++;                //每调用一次将轮流显示一位
  72.         if(l_posit>3)
  73.                 l_posit=0;        
  74.                 if(i==0)                                //先发转换命令,再读数值,以减少速度慢带来的显示抖动
  75.                         tmpchange();              //温度转换
  76.                 if(i==100){
  77.                         ltemp=tmp()/16;                //得到十进制温度值,因为DS18B20可以精确到0.0625度,这里取整数显示
  78.                         if(ltemp<0){                //判断第一位显示整数还是负号
  79.                                 ly_dis[0]=0xbf;
  80.                                 ltemp=0-ltemp;        
  81.                         }
  82.                         else
  83.                         //        ly_dis[0]=ltemp/100;//显示百位值
  84.                         ltemp=ltemp/100%100;
  85.                         ly_dis[0]=ltemp/10;        //显示温度十位值
  86. ……………………

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

所有资料51hei提供下载:
12 数码管显示18B20温度.rar (86.34 KB, 下载次数: 60)
回复

使用道具 举报

ID:277014 发表于 2018-5-13 22:12 | 显示全部楼层
p3。6是干嘛的
回复

使用道具 举报

ID:253209 发表于 2018-5-28 00:33 来自手机 | 显示全部楼层
应该是接的温度传感器的数据口吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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