第 21 页
图3.5找钱及显示功能驱动程序流程图
由找钱系统1图(图见附录)我们可以看到该芯片8255A的CS与8751的P2.6相连,A0、A1分别与74LS373的3Q、4Q相连。
当的3Q、4Q输出不同组合时,则控制选择了8255A的PA、PB、PC口,当取00时对应PA口输入输出,当取01时对应PB口输入输出,当取10时对应PC口输入输出;由于也受到P2.6的控制,只有当P2.6输出为0时,才能片选到该芯片8255A。
最后我们可以计算得出PA、PB、PC及控制口对应的地址分别为BFF3H、BFF7H、BFFBH、和BFFFH。
3.5出错报警系统流程图
第 22 页
图3.6报警功能驱动程序流程图
由找钱系统1图(图见附录)我们可以看到该芯片8255A的CS与8751的P2.6相连,A0、A1分别与74LS373的3Q、4Q相连。这个已经在上一章中已经说过了,在这里就不再画了。
当的3Q、4Q输出不同组合时,则控制选择了8255A的PA、PB、PC口,当取10时对应PC口输入输出;由于也受到P2.6的控制,只有当P2.6输出为0时,才能片选到该芯片8255A。
最后我们可以计算得出PA、PB、PC及控制口对应的地址分别为BFF3H、BFF7H、BFFBH、和BFFFH。
第 23 页
第四章.系统软、硬件设计实现
4.1驱动程序
由于时间关系,本次毕业设计的仿真结果就不再这里做详细的介绍了,现列出各软件的驱动程序如下:
4.1.1实现有效投币定时30秒以及累加计数程序:
ORG
1000H MONEY DATA 2000H MOV IE, #8AH MOV TMOD,#04H 作方式0
MOV TH0,#00H MOV TL0,#00H MOV TH1,#9EH MOV TL1,#58H SETB TR0 SETB TR1
;启动计数器 ;启动定时器
;置计数初值
;置计数初值
;设置T1为定时工作方式0,T0为计数工
MOV R0,#601
LOOP1:
DJNZ R0,T1_END MOV A,P3 JBC
LP1:
ACC.5,LP1
TF1,NEXT
;查询计数溢出
;循环600次,实现30秒计时
JBC
SJMP LP1
NEXT:
MOV TH1,#9EH MOV TL1,#58H JMP
T1_END:
LOOP1
;重新设置计数初值
MOV R1,TL0
;将投入的货币累加数存入MONEY
MOV MONEY,R1
第 24 页
CLR A
MOV TL0,A MOV TH0,A RET
4.1.2货物选择系统的驱动程序 VULE EQU
40H
MOV A,MONEY MOV B,A SJMP KEY
KEY:
MOV R2,#0FEH
P1,#0F0H
;设置键码寄存器 ;设置初始扫描码 ;全扫描行线
ANL
MOV A, P1 CPL A ;取反
ANL
JZ
A,#0F0H
;屏蔽回扫值低4位
;无键闭合,返回
KEY3
LCALL D10MS ;延时10ms去抖动 MOV R3,#04H ;设置扫描行数 ORL P1,#0FH4 ;位描行线全置高 KEY1: MOV P1,R2 ;逐行扫描键盘
MOV A,P1 ;读入状态值 CPL A ;取反 ANL
A,#0F0H ;屏蔽状态低4位
;有键闭合,转键处理
JNZ KEY2
MOV A,R1 ;无键闭合,继续扫描下一个按键 RL A MOV R2,A
DJNZ R3,KEY1 ;逐行扫描未完成,继续 LJMP KEY3 ;本轮扫描无键闭合,返回
;键处理
;左移扫描码,指向下一行扫描线
KEY2: MOV A,P1
第 25 页
ORL A,#0FH ANL CPL
A,R2
A
;扫描码与状态值拼装成特征字节
;取反,特征字节变换成键位码 ;保存键位码
MOV VULE,A
LCALL KEYPCS ;用查表法查找键码
WAIT: ANL P1,#0F0H ;判断键释放否? MOV A,P1 ANL A,#0F0H CPL JNZ RET
KET3: MOV VULE,#0FFH RET 查找键码子程序如下: KEYPCS: MOV R4,#10H MOV
;查找键码程序,社子按键码(16个按键)
;清除键码计数器
;无键闭合,置无效码
A WAIT
R4,#00H
MOV DPTR,#KEYTAB ;设置键码表首址 KEYP1: CLR A
MOVC A,@A+DPTR CJNE
MOV
;查表
A,VULE,KEYP2;未找到,转到下一个 VULE,R5
;找到键位码,键码装入键码寄存器VULE
MOV
RET KEYP2: INC R5
;键码计数器加1
;键码表地址加1 ;未查完16个按键,继续 ;无键闭合,置无效码
INC DPTR
DJNZ R4,KEYP1
MOV VULE,#0FFH RET KEYTAB
: DB 11H ;键码 = 00H 对应键‘0’