📄 ex9-6.sdi
字号:
,,, ORG 0000H
0000,02 00 30,START,START: LJMP MAIN
,,, ORG 0030H
0030,75 81 60,MAIN,MAIN: MOV SP,#60H
0033,75 7A 00,, MOV 7AH,#00
0036,75 7B 01,, MOV 7BH,#01
0039,75 7C 02,, MOV 7CH,#02
003C,75 7D 03,, MOV 7DH,#03
003F,75 7E 04,, MOV 7EH,#04
0042,75 7F 05,, MOV 7FH,#05
0045,90 7F 00,, MOV DPTR,#7F00H ;8155命令口地址
0048,74 03,, MOV A,#03H ;置8155PA、PB口为输出,PC口为输入
004A,F0,, MOVX @DPTR,A
004B,12 00 A1,LOOP,LOOP: LCALL DISP
004E,12 00 6A,, LCALL KEY
0051,EC,, MOV A,R4
0052,B4 88 02,, CJNE A,#88H,DSP
0055,80 F4,, SJMP LOOP
0057,F5 7A,DSP,DSP: MOV 7AH,A ;键值送入显示缓冲区单元7AH
0059,75 7B 10,, MOV 7BH,#010H
005C,75 7C 10,, MOV 7CH,#010H
005F,75 7D 10,, MOV 7DH,#010H
0062,75 7E 10,, MOV 7EH,#010H
0065,75 7F 10,, MOV 7FH,#010H
0068,80 E1,, SJMP LOOP
,,,;按键识别子程序
006A,7C 00,KEY,KEY: MOV R4,#00H ;0→键号寄存器R4
006C,7A 01,, MOV R2,#01H ;扫描模式01H→R2
006E,90 7F 02,KEY1,KEY1: MOV DPTR,#7F02H
0071,EA,, MOV A,R2
0072,F0,, MOVX @DPTR,A ;扫描模式→8155PB口
0073,A3,, INC DPTR
0074,E0,, MOVX A,@DPTR ;读8155PC口
0075,20 E0 04,, JB ACC.0,KEY2 ;0列无键闭合,转判1列
0078,74 00,, MOV A,#00H ;0列有键闭合,0→A
007A,01 8F,, AJMP KEY5
007C,20 E1 04,KEY2,KEY2: JB ACC.1,KEY3 ;1列无键闭合,转判2列
007F,74 01,, MOV A,#01H ;1列有键闭合,列线号01H→A
0081,01 8F,, AJMP KEY5
0083,20 E2 04,KEY3,KEY3: JB ACC.2,KEY4 ;2列无键闭合,转判3列
0086,74 02,, MOV A,#02H ;2列有键闭合,02H→A
0088,01 8F,, AJMP KEY5
008A,20 E3 05,KEY4,KEY4: JB ACC.3,NEXT ;3列无键闭合,转判下一行
008D,74 03,, MOV A,#03H ;3列有键闭合,03H→A
008F,2C,KEY5,KEY5: ADD A,R4 ;列线号+(R4)作为键值→A
0090,FC,, MOV R4,A ;键值→R4
0091,22,, RET ;返回
0092,EC,NEXT,NEXT: MOV A,R4;
0093,24 04,, ADD A,#04 ;键号寄存器加4
0095,FC,, MOV R4,A
0096,EA,, MOV A,R2
0097,20 E3 04,, JB ACC.3,NEXT1 ;判别是否已扫描到最后一行
009A,23,, RL A ;扫描模式左移一位
009B,FA,, MOV R2,A
009C,01 6E,, AJMP KEY1 ;重新开始扫描下一行
009E,7C 88,NEXT1,NEXT1: MOV R4,#88H ;扫描到最后一行仍无按键置无键闭合标志
00A0,22,, RET
,,,;数码管显示组程序
00A1,78 7A,DISP,DISP: MOV R0,#7AH ;置显示缓冲器指针初值
00A3,7B 01,, MOV R3,#01H ;置扫描模式初值
00A5,90 7F 02,DISPB1,DISPB1: MOV DPTR,#7F02H ;8155 PB口地址
00A8,74 00,, MOV A,#0h ;熄灭所有LED
00AA,F0,, MOVX @DPTR,A
00AB,90 7F 01,, MOV DPTR,#7F01H ;8155 PA口地址
00AE,E6,, MOV A, @R0 ;取显示数据
00AF,24 14,, ADD A,#014H ;加偏移量
00B1,83,, MOVC A, @A+PC ;查表取段码
00B2,F0,, MOVX @DPTR,A ;段码→8155 PA口
00B3,EB,, MOV A,R3
00B4,90 7F 02,, MOV DPTR,#7F02H ;8155 PB口地址
00B7,F0,, MOVX @DPTR,A ;扫描模式→8155 PB口
00B8,11 DD,, ACALL DELAY ;延时
00BA,08,, INC R0
00BB,EB,, MOV A,R3
00BC,20 E6 04,, JB ACC.6,DISPB2 ;判6位LED显示完否
00BF,23,, RL A ;扫描模式左移1位
00C0,FB,, MOV R3,A
00C1,01 A5,, AJMP DISPB1
00C3,7B 01,DISPB2,DISPB2: MOV R3,#01H
00C5,22,, RET
00C6,3F 06 5B 4F,SEGPT2,SEGPT2: Db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h ;段码表
00CE,7F 6F 77 7C,, db 7fh,6fh,77h,7ch,39h,5eh,79h,71h
00D6,00 02 08 00,, db 00h,02h,08h,00h,59h,0fh,76h
,,, ;延时子程序
00DD,7C FF,DELAY,DELAY: MOV R4,#0FFH
00DF,DC FE,DELAY1,DELAY1: DJNZ R4,DELAY1
00E1,22,, RET
,,,
,,,
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -