⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex9-6.sdi

📁 《单片机原理实用教程——基于Proteus虚拟仿真》一书的配套光盘
💻 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 + -