pxsjpjs.sdi

来自「电子时钟的单片机设计」· SDI 代码 · 共 236 行

SDI
236
字号
,,,        org     0000h
0000,02 00 30,,        ljmp    main
,,,;***************************;
,,,;         主程序            ;
,,,;***************************;
,,,        org     0030h
0030,,main,main:
0030,75 28 00,,        mov   28h,#00h           ;标记位总清零
0033,75 20 2E,,        mov   20h,#2eh           ;显示缓冲低位
0036,75 21 2E,,        mov   21h,#2eh
0039,75 22 2E,,        mov   22h,#2eh
003C,75 23 2F,,        mov   23h,#2fh           ;显示缓冲高位(让23单元显示P.)
003F,12 01 70,key,key:    lcall dirv
,,,;-------------------------;
,,,;         读键            ;
,,,;-------------------------;
0042,,kl0,kl0:
0042,74 0F,,       mov   a,#0fh
0044,F5 A0,,       mov   p2,a
0046,E5 A0,,       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
0048,30 E0 0F,,       jnb   acc.0,kl1          ;判断有无键按下
004B,30 E1 0C,,       jnb   acc.1,kl1          ;判断有无键按下
004E,30 E2 09,,       jnb   acc.2,kl1          ;判断有无键按下
0051,30 E3 06,,       jnb   acc.3,kl1          ;判断有无键按下
0054,12 01 70,,       lcall dirv
0057,02 00 42,,       ljmp  kl0                ;无键按下继续
005A,12 01 70,kl1,kl1:   lcall dirv               ;20h单元位0为1处于最高位带小数点显示
005D,74 0F,kl12,kl12:  mov   a,#0fh
005F,F5 A0,,       mov   p2,a
0061,E5 A0,,       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
0063,30 E0 11,,       jnb   acc.0,kl2
0066,30 E1 0E,,       jnb   acc.1,kl2
0069,30 E2 0B,,       jnb   acc.2,kl2
006C,30 E3 08,,       jnb   acc.3,kl2          ;判断有无键按下
006F,C2 51,,       clr   51h               ;清除键按下标记:28h单元位1为1则键按下
0071,12 01 70,,       lcall dirv
0074,02 00 42,,       ljmp  kl0               ;为抖动没键按下继续
0077,30 51 03,kl2,kl2:   jnb   51h,ke1y          ;28h单元位1为1则键按下已经处理过反回
007A,02 00 42,,       ljmp  kl0
007D,D2 51,ke1y,ke1y:  setb  51h               ;打上键按下标记:28h单元位1为1则键按下
007F,7A EF,,       mov   r2,#0efh          ;确实有键开始扫描键值
0081,7C 00,,       mov   r4,#00h
0083,,pk1,pk1:  ; mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
0083,EA,,       mov   a,r2
0084,F5 A0,,       mov   p2,a
0086,E5 A0,,       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
0088,79 00,,       mov   r1,#00h            ;r1中为键行数
008A,30 E0 15,,       jnb   acc.0,pk20          ;判有无键按下
008D,12 00 B4,,       lcall kll2
0090,30 E1 0F,,       jnb   acc.1,pk20          ;判有无键按下
0093,12 00 B4,,       lcall kll2
0096,30 E2 09,,       jnb   acc.2,pk20          ;判有无键按下
0099,12 00 B4,,       lcall kll2
009C,30 E3 03,,       jnb   acc.3,pk20          ;判有无键按下
009F,02 00 A9,,       ljmp  pk2
00A2,74 00,pk20,pk20:  mov   a,#00h
00A4,2C,,       add   a,r4
00A5,29,,       add   a,r1
00A6,02 00 BB,,       ljmp  pk5               ;扫到键值去散转处理
00A9,0C,pk2,pk2:   inc   r4
00AA,EA,,       mov   a,r2
00AB,30 E7 04,,       jnb   acc.7,pk3         ;判断4个键是否扫描完
00AE,23,,       rl    a
00AF,FA,,       mov   r2,a
00B0,01 83,,       ajmp  pk1               ;16个键没扫完继续
00B2,01 42,pk3,pk3:   ajmp  kl0               ;16个键全扫完为误动作反回
,,,
00B4,F8,kll2,kll2:  mov   r0,a
00B5,E9,,       mov   a,r1
00B6,24 04,,       add   a,#04h              ;加一行四个键
00B8,F9,,       mov   r1,a
00B9,E8,,       mov   a,r0
00BA,22,,       ret
,,,
,,,;------------------------------;
,,,;       键状态判断子程序       ;
,,,;------------------------------;
00BB,90 00 C5,pk5,pk5:    mov   dptr,#tb0         ;散转处理
00BE,FA,,        mov   r2,a
00BF,2A,,        add   a,r2
00C0,50 02,,        jnc   pk6
00C2,05 83,,        inc   dph
00C4,73,pk6,pk6:    jmp   @a+dptr
00C5,01 E8,tb0,tb0:    ajmp  k11                ;键7
00C7,01 F1,,        ajmp  k12                ;键8
00C9,01 FA,,        ajmp  k13                ;键9
00CB,21 03,,        ajmp  k14                ;键/
,,,
00CD,21 06,,        ajmp  k21                ;键4
00CF,21 0F,,        ajmp  k22                ;键5
00D1,21 18,,        ajmp  k23                ;键6
00D3,21 21,,        ajmp  k24                ;键x
,,,
00D5,21 24,,        ajmp  k31                ;键1
00D7,21 2D,,        ajmp  k32                ;键2
00D9,21 36,,        ajmp  k33                ;键3
00DB,21 3F,,        ajmp  k34                ;键-
,,,
00DD,21 42,,        ajmp  k41                ;键c
00DF,21 57,,        ajmp  k42                ;键0
00E1,21 60,,        ajmp  k43                ;键=
00E3,21 63,,        ajmp  k44                ;键+
,,,
00E5,02 00 42,,        ljmp  kl0
,,,
00E8,,k11,k11:                            ;键7
00E8,12 01 66,,        lcall zy
00EB,75 20 07,,        mov   20h,#07h
00EE,02 00 42,,        ljmp  kl0
00F1,,k12,k12:                            ;键8
00F1,12 01 66,,        lcall zy
00F4,75 20 08,,        mov   20h,#08h
00F7,02 00 42,,        ljmp  kl0
00FA,,k13,k13:                            ;键9
00FA,12 01 66,,        lcall zy
00FD,75 20 09,,        mov   20h,#09h
0100,02 00 42,,        ljmp  kl0
0103,,k14,k14:                            ;键/
0103,02 00 42,,        ljmp  kl0
,,,
0106,,k21,k21:                            ;键4
0106,12 01 66,,        lcall zy
0109,75 20 04,,        mov   20h,#04h
010C,02 00 42,,        ljmp  kl0
010F,,k22,k22:                            ;键5
010F,12 01 66,,        lcall zy
0112,75 20 05,,        mov   20h,#05h
0115,02 00 42,,        ljmp  kl0
0118,,k23,k23:                            ;键6
0118,12 01 66,,        lcall zy
011B,75 20 06,,        mov   20h,#06h
011E,02 00 42,,        ljmp  kl0
0121,,k24,k24:                            ;键x
0121,02 00 42,,        ljmp  kl0
,,,
0124,,k31,k31:                            ;键1
0124,12 01 66,,        lcall zy
0127,75 20 01,,        mov   20h,#01h
012A,02 00 42,,        ljmp  kl0
012D,,k32,k32:                            ;键2
012D,12 01 66,,        lcall zy
0130,75 20 02,,        mov   20h,#02h
0133,02 00 42,,        ljmp  kl0
0136,,k33,k33:                            ;键3
0136,12 01 66,,        lcall zy
0139,75 20 03,,        mov   20h,#03h
013C,02 00 42,,        ljmp  kl0
013F,,k34,k34:                            ;键-
013F,02 00 42,,        ljmp  kl0
,,,
0142,,k41,k41:                            ;键c
0142,E5 20,,        mov   a,20h
0144,C3,,        clr   c
0145,94 0A,,        subb  a,#0ah
0147,50 09,,        jnc    k410             ;够减》a
0149,E5 20,,        mov   a,20h              ;不够减《a
014B,24 0A,,        add   a,#0ah
014D,F5 20,,        mov   20h,a
014F,02 01 54,,        ljmp  k412
0152,F5 20,k410,k410:   mov   20h,a
0154,02 00 42,k412,k412:   ljmp  kl0
0157,,k42,k42:                            ;键0
0157,12 01 66,,        lcall zy
015A,75 20 00,,        mov   20h,#00h
015D,02 00 42,,        ljmp  kl0
0160,,k43,k43:                            ;键=
0160,02 00 42,,        ljmp  kl0
0163,,k44,k44:                            ;键+
0163,02 00 42,,        ljmp  kl0
,,,;***********************;
,,,;      光标左移         ;
,,,;***********************;
0166,85 22 23,zy,zy:    mov    23h,22h
0169,85 21 22,,       mov    22h,21h
016C,85 20 21,,       mov    21h,20h
016F,22,,       ret                 ;退出
,,,;******************;
,,,;      显示        ;
,,,;******************;
0170,,dirv,dirv:
0170,78 FE,,        mov   r0,#0feh
0172,79 23,,        mov   r1,#23h
0174,E8,,        mov   a,r0
0175,20 E0 05,di1,di1:    jb   acc.0,di10         ;位选
0178,C2 93,,        clr   p1.3
017A,02 01 9B,,        ljmp  di13
017D,D2 93,di10,di10:   setb  p1.3
017F,20 E1 05,,        jb   acc.1,di11
0182,C2 92,,        clr   p1.2
0184,02 01 9D,,        ljmp  di18
0187,D2 92,di11,di11:   setb  p1.2
0189,20 E2 05,,        jb   acc.2,di12
018C,C2 91,,        clr   p1.1
018E,02 01 9D,,        ljmp  di18
0191,D2 91,di12,di12:   setb  p1.1
0193,20 E3 05,,        jb   acc.3,di13
0196,C2 90,,        clr   p1.0
0198,02 01 9D,,        ljmp  di18
019B,D2 90,di13,di13:   setb  p1.0
,,,
019D,90 01 B7,di18,di18:   mov   dptr,#table         ;查段选表
01A0,E7,,        mov   a,@r1
01A1,93,,        movc  a,@a+dptr
01A2,F5 80,,        mov   p0,a                 ;段选
,,,;        mov   r7,#01h
,,,;di2:    mov   r6,#01h
,,,;di3:    djnz  r6,di3
,,,;        djnz  r7,di2
01A4,7F 03,,        mov   r7,#03h
01A6,7E FF,di2,di2:    mov   r6,#0ffh
01A8,DE FE,di3,di3:    djnz  r6,di3
01AA,DF FA,,        djnz  r7,di2
01AC,19,,        dec   r1                   ;
01AD,E8,,        mov   a,r0
01AE,30 E4 05,,        jnb   acc.4, di4
01B1,23,,        rl    a                    ;下一位(左移)
01B2,F8,,        mov   r0,a
01B3,02 01 75,,        ljmp  di1
01B6,22,di4,di4:    ret
01B7,,table,table:
01B7,3F 06 5B 4F,,DB 03fh,06H,05bH,04fH,066H,06dH,07dH,07H
,,,;  "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"
01BF,7F 6F BF 86,,DB 07fH,06fH,0Bfh,86H,0dbH,0cfH,0e6H,0edH
,,,;  "8"  "9"  "0." "1." "2." "3." "4." "5."
01C7,FD 87 FF EF,,DB 0fdH,087H,0ffH,0efH,077H,07cH,039H,05eH
,,,;  "6." "7.""8."  "9." "A"  "b"  "C"  "d"
01CF,79 71 3D 76,,DB 079H,071H,03dH,076H,00fH,00eH,0f0H,038H
,,,;  "E"  "F"  "G"  "H"  "I"  "J"  "k"  "L"
01D7,D4 54 5C 73,,DB 0d4H,054H,05cH,073H,0dcH,050H,0d8H,078H
,,,;   "m"  "n" "o"  "P"  "Q"  "r   "s"  "t"
01DF,3E 18 98 F2,,DB 03eH,018H,098H,0f2H,06eh,0ccH,000h,0f3H
,,,;  "U"  "v"  "w"  "x"  "y"  "z"  "  " "p."
01E7,08,,DB 08h
,,,;  "-"
000E,,,       end

⌨️ 快捷键说明

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