📄 3x3key.lis
字号:
00FA .dbline 49
00FA ; case 0x30: key=0x04;
00FA 44E0 ldi R20,4
00FC .dbline 50
00FC ; break;
00FC 05C0 rjmp L30
00FE L33:
00FE .dbline 51
00FE ; case 0x28: key=0x05;
00FE 45E0 ldi R20,5
0100 .dbline 52
0100 ; break;
0100 03C0 rjmp L30
0102 L34:
0102 .dbline 53
0102 ; case 0x18: key=0x06;
0102 46E0 ldi R20,6
0104 .dbline 54
0104 ; break;
0104 01C0 rjmp L30
0106 L29:
0106 .dbline 55
0106 ; default: key=0;
0106 4427 clr R20
0108 .dbline 56
0108 ; break;
0108 L30:
0108 .dbline 58
0108 ; }
0108 ; DDRC=0X38;
0108 88E3 ldi R24,56
010A 84BB out 0x14,R24
010C .dbline 59
010C ; PORTC=0X07;
010C 87E0 ldi R24,7
010E 85BB out 0x15,R24
0110 .dbline 60
0110 ; break;
0110 2AC0 rjmp L17
0112 L37:
0112 .dbline 62
0112 ; case 0x03:
0112 ; DDRC=0X07;
0112 87E0 ldi R24,7
0114 84BB out 0x14,R24
0116 .dbline 63
0116 ; PORTC=0X38;
0116 88E3 ldi R24,56
0118 85BB out 0x15,R24
011A .dbline 64
011A ; delay_us(1);
011A 01E0 ldi R16,1
011C 10E0 ldi R17,0
011E 70DF rcall _delay_us
0120 .dbline 65
0120 ; temp1=PINC;
0120 63B3 in R22,0x13
0122 .dbline 66
0122 ; temp1&=0x38;
0122 6873 andi R22,56
0124 .dbline 67
0124 ; switch(temp1)
0124 7727 clr R23
0126 6832 cpi R22,40
0128 E0E0 ldi R30,0
012A 7E07 cpc R23,R30
012C 89F0 breq L42
012E 88E2 ldi R24,40
0130 90E0 ldi R25,0
0132 8617 cp R24,R22
0134 9707 cpc R25,R23
0136 2CF0 brlt L45
0138 L44:
0138 6831 cpi R22,24
013A E0E0 ldi R30,0
013C 7E07 cpc R23,R30
013E 51F0 breq L43
0140 0BC0 rjmp L38
0142 L45:
0142 6033 cpi R22,48
0144 E0E0 ldi R30,0
0146 7E07 cpc R23,R30
0148 09F0 breq L41
014A 06C0 rjmp L38
014C X4:
014C .dbline 68
014C ; {
014C L41:
014C .dbline 69
014C ; case 0x30: key=0x07;
014C 47E0 ldi R20,7
014E .dbline 70
014E ; break;
014E 05C0 rjmp L39
0150 L42:
0150 .dbline 71
0150 ; case 0x28: key=0x08;
0150 48E0 ldi R20,8
0152 .dbline 72
0152 ; break;
0152 03C0 rjmp L39
0154 L43:
0154 .dbline 73
0154 ; case 0x18: key=0x09;
0154 49E0 ldi R20,9
0156 .dbline 74
0156 ; break;
0156 01C0 rjmp L39
0158 L38:
0158 .dbline 75
0158 ; default: key=0;
0158 4427 clr R20
015A .dbline 76
015A ; break;
015A L39:
015A .dbline 78
015A ; }
015A ; DDRC=0X38;
015A 88E3 ldi R24,56
015C 84BB out 0x14,R24
015E .dbline 79
015E ; PORTC=0X07;
015E 87E0 ldi R24,7
0160 85BB out 0x15,R24
0162 .dbline 80
0162 ; break;
0162 01C0 rjmp L17
0164 L16:
0164 .dbline 82
0164 ; default:
0164 ; key=0;
0164 4427 clr R20
0166 .dbline 83
0166 ; break;
0166 L17:
0166 .dbline 85
0166 ; }
0166 ; return (key);
0166 042F mov R16,R20
0168 .dbline -2
0168 L15:
0168 00D0 rcall pop_gset3
016A .dbline 0 ; func end
016A 0895 ret
016C .dbsym r temp1 22 c
016C .dbsym r key 20 c
016C .dbsym r temp 20 c
016C .dbend
.area lit(rom, con, rel)
0000 L47:
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
.area text(rom, con, rel)
016C .dbfile F:\Learn\AVR\Pro_Mega8\KEY\3X3Key\3X3Key.C
016C .dbfunc e main _main fV
016C ; num -> y+0
016C ; keynum -> R20
016C ; temp -> R22
.even
016C _main::
016C 2A97 sbiw R28,10
016E .dbline -1
016E .dbline 90
016E ; }
016E ;
016E ; //主函数,扫描按键显示数据
016E ; void main()
016E ; {
016E .dbline 92
016E ; unsigned char temp, keynum;
016E ; unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66,
016E 80E0 ldi R24,<L47
0170 90E0 ldi R25,>L47
0172 FE01 movw R30,R28
0174 0AE0 ldi R16,10
0176 10E0 ldi R17,0
0178 FA93 st -y,R31
017A EA93 st -y,R30
017C 9A93 st -y,R25
017E 8A93 st -y,R24
0180 00D0 rcall asgncblk
0182 .dbline 95
0182 ; 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
0182 ; //初始化端口
0182 ; DDRB=0xFF; //设置B口为输出模式
0182 8FEF ldi R24,255
0184 87BB out 0x17,R24
0186 .dbline 96
0186 ; PORTB=0xFF; //置高电平
0186 88BB out 0x18,R24
0188 .dbline 97
0188 ; DDRC=0X38;
0188 88E3 ldi R24,56
018A 84BB out 0x14,R24
018C .dbline 98
018C ; PORTC=0X07;
018C 87E0 ldi R24,7
018E 85BB out 0x15,R24
0190 1DC0 rjmp L49
0192 L48:
0192 .dbline 101
0192 ;
0192 ; while(1)
0192 ; {
0192 .dbline 102
0192 ; PORTB=0x40;
0192 80E4 ldi R24,64
0194 88BB out 0x18,R24
0196 .dbline 103
0196 ; temp=PINC;
0196 63B3 in R22,0x13
0198 .dbline 104
0198 ; temp&=0x7;
0198 6770 andi R22,7
019A .dbline 105
019A ; if(temp==0x7)//检测是否有按键按下
019A 6730 cpi R22,7
019C 09F4 brne L51
019E .dbline 106
019E ; continue;
019E 16C0 rjmp L49
01A0 L51:
01A0 .dbline 107
01A0 ; delay_ms(10);
01A0 0AE0 ldi R16,10
01A2 10E0 ldi R17,0
01A4 41DF rcall _delay_ms
01A6 .dbline 108
01A6 ; temp=PINC;
01A6 63B3 in R22,0x13
01A8 .dbline 109
01A8 ; temp&=0x7;
01A8 6770 andi R22,7
01AA .dbline 110
01AA ; if(temp==0x7)//检测是否有按键按下
01AA 6730 cpi R22,7
01AC 09F4 brne L53
01AE .dbline 111
01AE ; continue;
01AE 0EC0 rjmp L49
01B0 L53:
01B0 .dbline 112
01B0 ; keynum=ScanKey();
01B0 48DF rcall _ScanKey
01B2 402F mov R20,R16
01B4 .dbline 113
01B4 ; PORTB=num[keynum];
01B4 CE01 movw R24,R28
01B6 E42F mov R30,R20
01B8 FF27 clr R31
01BA E80F add R30,R24
01BC F91F adc R31,R25
01BE 2080 ldd R2,z+0
01C0 28BA out 0x18,R2
01C2 02C0 rjmp L56
01C4 L55:
01C4 .dbline 115
01C4 .dbline 116
01C4 63B3 in R22,0x13
01C6 .dbline 117
01C6 6770 andi R22,7
01C8 .dbline 118
01C8 L56:
01C8 .dbline 114
01C8 6730 cpi R22,7
01CA E1F7 brne L55
01CC .dbline 119
01CC L49:
01CC .dbline 100
01CC E2CF rjmp L48
01CE X6:
01CE .dbline -2
01CE .dbline 120
01CE ; while(temp!=0x7)
01CE ; {
01CE ; temp=PINC;
01CE ; temp&=0x7;
01CE ; }
01CE ; }
01CE ; }
01CE L46:
01CE 2A96 adiw R28,10
01D0 .dbline 0 ; func end
01D0 0895 ret
01D2 .dbsym l num 0 A[10:10]c
01D2 .dbsym r keynum 20 c
01D2 .dbsym r temp 22 c
01D2 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -