📄 key.lis
字号:
.module key.c
.area text(rom, con, rel)
0000 .dbfile F:\AVR练习\key_lcd\key.c
.area lit(rom, con, rel)
0000 _table::
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
000A 777C .byte 'w,124
000C 395E .byte 57,94
000E 4F47 .byte 'O,'G
0010 .dbsym e table _table A[16:16]kc
0010 _table1::
0010 3F06 .byte 63,6
0012 5B4F .byte 91,'O
0014 666D .byte 'f,'m
0016 7D07 .byte 125,7
0018 7F6F .byte 127,'o
001A .dbsym e table1 _table1 A[10:10]kc
.area text(rom, con, rel)
0000 .dbfile F:\AVR练习\key_lcd\key.c
0000 .dbfunc e key_read _key_read fc
0000 ; i -> R16
.even
0000 _key_read::
0000 .dbline -1
0000 .dbline 21
0000 ;
0000 ; #include <macros.h>
0000 ; #include "includes.h"
0000 ; //#pragma interrupt_handler icp_time1:6
0000 ; //#define BIT(x) (1<<(x))
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; const unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0000 ; 0x77,0x7c,0x39,0x5e,79,71};//七段译码字形表
0000 ; const uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
0000 ; uchar ledbuff[6];//显示缓冲区
0000 ; uchar led[6];
0000 ; uint oldcount;
0000 ; uint newcount;
0000 ; /*
0000 ; 键盘扫描函数
0000 ; 读取当前键盘的状态
0000 ; 有按键按下返回相应按键值
0000 ; 无按键按下返回"0x00"
0000 ; */
0000 ; uchar key_read(){
0000 .dbline 23
0000 ; uchar i;
0000 ; DDRA = 0x00;/*获取列地址*/
0000 2224 clr R2
0002 2ABA out 0x1a,R2
0004 .dbline 24
0004 ; PORTA = 0x0F;
0004 8FE0 ldi R24,15
0006 8BBB out 0x1b,R24
0008 .dbline 25
0008 ; DDRA = 0xF0;
0008 80EF ldi R24,240
000A 8ABB out 0x1a,R24
000C .dbline 26
000C ; i = PINA;
000C 09B3 in R16,0x19
000E .dbline 27
000E ; DDRA = 0x00;/*获取行地址*/
000E 2ABA out 0x1a,R2
0010 .dbline 28
0010 ; PORTA = 0xF0;
0010 8BBB out 0x1b,R24
0012 .dbline 29
0012 ; DDRA = 0x0F;
0012 8FE0 ldi R24,15
0014 8ABB out 0x1a,R24
0016 .dbline 30
0016 ; i&=PINA;
0016 29B2 in R2,0x19
0018 0221 and R16,R2
001A .dbline 32
001A ;
001A ; DDRA = 0x00;/*输出复位*/
001A 2224 clr R2
001C 2ABA out 0x1a,R2
001E .dbline 33
001E ; PORTA = 0xFF;
001E 8FEF ldi R24,255
0020 8BBB out 0x1b,R24
0022 .dbline 35
0022 ;
0022 ; switch (i) {/*将按键码转换成键值*/
0022 1127 clr R17
0024 0132 cpi R16,33
0026 E0E0 ldi R30,0
0028 1E07 cpc R17,R30
002A 09F4 brne X1
002C 5FC0 rjmp L13
002E X1:
002E 0232 cpi R16,34
0030 E0E0 ldi R30,0
0032 1E07 cpc R17,R30
0034 09F4 brne X2
0036 5CC0 rjmp L14
0038 X2:
0038 0432 cpi R16,36
003A E0E0 ldi R30,0
003C 1E07 cpc R17,R30
003E 09F4 brne X3
0040 59C0 rjmp L15
0042 X3:
0042 0832 cpi R16,40
0044 E0E0 ldi R30,0
0046 1E07 cpc R17,R30
0048 09F4 brne X4
004A 56C0 rjmp L16
004C X4:
004C 88E2 ldi R24,40
004E 90E0 ldi R25,0
0050 8017 cp R24,R16
0052 9107 cpc R25,R17
0054 ACF0 brlt L22
0056 L21:
0056 0131 cpi R16,17
0058 E0E0 ldi R30,0
005A 1E07 cpc R17,R30
005C 09F4 brne X5
005E 4EC0 rjmp L17
0060 X5:
0060 0231 cpi R16,18
0062 E0E0 ldi R30,0
0064 1E07 cpc R17,R30
0066 09F4 brne X6
0068 4BC0 rjmp L18
006A X6:
006A 0431 cpi R16,20
006C E0E0 ldi R30,0
006E 1E07 cpc R17,R30
0070 09F4 brne X7
0072 48C0 rjmp L19
0074 X7:
0074 0831 cpi R16,24
0076 E0E0 ldi R30,0
0078 1E07 cpc R17,R30
007A 09F4 brne X8
007C 45C0 rjmp L20
007E X8:
007E 46C0 rjmp L2
0080 L22:
0080 0134 cpi R16,65
0082 E0E0 ldi R30,0
0084 1E07 cpc R17,R30
0086 51F1 breq L9
0088 0234 cpi R16,66
008A E0E0 ldi R30,0
008C 1E07 cpc R17,R30
008E 41F1 breq L10
0090 0434 cpi R16,68
0092 E0E0 ldi R30,0
0094 1E07 cpc R17,R30
0096 31F1 breq L11
0098 0834 cpi R16,72
009A E0E0 ldi R30,0
009C 1E07 cpc R17,R30
009E 21F1 breq L12
00A0 0134 cpi R16,65
00A2 E0E0 ldi R30,0
00A4 1E07 cpc R17,R30
00A6 0CF4 brge X9
00A8 31C0 rjmp L2
00AA X9:
00AA L23:
00AA 0138 cpi R16,129
00AC E0E0 ldi R30,0
00AE 1E07 cpc R17,R30
00B0 69F0 breq L5
00B2 0238 cpi R16,130
00B4 E0E0 ldi R30,0
00B6 1E07 cpc R17,R30
00B8 59F0 breq L6
00BA 0438 cpi R16,132
00BC E0E0 ldi R30,0
00BE 1E07 cpc R17,R30
00C0 49F0 breq L7
00C2 0838 cpi R16,136
00C4 E0E0 ldi R30,0
00C6 1E07 cpc R17,R30
00C8 39F0 breq L8
00CA 20C0 rjmp L2
00CC X0:
00CC .dbline 35
00CC L5:
00CC .dbline 36
00CC ; case 0x81: return 0x00;
00CC 0027 clr R16
00CE 1FC0 rjmp L1
00D0 L6:
00D0 .dbline 37
00D0 ; case 0x82: return 'a';
00D0 01E6 ldi R16,97
00D2 1DC0 rjmp L1
00D4 L7:
00D4 .dbline 38
00D4 ; case 0x84: return 'b';
00D4 02E6 ldi R16,98
00D6 1BC0 rjmp L1
00D8 L8:
00D8 .dbline 39
00D8 ; case 0x88: return 'c';
00D8 03E6 ldi R16,99
00DA 19C0 rjmp L1
00DC L9:
00DC .dbline 40
00DC ; case 0x41: return '1';
00DC 01E3 ldi R16,49
00DE 17C0 rjmp L1
00E0 L10:
00E0 .dbline 41
00E0 ; case 0x42: return 0x02;
00E0 02E0 ldi R16,2
00E2 15C0 rjmp L1
00E4 L11:
00E4 .dbline 42
00E4 ; case 0x44: return 0x03;
00E4 03E0 ldi R16,3
00E6 13C0 rjmp L1
00E8 L12:
00E8 .dbline 43
00E8 ; case 0x48: return 'd';
00E8 04E6 ldi R16,100
00EA 11C0 rjmp L1
00EC L13:
00EC .dbline 44
00EC ; case 0x21: return 0x04;
00EC 04E0 ldi R16,4
00EE 0FC0 rjmp L1
00F0 L14:
00F0 .dbline 45
00F0 ; case 0x22: return 0x05;
00F0 05E0 ldi R16,5
00F2 0DC0 rjmp L1
00F4 L15:
00F4 .dbline 46
00F4 ; case 0x24: return 0x06;
00F4 06E0 ldi R16,6
00F6 0BC0 rjmp L1
00F8 L16:
00F8 .dbline 47
00F8 ; case 0x28: return 'e';
00F8 05E6 ldi R16,101
00FA 09C0 rjmp L1
00FC L17:
00FC .dbline 48
00FC ; case 0x11: return 0x07;
00FC 07E0 ldi R16,7
00FE 07C0 rjmp L1
0100 L18:
0100 .dbline 49
0100 ; case 0x12: return 0x08;
0100 08E0 ldi R16,8
0102 05C0 rjmp L1
0104 L19:
0104 .dbline 50
0104 ; case 0x14: return 0x09;
0104 09E0 ldi R16,9
0106 03C0 rjmp L1
0108 L20:
0108 .dbline 51
0108 ; case 0x18: return 'f';
0108 06E6 ldi R16,102
010A 01C0 rjmp L1
010C L2:
010C .dbline 52
010C ; default : return 0x00;
010C 0027 clr R16
010E .dbline -2
010E L1:
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbsym r i 16 c
0110 .dbend
0110 .dbfunc e delay_ms _delay_ms fV
0110 ; i -> R16,R17
.even
0110 _delay_ms::
0110 .dbline -1
0110 .dbline 60
0110 ; }
0110 ; }
0110 ;
0110 ; /*****************************************
0110 ; 延时1MS
0110 ; ******************************************/
0110 ; void delay_ms()
0110 ; {uint i;
0110 .dbline 61
0110 ; for(i+0;i<1142;i++)
0110 02C0 rjmp L28
0112 L25:
0112 .dbline 62
0112 L26:
0112 .dbline 61
0112 0F5F subi R16,255 ; offset = 1
0114 1F4F sbci R17,255
0116 L28:
0116 .dbline 61
0116 0637 cpi R16,118
0118 E4E0 ldi R30,4
011A 1E07 cpc R17,R30
011C D0F3 brlo L25
011E .dbline -2
011E L24:
011E .dbline 0 ; func end
011E 0895 ret
0120 .dbsym r i 16 i
0120 .dbend
0120 .dbfunc e delay _delay fV
0120 ; i -> R20
0120 ; t -> R16,R17
.even
0120 _delay::
0120 00D0 rcall push_gset1
0122 .dbline -1
0122 .dbline 65
0122 ; ;
0122 ; }
0122 ; void delay(uint t)
0122 ; {uchar i;
0122 .dbline 66
0122 ; for(i=0;i<t;i++)
0122 4427 clr R20
0124 01C0 rjmp L33
0126 L30:
0126 .dbline 67
0126 L31:
0126 .dbline 66
0126 4395 inc R20
0128 L33:
0128 .dbline 66
0128 242E mov R2,R20
012A 3324 clr R3
012C 2016 cp R2,R16
012E 3106 cpc R3,R17
0130 D0F3 brlo L30
0132 .dbline -2
0132 L29:
0132 00D0 rcall pop_gset1
0134 .dbline 0 ; func end
0134 0895 ret
0136 .dbsym r i 20 c
0136 .dbsym r t 16 i
0136 .dbend
0136 .dbfunc e init _init fV
.even
0136 _init::
0136 .dbline -1
0136 .dbline 74
0136 ; ;
0136 ; }
0136 ;
0136 ; /****************************************
0136 ; mcu初始化
0136 ; *****************************************/
0136 ; void init()
0136 ; { //DDRA=0x00;
0136 .dbline 75
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -