资源描述
《单片机数据采集控制系统》课程设计报告
一、前言
通常是指有若干相互连接、相互作用的基本电路组成的具有特定功能的电路整体。由于大规模集成电路和模拟-数字混合集成电路的大量出现,在单个芯片上可能集成许多种不同种类的电路。
二、课程设计的目的和要求
2.1、课程设计的目的
运用模拟电子技术、数字电子技术、单片机原理及其应用等课程知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识的理解, 把学过的比较零碎的知识系统化,比较系统的学习开发单片机应用系统的基本步骤和基本方法,使学生应用知识能力、设计能力、调试能力以及报告撰写能力等有一定的提高。
2.2、课程设计要求
用8051单片机设计数据采集控制系统,基本要求如下:
1、 可实现8路数据的采集,假设8路信号均为0-5V的电压信号;
2、 采集数据可通过数码管显示,显示格式为:[通道号] 电压值,如 [01] 4.5
3、 可通过键盘设置采集方式;(单点采集、多路巡测、采集时间间隔*)
4、 具有异常数据声音报警功能:对第一路数据可设置正常数据的上限值和下限值,当采集的数据出现异常,发出报警信号。(LED显示报警)
5、 可输出8路顺序控制信号,设每路顺序控制信号为一位,顺序控制的流程为:
三、总体设计
八路数据采集模块
显示模块
键盘模块
报警模块
八路顺序控制模块
8051单片机
实验原理:从A/D转换器入手,通过编程,实现硬件上的八路数据采集、采集数据显示、通过键盘设计采集、实现上下限的报警功能、八路顺序控制信号。
四、硬件设计
4.1各种芯片的功能、引脚、相应的命令控制字格式的介绍
1、MCS-51
芯片介绍:MCS-51系列单片机是美国Intel公司开发的8位单片机又可以分为多个子系列。MCS-51系列单片机共有40条引脚,包括32条I/O接口引脚、4条控制引脚、2条电源引脚、2条时钟引脚。
引脚说明: P0.0~P0.7:P0口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时的地址/数据复用口。
P1.0~P1.7:P1口8位口线,通用I/O接口无第二功能。
P2.0~P2.7:P2口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时传送高8位地址。
P3.0~P3.7:P3口8位口线,第一功能作为通用I/O接口,第二功能作为为单片机的控制信号。
ALE/ PROG:地址锁存允许/编程脉冲输入信号线(输出信号)
PSEN:片外程序存储器开发信号引脚(输出信号)。
EA/Vpp:片外程序存储器使用信号引脚/编程电源输入引脚
RST/VPD:复位/备用电源引脚。
2、74LS373
芯片介绍:74LS373是带有三态门的八D锁存器,当使能信号线OE为低电平时,三态门处于导通状态,允许1Q-8Q输出到OUT1-OUT8,当OE端为高电平时,输出三态门断开,输出线OUT1-OUT8处于浮空状态。G称为数据打入线,当74LS373用作地址锁存器时,首先应使三态门的使能信号OE为低电平,这时,当G端输入端为高电平时,锁存器输出(1Q-8Q)状态和输入端(1D-8D)状态相同;当G端从高电平返回到低电平(下降沿)时,输入端(1D-8D)的数据锁入1Q-8Q的八位锁存器中。当用74LS373作为地址锁存器时,它们的G端可直接与单片机的锁存控制信号端ALE相连,在ALE下降沿进行地址锁存。
引脚说明: D0~D7:锁存器8位数据输入线 Q0~Q7:锁存器8位数据输出线
GND:接地引脚 Vcc:电源引脚,+5V有效 OE :片选信号引脚 G:锁存控制信号输入引脚
3、74LS138
芯片介绍:74LS138是一个3-8译码器,共16个引脚。
引脚说明:A、B、C:选择端即信号输入端
E1、E2、E3:使能端,其中E1、E2低电平有效,E3高电 平有效
Y0~Y7:译码输出信号,始终只有一个为低电平
Vcc:电源端,+5V
GND:线路地
4、ADC0809
芯片介绍:ADC0809是一种比较典型的8位8通道逐次逼近式A/D转换器,CMOS工艺,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路,其转换时间为100μs左右,采用双排28引脚封装。
引脚说明: IN0~IN7:8路模拟量输入通道
ADDA~ADDC:地址线用于选择模拟量输入通道
ALE:地址锁存允许信号
START:转换启动信号
D0~D7:数据输出线
OE:输出允许信号,低电平允许转换结果输出
CLOCK:时钟信号输入引脚,通常使用500KHz
EOC:转换结束信号,为0代表正在转换,1代表转换结束
Vcc:+5V电压
VREF(+)、VREF(-):参考电压
5、DAC0832
芯片介绍:DAC0832是美国数据公司的8位D/A转化器,片内带数据锁 存器,电流输出,输出电流稳定时间为1μm,功耗为20mW。
引脚说明:D0~D7:数据输入线,TTL电平
ILE:数据锁存允许控制信号线
CS:片选信号线,低电平有效
WR1:数据锁存器写选通输入线,负脉冲有效
XFER:数据传输控制信号输入线,低电平有效
WR2:DAC寄存器写选通输入线,低电平有效
IOUT1:电流输出线,当DAC寄存器为全1时电流最大
IOUT2:电流输出线,其值与IOUT1之和为一常数
Vcc:电源电压线,为+5V~+15范围
VREF:基准电压输入线,范围为:-10V~+10V
AGND:模拟地
DGND:数字地
Rfb:反馈信号输入线,调整Rfb端外接电阻值可以调整转换满量程精度
4.2绘出硬件接线图
五、软件设计
5.1程序流程图
开始
判按键
若为0~7,即为通道号
若为A开始循环采集
报警
N
LED显示通道号和电压值
系统初始化
判断电压值是否正常
主程序流程图
5.2主程序、子程序、中断服务程序
附录一
ORG 0000H
LJMP SE11
ORG 000BH
LJMP INTT0
ORG 0100H
SE11: MOV SP,#53H
MOV 7EH,#10H
MOV 7DH,#00H
MOV 7CH,#01H
MOV 7BH,#11H
MOV 7AH,#10H
MOV 79H,#10H ;显示缓冲区初值
MOV R6,#00H
MOV R4,#00H
MOV 60H,#00H
MOV 30H,#30H
MOV TMOD,#01H
MOV TL0,#0DCH
MOV TH0,#0CH
SETB EA
SETB ET0
LO18: CALL DIS
MOV A,R4 ;ADC0809内部模拟开关 (可以改读取通道)
MOV DPTR,#0FFE0H ;A4A3A2 000 选通Y0
MOVX @DPTR,A ;0809的0通道采样
L9:
CALL DIS ;显示
MOV 7CH,R4
MOVX A,@DPTR ;取出采样值 A = 00-FF
MOV R0,#79H
CALL PTDS ;采样值送显示缓冲区
CALL DIS
CALL GetKey
SJMP LO18 ;循环
PTDS: MOV B,#33H
DIV AB
SWAP A
MOV R5,A
MOV A,B
MOV B,#05H
DIV AB
ORL A,R5
DA A
MOV R1,A ;拆送显示缓冲区
JMP NO1
NO: ADD A,R1 ;把电压值的整数位和小数位加起来
MOV R1,A
;------------------------------- ;报警子程序
NO1: CJNE R1,#40H,MAX1 ;判断上线电压值,大于4V,LED1灯亮
MAX1: JC MAX2
CLR P3.0
MAX2: JNC NO2
SETB P3.0
NO2: CJNE R1,#10H,MIN1 ;判断下线电压值,小于1V,LED2灯亮
MIN1: JNC MIN2
CLR P3.1
MIN2: JC NO3
SETB P3.1
NO3: ACALL PTDS1
MOV A,R1
SWAP A
PTDS1: ANL A,#0FH
MOV @R0,A
INC R0
RET
DIS: PUSH DPH
PUSH DPL
SETB RS1
MOV R0,#7EH
MOV R2,#20H
MOV R3,#00H
MOV DPTR,#LS0
LS2: MOV A,@R0
MOVC A,@A+DPTR
CJNE R0,#7AH,AA
ANL A,#7FH
AA: MOV R1,#0DCH
MOVX @R1,A
MOV A,R2
inc R1
MOVX @R1,A
LS1: DJNZ R3,LS1
CLR C
RRC A
MOV R2,A
DEC R0
JNZ LS2
movx @r0,a
dec r0
cpl a
movx @r0,a
CLR RS1
POP DPL
POP DPH
RET
GetKey: call ScanKey
MOV R5,A
CJNE R5,#20H,BIAN ;R5标志位用于判断前后值是否变化
SJMP XUAN ;若R5无变化,则转至XUAN,保持原先的通道模式
BIAN: CLR TR0
MOV 40H,R5 ;R5有变化,选择变化后的通道
MOV R4,40H ;R4为渠道的选通值
MOV R6,40H ;R6用于判断选通
XUAN: SETB C
CJNE R6,#8,QING ;判断选择的通道是0-7:cy = 1,还是8-F:cy = 0。
QING: JC LO20 ;若通道为0-7,转至Lo20,保持原先的通道;
CJNE R5,#20H,QING1 ;判断通道8-F的通道值是否有变化;若无变化,则原先的通道递增模式,继续执行
SJMP XUN
QING1: MOV R4,#0FFH ;用于清零。
SJMP XUN
XUN: SETB TR0
MOV R4,60H
LO20: ret ;子程序返回
ScanKey:setb RS1
mov r2,#0feh ;列扫描
mov r3,#08h ;列扫描的次数
mov r0,#00h ;扫描到的列号值
LoopS: mov r1,#0DDH ;列扫描入口FFDDH
mov a,r2
movx @r1,a ;开始列扫描
rl a
mov r2,a
inc r1 ;键入口地址FFDEH
movx a,@r1 ;读取行信息
cpl a
anl a,#0fh ;无按键A=0,有按键A!=0
jnz Scan
inc r0
djnz r3,LoopS
ReTKey3:mov a,#20h
TKey3: mov r2,a
clr a
mov r1,#0DDH
movx @r1,a
mov a,r2
clr RS1
ret
Scan: cpl a
jb acc.0,TKey0
mov a,#00h
sjmp EndLoop
TKey0: jb acc.1,TKey1
mov a,#08h
sjmp EndLoop
TKey1: jb acc.2,TKey2
mov a,#10h
sjmp EndLoop
TKey2: jb acc.3,ReTKey3
mov a,#18h
EndLoop:add a,r0 ;a为行号值(头):00,08,10,18
sjmp TKey3
INTT0: PUSH ACC
PUSH PSW
SETB PSW.3
MOV TL0,#0DCH
MOV TH0,#0CH
MOV A,30H
DEC A
MOV 30H,A
JNZ RET0
MOV A,60H
INC A
CJNE A,#00H,D0
MOV 30H,#30H
D0: CJNE A,#01H,D1
MOV 30H,#30H
D1: CJNE A,#02H,D2
MOV 30H,#60H
D2: CJNE A,#03H,D3
MOV 30H,#10H
D3: CJNE A,#04H,D4
MOV 30H,#10H
D4: CJNE A,#05H,D5
MOV 30H,#10H
D5: CJNE A,#06H,D6
MOV 30H,#10H
D6: CJNE A,#07H,D7
MOV 30H,#60H
D7: MOV 60H,A
CJNE A,#08H,RET0
MOV A,#00H
MOV 60H,A
MOV 30H,#30H
RET0: POP PSW
POP ACC
RETI
LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0C6H,0F0H
END
六、实验数据
七、结束语
这次的课程设计是一次全面的综合性质的课程设计,让我们温习了前面所学的知识,并且能好好地实践。
我们从中也学会了很多,懂得了很多。比如构思,一开始在做如何把显示的范围缩小到0到5。我们的想到了先把要显示的数据除以51,再用余数去除以5.1,前后所得的数据分别是高位和地位要显示的数据。可是除以5.1不容易做到,通过老师的提点,我们知道了可以通过把5.1近似看作5来处理,这样编写起来就容易多了。这着实让我们增长了不少经验。
当8路循环实现之后,我们的显示又出现了一个小问题,那就是显示的时候,总会有一瞬间数码管全亮了,也就是意味着有一瞬间它们获得的信号都是低电平,说明程序里面有漏洞。后来通过同学的帮助,检查出来是push和pop的时候,没有注意先进后出这一规则。
还有很多经验获得,比如我们的循环原来做出来是无法用延时,后来经过老师的提点,我们修改了程序,使得通过延时循环显示同一通道,这样也就不会跳的太快。
这次的课程设计真的让我们收获颇丰,比课堂上讲的内容丰富多了,好掌握多了。其实实践课多点帮助比较大。对于帮助我们对知识的理解和掌握起到了很大的效果。
展开阅读全文