📄 pxsjpgb.sdi
字号:
,,, org 0000h
0000,02 00 30,, ljmp main
,,, org 000bh
000B,02 03 0C,, ljmp it00 ;定时中断0
,,,;***************************;
,,,; 主程序 ;
,,,;***************************;
,,, org 0030h
0030,,main,main:
0030,75 28 00,, mov 28h,#00h ;标记位总清零
0033,75 41 23,, mov 41h,#23h ;显视数字的首地址指针(即23单元)
0036,75 50 22,, mov 50h,#22h ;显视横杠的首地址指针(即22单元)
0039,75 44 08,, mov 44h,#08h ;定时器高位(TH0)初值
003C,75 43 88,, mov 43h,#88h ;定时器低位(TL0)初值
003F,75 5B 00,, mov 5bh,#00h
0042,75 5C 00,, mov 5ch,#00h
0045,C2 50,, clr 50h
0047,C2 6E,, clr 6eh ;清闪动开关标志位
0049,75 89 01,, mov tmod,#01h ;定时方式1 (16位计数器)
004C,85 44 8C,, mov th0,44h ;定时器高位(TH0)送初值
004F,85 43 8A,, mov tl0,43h ;定时器低位(TL0)送初值
0052,D2 A9,, setb et0 ;定时中断0 允许中断
0054,D2 8C,, setb tr0 ;启动定时器
0056,D2 AF,, setb ea ;开中断
0058,75 42 2E,, mov 42h,#2eh
005B,75 20 2E,, mov 20h,#2eh
005E,75 21 2E,, mov 21h,#2eh
0061,75 22 2E,, mov 22h,#2eh
0064,75 23 2F,, mov 23h,#2fh ;让23单元显视P
0067,12 03 5F,key,key: lcall dirv
,,,;-------------------------;
,,,; 读键 ;
,,,;-------------------------;
006A,,kl0,kl0:
006A,D2 A9,, setb et0 ;定时中断0 允许中断
006C,D2 8C,, setb tr0 ;启动定时器
006E,D2 AF,, setb ea ;开中断
0070,74 0F,, mov a,#0fh
0072,F5 A0,, mov p2,a
0074,E5 A0,, mov a,p2 ;p2口低四位为键扫描输入,高四位数出
0076,30 E0 0F,, jnb acc.0,kl1 ;判断有无键按下
0079,30 E1 0C,, jnb acc.1,kl1 ;判断有无键按下
007C,30 E2 09,, jnb acc.2,kl1 ;判断有无键按下
007F,30 E3 06,, jnb acc.3,kl1 ;判断有无键按下
0082,12 03 5F,, lcall dirv
0085,02 00 6A,, ljmp kl0 ;无键按下继续
0088,12 03 5F,kl1,kl1: lcall dirv ;20h单元位0为1处于最高位带小数点显示
008B,74 0F,kl12,kl12: mov a,#0fh
008D,F5 A0,, mov p2,a
008F,E5 A0,, mov a,p2 ;p2口低四位为键扫描输入,高四位数出
0091,30 E0 11,, jnb acc.0,kl2
0094,30 E1 0E,, jnb acc.1,kl2
0097,30 E2 0B,, jnb acc.2,kl2
009A,30 E3 08,, jnb acc.3,kl2 ;判断有无键按下
009D,C2 51,, clr 51h ;清除键按下标记:28h单元位1为1则键按下
009F,12 03 5F,, lcall dirv
00A2,02 00 6A,, ljmp kl0 ;为抖动没键按下继续
00A5,30 51 03,kl2,kl2: jnb 51h,ke1y ;28h单元位1为1则键按下已经处理过反回
00A8,02 00 6A,, ljmp kl0
00AB,D2 51,ke1y,ke1y: setb 51h ;打上键按下标记:28h单元位1为1则键按下
00AD,7A EF,, mov r2,#0efh ;确实有键开始扫描键值
00AF,7C 00,, mov r4,#00h
00B1,,pk1,pk1: ; mov a,p2 ;p2口低四位为键扫描输入,高四位数出
00B1,EA,, mov a,r2
00B2,F5 A0,, mov p2,a
00B4,E5 A0,, mov a,p2 ;p2口低四位为键扫描输入,高四位数出
00B6,79 00,, mov r1,#00h ;r1中为键行数
00B8,30 E0 15,, jnb acc.0,pk20 ;判有无键按下
00BB,12 00 E2,, lcall kll2
00BE,30 E1 0F,, jnb acc.1,pk20 ;判有无键按下
00C1,12 00 E2,, lcall kll2
00C4,30 E2 09,, jnb acc.2,pk20 ;判有无键按下
00C7,12 00 E2,, lcall kll2
00CA,30 E3 03,, jnb acc.3,pk20 ;判有无键按下
00CD,02 00 D7,, ljmp pk2
00D0,74 00,pk20,pk20: mov a,#00h
00D2,2C,, add a,r4
00D3,29,, add a,r1
00D4,02 00 E9,, ljmp pk5 ;扫到键值去散转处理
00D7,0C,pk2,pk2: inc r4
00D8,EA,, mov a,r2
00D9,30 E7 04,, jnb acc.7,pk3 ;判断4个键是否扫描完
00DC,23,, rl a
00DD,FA,, mov r2,a
00DE,01 B1,, ajmp pk1 ;16个键没扫完继续
00E0,01 6A,pk3,pk3: ajmp kl0 ;16个键全扫完为误动作反回
,,,
00E2,F8,kll2,kll2: mov r0,a
00E3,E9,, mov a,r1
00E4,24 04,, add a,#04h ;加一行四个键
00E6,F9,, mov r1,a
00E7,E8,, mov a,r0
00E8,22,, ret
,,,
,,,;------------------------------;
,,,; 键状态判断子程序 ;
,,,;------------------------------;
00E9,90 00 F3,pk5,pk5: mov dptr,#tb0 ;散转处理
00EC,FA,, mov r2,a
00ED,2A,, add a,r2
00EE,50 02,, jnc pk6
00F0,05 83,, inc dph
00F2,73,pk6,pk6: jmp @a+dptr
00F3,21 16,tb0,tb0: ajmp k11 ;键7
00F5,21 29,, ajmp k12 ;键8
00F7,21 3C,, ajmp k13 ;键9
00F9,21 4F,, ajmp k14 ;键/
,,,
00FB,21 52,, ajmp k21 ;键4
00FD,21 65,, ajmp k22 ;键5
00FF,21 78,, ajmp k23 ;键6
0101,21 8B,, ajmp k24 ;键x
,,,
0103,21 8E,, ajmp k31 ;键1
0105,21 A1,, ajmp k32 ;键2
0107,21 B4,, ajmp k33 ;键3
0109,21 C7,, ajmp k34 ;键-
,,,
010B,41 46,, ajmp k41 ;键c
010D,41 9B,, ajmp k42 ;键0
010F,41 AE,, ajmp k43 ;键=
0111,41 B1,, ajmp k44 ;键+
,,,
0113,02 00 6A,, ljmp kl0
,,,
0116,,k11,k11: ;键7
0116,12 03 22,, lcall xshg
0119,A8 41,, mov r0,41h
011B,76 07,, mov @r0,#07h
011D,12 03 4A,, lcall xs
0120,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
0123,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
0126,02 00 6A,, ljmp kl0
0129,,k12,k12: ;键8
0129,12 03 22,, lcall xshg
012C,A8 41,, mov r0,41h
012E,76 08,, mov @r0,#08h
0130,12 03 4A,, lcall xs
0133,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
0136,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
0139,02 00 6A,, ljmp kl0
013C,,k13,k13: ;键9
013C,12 03 22,, lcall xshg
013F,A8 41,, mov r0,41h
0141,76 09,, mov @r0,#09h
0143,12 03 4A,, lcall xs
0146,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
0149,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
014C,02 00 6A,, ljmp kl0
014F,,k14,k14: ;键/
014F,02 00 6A,, ljmp kl0
,,,
0152,,k21,k21: ;键4
0152,12 03 22,, lcall xshg
0155,A8 41,, mov r0,41h
0157,76 04,, mov @r0,#04h
0159,12 03 4A,, lcall xs
015C,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
015F,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
0162,02 00 6A,, ljmp kl0
0165,,k22,k22: ;键5
0165,12 03 22,, lcall xshg
0168,A8 41,, mov r0,41h
016A,76 05,, mov @r0,#05h
016C,12 03 4A,, lcall xs
016F,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
0172,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
0175,02 00 6A,, ljmp kl0
0178,,k23,k23: ;键6
0178,12 03 22,, lcall xshg
017B,A8 41,, mov r0,41h
017D,76 06,, mov @r0,#06h
017F,12 03 4A,, lcall xs
0182,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
0185,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
0188,02 00 6A,, ljmp kl0
018B,,k24,k24: ;键x
018B,02 00 6A,, ljmp kl0
,,,
018E,,k31,k31: ;键1
018E,12 03 22,, lcall xshg
0191,A8 41,, mov r0,41h
0193,76 01,, mov @r0,#01h
0195,12 03 4A,, lcall xs
0198,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
019B,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
019E,02 00 6A,, ljmp kl0
01A1,,k32,k32: ;键2
01A1,12 03 22,, lcall xshg
01A4,A8 41,, mov r0,41h
01A6,76 02,, mov @r0,#02h
01A8,12 03 4A,, lcall xs
01AB,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
01AE,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
01B1,02 00 6A,, ljmp kl0
01B4,,k33,k33: ;键3
01B4,12 03 22,, lcall xshg
01B7,A8 41,, mov r0,41h
01B9,76 03,, mov @r0,#03h
01BB,12 03 4A,, lcall xs
01BE,75 6B 00,, mov 6bh,#00h ;清除键"-"记忆
01C1,75 5B 00,, mov 5bh,#00h ;显示数据末位指针清零
01C4,02 00 6A,, ljmp kl0
01C7,,k34,k34: ;键-
01C7,85 41 4A,, mov 4ah,41h ;保存当前显示指针到4ah
01CA,05 6B,, inc 6bh ;
01CC,E5 6B,, mov a,6bh
01CE,64 01,, xrl a,#01h ;是否第一次按k34
01D0,70 2C,, jnz kw2
01D2,A8 41,, mov r0,41h
01D4,E6,, mov a,@r0 ;当前显示值送a
01D5,45 42,, orl a,42h ;当前显示值与闪烁保留值"或"取出当前实际值
01D7,F5 F0,cs,cs: mov b,a ;寻找数据末位
01D9,E5 F0,, mov a,b
01DB,64 30,, xrl a,#30h ;当前显示位是否为"-"
01DD,70 03,, jnz cs10
01DF,02 01 FA,, ljmp kw0 ;当前显示位是为"-"
01E2,E5 F0,cs10,cs10: mov a,b
01E4,64 2E,, xrl a,#2eh ;当前显示位是否为"灭"
01E6,70 03,, jnz cs20
01E8,02 01 FA,, ljmp kw0 ;当前显示位是为"灭"
01EB,18,cs20,cs20: dec r0 ;当前显示位不是为"灭",继续寻找数据末位
01EC,E8,, mov a,r0
01ED,64 1F,, xrl a,#1fh ;是否找过最低显示位;20h
01EF,60 03,, jz kw00
01F1,02 01 D7,, ljmp cs
01F4,75 5B 00,kw00,kw00: mov 5bh,#00h ;显示位全为数据:5bh指向显示末位
01F7,02 01 FE,, ljmp kw2
01FA,88 5B,kw0,kw0: mov 5bh,r0 ;
01FC,05 5B,, inc 5bh ;是第一次按k17当前显示指针加一(指向有数末位)存5bh
01FE,15 41,kw2,kw2: dec 41h ;当前指针减一
0200,E5 41,, mov a,41h
0202,64 1F,, xrl a,#1fh
0204,70 05,, jnz k170 ;是否减过最低显示位
0206,75 41 23,, mov 41h,#23h ;减过最低显示位回到最高显示位
0209,41 0B,, ajmp k170
020B,A8 4A,k170,k170: mov r0,4ah ;当前显示指针存r0
020D,E5 41,, mov a,41h
020F,64 23,, xrl a,#23h ;减一后的显示指针是否指向最高显示位
0211,70 0E,, jnz kw3
0213,E5 5B,, mov a,5bh
0215,64 00,, xrl a,#00h
0217,70 03,, jnz k171
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -