📄 intkey.lis
字号:
.module IntKey.C
.area text(rom, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\中断\IntKey/Delay.h
0000 .dbfunc e delay_us _delay_us fV
0000 ; i -> R20,R21
0000 ; n -> R16,R17
.even
0000 _delay_us::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 3
0002 ; /******************************************/
0002 ; //文件名:IntKey.c
0002 ; //功能: 中断触发键盘扫描的应用
0002 .dbline 5
0002 A801 movw R20,R16
0004 02C0 rjmp L5
0006 L2:
0006 .dbline 5
0006 L3:
0006 .dbline 5
0006 4150 subi R20,1
0008 5040 sbci R21,0
000A L5:
000A .dbline 5
000A ; //作者: young
000A ; //时间: 2006.11.6
000A 4030 cpi R20,0
000C 4507 cpc R20,R21
000E D9F7 brne L2
0010 X0:
0010 .dbline -2
0010 .dbline 6
0010 ; //目标MCU:ATmega8
0010 L1:
0010 00D0 rcall pop_gset1
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 20 i
0014 .dbsym r n 16 i
0014 .dbend
0014 .dbfunc e delay_1ms _delay_1ms fV
0014 ; i -> R16,R17
.even
0014 _delay_1ms::
0014 .dbline -1
0014 .dbline 10
0014 ; //晶振: 8MHZ
0014 ; /******************************************/
0014 ; #include <iom8v.h>
0014 ; #include <macros.h>
0014 .dbline 12
0014 ; #include "Delay.h"
0014 ;
0014 01E0 ldi R16,1
0016 10E0 ldi R17,0
0018 02C0 rjmp L10
001A L7:
001A .dbline 13
001A L8:
001A .dbline 12
001A 0F5F subi R16,255 ; offset = 1
001C 1F4F sbci R17,255
001E L10:
001E .dbline 12
001E 0637 cpi R16,118
0020 E4E0 ldi R30,4
0022 1E07 cpc R17,R30
0024 D0F3 brlo L7
0026 .dbline -2
0026 .dbline 14
0026 ; unsigned char KeyDown;
0026 ;
0026 L6:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r i 16 i
0028 .dbend
0028 .dbfunc e delay_ms _delay_ms fV
0028 ; i -> R20,R21
0028 ; n -> R22,R23
.even
0028 _delay_ms::
0028 00D0 rcall push_gset2
002A B801 movw R22,R16
002C .dbline -1
002C .dbline 18
002C ; //按键扫描函数,返回按键的值
002C ; unsigned char ScanKey(void)
002C ; {
002C ; unsigned char temp,temp1,key;
002C .dbline 19
002C ; temp=PINC;
002C 4427 clr R20
002E 5527 clr R21
0030 03C0 rjmp L13
0032 L12:
0032 .dbline 21
0032 .dbline 22
0032 F0DF rcall _delay_1ms
0034 .dbline 23
0034 4F5F subi R20,255 ; offset = 1
0036 5F4F sbci R21,255
0038 .dbline 24
0038 L13:
0038 .dbline 20
0038 ; temp&=0x38;
0038 4617 cp R20,R22
003A 5707 cpc R21,R23
003C D0F3 brlo L12
003E .dbline -2
003E .dbline 25
003E ; switch(temp) //判断行中哪条线有低电平
003E ; {
003E ; case 0x30:
003E ; DDRC=0X38;
003E ; PORTC=0X07;
003E L11:
003E 00D0 rcall pop_gset2
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r i 20 i
0042 .dbsym r n 22 i
0042 .dbend
0042 .dbfile F:\Learn\AVR\Pro_Mega8\中断\IntKey\IntKey.C
0042 .dbfunc e ScanKey _ScanKey fc
0042 ; temp1 -> R22
0042 ; key -> R20
0042 ; temp -> R20
.even
0042 _ScanKey::
0042 00D0 rcall push_gset3
0044 .dbline -1
0044 .dbline 17
0044 .dbline 19
0044 43B3 in R20,0x13
0046 .dbline 20
0046 4873 andi R20,56
0048 .dbline 21
0048 5527 clr R21
004A 4832 cpi R20,40
004C E0E0 ldi R30,0
004E 5E07 cpc R21,R30
0050 A1F1 breq L26
0052 88E2 ldi R24,40
0054 90E0 ldi R25,0
0056 8417 cp R24,R20
0058 9507 cpc R25,R21
005A 34F0 brlt L41
005C L40:
005C 4831 cpi R20,24
005E E0E0 ldi R30,0
0060 5E07 cpc R21,R30
0062 09F4 brne X5
0064 4FC0 rjmp L33
0066 X5:
0066 71C0 rjmp L16
0068 L41:
0068 4033 cpi R20,48
006A E0E0 ldi R30,0
006C 5E07 cpc R21,R30
006E 09F0 breq L19
0070 6CC0 rjmp L16
0072 X1:
0072 .dbline 22
0072 L19:
0072 .dbline 24
0072 88E3 ldi R24,56
0074 84BB out 0x14,R24
0076 .dbline 25
0076 87E0 ldi R24,7
0078 85BB out 0x15,R24
007A .dbline 26
007A ; delay_us(1);
007A 01E0 ldi R16,1
007C 10E0 ldi R17,0
007E C0DF rcall _delay_us
0080 .dbline 27
0080 ; temp1=PINC;
0080 63B3 in R22,0x13
0082 .dbline 28
0082 ; temp1&=0x07;
0082 6770 andi R22,7
0084 .dbline 29
0084 ; switch(temp1) //判断列中哪条线有低电平
0084 462F mov R20,R22
0086 5527 clr R21
0088 4330 cpi R20,3
008A E0E0 ldi R30,0
008C 5E07 cpc R21,R30
008E 69F0 breq L25
0090 4530 cpi R20,5
0092 E0E0 ldi R30,0
0094 5E07 cpc R21,R30
0096 39F0 breq L24
0098 4630 cpi R20,6
009A E0E0 ldi R30,0
009C 5E07 cpc R21,R30
009E 09F0 breq L23
00A0 06C0 rjmp L20
00A2 X2:
00A2 .dbline 30
00A2 ; {
00A2 L23:
00A2 .dbline 31
00A2 ; case 0x06: key=0x01; //得到键值
00A2 41E0 ldi R20,1
00A4 .dbline 32
00A4 ; break;
00A4 05C0 rjmp L21
00A6 L24:
00A6 .dbline 33
00A6 ; case 0x05: key=0x04;
00A6 44E0 ldi R20,4
00A8 .dbline 34
00A8 ; break;
00A8 03C0 rjmp L21
00AA L25:
00AA .dbline 35
00AA ; case 0x03: key=0x07;
00AA 47E0 ldi R20,7
00AC .dbline 36
00AC ; break;
00AC 01C0 rjmp L21
00AE L20:
00AE .dbline 37
00AE ; default: key=0;
00AE 4427 clr R20
00B0 .dbline 38
00B0 ; break;
00B0 L21:
00B0 .dbline 40
00B0 ; }
00B0 ; DDRC=0X07;
00B0 87E0 ldi R24,7
00B2 84BB out 0x14,R24
00B4 .dbline 41
00B4 ; PORTC=0X38;
00B4 88E3 ldi R24,56
00B6 85BB out 0x15,R24
00B8 .dbline 42
00B8 ; break;
00B8 49C0 rjmp L17
00BA L26:
00BA .dbline 45
00BA ;
00BA ; case 0x28:
00BA ; DDRC=0X38;
00BA 88E3 ldi R24,56
00BC 84BB out 0x14,R24
00BE .dbline 46
00BE ; PORTC=0X07;
00BE 87E0 ldi R24,7
00C0 85BB out 0x15,R24
00C2 .dbline 47
00C2 ; delay_us(1);
00C2 01E0 ldi R16,1
00C4 10E0 ldi R17,0
00C6 9CDF rcall _delay_us
00C8 .dbline 48
00C8 ; temp1=PINC;
00C8 63B3 in R22,0x13
00CA .dbline 49
00CA ; temp1&=0x07;
00CA 6770 andi R22,7
00CC .dbline 50
00CC ; switch(temp1)
00CC A62E mov R10,R22
00CE BB24 clr R11
00D0 C501 movw R24,R10
00D2 8330 cpi R24,3
00D4 E0E0 ldi R30,0
00D6 9E07 cpc R25,R30
00D8 69F0 breq L32
00DA 8530 cpi R24,5
00DC E0E0 ldi R30,0
00DE 9E07 cpc R25,R30
00E0 39F0 breq L31
00E2 8630 cpi R24,6
00E4 E0E0 ldi R30,0
00E6 9E07 cpc R25,R30
00E8 09F0 breq L30
00EA 06C0 rjmp L27
00EC X3:
00EC .dbline 51
00EC ; {
00EC L30:
00EC .dbline 52
00EC ; case 0x06: key=0x02;
00EC 42E0 ldi R20,2
00EE .dbline 53
00EE ; break;
00EE 05C0 rjmp L28
00F0 L31:
00F0 .dbline 54
00F0 ; case 0x05: key=0x05;
00F0 45E0 ldi R20,5
00F2 .dbline 55
00F2 ; break;
00F2 03C0 rjmp L28
00F4 L32:
00F4 .dbline 56
00F4 ; case 0x03: key=0x08;
00F4 48E0 ldi R20,8
00F6 .dbline 57
00F6 ; break;
00F6 01C0 rjmp L28
00F8 L27:
00F8 .dbline 58
00F8 ; default: key=0;
00F8 4427 clr R20
00FA .dbline 59
00FA ; break;
00FA L28:
00FA .dbline 61
00FA ; }
00FA ; DDRC=0X07;
00FA 87E0 ldi R24,7
00FC 84BB out 0x14,R24
00FE .dbline 62
00FE ; PORTC=0X38;
00FE 88E3 ldi R24,56
0100 85BB out 0x15,R24
0102 .dbline 63
0102 ; break;
0102 24C0 rjmp L17
0104 L33:
0104 .dbline 66
0104 ;
0104 ; case 0x18:
0104 ; DDRC=0X38;
0104 88E3 ldi R24,56
0106 84BB out 0x14,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -