单片机智能仪器设计温度测量显示报告
单片机数字温度计报告

单片机原理及系统课程设计专业:自动控制班级:控1002班*名:***学号: *********指导教师:***兰州交通大学自动化与电气工程学院2013 年 3 月 7 日基于单片机的数字温度计摘要本设计将介绍一种基于单片机控制的数字温度计。
在硬件设计介绍单片机温度控制系统元器件的了解,并对硬件原理图做简洁的描述。
软件设计主要包括主程序、读取温度子程序、写一个字节子程序、读一个字节子程序、初始化DS18B20子程序、延时子程序、数码管扫描子程序。
软硬件分别调试完成以后,通过仿真实现了运行。
由于采用了智能温度传感器DS18B20,所以本文所介绍的数字温度计与传统的温度计相比它的转换速率极快,进行读、写操作非常简便。
加之DS18B20内部的差错检验所以它的抗干扰能力强、性能可靠。
关键字:AT89C52;DS18B20;温度检测;单片机AbstractThis paper studies the temperature measurement method by using AT89C52 microcontroller and DS18B20 digital temperature sensor.Besides,the temperature sensor chip,the interface circuit of microcon-troller and temperature sensor,and the software used to collect temperature information and transfer data are studied as well.The proteus simulation result shows that this temperature measurement system is simple in struc-ture,typical in circuit and convenient to control,and the analysis is proved to be reasonable through PSPICE simulatio.Keywords:AT89C52;DS18B20;temperature;microcontroller1 引言1.1设计目的通过应用单片机的知识,能够独立设计出具有温度范围广、结果精确、并且可以数字显示的温度计。
单片机温度计课程设计报告

单片机温度计课程设计报告摘要:本次课程设计旨在利用单片机实现一个温度计,能够实时测量环境温度并将温度值显示在数码管上。
通过该设计,能够熟悉单片机的基本原理和编程方法,并且加深对温度测量原理的理解。
1. 引言温度是我们日常生活中非常重要的一个参数,对于很多应用来说,温度的准确测量和控制是至关重要的。
而单片机作为一种常用的嵌入式系统,具有体积小、功耗低、成本低等优点,因此被广泛应用于温度测量和控制系统中。
2. 设计原理本设计采用了DS18B20温度传感器作为温度测量模块,并通过单片机的IO口与之连接。
DS18B20传感器具有精度高、体积小、响应速度快等优点,是目前市场上常用的温度传感器之一。
通过单片机与DS18B20传感器的通信,可以获取到当前环境的温度值。
3. 硬件设计本设计所需的硬件主要包括单片机、DS18B20传感器、数码管、电阻、电容等。
其中单片机负责控制和数据处理,DS18B20传感器用于测量温度,数码管则用于显示温度值。
3.1 单片机选择在本设计中,选择了常用的STC89C52单片机作为控制核心。
STC89C52是一款8051系列的单片机,具有丰富的外设资源和强大的计算能力,非常适合本次设计的要求。
3.2 传感器连接DS18B20传感器与单片机的连接采用一根三线制,其中VCC连接到单片机的电源正极,GND连接到单片机的电源负极,DATA连接到单片机的IO口。
3.3 数码管连接数码管的连接比较简单,将数码管的8个引脚分别连接到单片机的8个IO口即可。
需要注意的是,数码管的引脚顺序可能因不同厂家而异,应根据具体数码管的型号选择正确的引脚连接方式。
4. 软件设计本设计的软件主要包括单片机的初始化配置和温度测量显示功能。
4.1 单片机初始化在使用单片机之前,需要对其进行初始化配置,包括设置IO口的输入输出方向、定时器的初始化、中断的使能等。
通过这些初始化配置,可以确保单片机正常工作并准备好接收温度传感器的数据。
智能仪器课程设计报告

