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

📄 4x4key_main.lis

📁 4*4按键扫描程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00E6 66B3              in R22,0x16
 00E8                   .dbline 10
 00E8           ; tem1=tem1&0x0f;
 00E8 6F70              andi R22,15
 00EA                   .dbline 11
 00EA           ; if(tem1!=0x0f)              //判断是否有键被按下
 00EA 6F30              cpi R22,15
 00EC A1F0              breq L28
 00EE           X13:
 00EE                   .dbline 12
 00EE           ;   {
 00EE                   .dbline 13
 00EE           ;   s_ms(200);                  //延时
 00EE 08EC              ldi R16,200
 00F0 10E0              ldi R17,0
 00F2 86DF              xcall _s_ms
 00F4                   .dbline 14
 00F4           ;   tem2=PINB;                //读取端口B
 00F4 A6B2              in R10,0x16
 00F6                   .dbline 15
 00F6           ;   tem2=tem2&0x0f;
 00F6 8A2D              mov R24,R10
 00F8 8F70              andi R24,15
 00FA A82E              mov R10,R24
 00FC                   .dbline 16
 00FC           ;   if(tem1==tem2)            //判断是否为干扰
 00FC 6817              cp R22,R24
 00FE 59F4              brne L30
 0100           X14:
 0100                   .dbline 17
 0100           ;     {
 0100                   .dbline 18
 0100           ;       DDRB=0x0f;              //B口高四位输入 低四位输出
 0100 8FE0              ldi R24,15
 0102 87BB              out 0x17,R24
 0104                   .dbline 19
 0104           ;       PORTB=0xf0;             //反相输出
 0104 80EF              ldi R24,240
 0106 88BB              out 0x18,R24
 0108                   .dbline 20
 0108           ;       s_ms(50);                  //换向后要延时
 0108 02E3              ldi R16,50
 010A 10E0              ldi R17,0
 010C 79DF              xcall _s_ms
 010E                   .dbline 21
 010E           ;       rem=PINB;               //读取端口B
 010E 46B3              in R20,0x16
 0110                   .dbline 22
 0110           ;       rem=rem&0xf0;           //取高四位 
 0110 407F              andi R20,240
 0112                   .dbline 23
 0112           ;       rem=rem+tem1;           //合并
 0112 460F              add R20,R22
 0114                   .dbline 24
 0114           ;       rem=~rem;               //反向输出
 0114 4095              com R20
 0116                   .dbline 31
 0116           ;       //do                    //判断按键是否被释放
 0116           ;       //{
 0116           ;     // PORTB=0xf0;
 0116           ;       //s_ms(200);
 0116           ;       //}
 0116           ;     //while(PINB!=0xf0);
 0116           ;       }
 0116           L30:
 0116                   .dbline 32
 0116           ;   }
 0116           L28:
 0116                   .dbline 33
 0116           ; return(rem);
 0116 042F              mov R16,R20
 0118                   .dbline -2
 0118           L27:
 0118                   .dbline 0 ; func end
 0118 0C940000          xjmp pop_xgsetF00C
 011C                   .dbsym l i 1 c
 011C                   .dbsym r tem2 10 c
 011C                   .dbsym r rem 20 c
 011C                   .dbsym r tem1 22 c
 011C                   .dbend
 011C                   .dbfile E:\产品\开发板\光盘\16实验程序\4x4键盘\disp.h
 011C                   .dbfunc e disa _disa fV
 011C           ;           data -> R10
                        .even
 011C           _disa::
 011C AA92              st -y,R10
 011E A02E              mov R10,R16
 0120                   .dbline -1
 0120                   .dbline 9
 0120           ; //数码管显示子程序
 0120           ; 
 0120           ; #define ls138a 7
 0120           ; #define ls138b 6
 0120           ; #define ls138c 5
 0120           ; #define ls138en 4
 0120           ; uchar a1,a2,a3;
 0120           ; void disa(uchar data)
 0120           ; {
 0120                   .dbline 10
 0120           ; a3=data/100;
 0120 14E6              ldi R17,100
 0122 0A2D              mov R16,R10
 0124 0E940000          xcall div8u
 0128 00930000          sts _a3,R16
 012C                   .dbline 11
 012C           ; a2=(data-a3*100)/10;
 012C 202E              mov R2,R16
 012E 84E6              ldi R24,100
 0130 829D              mul R24,R2
 0132 0A2D              mov R16,R10
 0134 0019              sub R16,R0
 0136 1AE0              ldi R17,10
 0138 0E940000          xcall div8u
 013C 00930100          sts _a2,R16
 0140                   .dbline 12
 0140           ; a1=(data-a3*100-a2*10);
 0140 20900000          lds R2,_a3
 0144 84E6              ldi R24,100
 0146 829D              mul R24,R2
 0148 2A2C              mov R2,R10
 014A 2018              sub R2,R0
 014C 302E              mov R3,R16
 014E 8AE0              ldi R24,10
 0150 839D              mul R24,R3
 0152 2018              sub R2,R0
 0154 20920200          sts _a1,R2
 0158                   .dbline -2
 0158           L32:
 0158                   .dbline 0 ; func end
 0158 A990              ld R10,y+
 015A 0895              ret
 015C                   .dbsym r data 10 c
 015C                   .dbend
 015C                   .dbfunc e disp _disp fV
 015C           ;             bb -> R12,R13
 015C           ;             aa -> R10
                        .even
 015C           _disp::
 015C 0E940000          xcall push_xgset003C
 0160 A02E              mov R10,R16
 0162                   .dbline -1
 0162                   .dbline 16
 0162           ; }
 0162           ; 
 0162           ; void disp(uchar aa)
 0162           ; {
 0162                   .dbline 17
 0162           ; uint bb=0;
 0162 CC24              clr R12
 0164 DD24              clr R13
 0166                   .dbline 18
 0166           ; DDRA=0xff;      //初始化端口A
 0166 8FEF              ldi R24,255
 0168 8ABB              out 0x1a,R24
 016A                   .dbline 19
 016A           ; PORTA=0xff;
 016A 8BBB              out 0x1b,R24
 016C                   .dbline 20
 016C           ;         disa(aa);//提取aa的各位
 016C 0A2D              mov R16,R10
 016E D6DF              xcall _disa
 0170                   .dbline 21
 0170           ;       sendbyte(a1);//数码管1
 0170 00910200          lds R16,_a1
 0174 4EDF              xcall _sendbyte
 0176                   .dbline 22
 0176           ;         PORTA&=~(1<<ls138a);
 0176 DF98              cbi 0x1b,7
 0178                   .dbline 23
 0178           ;         PORTA&=~(1<<ls138b);
 0178 DE98              cbi 0x1b,6
 017A                   .dbline 24
 017A           ;         PORTA&=~(1<<ls138c);
 017A DD98              cbi 0x1b,5
 017C                   .dbline 25
 017C           ;         s_ms(600);             
 017C 08E5              ldi R16,600
 017E 12E0              ldi R17,2
 0180 3FDF              xcall _s_ms
 0182                   .dbline 26
 0182           ;         sendbyte(a2);//数码管2
 0182 00910100          lds R16,_a2
 0186 45DF              xcall _sendbyte
 0188                   .dbline 27
 0188           ;         PORTA|=(1<<ls138a);
 0188 DF9A              sbi 0x1b,7
 018A                   .dbline 28
 018A           ;         PORTA&=~(1<<ls138b);
 018A DE98              cbi 0x1b,6
 018C                   .dbline 29
 018C           ;         PORTA&=~(1<<ls138c);
 018C DD98              cbi 0x1b,5
 018E                   .dbline 30
 018E           ;         s_ms(600);       
 018E 08E5              ldi R16,600
 0190 12E0              ldi R17,2
 0192 36DF              xcall _s_ms
 0194                   .dbline 31
 0194           ;         sendbyte(a3);//数码管3
 0194 00910000          lds R16,_a3
 0198 3CDF              xcall _sendbyte
 019A                   .dbline 32
 019A           ;         PORTA&=~(1<<ls138a);
 019A DF98              cbi 0x1b,7
 019C                   .dbline 33
 019C           ;         PORTA|=(1<<ls138b);
 019C DE9A              sbi 0x1b,6
 019E                   .dbline 34
 019E           ;         PORTA&=~(1<<ls138c);
 019E DD98              cbi 0x1b,5
 01A0                   .dbline 35
 01A0           ;         s_ms(600); 
 01A0 08E5              ldi R16,600
 01A2 12E0              ldi R17,2
 01A4 2DDF              xcall _s_ms
 01A6                   .dbline 36
 01A6           ;         sendbyte(0);//数码管4
 01A6 0027              clr R16
 01A8 34DF              xcall _sendbyte
 01AA                   .dbline 37
 01AA           ;         PORTA|=(1<<ls138a);
 01AA DF9A              sbi 0x1b,7
 01AC                   .dbline 38
 01AC           ;         PORTA|=(1<<ls138b);
 01AC DE9A              sbi 0x1b,6
 01AE                   .dbline 39
 01AE           ;         PORTA&=~(1<<ls138c);
 01AE DD98              cbi 0x1b,5
 01B0                   .dbline 40
 01B0           ;         s_ms(600); 
 01B0 08E5              ldi R16,600
 01B2 12E0              ldi R17,2
 01B4 25DF              xcall _s_ms
 01B6                   .dbline 41
 01B6           ;         sendbyte(0);//数码管5
 01B6 0027              clr R16
 01B8 2CDF              xcall _sendbyte
 01BA                   .dbline 42
 01BA           ;         PORTA&=~(1<<ls138a);
 01BA DF98              cbi 0x1b,7
 01BC                   .dbline 43
 01BC           ;         PORTA&=~(1<<ls138b);
 01BC DE98              cbi 0x1b,6
 01BE                   .dbline 44
 01BE           ;         PORTA|=(1<<ls138c);
 01BE DD9A              sbi 0x1b,5
 01C0                   .dbline 45
 01C0           ;         s_ms(600); 
 01C0 08E5              ldi R16,600
 01C2 12E0              ldi R17,2
 01C4 1DDF              xcall _s_ms
 01C6                   .dbline 46
 01C6           ;         sendbyte(0);//数码管6
 01C6 0027              clr R16
 01C8 24DF              xcall _sendbyte
 01CA                   .dbline 47
 01CA           ;         PORTA|=(1<<ls138a);
 01CA DF9A              sbi 0x1b,7
 01CC                   .dbline 48
 01CC           ;         PORTA&=~(1<<ls138b);
 01CC DE98              cbi 0x1b,6
 01CE                   .dbline 49
 01CE           ;         PORTA|=(1<<ls138c);
 01CE DD9A              sbi 0x1b,5
 01D0                   .dbline 50
 01D0           ;         s_ms(600); 
 01D0 08E5              ldi R16,600
 01D2 12E0              ldi R17,2
 01D4 15DF              xcall _s_ms
 01D6                   .dbline 51
 01D6           ;         sendbyte(0);//数码管7
 01D6 0027              clr R16
 01D8 1CDF              xcall _sendbyte
 01DA                   .dbline 52
 01DA           ;         PORTA&=~(1<<ls138a);
 01DA DF98              cbi 0x1b,7
 01DC                   .dbline 53
 01DC           ;         PORTA|=(1<<ls138b);
 01DC DE9A              sbi 0x1b,6
 01DE                   .dbline 54
 01DE           ;         PORTA|=(1<<ls138c);
 01DE DD9A              sbi 0x1b,5
 01E0                   .dbline 55
 01E0           ;         s_ms(600); 
 01E0 08E5              ldi R16,600
 01E2 12E0              ldi R17,2
 01E4 0DDF              xcall _s_ms
 01E6                   .dbline 56
 01E6           ;         sendbyte(0);//数码管8
 01E6 0027              clr R16
 01E8 14DF              xcall _sendbyte
 01EA                   .dbline 57
 01EA           ;         PORTA|=(1<<ls138a);
 01EA DF9A              sbi 0x1b,7
 01EC                   .dbline 58
 01EC           ;         PORTA|=(1<<ls138b);
 01EC DE9A              sbi 0x1b,6
 01EE                   .dbline 59
 01EE           ;         PORTA|=(1<<ls138c);
 01EE DD9A              sbi 0x1b,5
 01F0                   .dbline 60
 01F0           ;         s_ms(600);
 01F0 08E5              ldi R16,600
 01F2 12E0              ldi R17,2
 01F4 05DF              xcall _s_ms
 01F6                   .dbline -2
 01F6           L33:
 01F6                   .dbline 0 ; func end
 01F6 0C940000          xjmp pop_xgset003C
 01FA                   .dbsym r bb 12 i
 01FA                   .dbsym r aa 10 c
 01FA                   .dbend
 01FA                   .dbfile E:\产品\开发板\光盘\16实验程序\4x4键盘\4x4key_main.c
 01FA                   .dbfunc e turn _turn fI
 01FA           ;            key -> R16
                        .even
 01FA           _turn::
 01FA 4A93              st -y,R20
 01FC 5A93              st -y,R21
 01FE                   .dbline -1
 01FE                   .dbline 17

⌨️ 快捷键说明

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