(0F000H)CS1 A0
(B2)2M
VCC
OE1
1
A1
2
A2
4
A3
6
A4
8
Y4
12
Y3
14
Y2
16
Y1
18
Y8
3
Y7
5
GND
10
Y6
7
Y5
9
A5
11
VCC
20
OE2
19
A6
13
A8
17
A7
15
SN74LS240P
U40
OUTA0
27
OUTB0
31
OUTA1
26
OUTB1
30
OUTA2
25
OUTB2
29
OUTA3
24
OUTB3
28
DB0
12
BD
23
DB1
13
DB2
14
SL0
32
DB3
15
SL1
33
DB4
16
SL2
34
DB5
17
SL3
35
DB6
18
DB7
19
RL0
38
RL1
39
IRQ
4
RL2
1
RL3
2
CS
22
RL4
5
RD
10
RL5
6
WR
11
RL6
7
A0
21
RL7
8
CLK
3
SHIFT
36
RESET
9
CNTL/S
37
8279
U37
D0
D1
D2
D3
D4
D5
D6
D7
RST
WR
RD
8279
1
2
3
4
5
6
7
8
JP62
A
1
B
2
C
3
OE2A
4
OE2B
5
OE1
6
Y7
7
GND
8
Y6
9
Y5
10
Y4
11
Y3
12
Y2
13
Y1
14
Y0
15
VCC
16
SN74LS138N
U39
VCC
VCC
12345678
JP93
a
b
c
d
f
g
dp
e
CLK
A0
INT
OE1
1
A1
2
A2
4
A3
6
A4
8
Y4
12
Y3
14
Y2
16
Y1
18
Y8
3
Y7
5
GND
10
Y6
7
Y5
9
A5
11
VCC
20
OE2
19
A6
13
A8
17
A7
15
SN74LS240P
U40
1
2
3
4
5
6
7
8
JP78
a
b
c
d
f
g
dp
e
VCC
1
2
3
4
5
6
7
8
9
10K
R123
VCC
CS
1
2
3
4
5
6
7
8
JP77
C
D
B
A
LJMP STAR
ORG 0100H
STAR: MOV SP,#60H
ACALL INIT8279 ;初始化子程序
MOV KeyCount,#0
STAR1: CALL SCAN_KEY ;键扫描
JNC STAR1 ;没有按键
XCH A,KeyCount
INC A
CJNE A,#9,STAR2
MOV KeyCount,#0
ACALL INIT8279_1 ;8个数码块全有字符显示后,再按键,清除显示
SJMP STAR1
STAR2: XCH A,KeyCount
CALL KEY_NUM ;键值转换为键号
MOV DPTR,#LED_TAB ;字型码表
MOVC A,@A+DPTR
CALL WRITE_DATA
SJMP STAR1
;8279初始化
INIT8279: MOV A,#34H ;可编程时钟设置,设置分频系数(20分频) MOVX @DPTR,A
CLR A ;8*8字符显示,左边输入, 外部译码键扫描方式
MOV DPTR,#CMD_8279
MOVX @DPTR,A
INIT8279_1: CALL CLEAR ;清显示
MOV A,#90H ;从最后一个数码管开始移位显示
MOVX @DPTR,A
RET
CLEAR: MOV A,#0DEH ;清除命令
MOV DPTR,#CMD_8279
MOVX @DPTR,A
WAIT1: MOVX A,@DPTR
JB ACC.7,WAIT1 ;显示RAM清除完毕吗?
RET
SCAN_KEY: MOV DPTR,#CMD_8279
MOVX A,@DPTR ;读状态
READ_FIFO: ANL A,#7
JZ NO_KEY ;是否有键按下
READ: MOV A,#40H
MOVX @DPTR,A ;读FIFO RAM
MOV DPTR,#DATA_8279
MOVX A,@DPTR
SETB C ;有键
SCAN_KEY1: RET
NO_KEY: CLR C ;无键按下,清CY
SJMP SCAN_KEY1
KEY_NUM: ANL A,#3FH
RET
WRITE_DATA: MOV DPTR,#DATA_8279
MOVX @DPTR,A
RET
LED_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
七、实验扩展及思考
重新编写实验三双字节BCD码加法,自己编写键扫描、显示程序。