7.sdi

来自「我的大学单片机课程案例和ppt」· SDI 代码 · 共 96 行

SDI
96
字号
,,,        ORG     0h
0000,01 30,,        AJMP    START
,,,        ORG     30h
0030,75 80 FF,START,START:  MOV     P0,#0FFH
0033,75 A0 01,,        MOV     P2,#01H;选中第1个数码管进行显示
0036,C2 00,,        CLR     20H.0   ;标志位初始为0,K1键标志位
0038,C2 01,,        CLR     20H.1   ;K2标志位
003A,C2 02,,        CLR     20H.2   ;K3标志位
003C,90 00 E5,,        MOV     DPTR,#TABLE;将数据表TABLE的首地址赋给DPTR
003F,75 89 01,,        MOV     TMOD,#01H       ;定时器0方式1
0042,7E C8,,        MOV     R6,#200 ;计溢出次数
0044,75 90 FF,SCANK,SCANK:  MOV     P1,#0FFH
0047,C2 94,,        CLR     P1.4    ;P1.4清0,扫描第1行
0049,E5 90,,        MOV     A,P1    ;读键盘至A
004B,54 0F,,        ANL     A,#00001111B
004D,64 0F,,        XRL     A,#00001111B;判断A的低四位是否为1
004F,60 48,,        JZ      DISPLAY ;如果低四位为1,则无按键,转DISPLAY
0051,12 00 90,,        LCALL   DELAY10MS;延时10ms(去抖延时)
0054,E5 90,,        MOV     A,P1    ;读键盘至A
0056,54 0F,,        ANL     A,#00001111B
0058,64 0F,,        XRL     A,#00001111B;判断A的低四位是否为1
005A,60 3D,,        JZ      DISPLAY ;如果低四位为1,则无按键,转DISPLAY
005C,E5 90,,        MOV     A,P1    ;读键盘至A
005E,54 0F,,        ANL     A,#00001111B;保留低四位的结果
0060,B4 0D 0F,,        CJNE    A,#00001101B,NOK1;不是K1键,转NOK1
0063,D2 00,,        SETB    20H.0   ;是K1键将标志位置1,0-9
0065,C2 01,,        CLR     20H.1   ;其他标志位清0
0067,C2 02,,        CLR     20H.2   ;
0069,7A 00,,        MOV     R2,#0
006B,EA,,        MOV     A,R2
006C,93,,        MOVC    A,@A+DPTR       ;将(A+DPTR)地址中的值赋给A
006D,F5 80,,        MOV     P0,A    ;送到P0口数码管显示
006F,02 00 99,,        LJMP    DISPLAY ;转显示子程序
0072,B4 0B 09,NOK1,NOK1:   CJNE    A,#00001011B,NOK2;不是K2键,转NOK2
0075,D2 01,,        SETB    20H.1   ;是K2键将标志位置1
0077,C2 00,,        CLR     20H.0   ;其他标志位清0
0079,C2 02,,        CLR     20H.2   ;
007B,02 00 99,,        LJMP    DISPLAY ;转显示子程序
007E,B4 07 18,NOK2,NOK2:   CJNE    A,#00000111B,DISPLAY;不是K3键,转DISPLAY
0081,D2 02,,        SETB    20H.2   ;是K3键将标志位置1,9-0
0083,C2 00,,        CLR     20H.0   ;其他标志位清0
0085,C2 01,,        CLR     20H.1   ;
0087,7A 09,,        MOV     R2,#9
0089,EA,,        MOV     A,R2
008A,93,,        MOVC    A,@A+DPTR       ;将(A+DPTR)地址中的值赋给A
008B,F5 80,,        MOV     P0,A    ;送到P0口数码管显示
008D,02 00 99,,        LJMP    DISPLAY ;转显示子程序
0090,,DELAY10MS,DELAY10MS:
0090,7E 0A,,        MOV     R6,#10
0092,7F FA,D1,D1:     MOV     R7,#250
0094,DF FE,D2,D2:     DJNZ    R7,D2
0096,DE FA,,        DJNZ    R6,D1
0098,22,,        RET
,,,
0099,20 01 06,DISPLAY,DISPLAY:JB      20H.1,KEY2
009C,20 00 06,,        JB      20H.0,KEY1
009F,20 02 23,,        JB      20H.2,KEY3
00A2,02 00 44,KEY2,KEY2:   LJMP    SCANK   ;跳到SCANK,重新开始扫描
00A5,,KEY1,KEY1:
00A5,75 8C EC,,        MOV     TH0,#0ECH       ;高八位,5ms
00A8,75 8A 78,,        MOV     TL0,#78H        ;低八位
00AB,D2 8C,,        SETB    TR0             ;启动定时器
00AD,10 8D 02,WAIT1,WAIT1:  JBC     TF0,WAIT2
00B0,80 FB,,        JMP     WAIT1
00B2,DE 90,WAIT2,WAIT2:  DJNZ    R6,SCANK        ;溢出次数减1
00B4,7E C8,,        MOV     R6,#200         ;重新赋溢出次数
00B6,C2 8C,,        CLR     TR0
00B8,0A,,        INC     R2
00B9,BA 0A 02,,        CJNE    R2,#10,GOKEY1   ;判断是否显示数字加到10
00BC,AA 00,,        MOV     R2,0            ;如加到10,重新赋0
00BE,EA,GOKEY1,GOKEY1: MOV     A,R2
00BF,93,,        MOVC    A,@A+DPTR       ;将(A+DPTR)地址中的值赋给A
00C0,F5 80,,        MOV     P0,A    ;送到P0口数码管显示
00C2,02 00 44,,        LJMP    SCANK   ;跳到SCANK,重新开始扫描
00C5,,KEY3,KEY3:
00C5,75 8C EC,,        MOV     TH0,#0ECH       ;高八位,5ms
00C8,75 8A 78,,        MOV     TL0,#78H        ;低八位
00CB,D2 8C,,        SETB    TR0             ;启动定时器
00CD,10 8D 02,WAIT3,WAIT3:  JBC     TF0,WAIT4
00D0,80 FB,,        JMP     WAIT3
00D2,DE CE,WAIT4,WAIT4:  DJNZ    R6,KEY2
00D4,7E C8,,        MOV     R6,#200
00D6,C2 8C,,        CLR     TR0
00D8,1A,,        DEC     R2
00D9,BA FF 02,,        CJNE    R2,#0FFH,GOKEY3 ;判断是否显示数字减到FF
00DC,7A 09,,        MOV     R2,#9           ;重新赋9
00DE,,GOKEY3,GOKEY3:
00DE,EA,,        MOV     A,R2
00DF,93,,        MOVC    A,@A+DPTR       ;将(A+DPTR)地址中的值赋给A
00E0,F5 80,,        MOV     P0,A    ;送到P0口数码管显示
,,,
00E2,02 00 44,,        LJMP    SCANK   ;跳到SCANK,重新开始扫描
00E5,C0 F9 A4 B0,TABLE,TABLE:  DB      0C0H,0F9H,0A4H,0B0H
00E9,99 92 82 F8,,        DB      99H,92H,82H,0F8H,80H,90H
000E,,,        END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?