课程设计题目:温度采集与显示系统汇总_第1页
课程设计题目:温度采集与显示系统汇总_第2页
课程设计题目:温度采集与显示系统汇总_第3页
课程设计题目:温度采集与显示系统汇总_第4页
课程设计题目:温度采集与显示系统汇总_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

课程设计题目:温度采集与显示系统1课程设计内容1.1设计要求利用STC89C52、DS18B20、LCD1602、AT24C02等元器件设计温度采集与显示系统。系统具有以下功能:1)能正确检测温度;2)在1602上实时显示温度;3)每隔10秒采集一次温度数据并保存到AT24C02;4)按键按下后,可逐个显示之前采集到的数据;5)其他功能可根据系统上的资源自行设定。1.2设计任务1)根据设计内容与要求,弄清系统及各个模块的工作流程,完成电路原理图,包括单片机最小系统模块、LCD显示模块、存储模块、串行口下载模块和电源模块,最终在万用板上焊接,完成整个系统硬件设计。2)根据设计内容与要求,弄清系统及各个模块的工作流程,完成系统的软件设计,包括系统主程序、温度读取子程序、LCD显示子程序、存储子程序等,可使用汇编语言或是C语言编写,建议使用C语言编写。3)完成系统的仿真与调试,使得系统在脱机情况下,能稳定可靠的工作。1.3课程设计原理基于DS18B20的数字温度计设计主要由数字温度传感器、单片机控制电路、数码显示电路组成。DS18B20测量温度采用了特有的温度测量技术。它是通过计数时钟周期来实现的。低温度系数振荡器输出的时钟信号通过由高温度系数振荡器产生的门周期而被计数。计数器被预置在与-55°C相对应的一个基权值。如果计数器在高温度系数振荡周期结束前计数到零,表示测量的温度值高于-55C,被预置在-55C的温度寄存器的值就增加1C,然后重复这个过程,直到高温度系数振荡周期结为止这时温度寄存器中的值就是被测温度值,这个值以16位形式存放在便笺式存贮器中,此温度值可由主机通过发存贮器读命令而读出,读取时低位在前,高位在后。斜率累加器用于补偿温度振荡器的抛物线特性。读出的二进制数可以直接转换为十进制由单片机驱动数码管显示输出。DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9〜12位的数字值读数方式。温范围一55C〜+125C,在-10〜+85°C时精度为±0.5°C;可编程的分辨率为9〜12位,对应的可分辨温度分别为0.5C、0.25C、0.125C和0.0625C,可实现高精度测温,典型的转换时间为200ms;用户可以设定温度的上下限;独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。DS1820具有测温系统简单、测温精度高、连接方便、占用口线少等优点,所以在测量领域得到广泛的运用。2课程设计思路3硬件设计3.1单元模块设计本节主要介绍系统中单片机STC89C52外围电路重要模块的功能和电路原理图分析。并对电路中的核心器件进行必要的说明单元模块设计3.1.1时钟电路3.1.2复位电路图3.2复位电路3.1.3报警电路图3.3报警电路3.1.4温度采集电路图3.4温度采集电路3.1.5存储电路3.1.6LCD显示模块图3.6LCD模块电路3.1.7按键部分图3.7按键电路3.1.8串口通信电路图3.8串口通信电路3.2核心器件介绍3.2.1单片机STC89C52介绍STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。主要特性如下:工作电压:5.5V〜3.3V(5V单片机)/3.8V〜2.0V(3V单片机。工作频率范围:0〜40MHz,相当于普通8051的0〜80MHz,实际工作频率可达48MHz。用户应用程序空间为8K字节。片上集成512字节RAM。通用I/O口(32个)复位后为FFH,P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片具有EEPROM功能。具有看门狗功能。共3个16位定时器/计数器。即定时器T0、T1、T2。外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。STC89C52RC引脚功能说明VCC(40引脚):电源电压。VSS(20引脚):接地。P0端口(P0.0-P0.7P0.7,39〜32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入每个引脚能驱动写入“1时,可以作为高阻抗输入。在访问外部程序和数据存储器时在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线位数据的复用总线。此时,P0口内部上拉电阻有效。在FlashROM编在程时,P0端口接收指令字节端口接收指令字节;而在校验程序时,则输出指令字节则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0〜P1.7,1〜8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流()。此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表:在对FlashROM编程和程序校验时,P1接收低8位地址。P2端口(P2.0〜P2.7,21〜28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(I)。在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX@DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX@R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。在对FlashROM编程和程序校验期间,P2也接收高位地址和一些控制信号。P3端口(P3.0〜P3.7,10〜17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流()。在对FlashROM编程或程序校验时,P3还接收一些控制信号。P3口除作为一般I/O口外,还有其他一些复用功能,如下所示:RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,复位高电平有效。ALE/ROG(30引脚)地址锁存控制信号:(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚(ROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器反相放大器的输入端。

图3.9AT89C52引脚图P1.0—/VCCP1.IPQ.0P1.2P0.1P13P0.2图3.9AT89C52引脚图P1.0—/VCCP1.IPQ.0P1.2P0.1P13P0.2PlJP0.3PI.5P0.4P16P0.5PL?7P爵RSTVPD定P0?RNDP3.0HVPPTXDP3.1云ALE或DCHP3.S-P2.7TOP3-?=P2.6ILPS.5P25KRP3.6P2.4Riyp3._?2.3XTAL2P2JXTAL1P2AvssP2.0图3.11LCD1602引脚图具有3引脚TO-92小体积封装形式;DS18B20是DALLAS公司生产的一线式传感器,温度测量范围为-55摄氏度到+125摄氏度,可编程为9到12位A/D转换精度,测温分辨率可达0.0625摄氏度,被侧温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生。CPU只需一根端口线就能与诸多具有3引脚TO-92小体积封装形式;DS18B20主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH个TL、配置寄存器。DS18B20中的温度传感器可完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625摄氏度/LSB形式表达,其中S为符号位。例如+125摄氏度的数字输出为07DOH,+25.0625摄氏度的数字输出为0191H,-25.0625摄氏度的数字输出为FF6FH,-55摄氏度的数字输出为FC90H.图3.10DS18B20的两种封装形式DS18B20采用一线通信接口。因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。主要首先提供以下功能命令之一:⑴读ROM指令0X33,⑵ROM匹配指令0X55,⑶搜索ROM指令0XF0,⑷跳过ROM指令0XCC,⑸报警检查指令0XEC。这些指令操作作用在没有一个器件的64位光刻ROM序列号。3.2.3LCD1602介绍(LCD1602引脚图见图3.11)1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由MxN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16x8=128个点组成,屏上64x16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,......(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符的显示用LCD显示一个字符时比较复杂,因为一个字符由6x8或8x8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5......右边为2、4、6......根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节直到32B显示完就可以LCD上得到一个完整汉字。■1602LCD主要技术参数:显示容量:16x2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95x4.35(WxH)mm■引脚功能说明及11条控制指令1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如编号符号引脚说明编号符号引脚说明17SS电源地9D2数据2VDD电源正极10D3数据3ML液晶显示偏压11D4数据4RS数据J命令选择12D5数据5R/W读厚选择13D6数据6E使能信号14D7数据1DO数据15日心背光源正极序号指令RSR/WD7D6D5D4D3D2D1D0id清显示)00000000012光标返回n000000001*3置输入模式「00000001I/DS4显小开/关控制0000001DCB5光标或字符移位000001S/CR/L**■6置功能「00001DLNF**7置字符发生存贮或地址0001字符发生存贮器J曲址图3.10蠢7堰杼能哭刊1MLCD1602中文字符-■■-一■-r--■■•代码,与二己符I瓦末瀚堰在旷哭址州卜图形对应的关厂IL、F10与数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或HDDRAM读豉11读出的数据内容「1602液晶模块内部的控制器共有11条控制指令,如表下:DC3>,强口置■a1h三cepAn.1OO1<a.ic*><s>丰OITI3I七#15EIUI—13&IGFIMI-FI^I>iTlGiuins<18HIXIH-ixl>1-911IV[i7*1sIJINI8In|+1M|K|EIfc|<|,|<|L|¥|1I1I~I=IM|3[ml>|.i>zn—■I才*ZLu二3p=i十i*i方ig]兀勺Ir\jiibF*Hindis顷Itri匕口xklxml电言心巾L后p15P=S]・3.2.4AT24C02引脚图及MAX232E引脚图AO匚18A1匚27A2匚36GND匚45□SDAvccJWPSCLC1+i,D16VccV+215GNDCLLTtotfrC2+MAX220间R1inMAX232C2-MAX233A12V-11「inT2qut~17|T&n3f^ouiMAX232E引脚图AT24C02引脚图4软件设计用模块化程序设计此课程设计,各模块程序如下所示总程序main模块#include<reg52.h>#include<function.h>charmiao,shi,fen;uints1num;ucharcount;uintsu,tt,mm,m,n;ucharbuff[4];unsignedcharpDat[7],pDat1[7];sbits1=P2A3;sbits2=P2A4;sbits3=P2A5;voidmain(){m=0;n=0;init();EX0=1;while(1){write_sfm(10,miao);write_sfm(7,fen);write_sfm(4,shi);dis_temp(tt);dis_temp1(mm);keyscan();}}voidint_{EA=0;IRcvStr(0xa0,n,&pDat1[0],8);0()interrupt0mm=pDat1[0]*100+pDat1[1]*10+pDat1[2];pDat1[0]=0;pDat1[1]=0;pDat1[2]=0;n=n+8;EA=1;}voidkeyscan(){if(s1==0){delay(5);if(s1==0){s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);}if(s1num==3){write_com(0x80+0x40+4);}if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10)}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3)(shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1){miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}}}}}voidtimer0()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;su++;if(su==20)(su=0;tempchange();tt=get_temp();pDat[0]=tt/100;pDat[1]=(tt%100)/10;pDat[2]=tt%10;ISendStr(0xa0,m,&pDat[0],8);m=m+8;pDat[0]=0;pDat[1]=0;pDat[2]=0;}count++;if(count==20)(count=0;miao++;if(miao==60)(miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}//write_sfm(4,shi)}//write_sfm(7,fen)}//write_sfm(10,miao);}}I2C程序模块#include<reg52.h>#include<intrins.h>#include<Function.h>#defineNOP()_nop_()#define_Nop()_nop_()sbitSCL=P2A1;sbitSDA=P2A0;bitack;voidStart_I2c(){SDA=1;_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SDA=0;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=0;_Nop();_Nop();}voidStop_I2c(){SDA=0;_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1;_Nop();_Nop();_Nop();_Nop();}voidSendByte(unsignedcharc){unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt++){if((c<<BitCnt)&0x80)SDA=1;elseSDA=0;_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=0;}_Nop();_Nop();SDA=1;_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();if(SDA==1)ack=0;elseack=1;SCL=0;_Nop();_Nop();}unsignedcharRcvByte()(unsignedcharretc;unsignedcharBitCnt;retc=0;SDA=1;for(BitCnt=0;BitCnt<8;BitCnt++){_Nop();SCL=0;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();retc=retc<<1;if(SDA==1)retc=retc+1;_Nop();_Nop();}SCL=0;_Nop();_Nop();return(retc);}voidAck_I2c(bita)

{if(a==0)SDA=0;elseSDA=1;_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=0;_Nop();_Nop();}AT24C02模块#include<Function.h>bitISendStr(unsignedcharsla,unsignedcharsuba,unsignedcharcharno)(unsignedchari;Start_I2c();SendByte(sla);if(ack==0)return(0);SendByte(suba);if(ack==0)return(0);for(i=0;i<no;i++)(SendByte(*s);if(ack==0)return(0);s++;}Stop_I2c();return(1);}bitIRcvStr(unsignedcharsla,unsignedcharsuba,unsignedcharcharno)(*s,unsigned*s,unsignedunsignedchari;*s,unsigned*s,unsignedStart_I2c();SendByte(sla);if(ack==0)return(0);SendByte(suba);if(ack==0)return(0);Start_I2c();SendByte(sla+1);if(ack==0)return(0);for(i=0;i<no-1;i++)(*s=RcvByte();Ack_I2c(0);s++;}*s=RcvByte();Ack_I2c(1);Stop_I2c();return(1);}Lcd模块#include<reg52.h>#include<function.h>sbitrs=P3A5;sbitlcden=P3A4;ucharcodetablenum[]="0123456789";ucharcodetable[]="00.0Rem00.0";ucharcodetable1[]="00:00:00";voiddelay(uintz)(uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidwrite_com(ucharcom)(rs=0;lcden=0;P1=com;delay(5);lcden=1;delay(5);lcden=0;voidwrite_date(uchardat)(rs=1;lcden=0;P1=dat;delay(5);lcden=1;delay(5);lcden=0;}voidinit()(ucharnum;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<13;num++)(write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++)(write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}voidwrite_sfm(ucharadd,uchardat)(uchars,g;s=dat/10;g=dat%10;write_com(0x80+0x40+add);write_date(tablenum[s]);write_date(tablenum[g]);}voidwrite_sfm1(ucharadd,uchardat)(write_com(0x80+add);write_date(tablenum[dat]);DS18B20模块#include<reg52.h>#include<stdio.h>#include<function.h>sbitds=P2A2;uinttemp;floatf_temp;voiddsreset(void)(uinti;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bittempreadbit(void)(uinti;bitdat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchartempread(void)(uchari,j,dat;dat=0;for(i=1;i<=8;i++)(j=tempreadbit();dat=(j<<7)l(dat>>1);}return(dat);}voidtempwritebyte(uchardat)(uinti;ucharj;bittestb;for(j=1;j<=8;j++)(testb=dat&0x01;dat=dat>>1;if(testb)(ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}voidtempchange(void){dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0x44);}uintget_temp(){uchara,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp<<=8;temp=temp|a;f

温馨提示

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

最新文档

评论

0/150

提交评论