📄 矩阵键盘.lis
字号:
.module _矩阵键盘.c
.area text(rom, con, rel)
0000 .dbfile 矩阵键盘.c
.area data(ram, con, rel)
0000 .dbfile 矩阵键盘.c
0000 _table::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .dbfile 矩阵键盘.c
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .dbfile 矩阵键盘.c
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .dbfile 矩阵键盘.c
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .dbfile 矩阵键盘.c
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .dbfile 矩阵键盘.c
000A .blkb 2
.area idata
000A 777C .byte 'w,124
.area data(ram, con, rel)
000C .dbfile 矩阵键盘.c
000C .blkb 2
.area idata
000C 395E .byte 57,94
.area data(ram, con, rel)
000E .dbfile 矩阵键盘.c
000E .blkb 2
.area idata
000E 7971 .byte 'y,'q
.area data(ram, con, rel)
0010 .dbfile 矩阵键盘.c
0010 .blkb 1
.area idata
0010 FF .byte 255
.area data(ram, con, rel)
0011 .dbfile 矩阵键盘.c
0011 .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
0011 .dbsym e table _table A[17:17]c
0011 _LED_W::
0011 .blkb 2
.area idata
0011 0001 .byte 0,1
.area data(ram, con, rel)
0013 .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
0013 .blkb 2
.area idata
0013 0203 .byte 2,3
.area data(ram, con, rel)
0015 .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
0015 .blkb 2
.area idata
0015 0405 .byte 4,5
.area data(ram, con, rel)
0017 .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
0017 .blkb 2
.area idata
0017 0607 .byte 6,7
.area data(ram, con, rel)
0019 .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
0019 .dbsym e LED_W _LED_W A[8:8]c
.area text(rom, con, rel)
0000 .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_xgsetF000
0004 .dbline -1
0004 .dbline 10
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ;
0004 ; uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0004 ; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
0004 ; uchar const LED_W[8] = {0,1,2,3,4,5,6,7};
0004 ; void delay(uint ms)
0004 ; {
0004 .dbline 12
0004 ; uint i,j;
0004 ; for(i=0;i<ms;i++)
0004 4427 clr R20
0006 5527 clr R21
0008 0BC0 xjmp L5
000A L2:
000A .dbline 13
000A ; {
000A .dbline 14
000A ; for(j=0;j<1141;j++);
000A 6627 clr R22
000C 7727 clr R23
000E 02C0 xjmp L9
0010 L6:
0010 .dbline 14
0010 L7:
0010 .dbline 14
0010 6F5F subi R22,255 ; offset = 1
0012 7F4F sbci R23,255
0014 L9:
0014 .dbline 14
0014 6537 cpi R22,117
0016 E4E0 ldi R30,4
0018 7E07 cpc R23,R30
001A D0F3 brlo L6
001C X0:
001C .dbline 15
001C ; }
001C L3:
001C .dbline 12
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 12
0020 4017 cp R20,R16
0022 5107 cpc R21,R17
0024 90F3 brlo L2
0026 X1:
0026 .dbline -2
0026 L1:
0026 .dbline 0 ; func end
0026 0C940000 xjmp pop_xgsetF000
002A .dbsym r i 20 i
002A .dbsym r j 22 i
002A .dbsym r ms 16 i
002A .dbend
002A .dbfunc e show _show fV
002A ; k -> R10
002A ; j -> R12
.even
002A _show::
002A AA92 st -y,R10
002C CA92 st -y,R12
002E A22E mov R10,R18
0030 C02E mov R12,R16
0032 .dbline -1
0032 .dbline 18
0032 ; }
0032 ; void show(uchar j,uchar k)
0032 ; {
0032 .dbline 19
0032 ; PORTA = table[j]; // i 值的 个位数
0032 80E0 ldi R24,<_table
0034 90E0 ldi R25,>_table
0036 EC2D mov R30,R12
0038 FF27 clr R31
003A E80F add R30,R24
003C F91F adc R31,R25
003E 2080 ldd R2,z+0
0040 2BBA out 0x1b,R2
0042 .dbline 20
0042 ; PORTC = LED_W[k]; //点亮第一位数码管
0042 80E0 ldi R24,<_LED_W
0044 90E0 ldi R25,>_LED_W
0046 EA2D mov R30,R10
0048 FF27 clr R31
004A E80F add R30,R24
004C F91F adc R31,R25
004E 2080 ldd R2,z+0
0050 25BA out 0x15,R2
0052 .dbline 22
0052 ;
0052 ; delay(2);
0052 02E0 ldi R16,2
0054 10E0 ldi R17,0
0056 D4DF xcall _delay
0058 .dbline -2
0058 L10:
0058 .dbline 0 ; func end
0058 C990 ld R12,y+
005A A990 ld R10,y+
005C 0895 ret
005E .dbsym r k 10 c
005E .dbsym r j 12 c
005E .dbend
005E .dbfunc e key_press _key_press fc
005E ; i -> R16
.even
005E _key_press::
005E .dbline -1
005E .dbline 25
005E ; }
005E ; uchar key_press()
005E ; {
005E .dbline 27
005E ; uchar i;
005E ; DDRB=0XFF;
005E 8FEF ldi R24,255
0060 87BB out 0x17,R24
0062 .dbline 28
0062 ; PORTB=0XF0;
0062 80EF ldi R24,240
0064 88BB out 0x18,R24
0066 .dbline 30
0066 ;
0066 ; DDRB=0X0F;
0066 8FE0 ldi R24,15
0068 87BB out 0x17,R24
006A .dbline 32
006A ;
006A ; i=PINB;
006A 06B3 in R16,0x16
006C .dbline 33
006C ; if(i==0XF0)
006C 003F cpi R16,240
006E 21F4 brne L12
0070 X2:
0070 .dbline 34
0070 ; {
0070 .dbline 35
0070 ; DDRB=0XFF;
0070 8FEF ldi R24,255
0072 87BB out 0x17,R24
0074 .dbline 36
0074 ; return 0;
0074 0027 clr R16
0076 03C0 xjmp L11
0078 L12:
0078 .dbline 39
0078 ; }
0078 ; else
0078 ; {
0078 .dbline 40
0078 ; DDRB=0XFF;
0078 8FEF ldi R24,255
007A 87BB out 0x17,R24
007C .dbline 41
007C ; return 1;
007C 01E0 ldi R16,1
007E .dbline -2
007E L11:
007E .dbline 0 ; func end
007E 0895 ret
0080 .dbsym r i 16 c
0080 .dbend
0080 .dbfunc e key_scan _key_scan fc
0080 ; j -> R10
0080 ; key -> R20
0080 ; i -> R22
.even
0080 _key_scan::
0080 0E940000 xcall push_xgsetF00C
0084 .dbline -1
0084 .dbline 46
0084 ; }
0084 ; }
0084 ;
0084 ; uchar key_scan()
0084 ; {
0084 .dbline 47
0084 ; uchar key,i=0X7F,j;
0084 6FE7 ldi R22,127
0086 .dbline 48
0086 ; delay(10);
0086 0AE0 ldi R16,10
0088 10E0 ldi R17,0
008A BADF xcall _delay
008C .dbline 49
008C ; if(key_press())
008C E8DF xcall _key_press
008E 0023 tst R16
0090 09F4 brne X24
0092 91C0 xjmp L15
0094 X24:
0094 X3:
0094 .dbline 50
0094 ; {
0094 L17:
0094 .dbline 52
0094 ; do
0094 ; {
0094 .dbline 53
0094 ; i=(i<<1|i>>7);
0094 262E mov R2,R22
0096 2694 lsr R2
0098 2694 lsr R2
009A 2694 lsr R2
009C 2694 lsr R2
009E 2694 lsr R2
00A0 2694 lsr R2
00A2 2694 lsr R2
00A4 362E mov R3,R22
00A6 330C lsl R3
00A8 3228 or R3,R2
00AA 632D mov R22,R3
00AC .dbline 54
00AC ; PORTB=i;
00AC 38BA out 0x18,R3
00AE .dbline 55
00AE ; DDRB=0X0F;
00AE 8FE0 ldi R24,15
00B0 87BB out 0x17,R24
00B2 .dbline 57
00B2 ;
00B2 ; key=PINB;
00B2 46B3 in R20,0x16
00B4 .dbline 58
00B4 ; j=key&0XF0;
00B4 842F mov R24,R20
00B6 807F andi R24,240
00B8 A82E mov R10,R24
00BA .dbline 60
00BA ;
00BA ; }while(j==0XF0);
00BA L18:
00BA .dbline 60
00BA 8A2D mov R24,R10
00BC 803F cpi R24,240
00BE 51F3 breq L17
00C0 X4:
00C0 L20:
00C0 .dbline 62
00C0 ;
00C0 ; while(key_press());
00C0 L21:
00C0 .dbline 62
00C0 CEDF xcall _key_press
00C2 0023 tst R16
00C4 E9F7 brne L20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -