八路温度数据采集系统设计LED显示Word格式文档下载.docx
- 文档编号:19102737
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:24
- 大小:115.60KB
八路温度数据采集系统设计LED显示Word格式文档下载.docx
《八路温度数据采集系统设计LED显示Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《八路温度数据采集系统设计LED显示Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
八路温度采集器系统的硬件框图如图所示。
2.2各模块的功能
温度采集器:
电源模块、温度采集模块、键盘模块、信号选择模块、显示模块5个模块组成。
电源模块:
选择市场上常用的5v充电电源;
温度采集模块:
由单总线连8路DS18B20而成,8路DS18B20采用非寄生电源,由外部5v供电。
键盘控制模块:
由一个独立按钮形成独立的按键,实现“暂停”功能。
液晶显示模块:
由4位LED、1位LED、限流电阻、三极管构成,实现对温度值的显示。
2.3主要器件功能介绍
简介:
89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。
89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
主要特性:
·
与MCS-51兼容
4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
全静态工作:
0Hz-24MHz
三级程序存储器锁定
128*8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
DS18B20
概述:
DS1820数字温度计提供9位温度读数,指示器件的温度。
信息经过单线接口送入DS1820或从DS1820送出,因此从中央处理器到DS1820仅需连接一条,读写和完成温度变换所需的电源可以由数据线本身提供而不需要外部电源;
因为每一个DS1820有唯一的系列号,因此多个DS1820可以存在于同一条单线总线上。
这允许在许多不同的地方放置温度灵敏器件。
此特性的应用范围包括HVAC、环境控制、建筑物、设备或机械内的温度检测以及过程监视和控制中的温度检测。
DS18B20的主要特性
1.1、适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电
1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
1.3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
1.4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
1.5、温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃
1.6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
1.7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
1.8、测量结果直接输出数字温度信号,以"
一线总线"
串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
1.9、负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作
内部ROM:
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
ROM指令表
指令
约定代码
功能
读ROM
33H
读DS1820温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。
搜索ROM
0FOH
用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。
为操作各器件作好准备。
跳过ROM
0CCH
忽略64位ROM地址,直接向DS1820发温度变换命令。
适用于单片工作。
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应。
温度变换
44H
启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。
结果存入内部9字节RAM中。
读暂存器
0BEH
读内部RAM中9字节的内容
写暂存器
4EH
发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器
48H
将RAM中第3、4字节的内容复制到EEPROM中。
重调EEPROM
0B8H
将EEPROM中内容恢复到RAM中的第3、4字节。
读供电方式
0B4H
读DS1820的供电模式。
寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。
3.1八路温度采集器电路图
4软件系统设计
4.1 编程语言及开发工具
本系统的处理器是兼容8051指令集的高速单片机STC89C51。
为此,首选KeilμVision作为其开发工具。
KeilμVision是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。
其功能强大,生成的代码紧凑,是目前世界上使用最广泛的51系列兼容单片机开发工具。
4.2软件系统的流程结构
温度采集器的软件主要包括温度的采集、数据的处理、LED显示、键盘管理等模块组成。
其流程结构框图如下图所示:
系统经过初始化之后,过段时间采集温度传感器的值,避免温度传感器输出特性误报85读。
显示一只温度传感器的温度持续1秒左右,检测时候按键按下,按下则持续显示这位温度传感器的温度。
若没有按下则判断是否已经显示到最后只传感器,若是,则刷新温度值;
若否则显示下一只温度传感器温度。
4.3程序设计
/*****************************miann.c**************************************/
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
//外部函数引用申明
externvoidtmstart();
//初始化ds18b20
externvoidread_dealtemp();
//读取并处理温度
externvoidshowled();
sbitbutton=P3^0;
uintwei;
voiddelaym(unsignedinti)
{
charj;
for(i;
i>
0;
i--)
for(j=200;
j>
j--);
}
voidmain()
{
uintn,m;
tmstart();
//由于DS18B20的启动特性,所以加端程序屏蔽掉显示85度
read_dealtemp();
delaym(20000);
while
(1)
{
//初始化
//读取温度
for(n=0;
n<
8;
n++)//温度传感器循环
{
button=1;
for(m=0;
m<
100;
m++)//传感器显示扫描次数,决定显示不同温度传感器数值的时间
{
wei=n;
showled();
}
while(button==0)
showled();
}
}
/*****************************18b20.c***********************************/
uinttemp[8]=1;
sbitds=P3^7;
ucharlcdrom[8][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},
{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},
{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},
{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7},
{0x28,0x34,0xc5,0xb8,0x00,0x00,0x00,0x52},
{0x28,0x35,0xc5,0xb8,0x00,0x00,0x00,0x65},
{0x28,0x36,0xc5,0xb8,0x00,0x00,0x00,0x3c},
{0x28,0x37,0xc5,0xb8,0x00,0x00,0x00,0x0b},
};
uinttvalue;
/****lcd程序****/
voiddelayms(uintms)//延时
uinti,j;
for(i=ms;
i>
0;
i--)
for(j=110;
j>
j--);
/****ds18b20程序****/
voiddsrst()//ds18b20复位
uinti;
ds=0;
i=103;
while(i>
0)i--;
ds=1;
i=4;
bitdsrd0()//读一位数据
bitdat;
i++;
dat=ds;
i=8;
while(i>
return(dat);
uchardsrd()//读1个字节数据
uchari,j,dat;
dat=0;
for(i=8;
{
j=dsrd0();
dat=(j<
<
7)|(dat>
>
1);
voiddswr(uchardat)//写数据
ucharj;
bittestb;
for(j=8;
j--)
testb=dat&
0x01;
dat=dat>
1;
if(testb)
ds=0;
i++;
ds=1;
i=8;
else
voidtmstart()//初始化ds18b20
dsrst();
delayms
(1);
dswr(0xcc);
dswr(0x44);
voidread_dealtemp()//读取并处理温度
uchari,j;
uchara,b;
for(j=0;
j<
j++)
dsrst();
delayms
(1);
dswr(0x55);
for(i=0;
i<
i++)
dswr(lcdrom[j][i]);
//发送64位序列号
dswr(0xbe);
a=dsrd();
b=dsrd();
tvalue=b;
tvalue<
=8;
tvalue=tvalue|a;
temp[j]=tvalue;
delayms(50);
/*************************show.c*****************************/
externuintwei;
externuinttemp[8];
voidshowled();
voidshub(uinttemp);
externdelaym(unsignedinti);
sbitLSA=P2^0;
//管脚定义
sbitLSB=P2^1;
sbitLSC=P2^2;
sbitLSD=P2^3;
sbitLSE=P2^4;
unsignedcharcodeDisp_Tab[]={0x40,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//段码
unsignedintLedOut[5];
/********以下将读18b20的数据送到LED数码管显示*************/
voidshowled()
inti;
LedOut[0]=Disp_Tab[wei+1];
shub(temp[wei]);
i<
5;
i++)
{
switch(i)
case0:
LSA=1;
LSB=0;
LSC=0;
LSD=0;
LSE=0;
break;
case1:
LSA=0;
LSB=1;
case2:
LSC=1;
case3:
LSD=1;
case4:
LSE=1;
P0=LedOut[i];
delaym(100);
P0=0xff;
voidshub(uinttemp)//温度数据处理
uintfl,i;
if(temp&
0x8000)
temp=~temp;
temp+=1;
fl=0;
elsefl=1;
i=temp*0.0625;
//温度在寄存器中是12位,分辨率是0.0625
temp=i*10+0.5;
//乘10表示小数点后只取1位,加0.5是四折五入
temp=temp/10;
LedOut[1]=Disp_Tab[temp%10000/1000];
LedOut[2]=Disp_Tab[temp%1000/100];
LedOut[3]=Disp_Tab[temp%100/10];
//十位
LedOut[4]=Disp_Tab[temp%10];
//个位
if(fl==0)
if((temp/10)==0)LedOut[3]=Disp_Tab[10];
elseif(temp/100==0)LedOut[2]=Disp_Tab[10];
elseif(temp/1000==0)LedOut[1]=Disp_Tab[10];
}
5仿真及实验调试
5.1仿真原件:
AT89C51(单片机)
7SEG-MPX1-CA(共阳级一位数码管)
7SEG-MPX4-CA(共阳级四位数码管)
电阻
电容
晶振
按键
DS18B20(温度传感器)
5.2仿真
参考文献
[1]黄惟公,邓成中,王燕.单片机原理与应用技术[M],西安-西安电子科技大学出版社,2007.08
[2]张毅刚.MC-51单片机应用设计(二版):
哈工大出版社2005
[3]杨文龙.单片微机原理及应用.西安电子科技出版社
[4]王桂敏,齐风河.基于1-Wire总线技术的巡检系统[M],大庆师范学院学报,2007.4
[5]周航慈.单片机程序设计基础.北京:
北京航天航空大学出版社
[6]胡汉才.单片机原理及其借口技术.北京:
清华大学出版社
[7]DS18b20说明书
[8]常敏等单片机应用程序开发与实践电子工业出版社2009;
[9]周润景等基于PROTEUS的电路及单片机系统设计与仿真北航出版社2006.5
致谢
首先我要感谢我的指导老师邓成中老师,他为我们为我们此次设计指明方向,形成了良好的学习氛围,指导我正确的学习方法,在此谨邓老师表达深深的谢意!
在设计的进行过程中,还得到了机械工程与自动化学院其张老师、余老师等几位老师的热心指导和帮助,帮我排除了很多困难,在此表示衷心的感谢!
还要非常感谢我的同学,我们同宿舍的同班的许多好朋友,他们给了我很多帮助!
读序列程序
#include<
reg52.h>
/********************************************************************/
sbitDS=P3^3;
//温度传感器信号线
sbitrs=P1^4;
//LCD数据/命令选择端(H/L)位声明
sbitrw=P1^3;
//LCD读写控制,写为0,读为1
sbitlcden=P1^2;
//LCD使能信号端位声明
voiddelay(uintz);
//延时函数
voidDS18B20_Reset(void);
//DS18B20复位,初始化函数
bitDS18B20_Readbit(void);
//读1位数据函数
ucharDS18B20_ReadByte(void);
//读1个字节数据函数
voidDS18B20_WriteByte(uchardat);
//向DS18B20写一个字节数据函数
voidLCD_WriteCom(ucharcom);
//1602液晶命令写入函数
voidLCD_WriteData(uchardat);
//1602液晶数据写入函数
voidLCD_Init();
//LCD初始化函数
voidDisplay18B20Rom(charRom);
//显示18B20序列号函数
/**********************************************/
/*主函数*/
{uchara,b,c,d,e,f,g,h;
LCD_Init();
rw=0;
DS18B20_Reset();
delay
(1);
DS18B20_WriteByte(0x33);
a=DS18B20_ReadByte();
b=DS18B20_ReadByte();
c=DS18B20_ReadByte();
d=DS18B20_ReadByte();
e=DS18B20_ReadByte();
f=DS18B20_ReadByte();
g=DS18B20_ReadByte();
h=DS18B20_ReadByte();
LCD_WriteCom(0x80+0x40);
Display18B20Rom(h);
Display18B20Rom(g);
Display18B20Rom(f);
Display18B20Rom(e);
Display18B20Rom(d);
Display18B20Rom(c);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八路 温度 数据 采集 系统 设计 LED 显示