天津电子信息职业技术学院传感器技能实训课题名称智能温度测温系统姓名王先民学号20班级电信S10-1专业电子信息工程技术所在系电子技术系指导教师岑永祚完成日期2011年12月11日一、 主要内容温度传感器DS18B20采集环境模拟信号,其输出送入AT89C51,单片机在程序的控制下,将处理过的数据送到移位寄存器74LS164,经74LS164输出后驱动三位数码管显示。
当被测温度高于18℃时,单片机发出控制信号使降温电扇以自然风的形式旋转,温度越高转速越快,温度36℃以上时风扇全速工作,点亮此功能指示灯。
二、 基本要求(1)设计测量温度范围-55℃~+125℃的智能测温系统,要求数码管实时显示测量温度,单片机根据温度高低确定风扇转速 (2)画出程序框图(3)有完整的整机电路图(protel 绘制)(4)完成格式正确、内容完整的实验报告三、 参考文献王祁, 智能仪器设计基础.北京:机械工业出版社,2009目录一、前言 (4)二、系统组成 (4)1、设计思路 (5)2、系统的性能指标: (5)3、系统的主要功能: (5)三、电路组成及工作原理 (5)1、温度传感器功能模块 (6)2、AT89C51单片机 ........................................................................................................ 8 3、74LS164移位寄存器 .. (12)4、晶振电路 (12)5、复位电路 ................................................................................................................... 13 6、键盘电路 . (13)7、显示电路 (14)8、稳压电路 ................................................................................................................... 14 9、显示电路 . (15)10、风扇控制电路 (15)四、课程设计心得与体会 (16)五、参考文献 (16)六、整机电路图 (17)七.心得体会 (18)智能温度测量系统的设计一、前言温度是一种基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量。
智能仪器课程设计报告

智能型温度测量仪报告题目:智能型温度测量仪院别:机电工程与自动化专业:生产过程自动化技术班级: xxx姓名: xxxXxxXxx指导老师: xxx目录引言................................................. 错误!未定义书签。
一、系统设计任务及要求........................................... - 2 -1.1系统设计任务 (2)1.2系统设计的基本要求 (2)1.3系统概述 (2)二、系统总体设计................................................. - 2 -整体设计方案的确定 (2)三、硬件电路设计及工作原理....................................... - 3 -3.1参数采集模块设计 (3)3.2显示温度模块和显示时钟介绍 (3)3.3具体硬件电路原理分析 (4)四、软件设计...................................................... - 7 -4.1主程序流程图 (7)4.2DS18B20温度读取程序(如图9) (8)4.3DS18B20温度传感器初始化 (8)4.4读出温度子程序 (9)4.5DS18B20的读写时序 (10)4.6按键流程图 (12)五、主要技术指标的测量........................................... - 12 -六、结论......................................................... - 13 -结束语........................................................... - 14 -附录:硬件原理图.................................................. - 15 -引言:温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量,也是工业控制中主要的被控参数之一。
基于C51单片机的智能仪器综合设计实验

