资源描述
单片机数据采集、处理及显示程序设计
一. 总体设计方案:
LED初始显示为0,采用查询的方式进行键盘扫描,以确定是否有输入,不停地扫描直到有输入为止:输入为1时,按键无效,继续扫描直到再次有输入,输入为0时,则开始进行数据的采集;采集一个周期,将采集后的数据进行滤波,再求出0、1/2Vmax、Vmax,送到LED显示,结束后进行键盘扫描,确定是否有按键1输入,有则停止,无则继续进行数据采集,如此循环。
二. 硬件逻辑图:
1. 下图为硬件逻辑图:
2. 单片机及各外设参数选择:
A. 单片机为8031/8051;
B. 采用外部时钟,振荡频率为12MHz,则机器周期为1us;
C. 由于本实验只需0、1两个按键就能实现控制(0实现启动,1实现关闭),所以采用简单的1×2非编码键盘;
D. 由于已知输入信号为幅值5V的正弦信号,并要求A/D转换的误差小于0.02V,因此,选用ADC0809,其能处理的信号为0—5V,不需要进行信号放大;其分辨率为8位,转换的误差为0.0196V,能满足要求;其转换时间大约为100us;
E. 为了保证转换精度,在信号源与ADC之间还需加一S/H,采用LF398,保持电容选择为1000PF;
F. 由于要显示3个数据,且小数点后保留两位有效数据,所以需要3×4=12个LED,本实验选用7段LED;且从左到右,依次显示0、1/2Vmax、Vmax;
G. 由于要求利用串行口扩展接口来显示数据,所以需连接一寄存器,本实验采用串行输入、并行输出的移位寄存器:74LS164。
三. 软件编写:
1. 流程图如下:
本实验采用查询的方式来实现键盘的控制;在采集的过程中由于可能会有随机干扰,信号本身会在某一数值范围附近上下波动,所以采用算术平均滤波的方式进行滤波;由于输入信号最大频率为0.2Hz,选择采样周期为2Hz,即采样周期为500ms。
键0
Y
N
N
键1
Y
键0
键1
Y
N
Y
N
LED初始显示为0
是否有按键?
延时10ms去抖
仍有按键?
键0?键1?
启动ADC 数据采集一个周期
算术平均值滤波
计算采集到的数值的最小值、中间值及最大值
显示在LED上
是否仍有按键?
键0?键1?
是否有按键?
延时10ms去抖
2. 采用汇编进行编程,具体的代码及其说明如下:
ORG 0000H
LJMP START
ORG 0300H
START:
ACALL DSP1 ;初始化显示0.00、0.00、0.00
SCAN:
ACALL KEXAM ;判断是否有按键
JNZ SCAN ;没按键就继续SCAN
ACALL D10ms ;去抖
ACALL KEXAM
JNZ SCAN
KEY:
SETB P1.1 ;检查键值
SETB P1.3
CLR P1.2
MOV A,P1
ANL A,#02H
CJNE A,#02H,SCAN ;按键为1则返回继续查询是否有按键
;按键为0,进入到数据采集、转换及显示
ADC:
MOV R1,#40H
MOV DPTR,#07FF8H
MOV R2,#10 ;一个周期采集10个点
L9:
MOV R0,#30H
MOV R3,#4
L10:
MOV A,#0
SETB P1.4 ;S/H保持
MOVX @DPTR,A ;启动ADC
JNB P3.3 $ ;转换结束
CLR P1.4 ;S/H采样
MOVX A,@DPTR
MOV @R0,A
INC R0
ACALL D5ms
DJNZ R3,L10
ACALL Filter ;滤波
INC R1
ACALL D500ms
DJNZ R2,L9
ACALL ORDER ;计算要显示的值:最小值、最大值及中间值
ACALL DSP2 ;显示值
;查询按键
ACALL KEXAM
JNZ ADC
ACALL D10ms
ACALL KEXAM
JNZ ADC
SETB P1.1
SETB P1.3
CLR P1.2
MOV A,P1
ANL A,#02H
CJNE A,#02H,START ;按键为1则返回开始,并显示0
AJMP ADC
;下面为子程序:
;判断是否有按键
KEXAM:
SETB P1.1
CLR P1.2
CLR P1.3
MOV A,P1
ANL A,#02H ;0000 0010
RET
;初始化显示0.00、0.00、0.00
DSP1:
MOV R0,#30H
MOV R1,#40H
MOV R2,#3
L0:
MOV R1,#0
ACALL CHANGE0 ;将R1中的值转换为有物理意义的值,存入4个R0中
ACALL CHANGE1 ;将4个R0中的值转化为能显示的数模
ACALL DPLED ;显示4个R0中的值
INC R1
DJNZ R2,L0
RET
;输出显示一个LED
DPLED:
MOV R0,#30H
MOV R4,#4
L1:
MOV R3,#8
MOV A,@R0
L2:
RLC A
MOV P3.0,C
CLR P3.1
SETB P3.1
DJNZ R3,L2
INC R0
DJNZ R4,L1
RET
;将R0中要显示的转换为字模,然后覆盖R0
CHANGE1:
MOV R0,#30H
MOV R4,#4
L3:
PUSH ACC
MOV DPTR,#TABLE
MOV A,@R0
MOV A,@A+DPTR
MOV @R0,A
INC R0
DJNZ R4,L3
RET
;标度变换:将R1中的值转换为有物理意义的值,并存入4个R0中(如将125转换为2.45V)
CHANGE0:
PUSH ACC
PUSH B
;除17
MOV A,@R1
MOV B,#11H ;除以17
DIV AB
MOV @R0,A
INC R0
MOV A,B
MOV B,#0AH
MUL AB
MOV A,B
MOV B,#11H ;除以17
DIV AB
MOV @R0,A
INC R0
MOV A,B
MOV B,#0AH
MUL AB
MOV A,B
MOV B,#11H ;除以17
DIV AB
MOV @R0,A
;除3
DEC R0
DEC R0
DEC R0
MOV A,@R0
MOV B,#03H ;除以3
DIV AB
MOV @R0,A
INC R0
MOV A,B
MOV B,#0AH
MUL AB
MOV A,B
ADD A,@R0
MOV B,#03H ;除以3
DIV AB
MOV @R0,A
INC R0
MOV A,B
MOV B,#0AH
MUL AB
MOV A,B
ADD A,@R0
MOV B,#03H ;除以3
DIV AB
;将小数点10加上
INC R0
MOV @R0,A
DEC R0
DEC R0
MOV A,@R0
INC R0
MOV @R0,A
DEC R0
MOV @R0,#10H
POP B
POP ACC
RET
;延时5ms
D5ms:
MOV R2,#0AH ;10
L4:MOV R3,#F8H ;248
L5:DJNZ R3,L5 ;248*2=496
DJNZ R2,L4 ;500*10=5000us=5ms
RET
;延时10ms
D10ms:
MOV R2,#14H ;20
L4:MOV R3,#F8H ;248
L5:DJNZ R3,L5 ;248*2=496
DJNZ R2,L4 ;500*20=10000us=10ms
RET
;延时500ms
D500ms:
MOV R2,#100
L6:MOV R3,#4
L7:MOV R4,#249
L8:NOP
NOP
NOP
DJNZ R4,L8 ;125*5=1245
DJNZ R3,L7 ;1249*4=4996
DJNZ R2,L6 ;5000*100=500000us=500ms
RET
;算术平均滤波,将得到的值存入R1中
Filter:
PUSH PSW
PUSH A
PUSH B
MOV FLAG,#00H
MOV R4,#4
MOV R0,#30H
CLR A
L11:
ADD A,@R0
JNC NEXT
INC FLAG
NEXT:
INC R0
DJNZ R4,L11
MOV R5,#4
DIVIDE:
MOV B,A
MOV A,FLAG
CLR C
RRC A
MOV FLAG A
MOV A,B
RRC A
DJNZ R5,DIVIDE
MOV @R1,A
POP B
POP A
POP PSW
RET
;将采集到的R1中的10个值进行排序,采用冒泡法
ORDER:
MOV R3,#9
L12:
MOV A,R3
MOV R4,A
MOV R1,#40H
L13:
MOV A,@R1
INC R1
CLR C
SUBB A,@R1
JC DONE
MOV A,@R1
DEC R1
XCH A,@R1
INC R1
MOV @R1,A
DONE:
DJNZ R4,L13
DJNZ R3,L12
RET
;显示R1中的值
DSP2:
MOV R1,#40H
ACALL CHANGE0 ;将R1中的值转换为有物理意义的值,存入4个R0中
ACALL CHANGE1 ;将4个R0中的值转化为能显示的数模
ACALL DPLED ;显示4个R0中的值
INC R1
MOV R3,#2
L14:
MOV R4,#4
INC R1
DJNZ R4,L14
ACALL CHANGE0 ;将R1中的值转换为有物理意义的值,存入4个R0中
ACALL CHANGE1 ;将4个R0中的值转化为能显示的数模
ACALL DPLED ;显示4个R0中的值
DJNZ R3,L14
RET
;数模表
TABLE:
DB 3FH,06H,5BH;0,1,2
DB 4FH,66H,6DH;3,4,5
DB 7DH,07H,7FH;6,7,8
DB 6FH,77H,7CH;9,10,11
DB 39H,5EH,7BH;12,13,14
DB 71H,80H ;15,.
展开阅读全文