八路温度数据采集系统设计(LED显示)课件_第1页
八路温度数据采集系统设计(LED显示)课件_第2页
八路温度数据采集系统设计(LED显示)课件_第3页
八路温度数据采集系统设计(LED显示)课件_第4页
八路温度数据采集系统设计(LED显示)课件_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西华大学课程设计八路温度数据采集系统设计(LED显示)摘要八路温度数据采集系统采用LED显示,选用8只DS18B20温度传感器总线的方式。温度采集器以89C51单片机为控制核心,由控制、显示、采集等模块组成。详细分析了该采集器各模块的功能和接口电路原理、给出了软件系统的框架和各个函数的结构。附件:源程序代码、proteus的仿真图。关键词:温度采集;单片机应用;Proteus仿真;LED显示;89C51目 录摘 要11.1 绪论31.2课题研究内容32 总体方案设计32.1 总体方案框图42.2 各模块的功能42.3 整体电路图54 软件系统设计84.1编程语言及开发工具84.2 软件系统的流

2、程结构84.3 程序模块设计95 仿真及实验调试185.1 仿真原件185.2 仿真19参 考 文 献19致 谢20 附件121 附件221 附件32111 绪论随着科技的不断进步,在工业生产中温度是常用的被控参数,而采用单片机来对这些被控参数进行控制已成为当今的主流。本文介绍了数字温度测量及自动控制系统的设计。阐述了以89C5单片机为核心的温度控制系统的工作原理和设计方法。主要组成部分:89C51单片机、温度传感器、显示电路。仿真表明,本设计对温度的显示方便、简单的特点,元器件利用率高。温度信号由温度芯片DS18B20采集,并以数字信号的方式传送给单片机。文中介绍了该控制系统的硬件部分,包括

3、:温度检测与温度显示。单片机通过对信号进行相应处理,从而实现温度在LED上显示的目的。1.2课题研究内容 1主要内容 能采集8路温度,并每一秒钟显示一个通道的温度。2具体要求 用MCS-51系列单片机作为控制器; 温度可采用DS18B20,误差1; 用LED显示; 用1个键可以暂停一个通道的显示;用Proteus完成所有功能的仿真; 设计或选用5V直流稳压电源模块。2 总体方案设计本课题将设计一个8路温度采集&显示器,但它上面装有LED液晶屏幕显示,可以根据时间显示不同通道的环境温度,切换时间位1s,也可以根据需求通过功能按键将一个通道的显示暂停。首先采用89C51单片机为控制核心,选用DS1

4、8B20温度传感器作为8路采集模块的采集器,由于每一片DS18B20芯片有自身的系列好,可以利用DS18B20单总线技术将8个传感器用一根总线连接一起。(单总线不同于I2C、SPI、SCI总线技术,单总线减低了IO口的开支,硬件开销少,成本低廉,便于总线的扩展和维护等有点。)由于采用单总线方式,对不同DS18B20的温度传感器有不同的序列号,因此特别设置了一个附加电路测DS18B20的序列号。根据设计方案的分析:由于DS18B20温度传感器在启动的时候需要内部初始化,大概需要1S的时间,之后才会正确的显示各个通道的温度。2.1 总体方案框图八路温度采集器系统的硬件框图如图所示。51单片机8路温

5、度传感器Led显示按键输入2.2 各模块的功能温度采集器:电源模块、温度采集模块、键盘模块、信号选择模块、显示模块5个模块组成。电源模块:选择市场上常用的5v充电电源;温度采集模块:由单总线连8路DS18B20而成,8路DS18B20采用非寄生电源,由外部5v供电。键盘控制模块:由一个独立按钮形成独立的按键,实现“暂停”功能。液晶显示模块:由4位LED、1位LED、限流电阻、三极管构成,实现对温度值的显示。2.3 主要器件功能介绍89C51简介:89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only

6、Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要特性:与MCS-51 兼容4K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24MHz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定

7、时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路DS18B20概述:DS1820 数字温度计提供 9 位温度读数,指示器件的温度。信息经过单线接口送入 DS1820 或从 DS1820 送出,因此从中央处理器到 DS1820 仅需连接一条,读写和完成温度变换所需的电源可以由数据线本身提供 而不需要外部电源;因为每一个 DS1820 有唯一的系列号,因此多个 DS1820 可以存在于同一条单线总线上。这允许在许多不同的地方放置温度灵敏器件。此特性的应用范围包括 HVAC、环境控制、建筑物、设备或机械内的温度检测 以及过程监视和控制中的温度检测。DS18B20的主要特

8、性1.1、适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数 据线供电1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯1.3、 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温1.4、DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内1.5、温范围55+125,在-10+85时精度为0.51.6、可编程 的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温1.7、在9位分辨

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的作用 是使每一个D

10、S18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。ROM指令表 指 令 约定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址) 符合 ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 搜索 ROM0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 告警搜索命令 0E

11、CH执行后只有温度超过设定值上限或下限的片子才做出响应。 温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。 读暂存器 0BEH 读内部RAM中9字节的内容 写暂存器 4EH 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 复制暂存器 48H 将RAM中第3 、4字节的内容复制到EEPROM中。 重调 EEPROM0B8H 将EEPROM中内容恢复到RAM中的第3 、4字节。 读供电方式 0B4H 读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 D

12、S1820发送“ 1 ”。 3.1 八路温度采集器电路图4 软件系统设计4.1编程语言及开发工具本系统的处理器是兼容8051指令集的高速单片机STC89C51。为此,首选Keil Vision 作为其开发工具。Keil Vision 是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。其功能强大,生成的代码紧凑,是目前世界上使用最广泛的51系列兼容单片机开发工具。4.2 软件系统的流程结构温度采集器的软件主要包括温度的采集、数据的处理、LED显示、键盘管理等模块组成。其流程结构框图如下图所示:系统经过初始化之后,过段时间采集温度传感器的值,避免温度传感器输出特性误报

13、85读。显示一只温度传感器的温度持续1秒左右,检测时候按键按下,按下则持续显示这位温度传感器的温度。若没有按下则判断是否已经显示到最后只传感器,若是,则刷新温度值;若否则显示下一只温度传感器温度。初始化刷新温度显示当前传感器温度是最后只按键按下按键检测最后只传感器判断不是最后只4.3 程序设计/*miann.c*/#include#define uchar unsigned char#define uint unsigned int/外部函数引用申明extern void tmstart();/初始化ds18b20extern void read_dealtemp();/读取并处理温度exte

14、rn void showled();sbit button=P30;uint wei;void delaym(unsigned int i) char j; for(i; i 0; i-) for(j = 200; j 0; j-);void main() uint n,m;tmstart();/由于DS18B20的启动特性,所以加端程序屏蔽掉显示85度 read_dealtemp();delaym(20000); while(1) tmstart();/初始化 read_dealtemp();/读取温度for(n=0;n8;n+) /温度传感器循环button=1;for(m=0;m100;

15、m+) /传感器显示扫描次数,决定显示不同温度传感器数值的时间 wei=n; showled(); while(button=0)showled(); /*18b20.c*/#include#define uchar unsigned char#define uint unsigned intuint temp8=1;sbit ds=P37;uchar lcdrom88=0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e, 0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9, 0x28,0x32,0xc5,0xb8,0x00,0x00,0

16、x00,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,;uint tvalue;/*lcd程序*/void delayms(uint ms)/延时uint i,j;for(i=ms;i0;i-)for(j=110;j0;j-);/*d

17、s18b20程序*/void dsrst()/ds18b20复位uint i;ds=0;i=103;while(i0)i-;ds=1;i=4;while(i0)i-;bit dsrd0()/读一位数据uint i;bit dat;ds=0;i+;ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return(dat);uchar dsrd()/读1个字节数据uchar i,j,dat;dat=0;for(i=8;i0;i-)j=dsrd0();dat=(j1);return(dat);void dswr(uchar dat)/写数据uint i;uchar j;bit tes

18、tb;for(j=8;j0;j-)testb=dat&0x01;dat=dat1;if(testb)ds=0;i+;i+;ds=1;i=8;while(i0)i-;elseds=0;i=8;while(i0)i-;ds=1;i+;i+;void tmstart()/初始化ds18b20dsrst();delayms(1);dswr(0xcc);dswr(0x44);void read_dealtemp()/读取并处理温度uchar i,j;uchar a,b;for(j=0;j8;j+)dsrst();delayms(1);dswr(0x55);for(i=0;i8;i+)dswr(lcdro

19、mji);/发送64位序列号dswr(0xbe);a=dsrd();b=dsrd();tvalue=b;tvalue=8;tvalue=tvalue|a;tempj=tvalue;delayms(50);/*show.c*/#include#define uchar unsigned char#define uint unsigned intextern uint wei;extern uint temp8;void showled();void shub(uint temp);extern delaym(unsigned int i);sbit LSA=P20; /管脚定义sbit LSB=

20、P21;sbit LSC=P22; sbit LSD=P23;sbit LSE=P24; unsigned char code Disp_Tab = 0x40,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf; /段码unsigned int LedOut5;/*以下将读18b20的数据送到LED数码管显示*/void showled() int i; LedOut0=Disp_Tabwei+1; shub(tempwei); for(i=0; i5; i+) switch(i) case 0:LSA=1;LSB=0;LSC=0;LSD=0;L

21、SE=0; break; case 1:LSA=0;LSB=1;LSC=0;LSD=0;LSE=0; break; case 2:LSA=0;LSB=0;LSC=1;LSD=0;LSE=0; break; case 3:LSA=0;LSB=0;LSC=0;LSD=1;LSE=0; break;case 4:LSA=0;LSB=0;LSC=0;LSD=0;LSE=1; break; P0 = LedOuti ; delaym(100); P0 =0xff; void shub(uint temp)/温度数据处理 uint fl,i; if(temp&0x8000) temp=temp;temp+