基于单片机的智能仪器综合设计实验一、实验目的在实验一~实验三的基础上,完成综合设计实验,学会信号采集、数据处理、键盘控制、LCD或LED显示等功能的智能仪器设计。
二、复习与参考实验一~实验三三、设计指标利用K分度号热电偶进行温度检测,测温范围为500-1200ºC,室温为20ºC,用LCD或LED显示室温和测量温度。
具有4路温度信号循环检测功能,通道切换时间可调;具有任意指定通道显示功能。
四、实验要求1.选择传感器,设计硬件电路,包括检测电路、信号调理电路、AD转换电路、单片机最小系统、LED显示(单号)、LCD显示(双号)、独立式按键,画出电路原理图。
2.画出软件流程图。
3.用Keil C51编写程序。
3.实验结果在LCD或LED上显示出来。
4.实验前完成第1、2项备查。
五、实验仪器设备和材料清单PC机;单片机实验板、连接导线、ST7920图形液晶模块Keil c51软件六、实验成绩评定方法实验成绩包括预习、实验完成质量、实验报告质量3部分组成,各部分所占比例分别为30%、40%、30%。
八、实验报告要求实验报告格式:●实验名称●实验目的●实验内容●硬件设计●软件设计●调试过程●参考文献●附1:电路原理图●附2:程序清单附录:实验程序源代码如下:(陈寅)#include "reg51.h"#define THC0 0xee //5ms时间常数设置#define TLC0 0x00sbit ADWR=P3^6; /***WR*****/sbit ADRD=P3^7; /***RD*****/sbit ADCS=P2^7; /***CS*****/sbit EOC=P3^3; /***EOC****/sbit ADA=P1^3; //通道选择引脚sbit ADB=P1^4;sbit ADC=P1^5;sbit CS =P1^0; /****************/sbit SID=P1^1; /**液晶引脚定义**/sbit SCLK=P1^2; /****************/sbit MODE=P2^0; /*************************/sbit UP=P2^1; /*四个按键接口,0表示按下*/sbit DOWN=P2^2; /*************************/sbit LED1=P2^3; /**4个LED灯引脚定义**/sbit LED2=P2^4; /********************/sbit LED3=P2^5; /********************/sbit LED4=P2^6; /********************//***************500~1200°C范围的K分度表,间隔10*******************/ unsigned int code K_TABLE[71]={20644,21066,21493,21919,22346,22772,23198,23624,24050,24476,24902,25327,25751,26176,26599,27022,27445,27867,28288,28709,29128,29547,29965,30383,30799,31214,31629,32042,32455,32866,33277,33686,34095,34502,34909,35314,35718,36121,36524,36925,37325,37725,38122,38519,38915,39310,39703,40096,40488,40897,41296,41657,42045,42432,42817,43202,43585,43968,44349,44729,45108,45486,45863,46238,46612,46985,47356,47726,48095,48462,48828}; unsigned char GetAdData[10]={0}; //存放获得AD值的数组变量unsigned char ViewTemperature[4]={"0000"}; //显示温度缓冲数组变量unsigned MODESelect=1;int ChangeTime=2; //通道切换时间,单位Sint TongDao=1;void delay(unsigned int j){unsigned char i;do{for(i=0;i<100;i++);}while(j--);}void send_command(unsigned char command_data) //发送命令{unsigned char i;unsigned char i_data;i_data=0xf8; //操作命令,可以查看资料delay(10);CS=1;SCLK=0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f;i_data<<=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void send_data(unsigned char command_data) //发送数据{unsigned char i;unsigned char i_data;i_data=0xfa; //操作命令,可以查看资料delay(10);CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f; //取低四位i_data<<=4; //左移四位,从而变成高四位for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void InitLCD() //液晶初始化{send_command(0x30); //功能设置:一次送8位数据,基本指令集send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x01); //清DDRAMsend_command(0x02); //DDRAM地址归位send_command(0x80); //把显示地址设为0X80,即为第一行的首位}/* x,y为起始座标x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;how为要显示汉字的个数;style为显示字符的类型,0表汉字,1表字母;str是要显示汉字的地址*/void Display(unsigned char x,unsigned char y,unsigned char how,bit style,unsigned char *stri) //液晶显示{unsigned char hi=0;if(x==0) send_command(0x80+y);else if(x==1) send_command(0x90+y);else if(x==2) send_command(0x88+y);else if(x==3) send_command(0x98+y);if(style==0){for(hi=0;hi<how;hi++){send_data(*(stri+hi*2));send_data(*(stri+hi*2+1));}}elsefor(hi=0;hi<how;hi++) send_data(*(stri+hi));}float LvBo(void)//复合滤波{unsigned char max,min,i;unsigned int sum=0;float U1;max=GetAdData[0];min=GetAdData[0];for(i=0;i<10;i++){sum=sum+GetAdData[i];if(max<GetAdData[i]) max=GetAdData[i];if(min>GetAdData[i]) min=GetAdData[i];}sum=sum-max-min;U1=(float)sum/8;U1=10.0*((U1*5.0)/255); //换成mvreturn U1;}void search (void)//查表子函数{unsigned int da=0,max,min,mid,j;unsigned int var;da=LvBo()*1000; //u1扩大1000倍da=da+798; //20度max=71;min=0;var=0;while(1){mid=(max+min)/2; //中心元素位置if(K_TABLE[mid]==da) {var=mid*10;break;} //中心元素等于查表元素,计算相应温度else if(K_TABLE[mid]>da) max=mid-1;else min=mid+1;if(max-min==1) /*线性插值计算温度值*/{j=(K_TABLE[max]-K_TABLE[min])/10; /*表中相邻两值对应温度相差10°C*/j=(da-K_TABLE[min])/j;var=10*min+j;break;}if(max==min){if(da>=K_TABLE[min]){j=(K_TABLE[min+1]-K_TABLE[min])/10;j=(da-K_TABLE[min])/j;}else if(da<K_TABLE[min]){j=(K_TABLE[min]-K_TABLE[min-1])/10;j=(da-K_TABLE[min-1])/j;min=min-1;}var=10*min+j;break;}}var=var+500;ViewTemperature[0]=var/1000+0x30;ViewTemperature[1]=var/100%10+0x30;ViewTemperature[2]=var/10%10+0x30;ViewTemperature[3]=var%10+0x30;}void LcdDisplay(void){unsigned char ViewMODESelect,ViewTongDao[5]={"0 "},ViewChangeTime[5]={"00(S)"};ViewMODESelect=MODESelect+0x30;ViewTongDao[0]=TongDao+0x30;if(MODESelect==1||MODESelect==2){if(MODESelect==1) Display(0,3,5,0,":自动切换");else if(MODESelect==2) Display(0,3,5,0,":手动切换");Display(0,0,2,0,"模式"); //液晶显示Display(0,2,1,1,&V iewMODESelect);Display(1,0,5,0,"温度通道:");Display(1,5,5,1,V iewTongDao);Display(2,0,4,0,"温度值:");Display(2,4,4,1,V iewTemperature);Display(2,6,2,1,"℃");}else if(MODESelect==3){ViewChangeTime[0]=ChangeTime/10+0x30;ViewChangeTime[1]=ChangeTime%10+0x30;Display(0,0,2,0,"模式");Display(0,2,1,1,&V iewMODESelect);Display(0,3,5,0,":设置时间");Display(1,0,5,0,"切换时间:");Display(1,5,5,1,V iewChangeTime);Display(2,0,14,1," "); //本行清屏}}void TDSelect(void) //AD通道设置{if(TongDao>=5) TongDao=1;if(TongDao<=0) TongDao=4;if(TongDao==1) {ADC=0;ADB=0;ADA=0;}else if(TongDao==2) {ADC=0;ADB=0;ADA=1;}else if(TongDao==3) {ADC=0;ADB=1;ADA=0;}else if(TongDao==4) {ADC=0;ADB=1;ADA=1;}}main(){unsigned char AdCount=0; //用来存放AD采集次数InitLCD();TMOD=0x11; //定时器0初始化TH0=THC0;TL0=TLC0;TR0=1;ET0=1;EA=1;P2|=0x07; //按键初始为高while(1){ADWR=1; /************/ADCS=0; /************/ADWR=0; /**AD初始化**/ADWR=1; /************/while(!EOC); //等待转换结束ADRD=0;GetAdData[AdCount]=P0; //读取转换结果AdCount++;if(AdCount>=10) //连续采集10次值{AdCount=0;search(); //查表LED1=!LED1;LcdDisplay(); //显示}}}void Timer0() interrupt 1{static unsigned char count=0,UPFlag=1,DOWNFlag=1; //按键标志位static unsigned int TimeCount=0;TH0=THC0;TL0=TLC0;if(MODE==0||UP==0||DOWN==0){count++;if(count>=30) //消抖处理{count=0;if(MODE==0) //按键按下{MODESelect++;if(MODESelect>=4) MODESelect=1;}else if(UP==0){UPFlag=0;if(MODESelect==2){TongDao++;TDSelect();}}else if(DOWN==0){DOWNFlag=0;if(MODESelect==2){TongDao--;TDSelect();}}}}else count=0;if(MODESelect==1){TimeCount++;if(TimeCount>=(ChangeTime*1000/5)){TimeCount=0;TongDao++;TDSelect();}}else if(MODESelect==3){if(UPFlag==0) {UPFlag=1;ChangeTime++;}else if(DOWNFlag==0){DOWNFlag=1;ChangeTime--;if(ChangeTime<=0) ChangeTime=1;}}}。
单片机实验报告—— 数码管显示温度

XXXX学院实验报告Experimentation Report of Taiyuan Normal University系部计算机年级大三课程单片机原理与接口技术姓名同组者日期学号项目数码管显示温度一、实验目的1、了解单片机顺序执行的特点;2、掌握C语言的编写和keilc51的使用;3、熟悉DS18B20温度传感器的使用。
二、实验仪器硬件资源:单片机开发板笔记本电脑;软件资源:软件 Keil uVision5;三、实验原理1、流程图2、连接图四、实验结果数码管显示当前温度,用手握住温度传感器,数码管显示的温度值变大。
四、实验代码及分析//主函数void main(){while(1){LcdDisplay(Ds18b20ReadTemp()); //显示读取到的温度值}}void LcdDisplay(int temp) //lcd显示{float tp;if(temp< 0) //当温度值为负数{DisplayData[0] = 0x40; //因为读取的温度是实际温度的补码,所以减1,再取反求出原码temp=temp-1;temp=~temp;tp=temp;temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点后面的数自动去掉,//不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5 //的就算加上0.5,还是在小数点后面。
}else{DisplayData[0] = 0x00;tp=temp; //因为数据处理有小数点所以将温度赋给一个浮点型变量//如果温度是正的那么,那么正数的原码就是补码它本身temp=tp*0.0625*100+0.5;//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换//为整型的时候把小数点后面的数自动去掉,不管是否大于0.5,而+0.5之//后大于0.5的就是进1了,小于0.5的就算加上0.5,还是在小数点后面。
单片机原理与应用实验报告——温度测量显示及设定

《单片机原理与应用》课程实验报告院系:班级:学生:学号:指导教师:设计时间:哈尔滨工业大学1 实验的目的、内容和设备1.1 实验的目的单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。
1.2 实验内容实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开关,并在LCD上显示实时温度值,设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。
通过该实验学习和掌握以下的内容:1)MPLAB开发环境的使用,程序编写和排错及软件仿真2)利用MPLAB和ICD2对程序进行在线仿真和调试3)使用万用表和示波器等仪器对硬件系统进行测量和调试4)PIC18F452单片机的I/O和PWM驱动及编程方法5)PIC18F452单片机LCD和键盘接口及编程方法6)PIC18F452单片机的USART编程及与PC机的通讯方法7)利用Timer1外接32.768kHz的晶振产生RTC1.3 实验设备1)运行MPLAB的PC机2)示波器、万用表3)直流电源4)ICD2仿真器5)APP001多功能实验板2 总体设计2.1 硬件总体设计系统组成方案图1系统框图2.2 软件总体设计图2主程序框图图3 中断程序框图3 硬件设计1)散热风扇开发输出控制:实验中我们利用一个LED来模拟风扇状态,当散热风扇开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。
开发板上的指示灯D11由RB2,低电平亮,高电平灭。
推荐-利用51单片机 linux系统在arm板上显示的温度测量仪表 精品

