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

📄 ex_support.lis

📁 一个解决5个IO口扫描25个按键的解决方法,完整文件包,有参考意义,C51.
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 029A 857C              andi R24,197
 029C 84BB              out 0x14,R24
 029E                   .dbline 546
 029E           ;                     BIT(3) | BIT(5));         //把端口pc1、pc3-pc4设置为输入
 029E           ;                         
 029E           ;    DDRC |= BIT(2);                                    //把pc2端口设为输出
 029E A29A              sbi 0x14,2
 02A0                   .dbline 548
 02A0           ;    
 02A0           ;    PORTC |= BIT(1) | BIT(2) | BIT(3) |
 02A0 85B3              in R24,0x15
 02A2 8E63              ori R24,62
 02A4 85BB              out 0x15,R24
 02A6                   .dbline 551
 02A6           ;                   BIT(4) | BIT(5);
 02A6           ;                       
 02A6           ;    PORTC &= ~BIT(2);                          //把pc2端口拉低 
 02A6 AA98              cbi 0x15,2
 02A8                   .dbline 552
 02A8           ;    NOP();
 02A8 0000              nop
 02AA                   .dbline 553
 02AA           ;    NOP();
 02AA 0000              nop
 02AC                   .dbline 555
 02AC           ;    
 02AC           ;    if (!(PINC & (BIT(1))))                    //读取pc1端口,如果返回值是0则表明按键被按下,    
 02AC 9999              sbic 0x13,1
 02AE 02C0              rjmp L93
 02B0           X41:
 02B0                   .dbline 557
 02B0           ;                                       //则返回按键的值                                  
 02B0           ;    {
 02B0                   .dbline 558
 02B0           ;        chTempKeyCode = 5;
 02B0                   .dbline 559
 02B0           ;          return chTempKeyCode;
 02B0 05E0              ldi R16,5
 02B2 01C0              rjmp L44
 02B4           L93:
 02B4                   .dbline 563
 02B4           ;    }   
 02B4           ;    
 02B4           ; 
 02B4           ;    return chTempKeyCode;                      //返回按键值
 02B4 0FEF              ldi R16,255
 02B6                   .dbline -2
 02B6           L44:
 02B6                   .dbline 0 ; func end
 02B6 0895              ret
 02B8                   .dbend
                        .area lit(rom, con, rel)
 0000           L96:
 0000 C0F9              .byte 192,249
 0002 A4B0              .byte 164,176
 0004 9992              .byte 153,146
 0006 82F8              .byte 130,248
 0008 8090              .byte 128,144
                        .area text(rom, con, rel)
 02B8                   .dbfile F:\AVR\按键扫描\EX_Support.c
 02B8                   .dbfunc e Get_Code _Get_Code fc
                        .area  func_lit(rom, con, rel)
 0000           L148:
 0000 7F01              .word `L100
 0002 8101              .word `L102
 0004 8301              .word `L104
 0006 8501              .word `L106
 0008 8701              .word `L108
 000A 8901              .word `L110
 000C 8B01              .word `L112
 000E 8D01              .word `L114
 0010 8F01              .word `L116
 0012 9101              .word `L118
 0014 9301              .word `L119
 0016 9501              .word `L121
 0018 9701              .word `L123
 001A 9901              .word `L125
 001C 9B01              .word `L127
 001E 9D01              .word `L129
 0020 9F01              .word `L131
 0022 A101              .word `L133
 0024 A301              .word `L135
 0026 A501              .word `L137
 0028 A701              .word `L138
 002A A901              .word `L140
 002C AB01              .word `L142
 002E AD01              .word `L144
 0030 AF01              .word `L146
                        .area text(rom, con, rel)
                ;          Table -> y+0
                ;           chj0 -> R20
                ;            chi -> R10
                        .even
 02B8           _Get_Code::
 02B8 AA92              st -y,R10
 02BA 4A93              st -y,R20
 02BC A02E              mov R10,R16
 02BE 2A97              sbiw R28,10
 02C0                   .dbline -1
 02C0                   .dbline 567
 02C0           ; }
 02C0           ; 
 02C0           ; UINT8 Get_Code (UINT8 chi)
 02C0           ; {
 02C0                   .dbline 569
 02C0           ;       UINT8 chj;
 02C0           ;       UINT8 Table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
 02C0 80E0              ldi R24,<L96
 02C2 90E0              ldi R25,>L96
 02C4 FE01              movw R30,R28
 02C6 0AE0              ldi R16,10
 02C8 10E0              ldi R17,0
 02CA FA93              st -y,R31
 02CC EA93              st -y,R30
 02CE 9A93              st -y,R25
 02D0 8A93              st -y,R24
 02D2 00D0              rcall asgncblk
 02D4                   .dbline 570
 02D4           ;       switch(chi)
 02D4 4A2D              mov R20,R10
 02D6 4130              cpi R20,1
 02D8 08F4              brsh X45
 02DA 43C0              rjmp L97
 02DC           X45:
 02DC           X42:
 02DC 89E1              ldi R24,25
 02DE 8A15              cp R24,R10
 02E0 08F4              brsh X46
 02E2 3FC0              rjmp L97
 02E4           X46:
 02E4           X43:
 02E4 80E0              ldi R24,<L148
 02E6 90E0              ldi R25,>L148
 02E8 E42F              mov R30,R20
 02EA E150              subi R30,1
 02EC FF27              clr R31
 02EE EE0F              lsl R30
 02F0 FF1F              rol R31
 02F2 E80F              add R30,R24
 02F4 F91F              adc R31,R25
 02F6 2590              lpm R2,Z+
 02F8 3490              lpm R3,Z
 02FA F101              movw R30,R2
 02FC 0994               ijmp
 02FE           X44:
 02FE                   .dbfile F:\AVR\按键扫描\EX_Support.c
 02FE                   .dbline 571
 02FE           ;       {
 02FE           L100:
 02FE                   .dbline 572
 02FE           ;               case 1:         chj = Table[1];break;
 02FE 4981              ldd R20,y+1
 0300                   .dbline 572
 0300 31C0              rjmp L98
 0302           L102:
 0302                   .dbline 573
 0302           ;               case 2:         chj = Table[2];break;
 0302 4A81              ldd R20,y+2
 0304                   .dbline 573
 0304 2FC0              rjmp L98
 0306           L104:
 0306                   .dbline 574
 0306           ;               case 3:         chj = Table[3];break;
 0306 4B81              ldd R20,y+3
 0308                   .dbline 574
 0308 2DC0              rjmp L98
 030A           L106:
 030A                   .dbline 575
 030A           ;               case 4:         chj = Table[4];break;
 030A 4C81              ldd R20,y+4
 030C                   .dbline 575
 030C 2BC0              rjmp L98
 030E           L108:
 030E                   .dbline 576
 030E           ;               case 5:         chj = Table[5];break;
 030E 4D81              ldd R20,y+5
 0310                   .dbline 576
 0310 29C0              rjmp L98
 0312           L110:
 0312                   .dbline 577
 0312           ;               case 6:         chj = Table[6];break;
 0312 4E81              ldd R20,y+6
 0314                   .dbline 577
 0314 27C0              rjmp L98
 0316           L112:
 0316                   .dbline 578
 0316           ;               case 7:         chj = Table[7];break;
 0316 4F81              ldd R20,y+7
 0318                   .dbline 578
 0318 25C0              rjmp L98
 031A           L114:
 031A                   .dbline 579
 031A           ;               case 8:         chj = Table[8];break;
 031A 4885              ldd R20,y+8
 031C                   .dbline 579
 031C 23C0              rjmp L98
 031E           L116:
 031E                   .dbline 580
 031E           ;               case 9:         chj = Table[9];break;
 031E 4985              ldd R20,y+9
 0320                   .dbline 580
 0320 21C0              rjmp L98
 0322           L118:
 0322                   .dbline 581
 0322           ;               case 10:        chj = Table[0];break;
 0322 4881              ldd R20,y+0
 0324                   .dbline 581
 0324 1FC0              rjmp L98
 0326           L119:
 0326                   .dbline 582
 0326           ;               case 11:        chj = Table[1];break;
 0326 4981              ldd R20,y+1
 0328                   .dbline 582
 0328 1DC0              rjmp L98
 032A           L121:
 032A                   .dbline 583
 032A           ;               case 12:        chj = Table[2];break;
 032A 4A81              ldd R20,y+2
 032C                   .dbline 583
 032C 1BC0              rjmp L98
 032E           L123:
 032E                   .dbline 584
 032E           ;               case 13:        chj = Table[3];break;
 032E 4B81              ldd R20,y+3
 0330                   .dbline 584
 0330 19C0              rjmp L98
 0332           L125:
 0332                   .dbline 585
 0332           ;               case 14:        chj = Table[4];break;
 0332 4C81              ldd R20,y+4
 0334                   .dbline 585
 0334 17C0              rjmp L98
 0336           L127:
 0336                   .dbline 586
 0336           ;               case 15:        chj = Table[5];break;
 0336 4D81              ldd R20,y+5
 0338                   .dbline 586
 0338 15C0              rjmp L98
 033A           L129:
 033A                   .dbline 587
 033A           ;               case 16:        chj = Table[6];break;
 033A 4E81              ldd R20,y+6
 033C                   .dbline 587
 033C 13C0              rjmp L98
 033E           L131:
 033E                   .dbline 588
 033E           ;               case 17:        chj = Table[7];break;
 033E 4F81              ldd R20,y+7
 0340                   .dbline 588
 0340 11C0              rjmp L98
 0342           L133:
 0342                   .dbline 589
 0342           ;               case 18:        chj = Table[8];break;
 0342 4885              ldd R20,y+8
 0344                   .dbline 589
 0344 0FC0              rjmp L98
 0346           L135:
 0346                   .dbline 590
 0346           ;               case 19:        chj = Table[9];break;
 0346 4985              ldd R20,y+9
 0348                   .dbline 590
 0348 0DC0              rjmp L98
 034A           L137:
 034A                   .dbline 591
 034A           ;               case 20:        chj = Table[0];break;
 034A 4881              ldd R20,y+0
 034C                   .dbline 591
 034C 0BC0              rjmp L98
 034E           L138:
 034E                   .dbline 592
 034E           ;               case 21:        chj = Table[1];break;
 034E 4981              ldd R20,y+1
 0350                   .dbline 592
 0350 09C0              rjmp L98
 0352           L140:
 0352                   .dbline 593
 0352           ;               case 22:        chj = Table[2];break;
 0352 4A81              ldd R20,y+2
 0354                   .dbline 593
 0354 07C0              rjmp L98
 0356           L142:
 0356                   .dbline 594
 0356           ;               case 23:        chj = Table[3];break;
 0356 4B81              ldd R20,y+3
 0358                   .dbline 594
 0358 05C0              rjmp L98
 035A           L144:
 035A                   .dbline 595
 035A           ;               case 24:        chj = Table[4];break;
 035A 4C81              ldd R20,y+4
 035C                   .dbline 595
 035C 03C0              rjmp L98
 035E           L146:
 035E                   .dbline 596
 035E           ;               case 25:        chj = Table[5];break;
 035E 4D81              ldd R20,y+5
 0360                   .dbline 596
 0360 01C0              rjmp L98
 0362           L97:
 0362                   .dbline 597
 0362           ;               default:        chj = 0xFF;
 0362 4FEF              ldi R20,255
 0364                   .dbline 598
 0364           ;       }
 0364           L98:
 0364                   .dbline 599
 0364           ;       return chj;
 0364 042F              mov R16,R20
 0366                   .dbline -2
 0366           L95:
 0366                   .dbline 0 ; func end
 

⌨️ 快捷键说明

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