📄 4x4key.lis
字号:
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 + -