绍兴文理学院数理信息学院课程设计报告书题目温度测量仪表物电系电子信息工程专业 101 班姓名姚丽平指导教师朱敏杰时间 20XX年 7月12日课程设计任务书温度测量仪表摘要随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,本文主要介绍了一个基于 89S51 单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器DS18B20数据采集过程。
对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
嵌入式系统采用的是微处理器,实现相对单一的功能,采用独立的操作系统,往往不需要大量的外围器件。
因而在体积上功耗上有其自身的优势,相比之下,一个使用Windows CE的PDA,仅靠机内电源使用几天,而一台笔记本仅仅能够支持三小时左右。
其实一个软硬件高度结合的产物,能提高执行速度和系统的可靠性。
关键词单片机;DS18B20 ;温度传感器;数字温度计; AT89S51;嵌入式系统目录1. 设计概述温度控制系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等 ,常用的控制电路根据应用场合和所要求的性能指标有所不同 , 在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。
这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
辽宁科技学院智能仪器设计基础课程设计----温度测量显示报警院系:专业:班级:姓名:学号:时间:指导老师:1.设计要求:热电阻温度设计:①温度传感器铂PT100②显示温度数值,精度0.1℃③温度超限报警2.方案设计:温度传感器信号调理 AD0804 STC89C52 数码管显示单片机蜂鸣器报警方案说明:本设计的采用STC89C52为核心,DA0804数据采集。
将外部的模拟信号经过A/D(ADC0804)转换后送给单片机STC89C52进行处理。
处理后将显示数据传送给数码管显示。
在到达设定的报警温度时进行报警。
温度测量显示报警是通过铂电阻的阻值随温度的变化而变化,将阻值的变化通过电桥电路转化成电压变化,用运放把电压放大到AD可以接受的范围,AD将电压信号转换成数字信号传输到单片机,经过单片机处理,将温度数值显示到七段数码管上。
当温度大于80℃时蜂鸣器进行报警提示。
3.硬件设计:3.1单片机及其最小应用系统STC89C52是一个高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口。
各引脚的功能如下:Vss(20):接地。
Vcc(0):接+5V电源。
XTAL1(19)和XTAL2(18):在使用单片机内部振荡电路时,这两个端子用来外接石英晶体和微调电容。
如图3.1所示,本硬件图使用11.0592MHz石英晶振。
(9): RST是复位信号输入端。
当此输入端保持两个机器周期(24RST/VPD个振荡周期)的高电平时,就可以完成复位操作。
ALE/PROG(30):ALE是地址锁存允许信号,在访问外部存储器时,用来锁存由P0口送出的低8位地址信号。
在不访问外部存储器时,ALE以振荡频率1/6的固定速率输出脉冲信号。
因此它可用作对外部输出脉冲信号。
因此它可用作对外输出的时钟。
但要注意,只要外接有存储器,ALE端输出的就不再是连续的周期脉冲信号。
PSEN(29):它是外部程序存储器ROM的读选通信号。
在执行访问外部ROM 指令时,会自动产生PSEN信号;而在访问外部数据存储器RAM或访问内部ROM 时,不产生PSEN信号。
(31):访问外部存储器的控制信号。
当EA为高电平时,访问内部程EA/VPP序存储器;但当程序计数器PC的值超过0FFFH(对8051/80C51/8751)或1FFFH (对8052)时,将自动转向执行外部程序存储器内的程序。
当EA保持低电平时,为对8751片只访问外部程序存储器,不管是否有内部程序存储器。
第二功能VPP内EPROM的21V编程电源输入。
P0.0~P0.7(39~32):双向I/O口P0。
第二动能是访问外部存储器时,可分时用作低8位地址和8位数据线;在对8751编程和效验时,用于数据的输入/输出。
P0口能以吸收电流的方式驱动8个LS型TTL负载。
P1.0~P1.7(1~8):双向I/O口P1。
P1口能驱动(吸收或输出电流)4个LS 型TTL负载。
在对EPROM编程和程序验证时,它接收低8位地址。
在8052单片机中,.P1.0还用作定时器2的记数触发输入端T2,P1.1还用作定时器2的外部控制端T2EX。
P2.0~P2.7(21~28):双向I/O口P2。
P2口可以驱动(吸收或输出电流)4个LS型TTL负载。
第二功能是访问外部存储器时,输出高8位地址。
在对EPROM 编程和效验时,它接收高位地址。
P3.0~P3.7(10~17):双向I/O口P3。
P3口能驱动(吸收或输出电流)4个LS型TTL负载。
P3口的每条引脚都有各自的第二功能。
图3.1 单片机最小应用系统复位电路:本硬件图使用手动复位电路,在按下复位按钮后,电容C通过R1放点,同时电源Vcc通过R1和R2分压。
而R2要比R1大许多,大部分电压降落到R2上,从而使RST端得到一个高电平导致单片机复位。
同时EA=1。
3.2PT100电阻温度传感器电阻温度传感器分为两部分:一部分为电桥电路,另一部分为放大电路。
在3.2图中,测温元件是铂电阻(测温范围0~200℃),铂电阻阻值变化在100~175.86Ω,用电桥来测量RX的变化,将电阻的阻值变化转变成电压的变化。
通过计算可得电桥差模输出为0~0.15V,由于AD转化器件能接受的电压范围为0~5V,所以电桥差模输出要经过运发放大输出。
差模运算放大器如图所接,放大倍数≈30。
将电压放大到0~4.5V,这时就可通过AD转换,将数据传送到单片机处理。
图3.2 PT100电阻调理电路3.3AD0804转换ADC0804是集成A/D 转换器。
它采用CMOS 工艺20引脚集成芯片,分辨率8位,转换时间100us ,输入电压范围在0~5V ,芯片具有三态输出数据锁存器,可直接连接到数据总线上。
图3.3 AD0804转换各引脚名称及作用:V IN (+),V IN (-)——两模拟信号输入端,用以接受单极性、双极性和差模输入信号。
DB7~DB0——具有三态特性数字信号输出口。
AGND——模拟信号地。
DGND——数字信号地。
CLK——时钟信号输入端。
CLKR——内部时钟发生器的外接电阻端。
CS——片选信号输入端,低电平有效。
WR——写信号输入,低电平启动A/D转换。
RD——读信号输入,低电平有效。
INTR——A/D转换结束信号,低电平表示本次转换已完成。
VREF/2——参考电平输入,决定量化单位。
VCC——电源5V输入。
AD0804时序图如下:3.4七段LED数码管动态显示测温范围是0~200℃,我们需要精确到小数点后一位,所以需要四个七段LED数码管。
为了节约单片机的P口,所以我们使用两片74HC573锁存器连接到P0口进行数据传输,来实现动态显示的“段选”和“位选”,U2为段选锁存器,U3为位选锁存器。
P2.6和P2.7端口来控制锁存器的锁存端。
图3.4 数码管显示3.5声报警电路如图3.5所示,蜂鸣器一端连接电源,一端连接PNP三极管e端,三极管c端接地,三极管b端加电阻连接单片机的P2.3口。
当单片机的P2.3口给低电平“0”时,蜂鸣器响起。
3.6硬件设计图完整的的电路图如下:4.软件设计4.1程序流程图开始AD数据传送处理温度数据显示否温度超过设定值?是蜂鸣器报警4.2程序C语言编程程序实现温度测量显示,并在超过80℃的时候报警。
#include<reg52.h>#include<intrins.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit adwr=P3^6;sbit adrd=P3^7;sbit beep=P2^3;uint adnum;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //不带小数点的0~9编码 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //带小数点的0~9编码void delayms(uint xms) //延时程序{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void display(uchar qian,uchar bai,uchar shi,uchar ge) //显示程序 {dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0x5f;wela=0;delayms(5);dula=1;P0=table[shi+10];dula=0;P0=0xff;wela=1;P0=0x6f;wela=0;delayms(5);dula=1;P0=table[bai];dula=0;P0=0xff;wela=1;P0=0x77;wela=0;delayms(5);dula=1;P0=table[qian];dula=0;P0=0xff;wela=1;P0=0x7b;wela=0;delayms(5);}uchar adnumber(void) //ad数据采集{adwr=1;_nop_();adwr=0;_nop_();adwr=1;P0=0xff;adrd=1;_nop_();adrd=0;_nop_();adnum=P1;adrd=1;return adnum;}main(){ uint a,a1,a2,a3,a4;uint temp;wela=1; //AD初始化P0=0x7f;wela=0;while(1){adnumber();temp=adnum*10*44.444444*0.0195+0.5; //数据处理 a1=temp%10;a2=temp%100/10;a3=temp%1000/100;a4=temp/1000;for(a=0;a<10;a++){display(a4,a3,a2,a1); } //数据显示if(temp>800) //报警检测{ beep=0;delayms(50);for(a=0;a<10;a++){display(a4,a3,a2,a1); }beep=1;}}}5.开发板调试按照上述流程图编写程序,下载到开发板上,模拟电压输入值,在数码管上显示温度值,如图(1)(2)所示:当模拟输入1.15V时,输出温度值是51.1℃。
(图1)当模拟输入2.65V时,输出温度值是117.9℃。
(图2)6.参考文献《智能化测量控制仪表原理与设计(第三版)》徐爱钧徐阳编著北京航空航天大学出版社《单片机实用技术与应用》徐成波杨数强李彦林金纯编著清华大学出版社《单片机原理及应用——基于Proteus与Keil C》孟祥莲高洪志编著哈尔滨工业大学出版社《新概念51单片机C语言教程-入门、提高、开发、拓展全攻略》郭天祥编著电子工业出版社7.心得体会本次实习我们使用开发板,keil软件编制了C语言程序,并将程序下载到开发板上进行了调试,验证了我们所设计的程序的可用性。
这次实习还使我理解了编写程序的一些技巧。
单片机应用系统一般包含多个模块的主程序和各种子程序组成。
每个模块都能完成一个明确的任务,实现某个具体的功能,如温度接收、延时、发送、显示等。
采用模块化程序设计的方法,就是讲这些具体的功能程序独立设计和分别调试,最后将这些模板程序连接在一起进行联合调试。
模板化的设计有点:一个模板可以多个程序共享;单个功能设计和调试比较方便,容易完成。