微机原理与接口技术课程设计报告温度的采集与显示.doc
微机原理与接口技术课程设计报告书题目: 温度采集与显示姓名:学号:P081512977 P081512963 P081512987 P081512991班级:2008级计算机一班指导教师:设计时间:2011年3月 7月西北民族大学数学与计算机学院目 录1.引言21.1.背景和编写目的21.2.参考资料22.系统组成33.硬件设计34.软件编程85.系统仿真调试116.总结167.附录171. 引言1.1. 背景和编写目的在科学技术突飞猛进的今天,温度检测、控制起不可忽视的作用。温度是生活生产中常见的和最基本的参数之一,在生产过程中常需对温度进行检测和监控,采用微型机进行温度检测、数字显示、信息存储及实时控制,对于提高生产效率和产品质量、节约能源等都有重要的作用。温度控制无论在医疗电子领域还是工业控制领域应用都非常广泛,如在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制,医疗电子领域的生化分析仪等,内部都涉及到温度控制。本课题它完成了从温度的采集、转换、显示以及报警的一系列任务。1.2. 参考资料1 乐建波温度控制系统北京化学工业出版社。2 proteus仿真教程3 Keil Software Company. Cx51 Compiler Users Guide. 2001 4 王为青、邱文勋.51单片机应用开发案例精选.人民邮电出版社,20075 李朝青.单片机原理与接口技术.北京航空航天大学出版社,2006 邹逢兴.微型计算机原理与接口技术M.长沙:国防科技大学出版社,7 沈德金,陈粤初.接口电路与应用程序例 M.机械工业出版社,20032. 系统组成本系统采用P87C51AF作为控制微处理器,系统主要包括现场温度采集、温度显示、电路控制输出、与报警装置。电路结构框图:温度传感器单片机控制LED显示温度,对应的灯亮或报警器响 温度采集电路以数字量形式将现场温度传至单片机。单片机结合现场温度与用户设定的目标温度,进行判断是否超越极限以此控制蜂鸣器自动报警。3. 硬件设计P87C51AF芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的P87C51AF可为许多嵌入式控制应用系统提供高性价比的解决方案。P87C51AF具有如下特点:40个引脚,8k Bytes Flash片内程序存储器256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。P87C51AF芯片有40条引脚,这里只列举了38个,其中2个是接电源和接地的脚。如下图所示:PSEN(29):片外程序存储器选通信号,低电平有效。RST(9):复位信号输入端。P87C51AF接能电源后,在时钟电路作用下,该脚上出现两个机器周期以上的高电平,使内部复位。第二功能是VPD,即备用电源输入端。ALE(30):地址锁存信号输出端。P0口(3932):双向I/O口,既可作地址/数据总线口用,也可作普通I/O口用。P1口(18):准双向通用I/O口。P2口(2128):准双向口,既可作地址总线口输出地址高8位,也可作普通I/O口用P3口(1017):多用途口,既可做普通I/O口,也可按每位定义的第二功能操作。主要功能特性: u 兼容MCS-51指令系统 u 8k可反复擦写(>1000次)Flash ROM u 32个双向I/O口 u 4.5-5.5V工作电压 u 时钟频率0-33MHz u 全双工UART串行中断口线 u 256x8bit内部RAM u 2个外部中断源 u 低功耗空闲和省电模式 u 中断唤醒省电模式 u 3级加密位 u 看门狗(WDT)电路 u 软件设置空闲和省电功能 u 灵活的ISP字节和分页编程 u 双数据寄存器指针u 2个16位可编程定时/计数器 P87C51AF共有4个(P0、P1、P2、P3口)8位并行I/O端口,共32个引脚。P0口双向I/O口,用于分时传送低8位地址和8位数据信号;P1、P2、P3口均为准双向I/O口;其中P2口还用于传送高8位地址信号;P3口每一引脚还具有特殊功能,用于特殊信号的输入输出和控制信号。传感器DS18B20设计DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。 LED显示器设计单片机I/O的应用最典型的是通过I/O口与LED数码管构成显示电路,我不采用LCD液晶显示器的主要原因是液晶显示,省电,常用于精密仪器仪表,而且编程复杂,而数码管显示,亮度高,成本低,编程简易,易操作。工作原理:利用DS18B2O所测量到的温度经过转换,再将转换出来的温度输入LED使内部的二极2管发光,使我们能看到清晰的温度值。报警和指示灯设计当用户设定的目标温度达到时需用声音的形式提醒用户,此时蜂鸣器为断续的滴答滴答的叫声。在本系统中我们为用户设计了越限报警,当温度低于用户设置的目标温度20度或高于30度时蜂鸣器为连续不断的滴答滴答叫声。当单片机 P1.7输出高电平时,三极管导通,蜂鸣器工作发出报警声。报警及指示灯电路如下图: 当温度在正常范围内显示灯1亮,当温度低于设限温度时,显示灯2亮,同时,蜂鸣器报警。当温度高于设限温度时,显示灯3亮,同时,蜂鸣器报警.复位电路设计单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC0000H,这表明程序从0000H地址单元开始执行。4. 软件编程主程序流程图温度值处理是否超出上下限单片机发出温度转换命令DS18B20温度转换开始显示温度单片机读取温度正常指示灯亮“嘀嘀”报警是否达到报警温度“嘀嘀”报警NNYY主程序:void main() uchar i; uchar temp; float backbit; uchar counter;counter=5;sp=1; for(i=0;i<4;i+) dispbufi = 0; while(1)/温度测量频率没有必要太高,太高反而影响数码显示 /所以用计数器加以控制 if(counter- = 0) readtemp(); counter = 2; / readtemp();/读18B20 backbit = temper0;/换成浮点数 backbit = backbit * 6.25;/乘以0.0625*100 temp = backbit;/取低2位整数部分 dispbuf3 = temp%10 ; temp = temp/10; dispbuf2 = temp%10 ; temp = temper1;/取整数部分 dispbuf1 = temp%10; temp = temp/10; dispbuf0= temp%10; saomiao();延时设计本系统选用的P87C51AF单片机的工作频率为12MHZ。可以知道具体每条指令的周期数,这样就可以通过指令的执行条数来确定时间。具体的延时程序:void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);本系统不仅对主函数进行了延时,还对DS18B20的操作进行了延时,以便我们能更容易看清楚所测温度的变化。对DS18B20的延时程序如下:void delay1(uint z) while(z-);复位设计本系统主要采用的是手动进行复位,在上电后使RST持续一段时间的高电平。就能使系统复位。其程序如下:void reset(void) uchar x=0; DQ = 1; delay1(8); /稍做延时 DQ = 0; delay1(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay(14); x=DQ; delay1(20);显示设计本设计主要是采用了四位一体LED数码管,都对起进行了上拉,以增加数码管的亮度。其程序:void saomiao()P0=tabledispbuf0;/十位P1=0xfe;delay(2);P1=0xff;P0=table1dispbuf1;/个位P1=0xfd;delay(2);P1=0xff;P0=tabledispbuf2;/十分位P1=0xfb;delay(2);P1=0xff;P0=tabledispbuf3;/百分位P1=0xf7;delay(2);P1=0xff;5. 系统仿真调试Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。Proteus的工作过程u 运行proteus的ISIS程序后,进入该仿真软件的主界面。u Proteus 软件所提供的仪表资源,对于一个仿真软件或实验室,测试的仪器仪表的数量、类型和质量,是衡量实验室是否合格的一个关键因素。u Proteus 软件所提供的调试手段,Proteus提供了比较丰富的测试信号用于电路的测试。图4-1 Proteus的的主界面Keil uvision2Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。在打开Keil主界面后,新建工程进入界面如下图:图 4-2 Keil主界面程序编译成功后,点击Options for target后再点击Output进入以下界面再点击Greate HEX Fi:生成 HEX文件。图 4-3 生成HEX文件界面仿真结果如下图所示图4-4 系统温度正常情况图4-5系统温度低于20图4-6系统温度高于30说明:图4-1 系统温度正常情况下的仿真图,此时,左边第一个发光二极管亮,蜂鸣器不报警,同时,LED数码管显示当前温度。 图4-2 系统温度低于20情况下的仿真图,此时,中间发光二极管亮,峰鸣器发出声音报警,LED数码管显示当前温度。图4-3系统温度高于30情况下的仿真图,此时,右边第一个发光二极管亮,蜂鸣器发出声音报警,LED数码管显示当前温度。遇到的问题:在本次设计中,从设计的开始到结束这段历程中,也遇到了无数的困难,也让我对自己一次次的失去信心,碰到的问题有些看起来很简单,但做起来却特别难。首先在用proteus软件仿真的时候,常常找不到所需的元件,后来找资料才找到,但有的元件本不自带,得需要导入。电路图连接好,就是需要程序才能仿真。而程序经过无数次的更改,无数次的重新烧写程序,最终才完成一组完整的程序。后来程序也没问题后,就是仿真的时候怎么也不能实现,原因是因为没有生成.HEX文件,经过对keil的学习,才知道怎么生成.HEX文件。在经历了千辛万苦才完成了本次设计。本次设计加强了我们对C语言及Keil软件等的学习。6. 总结说真话,从来没有自己一个人做过课题,感觉有点点思路,却抓不住,不知道从何入手,网上的资料不知道怎么去用,很多用的着的知识书本上讲的不是那么详细,要是去查找吸收这些知识的话,时间又显得紧巴巴,天天对着电脑,效率有限,很多时候需要很多门的知识结合在一起才能完成课题的,天天对着电脑晕头转向,第一次被打击的这么彻底,第一次沮丧的如此手足无措。好不容易做出来的,总感觉很多的漏洞,却又不知道怎么去改。从心底里了解了厚积薄发,平时的积累到现在就起效果了,终于理解了机会是留给有准备的人的。做课题的时候心中压力很大,现在想想,有点夸张的说是噩梦,累啊!但是,收获是真的,它是实实在在的,经历了这次活动,我感觉我成长了,它锻炼了我的耐心,另一方面就是提高了我学习的效率让注意力集中起来;掌握了更多的知识,补充了平时学习的漏洞,培养了自学能力,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。用一句话来概括就是:痛并快乐着,吸收并成长着。本设计主要是依靠新型DS18B20温度传感器对温度的采集以及P87C51AF单片机、LED数码管、蜂鸣器完成了一个简单的温度控制自动报警系统。本设计充分采用了DS18B20的高精度、体积小、一线总线等特点和P87C51AF单片机的强大功能以及使用蜂鸣器而不用扬声器,既节约了时间、经济成本,也减小了设计电路的复杂性。通过这次温度控制系统的设计,我们也收获了许多,这以后使我对单片机更加感兴趣,也加强了我对C语言等的学习,使我们的学习往前迈了一大步7. 附录电路原理图:源程序代码#include<reg52.h>/=宏定义=#define uchar unsigned char #define uint unsigned int/=位定义=sbit DQ =P20 ;/18B20数据线引脚sbit sp=P21; /蜂鸣器端口sbit led1=P22; /指示灯端口sbit led2=P23;sbit led3=P24;/=全局变量定义=uchar dispbuf4; /显示缓冲区 uchar temper2;/存放温度的数组 / =定义数组= uchar code table=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,;uchar code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/=延时函数=void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/=小延时,用于对DS18B20的操作=void delay1(uint z) while(z-); /复位操作void reset(void) uchar x=0; DQ = 1; delay1(8); /稍做延时 DQ = 0; delay1(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay(14); x=DQ; delay1(20);/*从DS18B20读一字节*/uchar readbyte(void) /读1字节 uchar i=0; uchar dat=0; for (i=8;i>0;i-) DQ = 0; dat>>=1; DQ = 1; if(DQ) dat|=0x80; delay1(4); return(dat); /*向DS18B20写一字节*/void writebyte(unsigned char dat) /写1字节 uchar i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; delay1(5); DQ = 1; dat>>=1; delay1(4);/*CPU读取温度值*/void readtemp(void) /读取温度 uchar a=0,b=0; reset(); writebyte(0xCC); / 跳过序列号 writebyte(0x44); / 启动温度转换 reset(); writebyte(0xCC); writebyte(0xBE); /读9个寄存器,前两个为温度 a=readbyte(); /低位 b=readbyte(); /高位 temper0=a&0x0f; a=a>>4; /低位右移4位,舍弃小数部分 temper1=b<<4; /高位左移4位,舍弃符号位 temper1=temper1|a;/=动态扫描=void saomiao()P0=tabledispbuf0;/十位P1=0xfe;delay(2);P1=0xff;P0=table1dispbuf1;/个位P1=0xfd;delay(2);P1=0xff;P0=tabledispbuf2;/十分位P1=0xfb;delay(2);P1=0xff;P0=tabledispbuf3;/百分位P1=0xf7;delay(2);P1=0xff;/ =温度控制=if(dispbuf0>2) /设置上线led1=0;led2=1;led3=1;sp=1;delay(1);sp=0;else if(dispbuf0<2)/设置下线led2=0;led1=1;led3=1;sp=0;delay(1);sp=1;else /设置正常状态led3=0;led2=1;led1=1;sp=1;void main() uchar i; uchar temp; float backbit; uchar counter;counter=5;sp=1; for(i=0;i<4;i+) dispbufi = 0; while(1)/温度测量频率没有必要太高,太高反而影响数码显示 /所以用计数器加以控制 if(counter- = 0) readtemp(); counter = 2; / readtemp();/读18B20 backbit = temper0;/换成浮点数 backbit = backbit * 6.25;/乘以0.0625*100 temp = backbit;/取低2位整数部分 dispbuf3 = temp%10 ; temp = temp/10; dispbuf2 = temp%10 ; temp = temper1;/取整数部分 dispbuf1 = temp%10; temp = temp/10; dispbuf0= temp%10; saomiao();填写说明1、背景和编写目的简介所设计的系统的意义、涉及你所学的知识和技术。2、系统组成介绍所设计的系统结构,用图表描述。3、硬件设计描述系统设计的原理图、印刷线路板图,进行必要的电路说明。4、软件编程系统工作的软件流程、程序清单,含必要的模块注释。5、系统调试介绍所设计的系统调试过程、在调试中遇到的问题及解决的办法。6、附录列出课程设计的原理图、程序清单文件。