MOV R0,#40H MOV R2,#10H MOV R3,#WSLA
LCALL WRNBYT LCALL DELAY LCALL FLASH4 MOV A,R1 ADD A,R5 ADD A,R6 MOV 60H,A JB P3.2,$
LCALL
RDKEY
CJNEA,#0FH,$ DOWN: CLR IE0
POP PSW POP ACC POP 07H POP 06H POP 05H POP 04H POP 03H POP 02H POP 01H
POP 00H
RETI FLASH1:
MOV 48H,#70H MOV 49H,#07H MOV 50H,#00H MOV R7,#02H MOV R0,#48H MOV R2,#07H
MOV
R3,#WSLA LCALL WRNBYT MOV R7,#01H MOV R0,#50H MOV R2,#0CH MOV R3,#WSLA LCALL WRNBYT
RET
FLASH2:
MOV 48H,#70H MOV 49H,#03H
;7290数字显示 ;不闪烁
;处理输入的数据,全部相加 ;A赋值给60H
;以查询的方式等待下一次按键操作;读取第五个按键值(功能键) ;判断是F键吗?不是等待 ;清标志
;后三位闪烁 ;后两位闪烁
MOV MOV MOV MOV MOV
50H,#00H R7,#02H R0,#48H R2,#07H R3,#WSLA WRNBYT R7,#01H R0,#50H R2,#0CH R3,#WSLA WRNBYT
LCALL MOV
MOV MOV MOV LCALL RET
FLASH3:
MOV 48H,#70H ;最后一位闪烁 MOV MOV
MOV MOV MOV MOV LCALL
49H,#01H 50H,#00H R7,#02H R0,#48H R2,#07H R3,#WSLA WRNBYT R7,#01H R0,#50H R2,#0CH R3,#WSLA WRNBYT
MOV MOV MOV MOV
LCALL RET
FLASH4:
MOV 48H,#70H ;不闪烁 MOV 49H,#00H
MOV MOV MOV MOV MOV LCALL MOV MOV MOV LCALL
50H,#00H R7,#02H R0,#48H R2,#07H R3,#WSLA WRNBYT R7,#01H R0,#50H R2,#0CH R3,#WSLA WRNBYT
MOV
RET
;********************************************************* ;读键值子程序 (;出口参数累加器A---获取到的键值)
;********************************************************* RDKEY:
MOV MOV MOV
MOV MOV LCALL MOV DEC
R0,#1FH R7,#01H R2,#01H R3,#WSLA R4,#RSLA RDADD A,1FH A
;键值缓冲单元
;取一个数据(键值)
;指向内部数据键值寄存器地址 ;取器件地址(写) ;取器件地址(读)
;读出7290的01H单元中的键值 ;取健值送缓冲单元
RET
;******************************************************* ;相关I2C子程序
;*******************************************************
END
9 系统调试运行结果说明、分析所出现得问题,设计体会与建议
以AT89C51为核心、利用DP-51PROC单片机综合仿真实验仪、采用“在线仿真、调试”的模式实现上述功能;软件环境为Keil uVision2;设计语言为汇编语言。实验结果为,当进入调试环境,数码管显示“adc=***”(***即0-255之间的数),通过旋转电位器,即可改变电压值,显示也随之改变;当模拟量大于100时,蜂鸣器报警;按键盘区S15(E)功能键进入键值修改,数码管后三位闪烁显示当前报警值,按顺序按下三个键值,每按一位数码管对应显示,全部按完,按S16(F)键,即修改成功,并回显之前的模拟量,此时键值已经改变。调试结果正常,与设计方案一致。