22、=1;fl=0;else fl=1;i=temp*0.0625; /温度在寄存器中是12位,分辨率是0.0625 temp=i*10+0.5; /乘10表示小数点后只取1位,加0.5是四折五入temp=temp/10; LedOut1=Disp_Tabtemp%10000/1000; LedOut2=Disp_Tabtemp%1000/100; LedOut3=Disp_Tabtemp%100/10; /十位 LedOut4=Disp_Tabtemp%10; /个位 if(fl=0) if(temp/10)=0) LedOut3=Disp_Tab10;else if(temp/100=0)Le

23、dOut2=Disp_Tab10;else if(temp/1000=0)LedOut1=Disp_Tab10; 5 仿真及实验调试5.1 仿真原件:AT89C51(单片机)7SEG-MPX1-CA(共阳级一位数码管)7SEG-MPX4-CA(共阳级四位数码管)电阻电容晶振按键DS18B20(温度传感器)5.2 仿真参 考 文 献1 黄惟公,邓成中,王燕.单片机原理与应用技术M,西安-西安电子科技大学出版社, 2007.082 张毅刚MC-51单片机应用设计(二版):哈工大出版社 20053 杨文龙单片微机原理及应用西安电子科技出版社4 王桂敏,齐风河. 基于1-Wire总线技术的巡检系统M,

24、大庆师范学院学报,2007.45 周航慈单片机程序设计基础北京:北京航天航空大学出版社6 胡汉才.单片机原理及其借口技术.北京:清华大学出版社7 DS18b20说明书8常敏等 单片机应用程序开发与实践 电子工业出版社 2009;9周润景等 基于PROTEUS的电路及单片机系统设计与仿真 北航出版社 2006.5致 谢首先我要感谢我的指导老师邓成中老师,他为我们为我们此次设计指明方向,形成了良好的学习氛围,指导我正确的学习方法,在此谨邓老师表达深深的谢意!在设计的进行过程中,还得到了机械工程与自动化学院其张老师、余老师等几位老师的热心指导和帮助,帮我排除了很多困难,在此表示衷心的感谢!还要非常感

25、谢我的同学,我们同宿舍的同班的许多好朋友,他们给了我很多帮助!读序列程序#include #define uchar unsigned char#define uint unsigned int/*/sbit DS = P33; /温度传感器信号线sbit rs = P14; /LCD数据/命令选择端(H/L)位声明sbit rw = P13; /LCD读写控制,写为0,读为1sbit lcden = P12; /LCD使能信号端位声明/*/void delay(uint z); /延时函数void DS18B20_Reset(void); /DS18B20复位,初始化函数bit DS18B2

26、0_Readbit(void); /读1位数据函数uchar DS18B20_ReadByte(void); /读1个字节数据函数void DS18B20_WriteByte(uchar dat); /向DS18B20写一个字节数据函数void LCD_WriteCom(uchar com); /1602液晶命令写入函数void LCD_WriteData(uchar dat); /1602液晶数据写入函数void LCD_Init(); /LCD初始化函数void Display18B20Rom(char Rom); /显示18B20序列号函数/*/* 主函数 */*/void main()

27、 uchar a,b,c,d,e,f,g,h; LCD_Init();rw = 0; DS18B20_Reset(); delay(1); DS18B20_WriteByte(0x33); delay(1); 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

28、_WriteCom(0x80+0x40); Display18B20Rom(h); Display18B20Rom(g); Display18B20Rom(f); Display18B20Rom(e); Display18B20Rom(d); Display18B20Rom(c); Display18B20Rom(b); Display18B20Rom(a); while(1);/*/* 延时函数:void delay() */* 功能:延时函数 */*/void delay(uint z)/延时函数 uint x,y; for( x = z; x 0; x- ) for( y = 110;

29、y 0; y- );/*/* DS18B20函数:void DS18B20_Reset() */* 功能:复位18B20 */*/void DS18B20_Reset(void)/DS18B20复位,初始化函数 uint i; DS = 0; i = 103; while( i 0 ) i-; DS = 1; i = 4; while( i 0 ) i-;/*/* DS18B20函数:void DS18B20_Readbit() */* 功能:读1个字节数据函数 */*/bit DS18B20_Readbit(void) /读1位数据函数 uint i; bit dat; DS = 0; i+

30、; /i+起延时作用 DS = 1; i+; i+; dat = DS; i = 8; while( i 0 )i-; return( dat );/*/* DS18B20函数:void DS18B20_ReadByte() */* 功能:读1个字节数据函数 */*/uchar DS18B20_ReadByte(void) /读1个字节数据函数 uchar i,j,dat; dat = 0; for( i = 1; i = 8; i+ ) j = DS18B20_Readbit(); dat = ( j 1 ); return(dat);/*/* DS18B20函数:void DS18B20_WriteByte() */* 功能:向DS18B20写一个字节数据函数 */*/void DS18B20_WriteByte(uchar dat) /向DS18B20写一个字节数据函数 uint i; uchar j; bit testb; for( j=1; j1; if(testb) /写1 DS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论