MCS51单片机数据采集与显示系统.docx
《MCS51单片机数据采集与显示系统.docx》由会员分享,可在线阅读,更多相关《MCS51单片机数据采集与显示系统.docx(22页珍藏版)》请在冰豆网上搜索。
![MCS51单片机数据采集与显示系统.docx](https://file1.bdocx.com/fileroot1/2022-10/29/2ae8b803-33db-4f7d-b01c-e9adf760a1f4/2ae8b803-33db-4f7d-b01c-e9adf760a1f41.gif)
MCS51单片机数据采集与显示系统
数据采集与显示系统设计
说明与要求
一、本题目模拟一个数据采集和处理系统。
设原始信号为一个压力信号(压力范围为:
0~100kg),现在经过一定的模拟调理电路变为0~5V电压信号(该信号采用实验箱上的电位器模拟产生)。
现需要编程完成以下功能:
二、用实验箱上的分压电阻VR2或VR1,模拟测试信号。
信号电压的变化范围:
0~5V。
用手动调节分压值,来模拟信号的变化。
三、设计流程:
数码管显示(16进制数值)
电位器输出→ADC0809采集→数字量(二进制)→十进制→数码管显示
考虑键盘编程的完整设计任务:
a.参考硬件:
A\D转换模块,键盘接口8279及数码管显示模块。
b.设计要求:
原始信号为一个压力信号(压力范围为:
0~100kg),经过信号调理电路后输出给定可调直流电压为0~5V,经过A\D转换后,通过键盘控制在实验板的数码管上显示该压力信号的大小(十进制)。
程序设计时,要加入数字滤波程序:
即采集多个数据(可为18个,要求存放于外部的RAM中,从4100H开始存放),剔除最大值和最小值后剩下的数据求平均值。
假定:
信号值在0~1V(0~20kg)时,对象处于过低的非正常工作状态。
信号值在1~4V(20~80kg)时,对象处于正常工作状态。
信号值在4~5V(80~100kg)时,对象处于过高的非正常工作状态。
(用实验箱左下脚发光二极管分别表示)。
c.具体的要求如下:
1.程序全速运行后,数码管显示“P”字样,表示程序准备就绪。
2.按下实验板上的“0”键,数码管实时显示采样的电压值大小(小数点后两位),采样的时间自定。
例如:
如果可调的压力信号是24.6kg,在数码管上应该显示24.6G。
3.按下实验板上的“1”键,程序暂停并冻结显示的压力值。
4.如果再按下“0”键重新实时显示电压值。
5.按下其他的键,显示“error”。
6.撰写实验报告(打印)
四、实验报告包括的内容:
1、实验报告的格式和要求:
参见范本。
2、实验报告的内容:
实验目的和要求;实验原理(框)图;程序流程图(包括主程序和子程序);源程序清单。
仅供参考的程序流程图:
1.芯片8279初始化程序流程图:
保存现场
设置8279工作方式(左端输入,双键互锁)
设置8279分频系数为15,即设置了键盘扫描速率
写入清除命令字C1H或D1H用来清屏
恢复现场
开始
SP指针赋值
8279初始化
置中断状态SETBIT0;SETBEA;SETBEX0
是否有键输入
键值是否为0
启动A/D转换,同时LED显示输入电压
Y
N
Y
LED显示P
键值是否为1
AD转换停止
N
Y
LED显示EEROR
N
2.主程序流程图:
3.A\D转换子程序流程图:
4.LED显示子程序流程图:
AD转换程序:
A_DPORTEQU8100H;0809口地址
ORG0000H
LJMPSTART
ORG0003H
LJMPINT_0
ORG0040H
START:
MOVSP,#60H
MOVR7,#00H;初始化
SETBIT0
SETBEA
SETBEX0;INT0允许
A_D:
MOVR0,#00H;通道数
MOVA,R0
MOVDPTR,#A_DPORT
ORLDPL,A
MOVX@DPTR,A;启动A_D
CJNER7,#00H,$;等待A_D转换结束
MOVDPTR,#8300H
MOVA,B
MOVX@DPTR,A;数据输出
MOVR7,#0FFH;清读数标志
SJMPA_D
INT_0:
MOVXA,@DPTR;读A_D数据
MOVB,A
MOVR7,#00H;置读数标志
RETI
END
8279显示
;-------------------------------------------------------
Z8279EQU0FF82H;8279状态/命令口地址
D8279EQU0FF80H;8279数据口地址
LEDMODEQU00H;左边输入八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQEQU2FH;扫描速率
LEDCLSEQU0C1H;清除显示RAM
LEDWR0EQU80H;设定的将要写入的显示RAM地址
;-------------------------------------------------------
ORG0000H
AJMPSTART
ORG001BH;INTT1入口地址
AJMPINT_T1
ORG0040H
START:
MOVSP,#60H
LCALLINIT8279;初始化8279
MOVR3,#0H;时
MOVR2,#0H;分
MOVR1,#0H;秒
MOVR6,#0H;标志
MOVTMOD,#10H
MOVTL1,#00H;50mS的时间常数
MOVTH1,#04CH
MOVR0,#20
SETBTR1
SETBET1
SETBEA;允许中断
WAIT:
CJNER6,#0FFH,WAIT
LCALLDISPLAY
MOVR6,#0
SJMPWAIT
INIT8279:
;8279初始化子程序
PUSHDPH;保存现场
PUSHDPL
PUSHACC
LCALLDELAY;延时
MOVDPTR,#Z8279
MOVA,#LEDMOD;置8279工作方式
MOVX@DPTR,A
MOVA,#LEDFEQ;置键盘扫描速率
MOVX@DPTR,A
MOVA,#LEDCLS;清除LED显示
MOVX@DPTR,A
LCALLDELAY;延时
POPACC;恢复现场
POPDPL
POPDPH
RET
;显示字符子程序
;输入:
R4,位置R5,值
DISLED:
PUSHDPH;保存现场
PUSHDPL
PUSHACC
MOVA,#LEDWR0;置显示起始地址
ADDA,R4;加位置偏移量
MOVDPTR,#Z8279
MOVX@DPTR,A;设定显示位置
MOVDPTR,#LEDSEG;置显示常数表起始位置
MOVA,R5
MOVCA,@A+DPTR;查表
MOVDPTR,#D8279
MOVX@DPTR,A;显示数据
POPACC;恢复现场
POPDPL
POPDPH
RET
DELAY:
;延时子程序
PUSH0;保存现场
PUSH1
MOV0,#0H
DELAY1:
MOV1,#0H
DJNZ1,$
DJNZ0,DELAY1
POP1;恢复现场
POP0
RET
INT_T1:
;INT_T1中断服务子程序
PUSHDPH;保护现场
PUSHDPL
PUSHACC
PUSHPSW
CLRTR1
MOVTL1,#00H;50mS定时常数
MOVTH1,#4CH
SETBTR1
DJNZR0,EXIT;判断毫秒=0
MOVR0,#20;DELAY1SECOND
MOVR6,#0FFH;置秒标志
CJNER1,#59H,SECOND;判断秒=59
MOVR1,#99H
CJNER2,#59H,MINUTE;判断分=59
MOVR2,#99H
CJNER3,#23H,HOUR;判断时=23
MOVR3,#99H
HOUR:
MOVA,R3
ADDA,#1;时加1
DAA
MOVR3,A
MINUTE:
MOVA,R2
ADDA,#1;分加1
DAA
MOVR2,A
SECOND:
MOVA,R1
ADDA,#1;秒加1
DAA
MOVR1,A
EXIT:
POPPSW;恢复现场
POPACC
POPDPL
POPDPH
RETI;中断返回
DISPLAY:
MOVA,R3
ANLA,#0FH
MOVR5,A
MOVR4,#6
LCALLDISLED;显示小时低位
MOVA,R3
SWAPA
ANLA,#0FH
MOVR5,A
MOVR4,#7
LCALLDISLED;显示小时高位
MOVA,R2
ANLA,#0FH
MOVR5,A
MOVR4,#3
LCALLDISLED;显示分钟低位
MOVA,R2
SWAPA
ANLA,#0FH
MOVR5,A
MOVR4,#4
LCALLDISLED;显示分钟高位
MOVA,R1
ANLA,#0FH
MOVR5,A
MOVR4,#0
LCALLDISLED;显示秒低位
MOVA,R1
SWAPA
ANLA,#0FH
MOVR5,A
MOVR4,#1
LCALLDISLED;显示秒高位
RET
LEDSEG:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;'0,1,2,3,4,5,6,7'
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F'
DB6DH,02H,08H,00H,59H,0FH,76H;'U,-,_,,I,O,P,'
END
键盘显示(电子秒表)
;-------------------------------------------------------
Z8279EQU0FF82H;8279状态/命令口地址
D8279EQU0FF80H;8279数据口地址
LEDMODEQU00H;左边输入八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQEQU2FH;扫描速率
LEDCLSEQU0C1H;清除显示RAM
LEDWR0EQU80H;设定的将要写入的显示RAM地址
READKBEQU40H;读FIFORAM地址0的命令字
;-------------------------------------------------------
ORG0000H
AJMPSTART
ORG001BH;INTT1入口地址
AJMPINT_T1
ORG0040H
START:
MOVSP,#60H
LCALLINIT8279;初始化8279
MOVR3,#0H;时
MOVR2,#0H;分
MOVR1,#0H;秒
MOVR0,#0H;10毫秒
MOVR6,#0FFH;标志
MOVTMOD,#10H
MOVTL1,#00H;10毫秒的时间常数
MOVTH1,#0DCH
LCALLDIS_mS
SETBET1
SETBEA;允许中断
WAIT:
LCALLGETKEY