DS18B20温度传感器数据数码管显示程序
"该资源是关于使用温度传感器DS18B20与数码管进行温度显示的代码实现。" 在嵌入式系统中,我们经常需要实时监测环境温度,并将结果显示在显示设备上,例如数码管。这个项目就是这样一个例子,它结合了温度传感器DS18B20和数码管来显示当前的温度读数。DS18B20是一种数字温度传感器,具有精度高、接口简单等特点,常用于各种温度测量应用。 首先,代码中包含了必要的头文件`<reg52.h>`,这表明它是在基于51系列单片机(如8051)的环境中编写的。`#define`语句用于定义数据类型和I/O引脚,例如DS(数据线)被定义为P2口的第2位,用于与DS18B20通信。 变量`temp`用于存储从DS18B20获取的温度值,而`flag1`则用于标识温度结果是正还是负。`delay()`函数是一个延时函数,用于实现特定时间的等待,这是与传感器交互时必要的定时操作。 在`dsreset()`函数中,实现了对DS18B20的复位和初始化命令。DS18B20通信协议需要严格的时序控制,这里通过设置DS引脚的电平状态,模拟出480us到960us的低电平脉冲,然后在15us到60us之间将其拉高,以完成传感器的复位。 数码管显示部分,代码中定义了两个字符数组`codeTable`和`codeTable1`,它们包含了0到9以及一些特殊符号的七段码,用于驱动数码管显示。当温度读数为正时,使用`codeTable`,如果是负数,则使用`codeTable1`。显示过程中,需要根据温度的十位和个位选择对应的七段码,并通过数码管的段控制(如dula和wela)来点亮相应的段。 未给出的代码中,应该还包括读取DS18B20温度数据的函数,以及将温度值转换为适合数码管显示的格式的逻辑。在实际应用中,这一过程可能涉及到等待传感器转换完成(DS18B20内部需要时间进行温度测量),然后通过单总线协议读取数据,最后根据读取到的温度值更新数码管的显示。 这个项目展示了如何利用DS18B20温度传感器获取温度数据,并通过数码管实时显示。这样的系统广泛应用于智能家居、工业监控等领域,对于理解和实践微控制器与传感器的交互非常有帮助。
//接上18B20温度传感器(另购)数码管显示出当前温度
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2; //define interface 定义接口
uint temp; // variable of temperature 温度变量
uchar flag1; // sign of the result positive or negative 结果的正负号
sbit dula=P2^6; //声明一个特殊duan段变量,该位变量等价于P2寄存器的bit 6,即P2.6
sbit wela=P2^7; // 位
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef};
void delay(uint count) //delay 延迟任意时间 可定义
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
/*------------------------------------------------------------------------------------------------------------------------------------------------
复位和初始化
------------------------------------------------------------------------------------------------------------------------------------------------*/
{
uint i;
DS=0;
i=103; //将总线拉低480us~960us 主机发出480-960us的低电平脉冲
while(i>0)i--;
DS=1; //然后拉高总线(释放后变为高电平),若DS18B20做出反应会将在15us~60us后将总线拉低
i=4; //15us~60us等待 如果有低电平则说明总线上有器件做出了应答(复位成功),若一直为高电平则无应答 。
while(i>0)i--;
//while(DS);
}
/*------------------------------------------------------------------------------------------------------------------------------------------------
读操作 主机把主线拉低1us后,若送出0则为低(0),若送出1则为高(1)
------------------------------------------------------------------------------------------------------------------------------------------------*/
bit tmpreadbit(void) //read a bit
{
uint i;
bit dat;
DS=0;i++; //i++ for delay
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchar tmpread(void) //read a byte date 1byte=8bit
{
uchar i,j,dat;
dat=0;
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 达梦数据库DM8手册大全:安装、管理与优化指南
- Python Matplotlib库文件发布:适用于macOS的最新版本
- QPixmap小demo教程:图片处理功能实现
- YOLOv8与深度学习在玉米叶病识别中的应用笔记
- 扫码购物商城小程序源码设计与应用
- 划词小窗搜索插件:个性化搜索引擎与快速启动
- C#语言结合OpenVINO实现YOLO模型部署及同步推理
- AutoTorch最新包文件下载指南
- 小程序源码‘有调’功能实现与设计课程作品解析
- Redis 7.2.3离线安装包快速指南
- AutoTorch-0.0.2b版本安装教程与文件概述
- 蚁群算法在MATLAB上的实现与应用
- Quicker Connector: 浏览器自动化插件升级指南
- 京东白条小程序源码解析与实践
- JAVA公交搜索系统:前端到后端的完整解决方案
- C语言实现50行代码爱心电子相册教程