📄 keyboard.lis
字号:
.module keyboard.c
.area lit(rom, con, rel)
0000 _num_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 40 .byte 64
000B .dbfile E:\AVRATM~1\key_board\keyboard.c
000B .dbsym e num_table _num_table A[11:11]kc
.area text(rom, con, rel)
0000 .dbfile E:\AVRATM~1\key_board\keyboard.c
0000 .dbfunc e delay _delay fV
0000 ; time -> R16,R17
.even
0000 _delay::
0000 .dbline -1
0000 .dbline 32
0000 ; //ICC-AVR application builder : 2004-8-25 1:33
0000 ; // Target : M16
0000 ; // Crystal: 8.0000Mhz
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include <eeprom.h>
0000 ;
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; #define ulong unsigned long
0000 ;
0000 ; const uchar num_table[] = { 0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40 };
0000 ; //自定义定时器
0000 ; uint delay_counter, scom_counter, key_counter;
0000 ; //定义通讯缓存
0000 ; #define SCOM_BUF_LEN 10
0000 ; uchar tbuf[SCOM_BUF_LEN];
0000 ; uchar rbuf[SCOM_BUF_LEN];
0000 ; //显示缓存
0000 ; uint l_des_speed, r_des_speed;
0000 ; //键盘缓存
0000 ; uint key_buf;
0000 ; //子函数声明
0000 ; void delay( uint time );
0000 ; void master( uchar command, uchar* buf, uchar startP, uchar dataLen );
0000 ; uint scan_key( void );
0000 ; void display( void );
0000 ; void error_handle( void );
0000 ;
0000 ; /******************公共的底层函数区********************/
0000 ; void delay( uint time )
0000 ; {
0000 .dbline 33
0000 2224 clr R2
0002 3324 clr R3
0004 30921F00 sts _delay_counter+1,R3
0008 20921E00 sts _delay_counter,R2
000C 01C0 xjmp L5
000E L2:
000E .dbline 33
000E .dbline 33
000E A895 wdr
0010 .dbline 33
0010 L3:
0010 .dbline 33
0010 L5:
0010 .dbline 33
0010 ; for( delay_counter = 0; delay_counter < time; ) { WDR(); }
0010 20901E00 lds R2,_delay_counter
0014 30901F00 lds R3,_delay_counter+1
0018 2016 cp R2,R16
001A 3106 cpc R3,R17
001C C0F3 brlo L2
001E .dbline -2
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym r time 16 i
0020 .dbend
0020 .dbfunc e scan_key _scan_key fi
0020 ; key_status -> R20,R21
.even
0020 _scan_key::
0020 0E940000 xcall push_gset1
0024 .dbline -1
0024 .dbline 37
0024 ; }
0024 ;
0024 ; uint scan_key( void )
0024 ; {
0024 .dbline 38
0024 ; uint key_status = 0;
0024 4427 clr R20
0026 5527 clr R21
0028 .dbline 39
0028 ; PORTC = 0xF7; //定义管脚输入输出状态
0028 87EF ldi R24,247
002A 85BB out 0x15,R24
002C .dbline 40
002C ; delay(1);
002C 01E0 ldi R16,1
002E 10E0 ldi R17,0
0030 E7DF xcall _delay
0032 .dbline 41
0032 ; if (!(PINC & 0x80)) key_status |= BIT(0);
0032 9F99 sbic 0x13,7
0034 01C0 rjmp L7
0036 .dbline 41
0036 4160 ori R20,1
0038 L7:
0038 .dbline 42
0038 ; if (!(PINC & 0x40)) key_status |= BIT(1);
0038 9E99 sbic 0x13,6
003A 01C0 rjmp L9
003C .dbline 42
003C 4260 ori R20,2
003E L9:
003E .dbline 43
003E ; if (!(PINC & 0x20)) key_status |= BIT(2);
003E 9D99 sbic 0x13,5
0040 01C0 rjmp L11
0042 .dbline 43
0042 4460 ori R20,4
0044 L11:
0044 .dbline 44
0044 ; if (!(PINC & 0x10)) key_status |= BIT(3);
0044 9C99 sbic 0x13,4
0046 01C0 rjmp L13
0048 .dbline 44
0048 4860 ori R20,8
004A L13:
004A .dbline 45
004A ; PORTC = 0xFB;
004A 8BEF ldi R24,251
004C 85BB out 0x15,R24
004E .dbline 46
004E ; delay(1);
004E 01E0 ldi R16,1
0050 10E0 ldi R17,0
0052 D6DF xcall _delay
0054 .dbline 47
0054 ; if (!(PINC & 0x80)) key_status |= BIT(4);
0054 9F99 sbic 0x13,7
0056 01C0 rjmp L15
0058 .dbline 47
0058 4061 ori R20,16
005A L15:
005A .dbline 48
005A ; if (!(PINC & 0x40)) key_status |= BIT(5);
005A 9E99 sbic 0x13,6
005C 01C0 rjmp L17
005E .dbline 48
005E 4062 ori R20,32
0060 L17:
0060 .dbline 49
0060 ; if (!(PINC & 0x20)) key_status |= BIT(6);
0060 9D99 sbic 0x13,5
0062 01C0 rjmp L19
0064 .dbline 49
0064 4064 ori R20,64
0066 L19:
0066 .dbline 50
0066 ; if (!(PINC & 0x10)) key_status |= BIT(7);
0066 9C99 sbic 0x13,4
0068 01C0 rjmp L21
006A .dbline 50
006A 4068 ori R20,128
006C L21:
006C .dbline 51
006C ; PORTC = 0xFD;
006C 8DEF ldi R24,253
006E 85BB out 0x15,R24
0070 .dbline 52
0070 ; delay(1);
0070 01E0 ldi R16,1
0072 10E0 ldi R17,0
0074 C5DF xcall _delay
0076 .dbline 53
0076 ; if (!(PINC & 0x80)) key_status |= BIT(8);
0076 9F99 sbic 0x13,7
0078 01C0 rjmp L23
007A .dbline 53
007A 5160 ori R21,1
007C L23:
007C .dbline 54
007C ; if (!(PINC & 0x40)) key_status |= BIT(9);
007C 9E99 sbic 0x13,6
007E 01C0 rjmp L25
0080 .dbline 54
0080 5260 ori R21,2
0082 L25:
0082 .dbline 55
0082 ; if (!(PINC & 0x20)) key_status |= BIT(10);
0082 9D99 sbic 0x13,5
0084 01C0 rjmp L27
0086 .dbline 55
0086 5460 ori R21,4
0088 L27:
0088 .dbline 56
0088 ; if (!(PINC & 0x10)) key_status |= BIT(11);
0088 9C99 sbic 0x13,4
008A 01C0 rjmp L29
008C .dbline 56
008C 5860 ori R21,8
008E L29:
008E .dbline 57
008E ; PORTC = 0xFE;
008E 8EEF ldi R24,254
0090 85BB out 0x15,R24
0092 .dbline 58
0092 ; delay(1);
0092 01E0 ldi R16,1
0094 10E0 ldi R17,0
0096 B4DF xcall _delay
0098 .dbline 59
0098 ; if (!(PINC & 0x80)) key_status |= BIT(12);
0098 9F99 sbic 0x13,7
009A 01C0 rjmp L31
009C .dbline 59
009C 5061 ori R21,16
009E L31:
009E .dbline 60
009E ; if (!(PINC & 0x40)) key_status |= BIT(13);
009E 9E99 sbic 0x13,6
00A0 01C0 rjmp L33
00A2 .dbline 60
00A2 5062 ori R21,32
00A4 L33:
00A4 .dbline 61
00A4 ; if (!(PINC & 0x20)) key_status |= BIT(14);
00A4 9D99 sbic 0x13,5
00A6 01C0 rjmp L35
00A8 .dbline 61
00A8 5064 ori R21,64
00AA L35:
00AA .dbline 62
00AA ; if (!(PINC & 0x10)) key_status |= BIT(15);
00AA 9C99 sbic 0x13,4
00AC 01C0 rjmp L37
00AE .dbline 62
00AE 5068 ori R21,128
00B0 L37:
00B0 .dbline 63
00B0 ; PORTC = 0xF0;
00B0 80EF ldi R24,240
00B2 85BB out 0x15,R24
00B4 .dbline 64
00B4 ; DDRC = 0x0F;
00B4 8FE0 ldi R24,15
00B6 84BB out 0x14,R24
00B8 .dbline 65
00B8 ; PORTD |= BIT(PD2);
00B8 929A sbi 0x12,2
00BA .dbline 66
00BA ; DDRD &= ~BIT(PD2);
00BA 8A98 cbi 0x11,2
00BC .dbline 67
00BC ; return key_status;
00BC 8A01 movw R16,R20
00BE .dbline -2
00BE L6:
00BE 0E940000 xcall pop_gset1
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbsym r key_status 20 i
00C4 .dbend
00C4 .dbfunc e master _master fV
00C4 ; i -> R20
00C4 ; dataLen -> R22
00C4 ; startP -> R10
00C4 ; buf -> R18,R19
00C4 ; command -> R16
.even
00C4 _master::
00C4 0E940000 xcall push_gset3
00C8 AE80 ldd R10,y+6
00CA 6885 ldd R22,y+8
00CC .dbline -1
00CC .dbline 71
00CC ; }
00CC ;
00CC ; void master( uchar command, uchar* buf, uchar startP, uchar dataLen )
00CC ; {
00CC .dbline 73
00CC ; uchar i;
00CC ; CLI();
00CC F894 cli
00CE .dbline 74
00CE ; if ( command == 0x01 ){
00CE 0130 cpi R16,1
00D0 C1F4 brne L56
00D2 .dbline 74
00D2 L42:
00D2 .dbline 75
00D2 L43:
00D2 .dbline 75
00D2 ; while( !( UCSRA & BIT( UDRE ) ) );
00D2 5D9B sbis 0xb,5
00D4 FECF rjmp L42
00D6 .dbline 76
00D6 ; UDR = command;
00D6 0CB9 out 0xc,R16
00D8 L45:
00D8 .dbline 77
00D8 L46:
00D8 .dbline 77
00D8 ; while( !( UCSRA & BIT( UDRE ) ) );
00D8 5D9B sbis 0xb,5
00DA FECF rjmp L45
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -