单片机原理及应用课程设计(温度测量).doc_第1页
单片机原理及应用课程设计(温度测量).doc_第2页
单片机原理及应用课程设计(温度测量).doc_第3页
单片机原理及应用课程设计(温度测量).doc_第4页
单片机原理及应用课程设计(温度测量).doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

成绩 信息工程学院课程设计说明书(论文)题 目: 温度测量 课 程 名 称: 单片机原理及应用课程设计 专 业: 电子信息工程 班 级: 电信 0902 学 生 姓 名: 吴达盛 于觐嘉 王凯 学 号: 25 28 23 设 计 地 点: 6#北603 指 导 教 师: 李敏 设计起止时间: 年 月 日至 年 月 日目 录一、设计功能要求3二、系统总体设计方案3三、系统分析与设计3四、源码清单3五、改进意见与收获体会3六、主要参考资料4一、设计功能要求采用数字式温度传感器为检测器件,进行单点温度检测。用数码管直接显示温度值,微机系统作为数字温度计的控制系统。基本要求:(1)检测的温度范围:-2070,检测分辨率0.5。(2)用1602液晶屏来显示温度值。(3)超过警戒值(自己定义)要报警提示。二、系统总体设计方案本系统是一个基于单片机AT89S51的数字温度计的设计,用来测量环境温度,测量范围为-2070度。整个设计系统分为4部分:单片机控制、温度传感器、数码显示以及键盘控制电路。整个设计是以AT89S52为核心,通过数字温度传感器DS18B20来实现环境温度的采集和A/D转换,同时因其输出为数字形式,且为串行输出,这就方便了单片机进行数据处理,但同时也对编程提出了更高的要求。单片机把采集到的温度进行相应的转换后,使之能够方便地在数码管上输出。采用1602液晶屏显示温度。三、系统分析与设计1基本工作原理 以AT89C51作为核心控制温度传感器DS18B20进行实时温度检测并显示,其能够测量环境温度,根据此温度设定上下限报警温度。所以,我们在电路设置了三个按钮,其中两个按钮作于调控温度的值的大小,剩下的一个是设置按钮,利用它来切换到调控温度最高值与最低值的界面。当温度值达到上限或下限值甚至超多它,马上触发报警系统,二极管会闪烁,发声器发声。 温度计工作原理图2.基本框图及各个部分的组成 本电路的小系统主要由四部分组成,复位电路、脉冲电路、检温电路、显示电路。2.1复位电路:计算机在启动运行的时候都需要复位,使中央处理器CPU和系统中的其他部件都处于一个确定的初始状态,并且从这个初始状态开始工作。单片机的复位是靠外部电路实现的,51单片机有一个复位引脚RST,高电平有效。最常用的复位电路 有两种 一种是有极性电容和一个电阻串联,电容接电源端,电阻的一端接地,电容和电阻的公共端接复位端口;另外一种方法是一个按钮和极性电容并联,电容正极与按钮的公共端接复位电路,另外一个公共端接地。在焊接硬件的时候我们是采用了第一种方法接复位电路的。2.2脉冲电路:计算机的正常运行是需要脉冲才能正常工作,一个12MHZ的晶振和两个电容并接一起接到单片机XTAL1和XTAL2的端口,根据自己程序的需要我们可以选择产生脉冲的大小,产生脉冲的大小与晶振和电容有关。我们选择的是一个12MHZ的晶振和22pf的电容。2.3检温电路:DS18B20数字温度传感器DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如下图1: DS18B20引脚定义: (1)DQ为数字信号输入/输出端; (2)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 DS18B20的管脚图2.4测温工作:温度传感器DS18B20连接时I/O口上要接一个上拉5K左右的电阻,这样可以保证温传感器工作时候的精度,还有抗干扰的作用。温度传感器检测外界的温度,得到的数据,将进行数据的转换,转换完成的温度数字将会保留,然后在液晶上显示,同时也会与程序设计的温度的上限和下限进行比较,若超出设定的上限和下限的温度值,就报警。显示电路:第1脚:VSS接地第2脚:VDD接5V正电源。第3脚:为液晶显示器对比度调整端,接电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K欧姆的电位器来调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时,可以写入指令或者显示地址,当RS为低电平RW为高电平时,可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:屏幕背光引脚1602与单片机的I/O口电路连接如图5-5所示:3.完整温度测量设计图:4.程序流程图:开始初始化显示及DS18B20按键检测并对状态记数读取温度值并显示实时温度无键按下或状态为0有键按下状态为1或为2显示上限或下限温度值并开启外部中断检测温度值并判断是否高出上限或低于下限温度否中断?否上限加上限减报警是返回四、源码清单#include reg52.h#include absacc.hunsigned char code tab=0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X40;sbit DQ=0xb7; sbit P07=0x87; sbit RED=0x97; sbit GREEN=0x96; sbit SET=0x90; sbit NEXT=0x91;sbit REDUCE=0x92;sbit ADD=0x93;unsigned char tempL=0;unsigned char tempH=0; float temperature;float temperatureH=35,temperatureL=0; int tH=1,tL=1;/报警状态,1为关闭int m,k=1,l,keyon,keytype,out=0;void delay(unsigned int time) unsigned int n; n=0; while(n=0) P2=0xf7; P0=tab(int)(k/100); delay(250); P0=0x00; else k=-k;P2=0xf7;P0=0x40;delay(250);P0=0x00; P2=0xfb; P0=tab(int)(k/10); delay(250); P0=0x00; P2=0xfd; P0=tab(int)k)%10; P07=1; delay(250); P0=0x00; P2=0xfe; P0=tab(int)(k*10)%10; delay(250); P0=0x00;Init_DS18B20(void) unsigned char x=0; DQ=1; delay(8); DQ=0; delay(85); DQ=1; delay(14); x=DQ; delay(20);ReadOneChar(void) unsigned char i=0; unsigned char dat=0; for (i=8;i0;i-) DQ=1;delay(1);DQ=0;dat=1;DQ=1;if(DQ) dat|=0x80;delay(4); return(dat);WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8;i0;i-) DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat=1; delay(4);ReadTemperature(void) char ctempL,ctempH; Init_DS18B20(); WriteOneChar(0xcc); WriteOneChar(0x44); delay(125); Init_DS18B20(); WriteOneChar(0xcc); WriteOneChar(0xbe); tempL=ReadOneChar(); tempH=ReadOneChar(); if(tempH=0) P2=0xfd; P0=tab(int)(temperatureH/10); delay(70); P0=0x00; P2=0xfe; P0=tab(int)(temperatureH)%10; delay(70); P0=0x00; else P2=0xfd; P0=0x40; delay(70); P0=0x00; P2=0xfe; P0=tab(int)(-temperatureH)%10; delay(70); P0=0x00; else if(m=2|m=3) P2=0xf7; P0=0x38; delay(70); P0=0x00; if(m=2&k=-1) delay(70); else if(tL=1) P2=0xfb; P0=0x71; delay(70); P0=0x00; else P2=0xfb; P0=0x3f; delay(70); P0=0x00; if(m=3&k=-1) delay(100); else if(temperatureL=0) P2=0xfd; P0=tab(int)(temperatureL/10); delay(70); P0=0x00; P2=0xfe; P0=tab(int)(temperatureL)%10; delay(70); P0=0x00; else P2=0xfd; P0=0x40; delay(70); P0=0x00; P2=0xfe; P0=tab(int)(-temperatureL)%10; delay(70); P0=0x00; if(l=200)k=-k;l=0; l+;void seting() if(SET=1&NEXT=1&REDUCE=1&ADD=1); else keyon=1; if(SET=0)keytype=0; if(NEXT=0)keytype=1; if(REDUCE=0)keytype=2; if(ADD=0)keytype=3; if(keyon=1&SET=1&NEXT=1&REDUCE=1&ADD=1) if(keytype=1) if(m=3)m=0; else m+; if(keytype=2) if(m=0)tH=-tH; if(m=1) if(temperatureH(temperatureL+1) temperatureH-; else temperatureH=99; if(m=2)tL=-tL; if(m=3) if(temperatureL-9) temperatureL-; else temperatureL=(temperatureH-1); if(keytype=3) if(m=0)tH=-tH; if(m=1) if(temperatureH99) temperatureH+; else temperatureH=(temperatureL+1); if(m=2)tL=-tL; if(m=3) if(temperatureL=temperatureH) RED=0; else RED=1;if(tL=-1&temperature=temperatureL) GREEN=0;else GREEN=1; 五、改进意见与收获体会经过将两周的单片机课程设计,终于完成了我们的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀! 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用对不同的位,求商或求余,感觉效果比较好。还有时序的问题,通过这次的设计我明白了时序才真正是数字芯片的灵魂,所有的程序我们都可以通过对其时序的理解来实现对其操作,同时体会到了单总线结构的魅力。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

温馨提示

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

最新文档

评论

0/150

提交评论