开始 Y 有键按下否? N 调用延时子程序 调用延时子程序 N
有键按下否? Y 判断闭合键,键码入栈保存
N 闭合键释放否? Y 键码 A 返回 键盘扫描子程序流图
2 硬件电路和参考程序
2.1基于proteus仿真的硬件电路
截屏视图如下
:
2.2 参考程序:
ORG 0000H
AJMP START ORG 0003H LJMP ST1 START: ORG 000BH AJMP TT0 ORG 0030H
MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H MOV 33H,#00H MOV 34H,#00H MOV 35H,#00H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV R0,#30H MOV R5,#0FEH MOV R1,#20 MOV 36H,#00H MOV R3,#6 MOV R2, #6 MOV R4,#10 MOV 40H,#10
MOV IE, #81H SETB EA SETB ET0 ;秒个位内存单元 ;秒十位内存单元 ;分个位内存单元 ;分十位内存单元 ;时个位内存单元 ;时十位内存单元
;定时器T0,工作方式1, ;定时50MS ;
;指针指向显示单元 ;选中秒个位 ;
;时位键盘判断时用 ;秒十位判断时用 ;分十位判断时用 ; ; ;开中断 ;开T0中断
SETB TR0 ;记时开始 MAIN: LCALL DIS LJMP MAIN
;#################显示子程序################### DIS: MOV A,R5
;先位码
MOV DPTR,#7FFFH ;位码选择p2.7 MOVX @DPTR,A
MOV A,@R0 ;再段码 MOV DPTR,#TAB ;表地址 MOVC A,@A+DPTR ;查表 MOV DPTR,#0BFFFH ;段码选择p2.6 ;###############显示小数点###################
CJNE R0,#32H,GO111 ;小数点选择(R0)=/=32H转移 ORL A,#80H GO111: CJNE R0,#34H,MIN ORL A,#80H
MIN: MOVX @DPTR,A ;送出去显示 LCALL DELAY ;1MS延时 LCALL DELAY LCALL DELAY
INC R0 ;修改指针指向下一显示单元 MOV A,R5 ;也可写为XCH A,R5
JNB ACC.5,LH ;判断显示完否?? RL A ;也可写为XCH R5,A MOV R5,A
AJMP ENR ;返回循环显示 LH: MOV R0,#30H ;重心定义显示指针
MOV R5,#0FEH ;重设位码,形成循环ACC.0-ACC.3 ENR: RET
;###############定时中断########################### TT0:
MOV TH0,#3CH ; MOV TL0,#0B0H ;
DJNZ R1,FANHUI MOV R1,#20 INC 30H DJNZ R4,FANHUI MOV R4,#10 MOV 30H,#00H INC 31H DJNZ R3,FANHUI MOV R3,#6 MOV 31H,#00H INC 32H
DJNZ 40H,FANHUI MOV 40H,#10 MOV 32H,#00H INC 33H
DJNZ R2,FANHUI MOV R2,#6 MOV 33H,#00H
INC 36H MOV A,36H CJNE A,#24,JUMP
MOV 36H,#00H
JUMP: MOV A,36H MOV B,#10
;判断1秒到否?未到跳转 ;
;秒个位加一
;判断10秒到否?未到跳转 ; ; ; ; ; ; ; ;时位判断时用