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

📄 pxsjpgb.sdi

📁 电子时钟的单片机设计
💻 SDI
📖 第 1 页 / 共 2 页
字号:
,,,        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 + -