温度报警器实验报告.docx
《温度报警器实验报告.docx》由会员分享,可在线阅读,更多相关《温度报警器实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
温度报警器实验报告
温度报警器实验报告
温度报警器实验
报告
班级:
组长:
人员:
指导老师:
一、前言……………………………………………..1二、实习内容…………………………………………2
2.1设计要求……………………………………2
2.2设计原理……………………………………2
2.3硬件设计……………………………………2三、组装与调试………………………………………5四、实习总结与体会…………………………………5
4.1总结…………………………………………5
4.2心得体会………………………………………6五、参考文献…………………………………………6六、附录………………………………………………6
6.1元器件清单…………………………………7
6.2程序…………………………………………7
0
前言
温度是一个十分重要的物理量。
所以在日常生活中,对于温度的测量与控制也是十分的重要。
而此次我们设计的就是温度测量显示电路。
利用热敏电阻器和其他允许的器件完成一个温度显示电路,当温度升高时,热敏电阻的阻值减小。
用所学的理论知识结合相关经验,构成一个有效、可行、适用的、简单的电子系统,来达到一个或多个实际需求的一种有目的的活动。
本次试验是综合运用理论知识,把一些单元电路有机的组合起来,组成小的系统,使我们建立系统的概念;并使我们巩固和加强已学理论知识。
并掌握一般电子电路和设计的基本步骤。
此次实验要我们达到以下要求,第一:
掌握常用元器件的检测、识别方法及常用电子仪器的正确使用方法。
第二:
掌握电路板的安装、布线、焊接等基本技能。
第三:
培养一定的独立思考能力、解决问题的能力。
1
实习内容
2.1设计要求
本次的温度测量显示电路使用温度传感器、AD0832和单片机完成对温度
的显示;
此次设计安排为3-4人一个组,我们组为4个人,共同完成每一个模板的
设计,并安装调试无误后,写出简要的实验报告。
2.2设计原理
该温度报警器主要由温度传感器、放大器和模数转换模块、主控电路、段驱动数码管位驱动等部分组成。
工作原理如下:
1.传感器对当前环境温度进行采样得到与之对应的模拟信号。
2.信号处理电路对传感器采样所得到的模拟信号进行处理——放大。
3.A/D转换电路对处理之后的模拟信号数值化。
4.将该数字信号送入单片机,经单片机处理后由七段数码管显示。
2.3硬件设计
2
2.3.1系统框图
传感器采样前级信号处理A/D转换
七段数码显示单片机
2.3.2传感器采样电路
3
2.3.3信号处理电路
2.3.4AD0832信号转换电路
4
2.3.5单片机部分
2.3.6数码管显示部分
5
组装与调试
1.首先检测各个元件是否有损坏,然后按照电路图开始焊接。
焊接开始前,
先大致确定几个主要器件的位置并固定好,一边焊接其他小型元件时,
一边照电路图用引线连接元件。
焊接完成后,仔细检查有没有错焊、漏焊、虚焊,以及有没有连接在一
起的焊点,还必须一一检查引线没有用出错。
2.检查无误后,接通电源,检查前级和后级,看数码管是否显示正常,最后
加热传感器,使其达到设定的高温临界点,如果实现了报警和降温,设计成
功。
实习总结与体会
(1)总结:
优点:
1(线性好,精度适中,体积小,实用方便。
2(实时显示当前温度。
缺点:
热敏电阻会有一定的时间延时,从而间接地影响了整个报警系统的灵敏性和准确性。
(2)心得体会:
在本次设计的过程中,我们发现了很多的问题,虽然以前也做过类似的课程设计,但是这次确实让我们学到了很多。
我们不仅要选好元件,还要把这些元件合理地组织起来,所以我们要学会如何寻找和搜索自己需要的资料。
这一次,我
6
们用了老师给的参考电路图,然后修改了一些地方,比如去掉了一个LED,再加入了几个电阻。
虽然有些困难,但是经过努力,我们还是完成了电路的设计。
经过本次的设计,我们学到了很多的知识,了解到了传感器能够把自然界的各种非电量转换为电信号的能量物理理念。
从本次的实习设计中,我们意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识运用到实际当中,实践是检验真理的唯一标准。
培养了一定的独立思考能力、解决问题的能力。
同时也学到了和他人愉快合作的技巧。
每当我们遇到问题时,我们学会了理性的分析,最终解决问题。
同时在讨论问题时认真聆听别人的思想和意见也很重要,在聆听的同时也会学到很多东西。
所以这次实习让我们学到了很多的东西。
参考文献
[1]数字电路与逻辑设计
[2]C语言程序设计(第三版)
[3]电工技术基础
附录
1.元器件清单
元件类型值数量
PT100热敏电阻1
R1100K1
R210K1
R31K1
AD0832信号转换1
LM358信号处理1
AD89C511
DS1-DS3数码管3
2.程序
#include
7
/*声明驱动信号阵列*/
charcodeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,//0,4
0x92,0x83,0xf8,0x80,0x98};//5,9
//#defineADCP0//定义ADC连接埠
#defineSCANPP2//定义扫瞄信号连接埠
#defineSEG7PP0//定义七节显示器连接埠
#defineucharunsignedchar#defineuintunsignedintvoiddisplay(int);//声明显示函数
voiddelay1ms(char);
voiddelay(chari)
{unsignedcharj;
for(j=0;j
}
sbitP1_3=P1^3;
sbitP1_4=P1^4;
sbitP1_0=P1^0;
sbitP3_0=P3^0;
/*
********************************************************************
**函数名:
ADC0832读数据程序
**入口:
需转换通道channel[0:
1]
**返回:
无符号字符型uchar
*********************************************************************
*/
ucharReadAdc0832(ucharchannel);//ADC0832端口定义
#defineADC0832_SCK_HP1_3=1#defineADC0832_SCK_LP1_3=0#defineADC0832_DIDO_HP1_4=1#defineADC0832_DIDO_LP1_4=0#defineADC0832_DIDOP1_4#defineADC0832_CS_HP1_0=1#defineADC0832_CS_LP1_0=0//工作时序
//当cs由高变低时,选中ADC0832。
在时钟的上升沿,DI端的数据移入ADC0832内部的多路地址移位寄存器。
//在第一个时钟期间,Dl为高,表示启动位,紧接着输入两位配置位。
当输入启动位和配置位后,选通输入模拟通道,转换开始。
//转换开始后,经过一个时钟周期延迟,以使选定的通道稳定。
ADC0832接着在第4个时钟下降沿输出转换数据。
//数据输出时先输出最高位(D7~DO);输出完转换结果后,又以最低位开始重新输出一遍数据(D7,DO),两次发送的最低位共用。
当片选cS
8
//为高时,内部所有寄存器清0,输出变为高阻态。
如果要再进行一次模傲转换,片选cs必
须再次从高向低跳变,后面再输入启动位和配置位//adc0832读数据
ucharReadAdc0832(ucharchannel)
{
uchari=0;
ucharoutdata=0;
//初始化:
选通数据口保持高电平
//当cs由高变低时,选中ADC0832。
在时钟的上升沿,DI端的数据移入ADC0832内部的
多路地址移位寄存器
ADC0832_CS_L;//使能
ADC0832_DIDO_H;//ADC0832_SCK_L;//第一次触发
delay(5);
ADC0832_SCK_H;//
delay(5);
//模拟通道的选择及单端输入和差分输入的选择
ADC0832_DIDO_H;
ADC0832_SCK_L;//第二次触发
delay(5);
ADC0832_SCK_H;
delay(5);
if(channel==1)
{
ADC0832_DIDO_H;
}
else
{
ADC0832_DIDO_L;
}
ADC0832_SCK_L;//第三次触发
delay(5);
ADC0832_SCK_H;
delay(5);
ADC0832_SCK_L;
delay(5);
ADC0832_DIDO_H;//置为输入准备读数据
ADC0832_SCK_H;
delay(5);
outdata=0;//初始化
//读数据D7~D0
for(i=1;i<=8;i++)
{
9
if(ADC0832_DIDO==1)
{
outdata|=0x01;
}
ADC0832_SCK_H;
ADC0832_SCK_L;
outdata=outdata<<1;
}
ADC0832_CS_H;
returnoutdata;
}
voidmain()
{unsignedintdate;
while
(1)
{
date=ReadAdc0832(0);
date=date*20;
display(date);
}
}
//====显示函数====
voiddisplay(results)
{
chartimes=20;//扫瞄20次
while(--times>=0)//while循环开始
{
SCANP=0x01;
SEG7P=TAB[results/1000];//转换成驱动信号,并输出到P2
delay1ms(4);//延迟4ms
SCANP=0x02;
SEG7P=TAB[(results/100)%10];//转换成驱动信号,并输出到P0
delay1ms(4);//延迟4ms
SCANP=0x04;
SEG7P=TAB[(results/10)%10];//转换成驱动信号,并输出到P0
delay1ms(4);//延迟4ms
SCANP=0x08;
SEG7P=TAB[results%10];//转换成驱动信号,并输出到P0
delay1ms(4);//延迟4ms
10
}//结束while叙述}//display函数结束//====延迟函数====
voiddelay1ms(charx){inti,j;//声明变量
for(i=0;ifor(j=0;j<120;j++);//内循环
}
//延迟函数结束
11