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

📄 4x4key.lis

📁 39 数码管显示4×4键盘矩阵按键(修改后)
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00A6                   .dbline 65
 00A6           ; 
 00A6           ; 
 00A6           ; //反转键盘,高4位输入,低4位输出,低4位先置0,放入4列
 00A6           ;   DDRB=0x0F;
 00A6 8FE0              ldi R24,15
 00A8 87BB              out 0x17,R24
 00AA                   .dbline 66
 00AA           ;   PORTB=0xF0;
 00AA 80EF              ldi R24,240
 00AC 88BB              out 0x18,R24
 00AE                   .dbline 67
 00AE           ;   delay_ms(2);
 00AE 02E0              ldi R16,2
 00B0 10E0              ldi R17,0
 00B2 A6DF              xcall _delay_ms
 00B4                   .dbline 69
 00B4           ; //下面对0~3行分别附加起始值0、4、8、12
 00B4           ;   switch(PINB)
 00B4 46B3              in R20,0x16
 00B6 5527              clr R21
 00B8 403B              cpi R20,176
 00BA E0E0              ldi R30,0
 00BC 5E07              cpc R21,R30
 00BE 11F1              breq L26
 00C0 80EB              ldi R24,176
 00C2 90E0              ldi R25,0
 00C4 8417              cp R24,R20
 00C6 9507              cpc R25,R21
 00C8 2CF0              brlt L29
 00CA           L28:
 00CA 4037              cpi R20,112
 00CC E0E0              ldi R30,0
 00CE 5E07              cpc R21,R30
 00D0 F9F0              breq L27
 00D2 24C0              xjmp L21
 00D4           L29:
 00D4 403D              cpi R20,208
 00D6 E0E0              ldi R30,0
 00D8 5E07              cpc R21,R30
 00DA 71F0              breq L25
 00DC 403D              cpi R20,208
 00DE E0E0              ldi R30,0
 00E0 5E07              cpc R21,R30
 00E2 E4F0              brlt L21
 00E4           L30:
 00E4 403E              cpi R20,224
 00E6 E0E0              ldi R30,0
 00E8 5E07              cpc R21,R30
 00EA 09F0              breq L24
 00EC 17C0              xjmp L21
 00EE           X1:
 00EE                   .dbline 70
 00EE           ;    {
 00EE           L24:
 00EE                   .dbline 71
 00EE           ;     case 0B11100000: KeyNo +=0;break;
 00EE 20900000          lds R2,_KeyNo
 00F2 20920000          sts _KeyNo,R2
 00F6                   .dbline 71
 00F6 15C0              xjmp L22
 00F8           L25:
 00F8                   .dbline 72
 00F8           ;     case 0B11010000: KeyNo +=4;break;
 00F8 80910000          lds R24,_KeyNo
 00FC 8C5F              subi R24,252    ; addi 4
 00FE 80930000          sts _KeyNo,R24
 0102                   .dbline 72
 0102 0FC0              xjmp L22
 0104           L26:
 0104                   .dbline 73
 0104           ;     case 0B10110000: KeyNo +=8;break;
 0104 80910000          lds R24,_KeyNo
 0108 885F              subi R24,248    ; addi 8
 010A 80930000          sts _KeyNo,R24
 010E                   .dbline 73
 010E 09C0              xjmp L22
 0110           L27:
 0110                   .dbline 74
 0110           ;     case 0B01110000: KeyNo +=12;break;
 0110 80910000          lds R24,_KeyNo
 0114 845F              subi R24,244    ; addi 12
 0116 80930000          sts _KeyNo,R24
 011A                   .dbline 74
 011A 03C0              xjmp L22
 011C           L21:
 011C                   .dbline 75
 011C 8FEF              ldi R24,255
 011E 80930000          sts _KeyNo,R24
 0122                   .dbline 76
 0122           L22:
 0122                   .dbline -2
 0122           L13:
 0122 0E940000          xcall pop_gset1
 0126                   .dbline 0 ; func end
 0126 0895              ret
 0128                   .dbend
 0128                   .dbfunc e Beep _Beep fV
 0128           ;              i -> R20
                        .even
 0128           _Beep::
 0128 0E940000          xcall push_gset1
 012C                   .dbline -1
 012C                   .dbline 83
 012C           ;     default:KeyNo=0xFF;
 012C           ;    }
 012C           ; }
 012C           ; 
 012C           ; //-----------------------------------------------------------------   
 012C           ; // 蜂鸣器子程序        
 012C           ; //-----------------------------------------------------------------
 012C           ; void Beep()
 012C           ; {
 012C                   .dbline 85
 012C           ;   uchar i;
 012C           ;   for(i=0;i<100;i++)
 012C 4427              clr R20
 012E 0BC0              xjmp L35
 0130           L32:
 0130                   .dbline 86
 0130                   .dbline 87
 0130 02E0              ldi R16,2
 0132 10E0              ldi R17,0
 0134 65DF              xcall _delay_ms
 0136                   .dbline 88
 0136 80E8              ldi R24,128
 0138 90E0              ldi R25,0
 013A 22B2              in R2,0x12
 013C 3324              clr R3
 013E 2826              eor R2,R24
 0140 3926              eor R3,R25
 0142 22BA              out 0x12,R2
 0144                   .dbline 89
 0144           L33:
 0144                   .dbline 85
 0144 4395              inc R20
 0146           L35:
 0146                   .dbline 85
 0146 4436              cpi R20,100
 0148 98F3              brlo L32
 014A                   .dbline -2
 014A           L31:
 014A 0E940000          xcall pop_gset1
 014E                   .dbline 0 ; func end
 014E 0895              ret
 0150                   .dbsym r i 20 c
 0150                   .dbend
 0150                   .dbfunc e main _main fI
                        .even
 0150           _main::
 0150                   .dbline -1
 0150                   .dbline 96
 0150           ;   {
 0150           ;     delay_ms(2);
 0150           ;     BEEP();
 0150           ;   }
 0150           ; }
 0150           ; 
 0150           ; //-----------------------------------------------------------------
 0150           ; // 主程序
 0150           ; //-----------------------------------------------------------------
 0150           ; int main()
 0150           ; {
 0150                   .dbline 98
 0150           ;   //配置数码管显示端口
 0150           ;   DDRC=0xFF;
 0150 8FEF              ldi R24,255
 0152 84BB              out 0x14,R24
 0154                   .dbline 99
 0154           ;   PORTC=0x00;
 0154 2224              clr R2
 0156 25BA              out 0x15,R2
 0158 15C0              xjmp L38
 015A           L37:
 015A                   .dbline 101
 015A           ;   while(1)
 015A           ;   {
 015A                   .dbline 103
 015A           ;     //如果键盘矩阵有键按下则扫描键值
 015A           ;     if(KeyMatrix_Down()) Keys_Scan();
 015A 68DF              xcall _KeyMatrix_Down
 015C 0023              tst R16
 015E 91F0              breq L38
 0160                   .dbline 103
 0160 7ADF              xcall _Keys_Scan
 0162                   .dbline 104
 0162           ;      else continue;
 0162           L41:
 0162                   .dbline 105
 0162           ;     if(KeyNo<16)   //得到有效值
 0162 80910000          lds R24,_KeyNo
 0166 8031              cpi R24,16
 0168 50F4              brsh L45
 016A                   .dbline 106
 016A           ;      {
 016A                   .dbline 107
 016A           ;        PORTC=SEG_CODE[KeyNo];  //显示键值
 016A 80E0              ldi R24,<_SEG_CODE
 016C 90E0              ldi R25,>_SEG_CODE
 016E E0910000          lds R30,_KeyNo
 0172 FF27              clr R31
 0174 E80F              add R30,R24
 0176 F91F              adc R31,R25
 0178 E491              lpm R30,Z
 017A E5BB              out 0x15,R30
 017C                   .dbline 108
 017C           ;        Beep();  //响铃
 017C D5DF              xcall _Beep
 017E                   .dbline 109
 017E           ;      }
 017E           L44:
 017E                   .dbline 110
 017E           L45:
 017E                   .dbline 110
 017E 56DF              xcall _KeyMatrix_Down
 0180 0023              tst R16
 0182 E9F7              brne L44
 0184                   .dbline 111
 0184           L38:
 0184                   .dbline 100
 0184 EACF              xjmp L37
 0186           X2:
 0186                   .dbline -2
 0186           L36:
 0186                   .dbline 0 ; func end
 0186 0895              ret
 0188                   .dbend

⌨️ 快捷键说明

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