-
Notifications
You must be signed in to change notification settings - Fork 2
/
PART02.ASM
145 lines (128 loc) · 3.08 KB
/
PART02.ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
ORG 0000H
LJMP START
;-----------------------------------------
;定义一些IO口
LED1 EQU P1.0
LED2 EQU P1.1
LED3 EQU P1.2
BUTTON1 EQU P2.0
BUTTON2 EQU P2.1
BUTTON3 EQU P2.2
BUTTON4 EQU P2.3
DataBus EQU P3.5
ClockBus EQU P3.4
;------------------------------------------
;字形码
TAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H,92H, 82H, 0F8H, 80H, 90H, 0FFH, 0C7H
;------------------------------------------
;------------------------------------------
START:
MOV A, #0BH
LCALL DISPLAY
MOV A, #0BH
LCALL DISPLAY
MAIN:
JNB BUTTON1, K1
JNB BUTTON2, K2
JNB BUTTON3, K3
JNB BUTTON4, K4
AJMP MAIN
;------------------------------------------
;-------------------------------------------
K1:
LCALL DELAY10MS
JB BUTTON1, MAIN
LOPK1:JNB BUTTON1, LOPK1
CLR LED1
MOV A, #0
LCALL DISPLAY
MOV A, #1
LCALL DISPLAY
LJMP MAIN
;-------------------------------------------
;-------------------------------------------
K2:
LCALL DELAY10MS
JB BUTTON2, MAIN
LOPK2:JNB BUTTON2, LOPK2
CLR LED2
MOV A, #0
LCALL DISPLAY
MOV A, #2
LCALL DISPLAY
LJMP MAIN
;-------------------------------------------
;-------------------------------------------
K3:
LCALL DELAY10MS
JB BUTTON3, MAIN
LOPK3:JNB BUTTON3, LOPK3
CLR LED3
MOV A, #0
LCALL DISPLAY
MOV A, #3
LCALL DISPLAY
LJMP MAIN
;-------------------------------------------
;-------------------------------------------
K4:
LCALL DELAY10MS
JB BUTTON4, MAIN
LOPK4:JNB BUTTON4, LOPK4
SETB LED3
SETB LED2
SETB LED1
MOV A, #0
LCALL DISPLAY
MOV A, #4
LCALL DISPLAY
LJMP MAIN
;-------------------------------------------
;-------------------------------------
;延时10MS,用于等待人手消去按钮抖动
;-------------------------------------
DELAY10MS:
push 07H
PUSH 06H
PUSH 05H
MOV R7,#01H
DL1:
MOV R6,#26H
DL0:
MOV R5,#82H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
POP 05H
POP 06H
POP 07H
RET
;-------------------------------------
;-------------------------------------
; DISPLAY函数用于单个数码管的显示控制
;输入:需要显示的数字编码放入A
;输出: NONE
;-------------------------------------
DISPLAY:
PUSH DPL
PUSH DPH
PUSH 04H
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV R4, #8
DIS:
RLC A
MOV DataBus, C
CLR ClockBus
;LCALL DELAY10US
;(经过测试发现,这个移位寄存器真的快...不用等)
NOP
NOP
NOP
SETB ClockBus
DJNZ R4, DIS
POP 04H
POP DPH
POP DPL
RET
;-------------------------------------