📄 clksmg.lst
字号:
A51 MACRO ASSEMBLER CLKSMG 05/28/2005 23:03:39 PAGE 1
MACRO ASSEMBLER A51 V6.12
OBJECT MODULE PLACED IN .\CLKSMG.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE .\CLKSMG.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2 ;P1.4小时调整 P1.5分种调整
3
4
5
6
7 CODE_SEG SEGMENT CODE
8 DATA_SEG SEGMENT DATA
9 STACK_SEG SEGMENT IDATA
10
11
0094 12 K1 BIT P1.4
0095 13 K2 BIT P1.5
14
---- 15 RSEG DATA_SEG
0000 16 KEY_S: DS 1
0001 17 KEY_V: DS 1
0002 18 DIS_DIGIT: DS 1
0003 19 SEC: DS 1
0004 20 DIS_INDEX: DS 1
0005 21 HOUR: DS 1
0006 22 MIN: DS 1
0007 23 SEC100: DS 1
0008 24 DIS_BUF: DS 8
25
0008 26 BUF_HOUR_H EQU DIS_BUF ; 小时十位
0009 27 BUF_HOUR_L EQU DIS_BUF+1 ; 小时个位
000B 28 BUF_MIN_H EQU DIS_BUF+3 ; 分十位
000C 29 BUF_MIN_L EQU DIS_BUF+4 ; 分个位
000E 30 BUF_SEC_H EQU DIS_BUF+6 ; 秒十位
000F 31 BUF_SEC_L EQU DIS_BUF+7 ; 秒个位
32
---- 33 RSEG STACK_SEG
0000 34 STACK: DS 20
35
36
37 ;===============================================================================
38
---- 39 CSEG AT 0000H
0000 020000 F 40 JMP MAIN
41
---- 42 CSEG AT 0000BH
000B 020000 F 43 LJMP TIMER0
44
---- 45 CSEG AT 0001BH
001B 020000 F 46 LJMP TIMER1
47
48 ;===============================================================================
49
50
---- 51 RSEG CODE_SEG
0000 52 MAIN:
53 USING 0
54
0000 758100 F 55 MOV SP, #(STACK-1) ;
56
57
0003 7580FF 58 MOV P0,#0FFH
A51 MACRO ASSEMBLER CLKSMG 05/28/2005 23:03:39 PAGE 2
0006 75A0FF 59 MOV P2,#0FFH
0009 758911 60 MOV TMOD,#011H ; 定时器0, 1工作模式1, 16位定时方式
000C 758CFC 61 MOV TH0,#0FCH
000F 758A17 62 MOV TL0,#017H
0012 758DDC 63 MOV TH1,#0DCH
0015 E4 64 CLR A
0016 F58B 65 MOV TL1,A
66
0018 75000C F 67 MOV HOUR,#12 ;
001B E4 68 CLR A ;
001C F500 F 69 MOV MIN,A
001E F500 F 70 MOV SEC,A
0020 F500 F 71 MOV SEC100,A
72
0022 E500 F 73 MOV A,HOUR
0024 75F00A 74 MOV B,#10
0027 84 75 DIV AB
0028 900000 F 76 MOV DPTR,#DIS_CODE
002B 93 77 MOVC A,@A+DPTR
002C F500 F 78 MOV BUF_HOUR_H,A ; 时十位
002E E500 F 79 MOV A,HOUR
0030 75F00A 80 MOV B,#10
0033 84 81 DIV AB
0034 E5F0 82 MOV A,B
0036 93 83 MOVC A,@A+DPTR
0037 F500 F 84 MOV BUF_HOUR_L,A ; 时个位
0039 E500 F 85 MOV A,MIN
003B 75F00A 86 MOV B,#10
003E 84 87 DIV AB
003F 93 88 MOVC A,@A+DPTR
0040 F500 F 89 MOV BUF_MIN_H,A ; 分十位
0042 E500 F 90 MOV A,MIN
0044 75F00A 91 MOV B,#10
0047 84 92 DIV AB
0048 E5F0 93 MOV A,B
004A 93 94 MOVC A,@A+DPTR
004B F500 F 95 MOV BUF_MIN_L,A ; 分个位
004D E500 F 96 MOV A,SEC
004F 75F00A 97 MOV B,#10
0052 84 98 DIV AB
0053 93 99 MOVC A,@A+DPTR
0054 F500 F 100 MOV BUF_SEC_H,A ; 秒十位
0056 E500 F 101 MOV A,SEC
0058 75F00A 102 MOV B,#10
005B 84 103 DIV AB
005C E5F0 104 MOV A,B
005E 93 105 MOVC A,@A+DPTR
005F F500 F 106 MOV BUF_SEC_L,A ; 秒个位
107
0061 7500BF F 108 MOV BUF_HOUR_H+02H,#0BFH
0064 7500BF F 109 MOV BUF_HOUR_H+05H,#0BFH
110
0067 7500FE F 111 MOV DIS_DIGIT,#0FEH
006A E4 112 CLR A
006B F500 F 113 MOV DIS_INDEX,A
114
006D 75A88A 115 MOV IE,#08AH ; 使能timer0,1 中断
116
0070 D28C 117 SETB TR0
0072 D28E 118 SETB TR1
119
0074 750003 F 120 MOV KEY_V,#03H
121
0077 122 MAIN_LP:
0077 120000 F 123 LCALL SCAN_KEY ; 键扫描
007A 60FB 124 JZ MAIN_LP ; 无键返回
A51 MACRO ASSEMBLER CLKSMG 05/28/2005 23:03:39 PAGE 3
125
007C 7F0A 126 MOV R7,#10 ; 延时10ms
007E 120000 F 127 LCALL DELAYMS ; 延时去抖动
0081 120000 F 128 LCALL SCAN_KEY ; 再次扫描
0084 60F1 129 JZ MAIN_LP ; 无键返回
130
0086 850000 F 131 MOV KEY_V,KEY_S ; 保存键值
0089 120000 F 132 LCALL PROC_KEY ; 键处理
008C 80E9 133 SJMP MAIN_LP ; 调回主循环
134
135
136 ;===============================================================================
008E 137 SCAN_KEY:
138 ; 扫键扫描子程序
139 ; 保存按键状态到key_s
140 ; 返回: A --- 按键是否按下(BOOL)
141
008E E4 142 CLR A
143
008F A294 144 MOV C,K1 ; 读按键K1
0091 92E0 145 MOV ACC.0,C
0093 A295 146 MOV C,K2 ; 读按键K2
0095 92E1 147 MOV ACC.1,C
148
0097 F500 F 149 MOV KEY_S,A ; 保存按键状态到key_s
0099 6500 F 150 XRL A,KEY_V
009B 22 151 RET
152
153 ;===============================================================================
009C 154 PROC_KEY:
155 ; 键处理子程序
156 ; 传入参
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -