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 + -
显示快捷键?