重庆航天职业技术学院温度采集报警报告报告题目:数字温度计系部:电子工程系专业:计算机控制技术姓名:学号:指导老师:汤平温度采集报警任务书题目:数字温度计任务与要求:1、查阅数字温度计设计相关资料,熟悉数字温度计设计的原理,查阅A/D转换及传感器相关知识,画出数字温度计原理图,并编写相应的源程序。
2、使用8052单片机作为处理器,设计数字温度计设计,设定温度最高值和最低值。
数码管进行循环显示,显示实际温度值。
3、实现单路的电压采集和显示,显示3位温度值,最后1位显示“C”4、并用喇叭报警。
发挥部分:将仿真电路图和程序修改为中断方式实现温度采集和显示。
前言温度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生活中的更加广泛的应用,利用新型数字温度传感器实现对温度的测试与控制得到更快的开发,本文设计了一种基于80C52的温度检测及报警系统。
该系统可以方便的实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
该系统设计和布线简单,结构紧凑,抗干扰能力强,在大型仓库、工厂、智能化建筑等领域的温度检测中有广泛的应用前景。
目录1、原理 (1)2、元器件介绍 (2)3、元器件清单 (7)4、参考电路图 (8)5 电路图详解 (10)6、元器件的排版与焊接 (11)7、参考程序编写与导入 (12)8、成品的调试 (15)9、总结 (16)10、参考文献 (17)原理根据主芯片AT89S52所展开设计(1)微处理器:AT89S52非常适用于控制,他的主要结构和特点在前面已经介绍过了,为了满足外围接口电路的需要,一般都要在输出口处接锁存驱动电路,这里我们采用的是SN74HC573。
(2)压频变换装置:将模拟的电压量转化成频率值,这是一种A/D 转化方式,将输出电压U0采样通过压频变换装置传给单片机,压频转化装置我们用的是National Semiconductor的LM331。
(3)输出控制电路:单片机的输出控制信号通过电阻解码网络转化成模拟电压值,控制电压和电流比较器的基准值,实现对外围功率电路的控制。
(4)上电复位电路:为了防止单片机的程序飞跑,出现死锁,我们采用MAXIM公司的MAX813L系统监控集成芯片来实现对单片机的监控,该芯片具有看门狗电路、门限值检测器、手动复位等功能。
(5)输入控制和数码显示电路:包括按键和显示部分。
通过简单的按键选择,实现运行方式选择、复位及故障的显示。
显示部分采用SN74HC573驱动两个8位七段LED显示;同时通过发光二极管和蜂鸣器提示运行状态。
1元器件介绍本设计选用的单片机型号为STC89C52RC,它是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
芯片的引脚见图3-1。
图3-1 STC89C52芯片引脚图2其内部管脚与通用的8xC52基本相同,主要处理各外部硬件的初始化,会聚IC内部寄存器和数据RAM并与CPU进行通信等。
其主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST(9脚)为复位输入端口,外接电阻电容组成的复位电路,可进行手动复位。
VCC(40脚)和GND(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定义,各引脚功能描述见表3-1。
表3-1 STC89C52RC引脚功能描述STC89C52RC单片机还具有以下几个特点:1)增强型6时钟/机器周期CPU;2) 3.4V-5.5V宽工作电压,工作频率范围0-40MHz,实际工作频率可达48MHz;3)工作温度范围0~75℃;4)8KB用户应用程序空间以及512B片内RAM,无需扩展存储器;32个通用I/O口,复位后P1/P2/P3是准双向口/弱上拉,P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口使用则需要上拉电阻;5)内置看门狗电路,无需外加看门狗电路;6)内置3个16位定时器/计数器,其中定时器0可作为2个8位定时器使用;7)具有4个外部中断源,下降沿或低电平触发中断,掉电模式可由外部中断低电平触发中断模式唤醒;8)PDIP-40封装。
4共阳极数码管:数码管引脚分部:56元器件清单7参考电路图8 电路详解80C51时钟有两种方式产生,即内部方式和外部方式。
(如图2-4所示)80C51中有一个构成内部震荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英或陶瓷震荡器一起构成自激震荡器震荡电路如图。
外接石英晶体(或陶瓷震荡器)及电容C1、C2接在放大器的震荡回路中构成并联震荡电路。
对外接电容C1、C2虽然没有非常严格的要求,但电容的大小会轻微影响震荡频率的高低、震荡工作的稳定性、起震的难易程序及温度稳定性,如果使用石英晶体,推荐使用30pF±10pF,而如果使用陶瓷谐振器建议选择40pF±10pF。
用户还可以采用外部时钟,采用外部时钟如图所示。
在这种情况下,外部时钟脉冲接到XTAL1端,既内部时钟发生器的输入端,XTAL2悬空。
由于外部时钟信号是通过一个2分频的触发器后作为内部时钟信号的所以外部时钟的占空比没有特殊要求,但最小高电平持续的时间和最大低电平持续的时间应符合产品技术条件的要求。
本次设计采用内部震荡电路,瓷片电容采用30P,晶振采用12MHZ。
复位电路设计容采用电容值为10μ的电解电容。
具体连接电路如图2-5所示:单片机系统的复位电路在这里采用的是上电+按钮复位电路形式,其中电阻R采用10KΩ的阻值,电10元器件排版焊接首先拿到参考电路图,仔细观看和理解电路图。
在根据电路图上面的元器件一次核对老师所发的元器件是否够数,元器件的参数是否正确,,用万用表测出每个电阻的参数大小,按顺序排列标注好参数信息。
检查元器件是排版焊接的第一步.元器件检查完后,是就排版了,根据以往的经验可以把电路图分为几个部分后在来逐个排版焊接,现实最小系统电路的焊接,再焊接复位电路的元器件,这样把电路划分为几个小部分逐个焊接,利于焊接,便于检查,易防止漏掉元器件的安装与焊接。
11参考程序#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define Tmax 35 //报警温度35℃sbit TLC549_SCLK=P1^2; //TLC549芯片SCLK线sbit TLC549_SDO=P1^0; //TLC549芯片SDO线sbit TLC549_CS=P1^1; //TLC549芯片CS线sbit Speaker=P1^7; //蜂鸣器端口#define outbit P3 //outbit为数码管的公共端控制量#define outseg P2 //outseg为数码管的段码端控制量#define len 2 //len为数码管的个数uchar ledbuf[len]; //显示缓冲,存储显示字符的字段码uchar code segmap[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};uchar TLC549_data( )//TLC549的A/D转换程序{uchar result;//定义result存放A/D转换结果uchar i=0,j;TLC549_CS=1;//TLC549的CS引脚输出高电平,为A/D转换做准备TLC549_CS=0; //TLC549的CS引脚输出低电平,开始一个A/D转换周期result=0;//A/D转换结果清零TLC549_SDO=1;// 51单片机读数据时得先把管脚置1for(i=0;i<8;i++) 12 {if(TLC549_SDO==1)result=result|(0x80>>i);// 从高位到低位依次获取A/D转换的结果TLC549_SCLK=1;TLC549_SCLK=0; //输出TLC549的下降沿,从SDO端送出一位A/D转换结果for(j=0;j<2;j++);//下降沿产生后,400ns后新的位被写到数据线上,所以需延时}TLC549_CS=1; //一个周期结束后,TLC549的CS端设置为高电平return result; //返回A/D转换结果}//延时子程序void Sleep(uchar count){uchar i;while(count-- != 0) for(i=0;i<124;i++);}// LED七段码显示函数void DispLed(){uchar i, pos=0x01; //从左往右显示,公共端控制暂存变量pos设置为0x01outbit=0xff; //全灭for(i=0; i<len; i++) //扫描2个LED{outseg =ledbuf[i]; //输出当前的段码值outbit=~pos; //输出公共端的控制值,选通一个数码管Sleep(20); //延时pos<<=1; // 公共端控制暂存变量pos左移一位,为选通下一个数码管做准备outbit=0xff; //关闭所有数码管Sleep(5); //延时}} 13 //扬声器发声void speaker(){uchar i;for(i=0;i<3;i++){ Speaker=1;Sleep(20);Speaker=0;Sleep(20);}}void main(){ uchar a,b;uchar i;uint tt;Speaker=0;while(1){tt=TLC549_data();//读取A/D转换结果tt=tt*50/51; //计算温度值,保存在tt中a=tt/10; //计算温度的十位b=tt%10; //计算温度的个位ledbuf[0]=segmap[a];//获取十位的段码值ledbuf[1]=segmap[b]; //获取个位的段码值if(tt>=Tmax) //超过规定的温度,报警speaker();DispLed();//显示温度值}}顺序:1、18,19脚2、9,31脚3、14成品的调试15总结经过这次微机控制技术实训《温度采集报警——数字温度计》的制作过程,我再次巩固了单片机的有关知识。