《单片机数据采集处理及显示程序设计.docx》由会员分享,可在线阅读,更多相关《单片机数据采集处理及显示程序设计.docx(9页珍藏版)》请在三一办公上搜索。
1、单片机数据采集处理及显示程序设计单片机数据采集、处理及显示程序设计 一 总体设计方案: LED初始显示为0,采用查询的方式进行键盘扫描,以确定是否有输入,不停地扫描直到有输入为止:输入为1时,按键无效,继续扫描直到再次有输入,输入为0时,则开始进行数据的采集;采集一个周期,将采集后的数据进行滤波,再求出0、1/2Vmax、Vmax,送到LED显示,结束后进行键盘扫描,确定是否有按键1输入,有则停止,无则继续进行数据采集,如此循环。 二 硬件逻辑图: 1 下图为硬件逻辑图: 2 单片机及各外设参数选择: A 单片机为8031/8051; B 采用外部时钟,振荡频率为12MHz,则机器周期为1us
2、; C 由于本实验只需0、1两个按键就能实现控制,所以采用简单的12非编码键盘; D 由于已知输入信号为幅值5V的正弦信号,并要求A/D转换的误差小于0.02V,因此,选用ADC0809,其能处理的信号为05V,不需要进行信号放大;其分辨率为8位,转换的误差为0.0196V,能满足要求;其转换时间大约为100us; E 为了保证转换精度,在信号源与ADC之间还需加一S/H,采用LF398,保持电容选择为1000PF; F 由于要显示3个数据,且小数点后保留两位有效数据,所以需要34=12个LED,本实验选用7段LED;且从左到右,依次显示0、1/2Vmax、Vmax; G 由于要求利用串行口扩
3、展接口来显示数据,所以需连接一寄存器,本实验采用串行输入、并行输出的移位寄存器:74LS164。 三 软件编写: 1 流程图如下: 本实验采用查询的方式来实现键盘的控制;在采集的过程中由于可能会有随机干扰,信号本身会在某一数值范围附近上下波动,所以采用算术平均滤波的方式进行滤波;由于输入信号最大频率为0.2Hz,选择采样周期为2Hz,即采样周期为500ms。 LED初始显示为0 是否有按键? Y 延时10ms去抖 N N 仍有按键? Y 键0?键1? 键0 键1 启动ADC 数据采集一个周期 算术平均值滤波 计算采集到的数值的最小值、中间值及最大值 显示在LED上 N 是否有按键? Y 延时1
4、0ms去抖 N 键1 2 采用汇编进行编程,具体的代码及其说明如下: ORG 0000H LJMP START ORG 0300H START: ACALL DSP1 ;初始化显示0.00、0.00、0.00 SCAN: 是否仍有按键? 键0 Y 键0?键1? 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则返回继续查询是
5、否有按键 ;按键为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 ORDE
6、R ;计算要显示的值:最小值、最大值及中间值 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 DS
7、P1: 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,L
8、1 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
9、 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
10、 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
11、,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
12、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 DO
13、NE 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,.