温度采集系统的设计与实现.docx
- 文档编号:28949231
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:13
- 大小:113.44KB
温度采集系统的设计与实现.docx
《温度采集系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《温度采集系统的设计与实现.docx(13页珍藏版)》请在冰豆网上搜索。
温度采集系统的设计与实现
第1章总体设计方案
1.1课程设计的内容和要求
(1)课程设计内容:
利用南京伟福公司的LAB6000通用微控制器仿真实验系统提供的温度传感器电路,A/D变换电路及数码管显示电路,完成温度的采样与显示。
即系统可以通过改变环境温度,在数码管上显示相应的温度值。
(2)课程设计要求:
a)独立完成课程设计任务;
b)通过老师现场验收;
c)交出完整的课程设计报告。
1.2课程设计原理
伟福LAB6000微控制器试验箱上的温度传感器电路是一个较常用的温度传感器电路,大致分电源、电阻电桥、运放、输出四部分。
当温度发生变化时,热敏电阻的阻值变化,电桥产生电压差,即电压信号。
将该信号输入到伟福实验箱的模数转换电路,伟福实验箱的模数转换电路是由ADC0809模数转换器构成的,它是八位A/D转换器。
每采集一次一般需要100us,可以用查询方式读入A/D转换结果,也可以用中断方式读入结果。
在本课设中,采用中断方式读入结果,在中断方式下,A/D转换结果后会自动产生EOC信号,将其与CPU的外部中断相接。
将ADC0809转换的结果乘上温度传感器的精度值即得当前环境的温度值,将该数值分别取个位、十位、百位在数码管中显示输出。
伟福LAB6000微控制器试验箱上的数码管显示电路是采样动态方式显示的,所以在显示每一位数时,需要加适当的延时。
1.3课程设计思路
(1)提出方案
首先,利用伟福实验性上的温度传感器电路采样温度,并将采样值输入ADC0809的IN0端,启动A/D转换器将温度传感器采集的温度型号进行转换,最后将转换的数值经数码管显示输出。
(2)方案论证
本方案可以实现环境的温度的采样与现实功能,并能很好的控制采样的频繁程度,从而改变灵敏度,同时对结果的显示很容易控制。
1.4实验环境
·硬件环境:
LAB6000通用微控制器仿真实验系统,PC机。
·软件环境:
WAVE应用软件。
第2章详细设计方案
2.1实现方法
温度采集电路采样模拟信号,将该模拟信号经模数转换器ADC0809转换,当转换结束时,ADC0809产生下降沿脉冲,该脉冲经ADC0809的EOC引脚经过非门电路转换成上升沿脉冲接到8031的外中断0引脚,触发8031外中断0,此时8031执行中断程序,将转换的结果读入经处理后在数码管中显示出来。
2.2模块设计
为了实现温度采集与显示的功能,该系统需要四个模块,分别是硬件初始化模块,温度采集模块,模数转换模块和显示模块。
在硬件初始化模块中,将开启外中断,并设置外中断位最高优先级,然后开启模数转换器ADC0809。
在温度采集转换模块中将温度传感器采集的数据经转换器转换的结果提供给显示模块。
在显示模块中,将结果经过处理查表在数码管中显示出来。
主程序流程图如下所示。
图2.1主程序流程图
2.2.1初始化模块设计
本次课设用到的外部器件中需要初始化的是模数转换器ADC0809和八段数码管。
程序开始对ADC0809进行初始化,确定ADC0809的地址,由于程序是利用ADC0809的中断方式读取温度信号的转换结果,所以需要初始化8031的中断控制寄存器IE开启中断,然后开启8031的外部中断0。
初始化程序然后初始化八段码数码管,确定数码管的地址。
最后开启ADC0809进行模数转换。
程序流程图如下所示。
图2.2初始化流程图
2.2.2温度采集模块设计
伟福LAB6000微控制器实验箱中的温度传感器电路是利用热敏电阻实现的,当外部环境的温度发生变化时,热敏电阻的阻值随温度的变化而变化,从而使输出的电压发生变化。
将该电压信号接到ADC0809模数转换器的IN0采集端。
2.2.3模数转换模块设计
伟福LAB6000微控制器实验箱采用ADC0809模数转换器来实现模拟信号到数字信号的转换,本课设中采用ADC0809的中断方式来读取模数的转换结果,温度传感器电路将采集到的模拟信号输入到ADC0809的IN0端口,启动ADC0809转换器开始进行模数转换,当转换结束时,ADC0809的EOC端口产生下降沿脉冲,将该脉冲经过非门电路转换成上升沿脉冲,该引脚与8031的外部中断0的引脚INT0相连,此后8031进入外部中断0的中断处理程序执行。
中断服务子程序实现接受到外中断0之后的处理,每一次A/D转换完成之后,都会通过EOC引脚向外发送一个上升沿信号,将该信号通过非门连接到外中断0的引脚上,该引脚每次接收到下降沿信号就会进入中断服务子程序。
中断服务子程序包括两个部分。
第一部分,读取模数转换值,将该值乘上热敏电阻的精度值即得当前温度值。
第二部分,将当前温度值送入八段码显示,并退出中断服务子程序。
程序流程图如下所示。
图2.3模数转换模块流程图
2.2.4数码管显示模块设计
伟福LAB6000微控制器采用的为常用的八段LED显示器。
每一段对应一个发光二极管。
这种显示器有共阳极和共阴极两种。
共阴极LED显示器的发光二极管的阴极连接在一起,通常此公共阴极接地。
当某个发光二极管的阳极为高电平时,发光二极管点亮,响应的段被显示。
同样,共阳极LED显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。
为了使LED显示器显示不同的符号或数字,就要把不同段的发光二极管点亮,这样就要为LED显示器提供代码可使LED相应的段发光,从而显示不同字型,因此还代码称之为段码(或称为字型码),七段发光二极管,再加上一个小数点位,共计八段。
因此提供给LED显示器的段码(或字型码)正好是一个字节。
对应关系是,显示字符0、1、2、3、4、5、6、7、8、9分别对应的共阴极码是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
本程序中,将从中断服务子程序传来的温度值分别取百位、十位、个位并在八段数码管的从右数三位中按顺序输出显示。
程序流程图如下所示。
图2.4数码管显示模块流程图
2.3程序连线图
硬件电路由温度传感器,模数转换器ADC0809,处理器8031和数码管显示电路构成,如下图所示。
图2.5硬件连线图
温度传感器将采集到的模拟信号输入ADC0809的IN0端口,ADC0809与8031的中断方式接口电路只需要将图2.5中的EOC脚经过一非门连接到8031的INT0脚即可。
采用中断方式可大大节省CPU的时间,当转换结束时,EOC发出一个脉冲向单片机提出中断申请,外部中断0采用跳沿触发方式。
单片机响应中断请求,由中断0的中断服务程序读模数转换结果值。
8031将转换后的数值在数码管中显示输出。
第3章调试及结果分析
3.1调试步骤及方法
编译并连接程序后全速运行,在数码管上显示温度值,改变热敏电阻周边环境的温度,方法可以是哈气、用手触摸热敏电阻等等,在数码管上显示同一时刻的温度值。
3.2实验结果及分析
本程序满足课程设计要求,在程序运行时,数码管的右边三个显示管分别温度值的百位,十位,个位。
显示的数值频繁闪烁,这是因为本实验硬件是利用LED动态显示方式的,在多位LED显示时,为简化硬件电路,通常将所有位的段码线相应地并联在一起,由一个8位的I/O口控制,而在各位的共阳极或共阴极分别由相应的I/O线控制,形成各位的分时选通。
因此,在同一时刻,如果各位的位选线都处于状态的话,LED将显示相同的字符。
若要各位LED能够同时显示出于本位相应的显示字符,就必须采用动态显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段码线上输出相应位要显示的字符的段码。
这样,在同一时刻,LED中只有选通的那一位显示出字符,而其他的则是熄灭的。
同样,在下一时刻,只让下一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,在段码线上输出将要显示的字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的。
如此循环下去,就可以是各位显示出将要显示的字符。
虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED显示器的余辉和人眼的“视觉暂留”作用,只要每位显示足够短,则可以造成“多位同时亮”的假象,达到同时显示的现象。
但总的延时不易过长,或者影响温度采集与显示的灵敏度。
参考文献
[1]张毅刚.单片机原理及应用[M].哈尔滨:
哈尔滨工业大学出版社,2010
[2]李伯成.基于MCS-51单片机的嵌入式系统设计[M].北京:
电子工业出版社,2004
[3]何利民.单片机应用系统设计[M].北京:
北京航空航天大学出版社,1995
[4]阎石.数字电子技术基础[M].北京:
高等教育出版社,1998
[5]徐伟.C51单片机高效入门[M].北京:
机械工业出版社,2006
[6]付家才.单片机控制工程实践技术[M].北京:
化学工业出版社,2004
附录(源程序)
#include
#include
unsignedcharxdata*pLED=0x8004;
unsignedcharxdata*pLEDCS=0X8002;
unsignedcharxdata*pADC=0x9000;
charx=0X00;
floattt;
codeunsignedcharbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay(chari)
{
charj;
for(j=0;j
}
voidservice_int0()interrupt0using2
{
tt=(*pADC/255.0)*50;
}
voidmain()
{
intj;
chari;
EA=0x1;
EX0=0x1;
PX0=0x1;
IT0=0x1;
*pADC=0X00
while
(1)
{
for(j=0;j<10;j++)
{
x=tt;
i=x/100;
*pLEDCS=0x08;
*pLED=buf[i];
delay(100);
i=x%100/10;
*pLEDCS=0x04;
*pLED=buf[i];
delay(100);
i=x%10;
*pLEDCS=0X02;
*pLED=buf[i]|0x80;
delay(100);
i=(tt-x)*10;
*pLEDCS=0X01;
*pLED=buf[i]&0x7f;
delay(100);
}
delay(500);
*pADC=0X00;
}
}
附录(原理图)
附录(元件清单)
BillofMaterialforMyTest.Bom
UsedPartTypeDesignatorFootprint
======================================
51KR3R4R5
R9R10
21MR13R14
24KR1R2
25KR6R7
16MHZC4
17KR8
110KR17
122UFC5DIP-40
230PFC2C3
236KR11R12
174F32U14DIP-14
174HC138U5DIP-16
174LS02U12DIP-14
274LS374U9U10DIP-20
1100R16DIP-14
1103PFC1
1200R15
14148D1
17404U13DIP-14
18051U4DIP-40
1ADC0809U8DIP-28
2CA324U1U2
1CLKU7
2MC1413__6U6U11
1SENSORU3
课程设计总结:
经过这次课程设计,我对单片机8031和接口芯片ADC0809有了进一步的了解,并且巩固了对芯片功能的理解和应用,增加了我的动手能力和实践能力。
并且在与同学的交流过程中,开阔了自己的想法,通过使用更好的方法,程序变得更加高效。
本次课程设计是温度采集系统的设计与实现。
在刚开始实验中遇到了很多问题,其中很多是因为自己的粗心大意导致程序的功能不能正确实现,还有一些是在编写程序时出现的错误。
刚接触这些芯片时,我还不能真正理解芯片所能实现的功能,后来经过查找各种相关资料,在老师和同学的耐心帮助下,才能顺利完成课程设计的要求。
通过本次课程设计使我学到很多的知识,让我更加深刻的理解了单片机原理及应用。
同时也认识到自己在书本上所学发到的知识还远远不足,需要亲自动手实践来充实自己在书本上的所学,并且应用到具体的硬件实现上。
所以我会在以后的学习中更加虚心努力,增加自己的动手能力。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 采集 系统 设计 实现