机电课程设计温度巡回检测仪1Word文档下载推荐.docx
《机电课程设计温度巡回检测仪1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《机电课程设计温度巡回检测仪1Word文档下载推荐.docx(39页珍藏版)》请在冰点文库上搜索。
![机电课程设计温度巡回检测仪1Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/b0da48f7-2df4-4267-95b7-3c7359b10c51/b0da48f7-2df4-4267-95b7-3c7359b10c511.gif)
总体来说需要四大模块:
测量模块、显示模块、键盘模块、时钟模块
整体硬件结构如下:
总电路图见下图:
三.硬件功能与设计
3.1CPU
根据要求选用MCS-8031单片机,由于没有内置ROM,内部RAM存储量也较小,所以添加一块片外ROMEPROM2732(12位,4K),以及一块片外RAM6264(13位,8K),通过74LS373锁存器和单片机连接
接线图如下:
3.2检测模块
(1)温度传感器
本设计中采用的温度传感器是LM35,它具有很高的工作精度和较宽的线性工作范围,它的输出电压与摄氏温度成比例。
LM35无需外部校准,可以提供±
0.25℃的常用室温精度。
该传感器在25℃时,输出电压为0.25V,随着室温的升高,输出电压与温度成线性关系,因此可以根据得到的电压值计算出温度。
(2)LM35工作特性:
比例因子:
10MV/℃测量范围:
-55℃—150℃
工作电压:
4V—30V精度:
0.5℃
由于A/D转换器选用的是ADC0809,输入模拟电压为0—5V,数字量是28,为了提高温度的转换精度,本设计选定温度传感器的测量范围是0℃—125℃
(3)放大电路
采用的是LM324运算放大器。
LM324可采用单极性或者双极性电源供电,可以在0~+5V下工作,它内部集成了四个运放模块,它的输入端是温度补偿的。
温度/℃
LM输出电压/V
ADC0809输入模拟电压/V
25
0.25
1
50
0.5
2
75
1.75
3
100
4
125
1.25
5
放大电路如下图:
(4)A/D转换器
A/D转换器选用ADC0809。
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和微机直接接口。
A.引脚结构:
ADC0809采用双列直插式封装,共有28条引脚。
其引脚结构图如下图所示。
B.地址输入和控制线:
4条
ALE为地址锁存允许输入线,高电平有效。
当ALE现为高电平时,地止锁存与译码器将ADDA、ADDB和ADDC三条地址输入线,用于选通IN0~IN7上的一路模拟量输入。
通道选择如下表所示。
ADDC
ADDB
ADDA
选择的通道
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
C.数字量输出及控制线:
11条
START为转换启动信号。
当START上升沿时,所有内部寄存器清零;
下跳沿时,开始进行A/D转换;
在转换期间,START应保持低电平。
EOC位转换结束信号。
当EOC为高电平时,表明转换结束;
否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三态输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;
OE=0,输出数据线呈高阻状态。
D7~D0位数字数出线。
电路图如下:
3.3显示模块
数码管是一种在单片机系统中广泛使用的数字显示输出装置。
对于数码管的驱动控制一般有两种方式,即静态驱动和动态驱动。
静态驱动中硬件开销大,成本高,电路板面积增大,布线复杂;
动态驱动中一般只需一块驱动芯片,多个数码管以极高的频率逐个选通,显示相应的数字,它优点在于硬件电路大大简化。
本电路中使用6个LED共阴数码管显示,格式为,小时:
分钟:
秒或,通道温度
LED动态显示数码管通过8155可编程并行I/O扩展(占用8155的PA与PB口)
3.4键盘输入模块
采用3*3的矩阵式键盘,各行分别接P1.3,P1.4,P1.5,各列分别接P1.0,P1.1,P1.2
设有9个按钮,1-8为通道号,9为返回
3.5时钟模块
本电路中采用的是时钟芯片DS1302,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,按要求只需时、分、秒进行计时。
工作电压为2.5V~5.5V,对采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×
8的用于临时性存放数据的RAM寄存器。
其中Vcc1为后备电源,VCC2为主电源。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
四.软件设计
4.1主程序
流程图见右:
N
Y
4.1主程序:
ORG0000H
SJMPSTART
ORG0003H
AJMPINTR0
ORG0040H
START:
MOVA,#0C7H;
开放行(行输出全为0)
MOVP1,A
CLRP3.3
CLRIT0;
电平触发
MOVIE,#81H;
开放INT0中断
MOV30H,#00H;
设定时钟初值
MOVSECOND,#00H
MOVMINUTE,#00H
MOVHOUR,#12H
LCALLSET1302
LCALLGET1302
LCALLDISPLAY
MAIN:
MOVR5,#25
MOVTMOD,#01H
MOVTH0,#63H;
置定时器初值(定时40ms)
MOVTL0,#0C0H
SETBTR0;
启动定时器0
LP1:
MOVA,30H
JNZSHOWTEM
JBCTF0,LP2;
查询计数溢出
SJMPLP1;
未到40ms继续计数
LP2:
MOVTH0,#63H;
重新置定时器初值
LCALLDISPLAY;
显示
DJNZR5,LP1;
未到1S继续循环
LCALLGET1302;
每过1s从DS1302读取一次时间
MOVR5,#25
SJMPLP1
SHOWTEM:
JZLP1
4.2时钟显示程序:
T_CLKBitP3.4;
实时时钟时钟线引脚
T_IOBitP3.5;
实时时钟数据线引脚
T_RSTBitP3.1;
实时时钟复位线引脚
SECONDEQU50H;
秒寄存器
MINUTEEQU51H;
分寄存器
HOUREQU52H;
时寄存器
DISPLAY:
MOVDPTR,#7FFFH
MOVA,#80H
MOVX@DPTR,A;
设置8255控制字
MOVR3,SECOND
LCALLCHAG
MOVDPTR,#7FFDH
MOVA,#0FEH
MOVX@DPTR,A
MOVDPTR,#7FFCH
MOVA,R2
MOVX@DPTR,A
LCALLDELAY
MOVA,#0FDH
MOVA,R3
MOVX@DPTR,A
LCALLDELAY
MOVR3,MINUTE
LCALLCHAG
MOVDPTR,#7FFDH
MOVA,#0FBH
MOVDPTR,#7FFCH
MOVA,R2
LCALLDELAY
MOVA,#0F7H
MOVX@DPTR,A
MOVA,R3
MOVR3,HOUR
MOVA,#0EFH
MOVX@DPTR,A
MOVA,#0DFH
RET
DELAY:
MOVR7,#50
D1:
MOVR6,#10
D2:
DJNZR6,$
DJNZR7,D1
RET
CHAG:
PUSHACC;
低字节放入R2,高字节放入R3
MOVA,R3
ANLA,#0FH
MOVR2,A
SWAPA
MOVR3,A
MOVDPTR,#DATATAB
MOVA,R2
MOVCA,@A+DPTR
POPACC
DATATAB:
DB0B7H,90H,3DH,0B9H,9AH,0ABH,0AFH,0B0H,0BFH,0BBH
SET1302:
CLRT_RST
CLRT_CLK
SETBT_RST
MOVB,#8EH;
控制寄存器
LCALLRTInputByte
MOVB,#00H;
写操作前WP=0
SETBT_CLK
CLRT_RST
MOVR0,#Second;
MOVR7,#7;
MOVR1,#80H;
秒写地址
S13021:
CLRT_CLK
SETBT_RST
MOVB,R1;
写秒分时
MOVA,@R0;
写秒数据
MOVB,A
INCR0
INCR1
DJNZR7,S13021
MOVB,#80H;
控制,WP=1,写保护
RET
GET1302:
MOVR0,#SECOND;
MOVR7,#7
MOVR1,#81H;
秒地址
G13021:
CLRT_CLK
SETBT_RST
MOVB,R1;
秒分时
LCALLRTInputByte
LCALLRTOutputByte
MOV@R0,A;
秒
INCR0
INCR1
SETBT_CLK
CLRT_RST
DJNZR7,G13021
RET
RTInputByte:
MOVR4,#8
Inbit1:
MOVA,B
RRCA
MOVB,A
MOVT_IO,C
DJNZR4,Inbit1
RTOutputByte:
Outbit1:
MOVC,T_IO
DJNZR4,Outbit1
4.3键码检测
流程图见下:
键盘程序:
INTR0:
LACALLDELAY;
延时去抖
MOVA,P1;
读取P1口列值
ANLA,0C7H
CJNEA,#0C7H,SKEY;
判断是否有键闭合,有转SKEY键盘扫描
AJMPFINISH;
无键闭合,返回
SKEY:
MOVA,#00H;
行扫描
MOVR0,A;
R0作为行计数器,开始为0
MOVR1,A;
列计数器
MOVR3,#0DFH;
R3为行扫描字暂存
SKEY2:
MOVP1,A;
输出行扫描字
NOP
NOP;
三个nop操作使P1口输出稳定
MOVA,P1;
读列值
暂存列值
ANLA,#OC7H;
取列值
CPLA;
高电平则有键闭合
JNZSKEY3;
有键按下转SKEY3,无则进行下一行扫描
INCR0;
行计数器加一
SETBC;
为行扫描字右移做准备
MOVA,R3
RRCA;
带进位C右移
MOVR3,A;
形成下一行扫描字
MOVA,R0
CJNEA,#03H,SKEY2;
共需扫描3行
AJMPFINISH
列号译码
SKEY3:
MOVA,R1
JNBACC.2,SKEY4
JNBACC.1,SKEY5
JNBACC.0,SKEY6
SKEY4:
MOVA,#01H
MOVR2,A;
存1列号
AJMPDKEY
SKEY5:
MOVA,#02H
存2列号
SKEY6:
MOVA,#03H
存3列号
键位置译码
DKEY:
MOVA,R0;
取行号
ACALLDECODE;
MOVDPTR,#TABLE1
CLRC
SUBBA,#01H
RLA
JMP@A+DPTR
TABLE1:
ACALLAA
ACALLBB
ACALLCC
ACALLDD
ACALLEE
ACALLFF
ACALLGG
ACALLHH
ACALLII
FINISH:
RETI
键号译码
DECODE:
MOVA,R0;
取行号送A
MOVB,#03H;
每行按键个数
MULAB;
行号*按键数
ADDA,R2;
行号*按键数+列号=键号,存在A中
延时
MOVR7,#18H
TM:
MOVR6,#0FFH
TM1:
DJNZR6,TM1
DJNZR7,TM
4.4温度采集:
温度采集程序:
AA:
MOVR0,#00H;
数值采集
MOVR1,#00H
MOVR2,#08H
MOVDPTR,#0BFF8H
LP4:
MOV@DPTR,A
ACALLDELAY
JNBP3.3,LP1
MOVXA,@DPTR
ADDA,R1
JNCLP3
INCR0
LP3:
MOVR1,A
DJNZR2,LP4
MOVR2,#03H
LP5;
MOVA,R0
RRCA
MOVR0,A
MOVA,R1
DJNZR2,LP5
MOV30H,#01H
MOV31H,R1
RET
4.5温度数值的转化
温度转化程序:
MOVA,31H;
温度数值转化
MOVB,#7
MULAB
MOVB,#17
DIVAB
MOVR1,A
MOVA,B
MOVB,#10
MULAB
MOVB,#17
DIVAB
MOV32H,A;
小数后一位放于32H
MOV31H,R1;
结果存放31H
MOVB,#100
MOVA,31H
MOV73H,A;
温度的百位
MOV72H,A;
温度的十位
MOV71H,B;
温度的个位
MOV70H,32H;
温度的十分位
MOV75H,30H;
通道数
4.6温度的显示
程序:
MOVDPTR,#7FFFH
MOVA,#80H
MOVX@DPTR,A;
MOV