温度报警器实验报告
温度报警器实验
报告
班级:通信092 组长:包一峰
人员:陈姣、贾茜、李蒙雨 指导老师:贾伟伟老师
目录
一、前言 ……………………………………………..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.4 AD0832信号转换电路
4
2.3.5 单片机部分
2.3.6 数码管显示部分
5
组装与调试
1. 首先检测各个元件是否有损坏,然后按照电路图开始焊接。焊接开始前,
先大致确定几个主要器件的位置并固定好,一边焊接其他小型元件时,一边照电路图用引线连接元件。
焊接完成后,仔细检查有没有错焊、漏焊、虚焊,以及有没有连接在一起的焊点,还必须一一检查引线没有用出错。
2. 检查无误后,接通电源,检查前级和后级,看数码管是否显示正常,最后加热传感器,使其达到设定的高温临界点,如果实现了报警和降温,设计成功。
实习总结与体会
(1)总结:
优点:
1.线性好,精度适中,体积小,实用方便。 2.实时显示当前温度。
缺点:热敏电阻会有一定的时间延时,从而间接地影响了整个报警系统的灵敏性和准确性。
(2)心得体会:
在本次设计的过程中,我们发现了很多的问题,虽然以前也做过类似的课程设计,但是这次确实让我们学到了很多。我们不仅要选好元件,还要把这些
6
元件合理地组织起来,所以我们要学会如何寻找和搜索自己需要的资料。这一次,我们用了老师给的参考电路图,然后修改了一些地方,比如去掉了一个LED,再加入了几个电阻。虽然有些困难,但是经过努力,我们还是完成了电路的设计。经过本次的设计,我们学到了很多的知识,了解到了传感器能够把自然界的各种非电量转换为电信号的能量物理理念。
从本次的实习设计中,我们意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识运用到实际当中,实践是检验真理的唯一标准。培养了一定的独立思考能力、解决问题的能力。同时也学到了和他人愉快合作的技巧。每当我们遇到问题时,我们学会了理性的分析,最终解决问题。同时在讨论问题时认真聆听别人的思想和意见也很重要,在聆听的同时也会学到很多东西。所以这次实习让我们学到了很多的东西。
参考文献
[1]
数字电路与逻辑设计 C语言程序设计(第三版) 电工技术基础
附录
[2]
[3]
1. 元器件清单
元件 PT100 R1 R2 R3 类型 热敏电阻 值 数量 100K 10K 1K 1 1 1 1 7
AD0832 信号转换 LM358 AD89C51 DS1-DS3 1 1 1 3 信号处理 数码管 2. 程序
#include char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 0 ̄4 0x92, 0x83, 0xf8, 0x80, 0x98 }; // 5 ̄9 //#define ADC P0 // 定义ADC连接埠 #define SCANP P2 // 定义扫瞄信号连接埠 #define SEG7P P0 // 定义七节显示器连接埠 #define uchar unsigned char #define uint unsigned int void display(int); // 声明显示函数 void delay1ms(char); void delay(char i) { unsigned char j ; 8 for(j = 0 ; j sbit P1_3 = P1^3 ; sbit P1_4 = P1^4 ; sbit P1_0 = P1^0 ; sbit P3_0 = P3^0 ; /* ******************************************************************** ** 函数名 :ADC0832读数据程序 ** 入口 :需转换通道channel [0:1] ** 返回 : 无符号字符型 uchar ** ******************************************************************* */ uchar ReadAdc0832( uchar channel ); //ADC0832端口定义 #define ADC0832_SCK_H P1_3 = 1 #define ADC0832_SCK_L P1_3 = 0 #define ADC0832_DIDO_H P1_4 = 1 #define ADC0832_DIDO_L P1_4 = 0 9 #define ADC0832_DIDO P1_4 #define ADC0832_CS_H P1_0 = 1 #define ADC0832_CS_L P1_0 = 0 //工作时序 //当cs由高变低时,选中ADC0832。在时钟的上升沿,DI端的数据移入ADC0832内部的多路地址移位寄存器。 //在第一个时钟期间,Dl为高,表示启动位,紧接着输入两位配置位。当输入启动位和配置位后,选通输入模拟通道,转换开始。 //转换开始后,经过一个时钟周期延迟,以使选定的通道稳定。ADC0832接着在第4个时钟下降沿输出转换数据。 //数据输出时先输出最高位(D7~DO);输出完转换结果后,又以最低位开始重新输出一遍数据(D7~DO),两次发送的最低位共用。当片选cS //为高时,内部所有寄存器清0,输出变为高阻态。如果要再进行一次模傲转换,片选cs必须再次从高向低跳变,后面再输入启动位和配置位 //adc0832读数据 uchar ReadAdc0832( uchar channel ) 10 { uchar i = 0; uchar outdata = 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 ) { 11 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++ ) { if( ADC0832_DIDO == 1 ) 12 { outdata |= 0x01; } ADC0832_SCK_H; ADC0832_SCK_L; outdata = outdata << 1; } ADC0832_CS_H; return outdata; } void main() { unsigned int date ; while(1) { date = ReadAdc0832( 0 ) ; date = date*20; 13 display(date); } } //====显示函数==== void display(results) { char times=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 ; 14 SEG7P=TAB[results%10]; // 转换成驱动信号,并输出到P0 delay1ms(4); // 延迟4ms } // 结束while叙述 } // display函数结束 //====延迟函数==== void delay1ms(char x) { int i,j; // 声明变量 for(i=0;i 15 因篇幅问题不能全部显示,请点此查看更多更全内容