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

📄 ex_support.lis

📁 一个解决5个IO口扫描25个按键的解决方法,完整文件包,有参考意义,C51.
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01F0 9D99              sbic 0x13,5
 01F2 02C0              rjmp L71
 01F4           X30:
 01F4                   .dbline 405
 01F4           ;                                //则返回按键的值                                  
 01F4           ;    {
 01F4                   .dbline 406
 01F4           ;        chTempKeyCode = 12;
 01F4                   .dbline 407
 01F4           ;          return chTempKeyCode;
 01F4 0CE0              ldi R16,12
 01F6 5FC0              rjmp L44
 01F8           L71:
 01F8                   .dbline 411
 01F8           ;    }
 01F8           ;  ////////////////////////////////////////////////////////////////  
 01F8           ;    //对16按钮进行扫描   
 01F8           ;    DDRC &= ~(BIT(2) | BIT(1) | 
 01F8 84B3              in R24,0x14
 01FA 817D              andi R24,209
 01FC 84BB              out 0x14,R24
 01FE                   .dbline 414
 01FE           ;                        BIT(3) | BIT(5));//把端口pc1-pc3、pc5设置为输入
 01FE           ;                        
 01FE           ;    DDRC  |=  BIT(4);                                                          //把pc4端口设为输出
 01FE A49A              sbi 0x14,4
 0200                   .dbline 416
 0200           ;    
 0200           ;    PORTC |=  BIT(1) | BIT(2) | BIT(3) | 
 0200 85B3              in R24,0x15
 0202 8E63              ori R24,62
 0204 85BB              out 0x15,R24
 0206                   .dbline 419
 0206           ;                        BIT(4) | BIT(5);
 0206           ;                        
 0206           ;    PORTC &=~ BIT(4);                  //把pc4端口拉低 
 0206 AC98              cbi 0x15,4
 0208                   .dbline 420
 0208           ;    NOP();
 0208 0000              nop
 020A                   .dbline 421
 020A           ;    NOP();
 020A 0000              nop
 020C                   .dbline 424
 020C           ;    
 020C           ;    
 020C           ;    if (!(PINC & (BIT(5))))                                         
 020C 9D99              sbic 0x13,5
 020E 02C0              rjmp L73
 0210           X31:
 0210                   .dbline 425
 0210           ;    {
 0210                   .dbline 426
 0210           ;        chTempKeyCode = 16;
 0210                   .dbline 427
 0210           ;          return chTempKeyCode;     //读取pc5端口,如果返回值是0则表明按键被按下,  
 0210 00E1              ldi R16,16
 0212 51C0              rjmp L44
 0214           L73:
 0214                   .dbline 434
 0214           ;                                //则返回按键的值     
 0214           ;    }   
 0214           ;    
 0214           ;    
 0214           ;  //////////////////////////////////////////////////////////////
 0214           ;   //对20-17按钮进行扫描  
 0214           ;    DDRC &= ~(BIT(2) | BIT(3) | 
 0214 84B3              in R24,0x14
 0216 817E              andi R24,225
 0218 84BB              out 0x14,R24
 021A                   .dbline 437
 021A           ;                        BIT(4) | BIT(1));                              //把端口pc1-pc4设置为输入
 021A           ;                        
 021A           ;    DDRC  |=  BIT(5);                                          //把pc5端口设为输出
 021A A59A              sbi 0x14,5
 021C                   .dbline 439
 021C           ;    
 021C           ;    PORTC |=  BIT(1) | BIT(2) | BIT(3) | 
 021C 85B3              in R24,0x15
 021E 8E63              ori R24,62
 0220 85BB              out 0x15,R24
 0222                   .dbline 442
 0222           ;                        BIT(4) | BIT(5);
 0222           ;                        
 0222           ;    PORTC &= ~BIT(5);                                          //把pc5端口拉低 
 0222 AD98              cbi 0x15,5
 0224                   .dbline 443
 0224           ;    NOP();
 0224 0000              nop
 0226                   .dbline 444
 0226           ;    NOP();
 0226 0000              nop
 0228                   .dbline 448
 0228           ;    
 0228           ;    
 0228           ;    
 0228           ;    if (!(PINC & (BIT(4))))     //读取pc4端口,如果返回值是0则表明按键被按下,    
 0228 9C99              sbic 0x13,4
 022A 02C0              rjmp L75
 022C           X32:
 022C                   .dbline 452
 022C           ;                                //则返回按键的值                                  
 022C           ;                                //以下依次对pc3-pc1逐个读取值,如果返回值为0     
 022C           ;                                //则返回相应按键值                                
 022C           ;    {
 022C                   .dbline 453
 022C           ;        chTempKeyCode = 20;
 022C                   .dbline 454
 022C           ;          return chTempKeyCode;
 022C 04E1              ldi R16,20
 022E 43C0              rjmp L44
 0230           L75:
 0230                   .dbline 456
 0230           ;    }
 0230           ;    else if (!(PINC & (BIT(3))))
 0230 9B99              sbic 0x13,3
 0232 02C0              rjmp L77
 0234           X33:
 0234                   .dbline 457
 0234           ;    {
 0234                   .dbline 458
 0234           ;        chTempKeyCode = 19;
 0234                   .dbline 459
 0234           ;          return chTempKeyCode;
 0234 03E1              ldi R16,19
 0236 3FC0              rjmp L44
 0238           L77:
 0238                   .dbline 461
 0238           ;    }
 0238           ;    else if (!(PINC & (BIT(2))))
 0238 9A99              sbic 0x13,2
 023A 02C0              rjmp L79
 023C           X34:
 023C                   .dbline 462
 023C           ;    {
 023C                   .dbline 463
 023C           ;        chTempKeyCode = 18;
 023C                   .dbline 464
 023C           ;          return chTempKeyCode;
 023C 02E1              ldi R16,18
 023E 3BC0              rjmp L44
 0240           L79:
 0240                   .dbline 466
 0240           ;    }
 0240           ;    else if (!(PINC & (BIT(1))))
 0240 9999              sbic 0x13,1
 0242 02C0              rjmp L81
 0244           X35:
 0244                   .dbline 467
 0244           ;    {
 0244                   .dbline 468
 0244           ;        chTempKeyCode = 17;
 0244                   .dbline 469
 0244           ;          return chTempKeyCode;
 0244 01E1              ldi R16,17
 0246 37C0              rjmp L44
 0248           L81:
 0248                   .dbline 477
 0248           ;    }
 0248           ;    
 0248           ;    
 0248           ;    
 0248           ; //////////////////////////////////////////////////////////////
 0248           ;     //对15-13按钮进行扫描  
 0248           ;    
 0248           ;    DDRC  &= ~(BIT(1) | BIT(3) | 
 0248 84B3              in R24,0x14
 024A 817D              andi R24,209
 024C 84BB              out 0x14,R24
 024E                   .dbline 480
 024E           ;                         BIT(2) | BIT(5));                                     //把端口pc1-pc3、pc5设置为输入
 024E           ;                         
 024E           ;    DDRC  |=   BIT(4);                                                 //把pc4端口设为输出
 024E A49A              sbi 0x14,4
 0250                   .dbline 482
 0250           ;    
 0250           ;    PORTC |=   BIT(1) | BIT(2) | BIT(3) | 
 0250 85B3              in R24,0x15
 0252 8E63              ori R24,62
 0254 85BB              out 0x15,R24
 0256                   .dbline 485
 0256           ;                     BIT(4) | BIT(5);
 0256           ;                         
 0256           ;    PORTC &=  ~BIT(4);                                                         //把pc4端口拉低 
 0256 AC98              cbi 0x15,4
 0258                   .dbline 486
 0258           ;    NOP();
 0258 0000              nop
 025A                   .dbline 487
 025A           ;    NOP();
 025A 0000              nop
 025C                   .dbline 490
 025C           ;    
 025C           ;     
 025C           ;    if (!(PINC & (BIT(3))))             //读取pc3端口,如果返回值是0则表明按键被按下,    
 025C 9B99              sbic 0x13,3
 025E 02C0              rjmp L83
 0260           X36:
 0260                   .dbline 494
 0260           ;                                        //则返回按键的值                                  
 0260           ;                                        //以下依次对pc2-pc1逐个读取值,如果返回值为0      
 0260           ;                                        //则返回相应按键值                                
 0260           ;    {
 0260                   .dbline 495
 0260           ;        chTempKeyCode = 15;
 0260                   .dbline 496
 0260           ;          return chTempKeyCode;
 0260 0FE0              ldi R16,15
 0262 29C0              rjmp L44
 0264           L83:
 0264                   .dbline 498
 0264           ;    }
 0264           ;    else if (!(PINC & (BIT(2))))
 0264 9A99              sbic 0x13,2
 0266 02C0              rjmp L85
 0268           X37:
 0268                   .dbline 499
 0268           ;    {
 0268                   .dbline 500
 0268           ;        chTempKeyCode = 14;
 0268                   .dbline 501
 0268           ;          return chTempKeyCode;
 0268 0EE0              ldi R16,14
 026A 25C0              rjmp L44
 026C           L85:
 026C                   .dbline 503
 026C           ;    }
 026C           ;    else if (!(PINC & (BIT(1))))
 026C 9999              sbic 0x13,1
 026E 02C0              rjmp L87
 0270           X38:
 0270                   .dbline 504
 0270           ;    {
 0270                   .dbline 505
 0270           ;        chTempKeyCode = 13;
 0270                   .dbline 506
 0270           ;          return chTempKeyCode;
 0270 0DE0              ldi R16,13
 0272 21C0              rjmp L44
 0274           L87:
 0274                   .dbline 514
 0274           ;    }
 0274           ;  
 0274           ;  
 0274           ;  
 0274           ; //////////////////////////////////////////////////////////////
 0274           ;     //对10-9按钮进行扫描  
 0274           ;    
 0274           ;    DDRC  &= ~(BIT(2) | BIT(1) | 
 0274 84B3              in R24,0x14
 0276 897C              andi R24,201
 0278 84BB              out 0x14,R24
 027A                   .dbline 517
 027A           ;                         BIT(4) | BIT(5));             //把端口pc1-pc2、pc4-pc5设置为输入
 027A           ;    
 027A           ;    DDRC  |=   BIT(3);                         //把pc3端口设为输出
 027A A39A              sbi 0x14,3
 027C                   .dbline 519
 027C           ;    
 027C           ;    PORTC |=   BIT(1) | BIT(2) | 
 027C 85B3              in R24,0x15
 027E 8E63              ori R24,62
 0280 85BB              out 0x15,R24
 0282                   .dbline 522
 0282           ;                         BIT(3) | BIT(4) | BIT(5);
 0282           ;                         
 0282           ;    PORTC &=  ~BIT(3);                         //把pc3端口拉低 
 0282 AB98              cbi 0x15,3
 0284                   .dbline 523
 0284           ;    NOP();
 0284 0000              nop
 0286                   .dbline 524
 0286           ;    NOP(); 
 0286 0000              nop
 0288                   .dbline 527
 0288           ;    
 0288           ;    
 0288           ;    if (!(PINC & (BIT(2))))                    //读取pc2端口,如果返回值是0则表明按键被按下,    
 0288 9A99              sbic 0x13,2
 028A 02C0              rjmp L89
 028C           X39:
 028C                   .dbline 529
 028C           ;                                               //则返回按键的值                                                            
 028C           ;    {
 028C                   .dbline 530
 028C           ;        chTempKeyCode = 10;
 028C                   .dbline 531
 028C           ;          return chTempKeyCode;
 028C 0AE0              ldi R16,10
 028E 13C0              rjmp L44
 0290           L89:
 0290                   .dbline 533
 0290           ;    }
 0290           ;    else if (!(PINC & (BIT(1))))               //读取pc1端口,如果返回值是0则表明按键被按下,    
 0290 9999              sbic 0x13,1
 0292 02C0              rjmp L91
 0294           X40:
 0294                   .dbline 535
 0294           ;                                               //则返回按键的值            
 0294           ;    {
 0294                   .dbline 536
 0294           ;        chTempKeyCode = 9;
 0294                   .dbline 537
 0294           ;          return chTempKeyCode;
 0294 09E0              ldi R16,9
 0296 0FC0              rjmp L44
 0298           L91:
 0298                   .dbline 543
 0298           ;    }
 0298           ;    
 0298           ;    
 0298           ;   ////////////////////////////////////////////////////// 
 0298           ;    //对5按钮进行扫描  
 0298           ;    DDRC  &= ~(BIT(4) | BIT(1) | 
 0298 84B3              in R24,0x14

⌨️ 快捷键说明

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