多路数字温度测量系统设计.docx
《多路数字温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《多路数字温度测量系统设计.docx(26页珍藏版)》请在冰豆网上搜索。
多路数字温度测量系统设计
2.1、STC12C5A32AD单片机···········································4
2.2、LM35温度传感器···············································6
2.3、LED显示电路设计··············································6
2.4、键盘电路设计·················································8
2.6复位电路及其原理··············································9
2.7报警及其指示电路设计··········································9
3.2子程序流程图·················································11
3.3主程序流程图·················································13
摘要
随着科技的不断进步,在工业生产中温度是常用的被控参数,而采用单片机来对这些被控参数进行控制已成为当今的主流。
本文介绍了多路数字温度测量系统的设计,该设计采用单片机来实现对温度的测量显示,主要完成多路数字温度测控与数据传输系统的硬件电路及软件编程调试。
利用内置A/D转换器单片机、温度传感器等组成多路温度测量系统测量环境温度,并将温度传感器显示在数码管上。
它的主要组成部分有:
STC12C5A32AD单片机、LM35模拟温度传感器、键盘与显示电路、报警指示电路。
它可以实时的显示温度,实现对温度的自动显示与控制。
采用的技术方案:
模拟温度传感器+内置A/D转换器单片机(温度传感器选用LM35),显示部分直接采用专用LED显示驱动芯片CH451实现LED驱动控制。
关键词:
设计、温度测控、硬件电路、程序、功能
一、系统总体方案设计
1、工作原理
该系统采通过LM35温度传感器采集环境温度,将保存的温度值进行转换后在4位LED数码管显示;在STC12C5A32AD单片机的低128位存储空间中设定存放即使温度的缓存区间,在子程序中通过调用该区间内的内容可以将温度值进行进一步计算;同时在缓冲区间设置连续的八位区间,保存八位数码管的数字以及字型码;当采集的环境温度平均值超出了设定值时,使其闪烁10次显示报警;另外,通过读取LM35温度传感器的序列号,进行匹配,实现测温通道的选择。
2、设计方案
应用硬件主要包括C8051F310单片机芯片、LM35温度传感器、CH451键盘显示驱动芯片。
主程序中首先对CH451初始化,并设置初始报警上下限,然后循环调用温度采集、温度转换、二进制数据转换成十进制数据、显示功能、报警功能等。
整体设计框图如图1所示。
图1:
系统整体框图
二、系统硬件设计
2.1STC12C5A32AD单片机电路
2.1.1STC12C5A32AD单片机引脚及其功能介绍
STC12C5A32AD单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位AD转换(250K/S),针对单机控制,强干扰场合。
●硬件看门狗(WDT)
●全双工异步串行口(UART),由于STC12系列单片机是高速的8051,可再用定时器或PCA软件实现多串口
●Vcc:
电源
●GND:
地
●P0口:
P0口是一个8位的双向I/O口。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
●P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,同时也是模拟量输入口,可以对8路模拟量进行模数转换。
●P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
●P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口。
P3口亦作为特殊功能口使用,如表1所示。
表1STC12C5A32AD引脚号特殊功能
P3.0
RXD(串行输入)
P3.1
TXD(串行输出)
P3.2
INT0(外部中断0)
P3.3
INT0(外部中断0)
P3.4
T0(定时器0外部输入和定时器0时钟频率输出)
P3.5
T1(定时器1外部输入和定时器1时钟频率输出)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
●RST:
复位输入,晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
●ALE:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
●XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
●XTAL2:
振荡器反相放大器的输出端。
2.1.2单片机电路STC12C5A32AD图及其原理
单片机基本条件满足:
Vdd通过一电容GND接电源地,P0.2(XAL1)P0.3(XAL2)接晶振电路实现内部时钟方式,P0.0-P0.7用作温度传感器输入端以采集各端温度,P2.0-P2.3经74LS138译码器实现对报警与指示电路的控制,P0.0(VREF)输入A/D转换的基准电压,RST口连接复位电路以实现复位操作。
其中具体电路原理图如
图2.1、单片机接线原理图
2.2传感器检测电路设计
LM35是由NationalSemiconductor所生产的温度传感器,其输出电压与摄氏温度成正比,具有10mv/℃的灵敏度,工作温度范围为4V~30V;输出阻抗为0.1Ω。
LM35温度传感器,由于它采用内部补偿,所以输出可以从0℃开始,器件有三个引脚,分别是电源负GND,电源正Vcc,信号输出端。
LM35内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。
它的使用范围包括传感放大器、直流增益模组,音频放大器、工业控制、DC增益部件和其他所有可用单电源供电的使用运算放大器的场合。
如图2.2所示
图2.2.传感器检测电路
2.3LED显示电路设计
2.3.1LED数码管引脚及其功能介绍
功能及其引脚介绍:
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮
表3段码与字节中各位对应关系
段码位
D7
D6
D5
D4
D3
D2
D1
D0
显示位
dp
g
f
E
d
c
b
a
2.3.2LED数码管显示电路及其原理
本设计采用CH451专用显示芯片进行显示器驱动,采用共阴解法,通过单片机和CH451专用显示芯片具体是数码管的某一段码置低电平从而使相应的码管段点亮,LED数码管接线如下
图2.3数码管显示电路原理图
2.3.3CH451键盘/显示器芯片引脚及其功能介绍
CH451是一内部集成数码管显示驱动键盘扫描控制的专用芯片。
内置RC振荡电路,可以直接驱动8个数码管。
CH451各引脚定义如下图:
表1CH451-24键盘/显示器芯片引脚及其功能
引脚号
引脚名称
引脚说明
2
Vcc
正电源
15
GND
电源地
4
LOAD
输入端,4线串行接口数据加载
5
DIN
输入端,串行接口输入
6
DLCK
输入端,串行时钟输入
3
DOUT
输出端,串行接口数据输入,键盘中断
1、24-18
SEG7-SEG0
输出端,高电平有效
7-14
DIG7-DIG0
输出端,低电平有效
16
RST
输出端,上电复位和看门狗复位
17
NC
不连接,禁止使用
2.3.4CH451键盘/显示器驱动电路图及其原理
CH451的段驱动引脚接200欧姆的电阻用于限制和均衡段驱动电流。
DN、DCLK、LOAD口分别与单片机的P0.5、P0.6、P0.7口直接相连实现控制作用,其中P0.6口为DLOK连接为CH451提供串行时钟信号,LOAD用于加载串行数据,CH451一般在其上升沿加载移位寄存器中饭的12位数据作为操作命令。
CH451通过8位段码对四个数码管实现控制。
图2.4CH451显示接口电路
2.4键盘电路
本设计采用独立键盘,其原理:
8个按键分别通过10K电阻与单片机相应的I/O相连,并分别通过电阻再与5V电压相连接,从而使端口再未有按键按下时为高电平。
当某一按键按下时则该端口置为低电平,单片机通过判断端口的电压确定是否有按键按下并且确定按键的位置。
图2.4独立键盘电路
2.5时钟电路及其原理
本设计采用内部时钟方式的电路产生时钟信号,在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30pF,晶振的频率取值在1.2MHz~12MHz之间。
其具体接线原理图如下图:
图2.5时钟晶振电路原理图
2.6复位电路及其原理
复位电路的原理是单片机RST引脚接收到2μS以上的电平信号,只要保证电容的充放电时间大于2μS,即可实现复位,所以电路中的电容值是可以改变的。
按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。
其原理图如下:
图2.6复位电路原理图
2.7报警与指示电路设计
该电路用到74LS138译码器其引脚及其功能如下
图2.7.174LS138译码器引脚图
71LS138有三个附加的控制端。
当输入端不为零时,输出为高电平(S=1),译码器处于工作状态。
否则,译码器被禁止,所有的输出端被封锁在高电平,。
这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。
温度检测系统多有声光报警功能,当检测温度超过上下限时,进行声光提示。
本系统在从机和主机部分均设计了报警电路。
各从机的报警上下限由主机预置,从机实时监测的过程中,一旦发现检测温度值连续超出阈值范围,便启动自身报警电路,同时向主控机发送报警信号。
其中使用74LS138译码器对八路声光电路进行控制使相应的端口置为低电平,三极管用于放大电流进而驱动放光二极管以及蜂鸣器,从而使对应的发光二极管发光,电阻用于限流。
报警电路原理如下所示:
图2.7.2报警与指示电路原理图
三、系统软件设计
3.1基本思路及原理
主程序中首先对单片机初始化,并设置初始报警上下限,然后循环调用温度采集、温度转换、二进制数据转换成十进制数据、显示功能、报警功能等。
另外,通过键盘输入,进入中断程序,通过读取LM35温度传感器的序列号,匹配正确的序列号后进行测温通道的选择。
选择单路通道后,显示当前温度值,分辨率为0.0625℃,可以通过键盘控制上下限的好修改,超过上下限闪烁报警。
整个系统循环执行温度采集、转换、显示、报警等子程序,通过中断进行数据修改和控制。
3.2子程序流程图
图3.2.1LM35初始化程序流程
3.3主程序流程图
四、结论与总结
本次设计主要利用单片机、温度传感器、A/D转换器组成多路温度测量系统,测量环境温度并将温度值显示在数码管上。
过程中通过老师的引导和自己查阅部分专业书籍,我基本了解了单片机设计的流程和部分注意事项,并大致掌握了protel99es的使用。
同时也发现很多问题,比如编程能力差,设计细节没有注意到,基础理论掌握不扎实,应用与理论严重脱节。
关于单片机设计的心得:
通过这次课程的设计,将课本的知识实际应用,摆脱考试的局限,锻炼自己的解决问题的能力,独立思考能力。
本课题使我熟悉了单片机设计原则,对51系列很简单的运用,但比为了考试而瞬时记忆的知识牢固多了,工作需要独立解决问题的的能力,还是希望多一些这样的机会。
1)单片机设计需要多方面的知识做支撑,其中传感器技术,电子技术的知识尤为重要。
2)单片机硬件硬件设计需要积累大量的相关经验以使设计的电路合理规范
3)硬件设计中对引脚的分配很关键,因为单片机引脚有限,应用时应是各引脚发挥最大作用并很好的实现功能
4)所有的设计之前都应该想清楚总体思路,否则将在设计过程中陷入混乱
5)软件设计时,流程图是基本指导思想,一定要做到细致合理有效
6)绘制电路图使整体布局比较难把握,可能需要一些经验,在以后的设计绘图时总体把握将是我需要优先考虑的
7)设计过程中,CH451还可以同时驱动键盘,由于单片机端口富余,且按键少,故采用了独立键盘方式,这样方便编程。
五、参考文献
[1]张毅刚主编·单片机原理及应用[M]·北京:
高等教育出版社,2008
[2]李道玲,李玲,朱艳编著·传感器电路分析与设计[M]·武汉:
武汉大学出版社,2003
[3]刘笃人,韩保军编著。
传感器及应用技术[M]·西安:
西安电子科技大学出版社,2003
[4]杨居义主编,单片机课程设计指导[M]·北京:
清华大学出版社,2009
[5]李群芳编著。
单片机原理、接口及应用—嵌入式系统计数基础[M]·北京:
清华大学出版社
[6]周慈航著·单片机程序设计基础[M]·北京:
北京航空航天大学出版社,2003
[7]陈小忠等,单片机接口技术实用子程序[M]·北京:
人民邮电出版社,2005
[8]方佩敏编著·智能化集成温度传感器原理与应用[M]·北京:
电子工业出版社,2002
[9]杨琢金译·C8051F310/1/2/3/4/5/8/16微控制器数据手册[M]·北京:
新华龙电子有限公司;2004.
六、附录
6.1程序源代码
ORG0000H
LJMPMAIN
;********************************************************
ORG0013H
LJMPINT_7289
;**********************************主函数*********************************
MAIN:
MOVSP,#60H
SETBCS
SETBKEY
CLRCLK
LCALLDELAY
MOV29H,#0A4H;7289复位
LCALLSEND
SETBCS
LCALLDELAY
MOVMODIF_L_L,#0
MOVMODIF_L_H,#2;默认下限
MOVMODIF_H_L,#0
MOVMODIF_H_H,#3;默认上限
MOVALARM_CONTROL,#01H;设置报警控制
SETBEA;开INT1中断
SETBEX1
SETBIT1;下降沿触发
LP1:
LCALLGET_TEMPER
LCALLTEMPER_COV
LCALLTWO_TO_TEN
LCALLDISPLAY
LCALLALARM
SJMPLP1
;********************************************************
TEMPER_LEQU46H
TEMPEREQU47H;整数
TEMPER_NUMEQU55H;缓冲单元,温度转换使用
BUFF_BLEQU36H;变量缓冲区最高位地址
FLAGBIT01H
FLAG1BIT00H
DQBITP1.5
MODIF_L_LEQU49H;下限个位
MODIF_L_HEQU4AH;下限十位
MODIF_H_LEQU4DH;上限个位
MODIF_H_HEQU4EH;上限十位
MODIF_HEQU50H;报警上限
MODIF_LEQU51H;报警下限
ALARM_CONTROLEQU43H;允许修改上下限
DINBITP1.0
CLKBITP1.1
CSBITP1.2
KEYBITP3.3
;********************************************************
TWO_TO_TEN:
;温度数据转化为十进制
MOVA,TEMPER
MOVB,#100
MOVR0,#BUFF_BL;R1中存变量缓冲区的地址
DIVAB;A/B商在A余数在B
MOV@R0,A;百位
DECR0
MOVA,B
MOVB,#10
DIVAB;A/B商在A余数在B
MOV@R0,A;十位
DECR0
MOVA,B
ADDA,#80H;加小数点
MOV@R0,A;个位
DECR0
MOVA,TEMPER_DEC;小数值
MOVDPTR,#DEC_SHI;十分位查表
MOVCA,@A+DPTR
MOV@R0,A
RET
;********************************************************
DEC_SHI:
DB0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9
DEC_BAI:
DB0,6,2,8,5,1,7,3,0,6,2,8,5,1,7,3
DEC_QIAN:
DB0,2,5,7,0,2,5,7,0,2,5,7,0,2,5,7
DEC_WAN:
DB0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5
;*************************报警子程序*******************************
ALARM:
;报警程序
MOVA,ALARM_CONTROL
CJNEA,#01H,DOWN1
MOVA,TEMPER
MOVR4,A
MOVA,MODIF_H_H
MOVB,#10
MULAB
ADDA,MODIF_H_L
MOVMODIF_H,A;保存上限
MOVA,MODIF_L_H
MOVB,#10
MULAB
ADDA,MODIF_L_L
MOVMODIF_L,A;保存下限
MOVA,R4
CJNEA,50H,NEXT1;与上限比较
NEXT1:
JNCSOUND;A大于等于上限,报警
CJNEA,51H,NEXT2;与下限比较
NEXT2:
JNCDOWN1;A大于等于下限,返回主程序
SOUND:
MOVTMOD,#10H;计数器设置初值f=1000hz
MOVTL1,#33H
MOVTH1,#0FEH
SETBTR1;启动T1
MOVR5,#5;循环5次0.128*5=0.64s
MOVR6,#0;循环256次,大致0.5ms*256=0.128s
FREQ1:
JNBTF1,$
CLRTF1
MOVTL1,#33H
MOVTH1,#0FEH
CPLP1.2;P1.2连接蜂鸣器
DJNZR6,FREQ1
DJNZR5,FREQ1
DOWN1:
RET
;*************************数码管显示子程序*******************************
DISPLAY:
;数码管显示
MOVR0,#98H
MOVR6,#11111111B
LCALLSSEGSHOW
MOVR7,#07H;显示位数
MOVR0,#0CFH;下载数据且按方式1译码
MOVR1,#30H
RECY:
MOVA,@R1
MOVR6,A
LCALLSSEGSHOW
DECR0
INCR1
DJNZR7,RECY
RET
SSEGSHOW:
MOV029H,R0;发送显示的位置
ACALLSEND
MOV029H,R6;发送显示的键值
ACALLSEND
SETBCS
RET
SEND:
MOVR2,#08H
CLRCS
ACALLDEY1
SLOOP:
MOVC,029H.7
MOVDIN,C
SETBCLK
MOVA,029H
RLA
MOV029H,A
ACALLDEY2
CLRCLK
ACALLDEY25
DJNZR2,SLOOP
CLRDIN
RET
RESE:
MOVR2,#08H
SETBDIN
ACALLDEY1
RLOOP:
SETBCLK
ACALLDEY2
MOVC,DIN
MOVA,028H
RLCA
MOV028H,A;028H存放键值
CLRCLK
ACALLDEY2
DJNZR2,RLOOP
CLRDIN
RET
;**********************************中断子程序*************************************
KEY_A:
CJNEA,#3AH,KEY_C;修改报警上限
LCALLDEY1
LCALLINT_DISPLAY
MOVR1,#11100111B
LCALLFLASH
JNBP3.3,$
LCAL