微机原理与单片机与接口技术课程设计_第1页
微机原理与单片机与接口技术课程设计_第2页
微机原理与单片机与接口技术课程设计_第3页
微机原理与单片机与接口技术课程设计_第4页
微机原理与单片机与接口技术课程设计_第5页
已阅读5页,还剩22页未读, 继续免费阅读

下载本文档

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

文档简介

河南理工大学《微机原理与单片机接口技术》课程设计实时测温报警系统姓名:李磊学号:311308001116专业班级:电信13-4指导老师:王新所在学院:电气工程与自动化学院2016年月曰摘要本设计是一款基于单片机的实时温度测量装置,其中单片是数据处理的核心,用来接受和处理温度传感器测的数据。用温度传感器来获得采样的温度,单片机将得到的温度数据处理后,通过液晶显示屏来显示,关于时间显示方面是通过单片机的定时中断来实现的,并通过按键来调节显示时间。本文简要介绍基于单片机的测温系统的设计原理,并根据系统的原理制作出实物,能够简单的实现温度的测量。本测温系统主要有以下几个模块构成:测温模块、显示模块、按键控制模块、时间显示模块以及报警模块等几个模块组成。测温模块主体是一个测温传感器DS18B20来进行温度的测量,温度报警模块是一个鸣蜂器,显示模块是通过液晶显示屏1602来进行温度和时间的显示,按键控制是由触电开关跟单片机构成,时间显示模块是单片机的定时中断跟1602液晶显示屏构成。本设计的核心是型号为STC12C5A60S2的单片机。本系统的工作先由DS18B20测量温度,经过DS18B20内部的转换电路得到一组12位精度为0.0625的温度数值通过一根单数据线将数据交给单片机,单片机处理数据后将最终温度显示在液晶显示屏上,当温度超过设定值的时候鸣蜂器鸣笛报警,单片机内部的定时中断程序将时间也同一时间显示在液晶显示屏上,通过按键可以暂停时间和温度测量的刷新,来调节时间。本设计最终做得的实物能够进行0〜125°C的测量,24小时以内的时间显示以及时间调节。关键字:单片机技术、温度采集、液晶1602显示。目录TOC\o"1-5"\h\z1、概述 41.1设计背景及意义 41.2设计目的 41.3温度测试报警系统完成的功能 4\o"CurrentDocument"2、系统总体方案及硬件计 52.1总体方案设计 52.2硬件设计 5\o"CurrentDocument"3、 软件设计 11DS18B20程序编架 111602液晶显示程序编写框架 113.3时间及按键程序编写框架 113.4总程序编写框架 114、 软件仿真 12\o"CurrentDocument"5、 课程设计体会 13参考文献附1:源程序代码附2:系统原理图1概述1.1设计背景及意义温度是生产过程和科学实验中普遍而且重要的物理参数,随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温度控制系统发展的主流方向。特别是近年来,温度控制系统已应用到人们生活的各个方面,但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。针对这种实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。温度是一个重要的物理量,它反映了物体冷热的程度,与自然界中的各种物理和化学过程相联系。在工、农业生产和日常生活中,各个环节都与温度紧密相联,温度的准确监测及控制占据着极其重要地位。比如,发电厂锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才能正常进行等。没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。可见,温度的测量和控制是非常重要的。随着电子技术和微型计算机的迅速发展,单片机在电子产品中的应用已经越来越广泛。利用单片机对温度进行控制的技术也随之而生,并日益发展和完善,且越来越显示出它的优越性。1.2设计目的本设计的内容是温度测试报警系统,控制对象是温度。温度控制在日常生活及工业领域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制。而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。针对此问题,本系统设计的目的是实现一种可连续高精度调温的温度测试报警系统,它应用广泛,功能强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。1.3温度测试报警系统完成的功能本设计是对温度进行实时监测与报警,设计的温度报警系统实现了基本的温度测试和报警功能:当温度超过设定的温度阀值的时候鸣蜂器发声来进行报警,同时通过1602液晶显示屏显示当时的时间跟温度便于对温度的管理。2系统总体方案及硬件设计2.1总体方案设计考虑使用温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。在本系统的电路设计方框图如图1.1所示,它由三部分组成:①控制部分主芯片采用单片机STC12C5160S2:②显示部分采用液晶屏1602进行显示;③温度采集部分采用DS18B20温度传感器。图2-1温度计电路总体设计方案2.2硬件设计控制部分单片机STC12C5160S2具有低电压供电和体积小等特点,很适合便携手持式产品的设计使用,系统应用三节电池供电。显示部分显示电路采用1602液晶显示屏。温度采集部分DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温。这一部分主要完成对温度信号的采集和转换工作,由DS18B20数字温度传感器及其与单片机的接口部分组成。数字温度传感器DS18B20把采集到的温度通过数据引脚传到单片机的P1.3口,单片机接受温度并存储。此部分只用到DS18B20和单片机,硬件很简单1) DS18B20的性能特点如下[9]:1) 独特的单线接口仅需要一个端口引脚进行通信;2) 多个DS18B20可以并联在惟一的三线上,实现多点组网功能;3) 无须外部器件;4) 可通过数据线供电,电压范围为3.0〜5.5V;5) 零待机功耗;6) 温度以3位数字显示;7) 用户可定义报警设置;8) 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;9) 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。(2)DS18B20的内部结构DS18B20采用3脚PR-35封装,如图1.2所示;DS18B20的内部结构,如图3所示。DALLAS18B201123」图2-2DS18B20封装(3)DS18B20内部结构主要由四部分组成⑸:1)64位光刻ROM。开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因【10]。64位闪速ROM的结构如下.表2-1ROM结构8b检验CRC48b序列号8b工厂代码(10H)MSB LSBMSB LSBMSB LSB图2—3DS18B20内部结构2) 非挥发的温度报警触发器TH和TL,可通过软件写入用户报警上下限值。3) 高速暂存存储,可以设置DS18B20温度转换的精度。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的E2PRAM。高速暂存RAM的结构为8字节的存储器,结构如图1.3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。它的内部存储器结构和字节定义如图1.3所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式。表2—2DS18B20内部存储器结构Byte0温度测量值LSB(50H)Byte1温度测量值MSB(50H)E2PROMByte2TH高温寄存器〈----分TH高温寄存器Byte3TL低温寄存器〈----分TL低温寄存器Byte4配位寄存器〈----分配位寄存器Byte5预留(FFH)Byte6预留(0CH)Byte7预留(IOH)Byte8循环冗余码校验(CRC)2) 非挥发的温度报警触发器TH和TL,可通过软件写入用户报警上下限值。3) 高速暂存存储,可以设置DS18B20温度转换的精度。DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率,如图1.4。图2—3DS18B20字节定义TMR1R011111由表1.1可见,分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625°C/LSB形式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表1.2是一部分温度值对应的二进制温度数据[6]。表2—4DS18B20温度转换时间表R1R0分辨率/位温度最大转向时间/ms00993.750110187.510113751112750表2—5一部分温度对应值表温度/C二进制表示十六进制表示+125000001111101000007D0H+8500000101010100000550H+25.062500000001100100000191H+10.125000000001010000100A2H+0.500000000000000100008H000000000000010000000H-0.51111111111110000FFF8H续表2—5-10.1251111111101011110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90H4)CRC的产生在64bROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)—发ROM功能命令—发存储器操作命令-处理数。液晶显示部分管脚:1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。以下具体阐述这三个管脚:RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。R/W为读写选择,高电平进行读操作,低电平进行写操作。E端为使能端,后面和时序联系在一起。除此外,D0〜D7分别为8位双向数据线。指令集:LCD_1602初始化指令小结:0x38设置16*2显示,5*7点阵,8位数据接口0x01清屏0x0F开显示,显示光标,光标闪烁0x08只开显示0x0e开显示,显示光标,光标不闪烁0x0c开显示,不显示光标0x06地址加1,当写入数据的时候光标右移0x02地址计数器AC=0;(此时地址为0x80)光标归原点,但是DDRAM中断内容不变0x18光标和显示一起向左移动显示地址:LCD1602内部RAM显示缓冲区地址的映射图,00〜0F、40〜4F分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符的ASCII代码,就可以显示出来。3软件设计3.1DS18B20程序编写框架查询DS18B20的技术手册,通过技术手册上的时序图编写初始化指令、写指令、读指令程序,最后编写一个获得温度的函数,通过函数返回值将测的数据传递给单片机。3.21602液晶显示程序编写框架与DS18B20编写的过程大体相同,最终也将液晶显示程序封装成一个无返回值函数。3.3时间及按键程序编写框架时间是通过单片机的定时中断来获得的,按键是采用独立按键通过P3"2,P3"3,P3”4来进行控制的。3.4总程序编写框架将键盘函数跟报警程序放入主函数中,而1602显示程序和DS18B20程序放在定时中断程序中,来实现程序的隔离,放置按键函数影响显示和测温程序的时序,来造成程序运彳丁混乱。4软件仿真5课程设计体会通过本次课程设计使我对单片机的认识跟进一步,让我了解学习了单片机的扩展功能,不再局限于以前单片机只能做一个流水灯或者数码显示的思想。本次设计遇到了很多困难,一个最大的困难就是关于DS18B20的时序编写,由于不知到C语言程序在单片机中的运行时间,所以在编写时序的时候出了很多问题,最后经过查资料和通过keil软件的指令运行时间查询功能,最终才编写出正确的时序程序。另一个困难是各个程序模块的协调运行问题,单个的模块能够正常运行,但是多个放在一起就会出现程序运行错误,经过努力最终找到是因为多个模块的放在一起会影响各自的时序才造成程序错误,最终我通过中断函数将各个模块进行隔离完成了最终的设计。这次的设计,虽然困难重重,但是最终当系统能够正常工作的时候,我感到无比的喜悦。参考文献《微机原理与单片机接口技术》《C语言程序设计》附1:源程序代码/个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个用1602实现数字表显示、调节时间功能能作为50年限的万年历""""""""""""""""""""""""""""""""""""""""""/******************************************/#include<stc12.h>#include<string.h>#include<intrins.h>#include<ds18b20.h>#defineT25.6sbitRS=P1A0;sbitRW=P1A1;sbitE=P1A2;sbitkey1=P3A2;sbitkey2=P3A3;sbitkey3=P3A4;sbitbeer=P3A1;ucharcodetable1[]="T:00.0”;ucharcodetable2[]=”time:00:00:00";ucharcodetable3[]="ERROR";ucharcodenumber[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xdf,0x43};uchartt0,miao,shi,fen,k1,k2,k3;uinttemperature;voiddelay1(uintz)//延时程序{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidlcdwrite_com(ucharcom) //lcd写命令{RW=0;RS=0;E=0;delay1(1);E=1;delay1(5);P0=com;delay1(5);E=0;}voidlcdwrite_dat(uchardat)//led写数据{RW=0;RS=1;E=0;delay1(1);E=1;delay1(5);P0=dat;delay1(5);E=0;}voidggn1(ucharm) 〃有关k2键的函数1,时间控制函数{lcdwrite_com(0x38);delay1(5);lcdwrite_com(0x0f);delay1(5);lcdwrite_com(0x80+m);delay1(5);}voidmfs(uchars,ucharm) 〃时分秒显示子程序{uchars1,s2;lcdwrite_com(0x80+m);delay1(5);s1=s/10;s2=s%10;lcdwrite_dat(number[s1]);delay1(5);lcdwrite_dat(number[s2]);delay1(5);}voidmfs1(uints,ucharm) //温度显示程序{uchars1,s2,s3;lcdwrite_com(0x80+0x40+m);delay1(5);s1=s/100;s2=s%100/10;s3=s%10;lcdwrite_dat(number[s1]);delay1(5);lcdwrite_dat(number[s2]);delay1(5);lcdwrite_dat(0x2e);delay1(5);lcdwrite_dat(number[s3]);delay1(5);}voidscankey() //独立键盘{if(key1==0) //k1键是暂停并进入功能设置{delay1(10);if(key1==0){k2=0;if(k1==0){k1=1;TR0=0;}else{k1=0;TR0=1;lcdwrite_com(0x0c);delay1(10);}while(!key1);}if(k1==1) //k2键是位选功能键{if(key2==0){delay1(10);if(key2==0){k2++;if(k2==1)ggn1(12);if(k2==2)ggn1(9);if(k2==3)ggn1(6);if(k2==4)k2=0;}while(!key2);}if(k2) //k3键是加一{if(key3==0){delay1(10);if(key3==0){if(k2==1){miao++;if(miao==60){miao=0;}mfs(miao,0x0c);lcdwrite_com(0x80+0x0b);}if(k2==2){fen++;if(fen==60){fen=0;}mfs(fen,0x09);lcdwrite_com(0x80+0x08);}if(k2==3){shi++;if(shi==24){shi=0;}mfs(shi,0x06);lcdwrite_com(0x80+0x05);}}while(!key3);}}}}voidinit()//程序初始化{uchari,t1,t2;//lcdwrite_com(0x38); 〃显示模式设置//delay1(5);lcdwrite_com(0x08); 〃显示关闭delay1(5);lcdwrite_com(0x01); 〃显示清屏delay1(5);lcdwrite_com(0x0c); 〃显示开及光标设置delay1(5);lcdwrite_com(0x06); 〃显示光标移动设置 //delay1(5);t1=strlen(table2);for(i=0;i<t1;i++){lcdwrite_dat(table2[i]);delay1(20);}lcdwrite_com(0x80+0x40);delay1(5);t2=strlen(table1);for(i=0;i<t2;i++){lcdwrite_dat(table1[i]);delay1(20);}lcdwrite_dat(0xdf); 〃显示温度的单位delay1(5);lcdwrite_dat(0x43);delay1(5);EA=1;ET0=1;TR0=1;TMOD=0x01;TH0=0x4c;TL0=0X00;}voidmain(){init();while(1){scankey();if(temperature/10>T)beer=0;}else{beer=1;}}}voidtime0()interrupt1 //秒表计数{TH0=0x4c;TL0=0X00;tt0++;if(tt0==20){miao++;tt0=0;temperature=Get_Tmp();mfs1(temperature,4);}if(miao<60){mfs(miao,0X0C);}else{miao=0;fen++;}if(fen<60){mfs(fen,9);

}else{fen=0;shi++;}if(shi<24){mfs(shi,6);}else{shi=0;}}//#include<stc12.h>//#include<intrins.h>//数据口defineinterfacesbitDQ=P1A3; //18b20接口uintwendu; 〃温度值variableofwendueraturevoidDelay(uchara1,b1,c1){/*************精确延时函数““““““““““““““““/*************精确延时函数““““““““““““““““个个个个个个个个个个个个个个个个*/unsignedchara,b,c;for(a=0;a<a1;a++)for(b=0;b<b1;b++)for(c=0;c<c1;c++);}/*****************DS18B20******************/voidInit_Ds18b20(void)//DS18B20初始化sendresetandinitializationcommand{EA=0;DQ=1;Delay(1,1,1);DQ=0;//DQ复位,不要也可行。〃稍做延时10us〃单片机拉低总线Delay(6,1,63);//600us//Delay(1,1,15);//20usDQ=1;Delay(5,1,63);//500usEA=1;}ucharRead_One_Byte()〃精确延时,维持至少480us//释放总线,即拉高了总线〃此处延时有足够,确保能让DS18B20发出存在脉冲。〃读取一个字节的数据readabytedate〃读数据时,数据以字节的最低有效位先从总线移出uchari=0;uchardat;EA=0;for(i=8;i>0;i--){DQ=0;_nop_();dat>>=1;DQ=1;Delay(1,1,1);//将总线拉低,要在1us之后释放总线〃单片机要在此下降沿后的15us内读数据才会有效。〃至少维持了1us,表示读时序开始〃让从总线上读到的位数据,依次从高位移动到低位。〃释放总线,此后DS18B20会控制总线,把数据传输到总线上//延时10us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分//控制器进行采样if(DQ){dat1=0x80;理,保持为0}Delay(1,1,8);EA=1;}return(dat);}voidWrite_One_Byte(uchardat){//若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处//20us〃此延时不能少,确保读时序的长度60us。uchari=0;EA=0;for(i=8;i>0;i--)DQ=0;_nop_();序)开始DQ=dat&0x01;15us内,Delay(1,1,15);DQ=1;dat>>=1;Delay(1,1,1);EA=0;}}〃拉低总线〃至少维持了1us,表示写时序(包括写0时序或写1时〃从字节的最低位开始传输//指令dat的最低位赋予给总线,必须在拉低总线后的〃因为15us后DS18B20会对总线采样。〃必'须让写时序持续至少60us〃

温馨提示

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

评论

0/150

提交评论