⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2x8_key.lss

📁 WINAVR写的2x8键盘扫描程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:

2X8_key.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000f2c  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  00000f2c  00000fc0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000007  00800060  00800060  00000fc0  2**0
                  ALLOC
  3 .noinit       00000000  00800067  00800067  00000fc0  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000fc0  2**0
                  CONTENTS
  5 .stab         00001b84  00000000  00000000  00000fc0  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000aec  00000000  00000000  00002b44  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54 <__ctors_end>
   4:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   8:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  10:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  14:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  18:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  1c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  20:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  24:	0c 94 5e 00 	jmp	0xbc <__vector_9>
  28:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  2c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  30:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  34:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  38:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  3c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  40:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  44:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  48:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  4c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  50:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	ec e2       	ldi	r30, 0x2C	; 44
  68:	ff e0       	ldi	r31, 0x0F	; 15
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a0 36       	cpi	r26, 0x60	; 96
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a0 e6       	ldi	r26, 0x60	; 96
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a7 36       	cpi	r26, 0x67	; 103
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 8b 00 	jmp	0x116 <main>

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0x0 <__vectors>

0000008e <Timer0_init>:
 * Author:Ken
 * Date:2007-08-15
*/
void Timer0_init(void)
{
  8e:	cf 93       	push	r28
  90:	df 93       	push	r29
  92:	cd b7       	in	r28, 0x3d	; 61
  94:	de b7       	in	r29, 0x3e	; 62
 TCNT0 = 0x1A; //set count
  96:	8a e1       	ldi	r24, 0x1A	; 26
  98:	80 93 52 00 	sts	0x0052, r24
 OCR0  = 0xE6;  //set compare
  9c:	86 ee       	ldi	r24, 0xE6	; 230
  9e:	80 93 5c 00 	sts	0x005C, r24
 TCCR0|= ((1<<CS02)|(1<<CS00));  //1024预分频 0x05
  a2:	80 91 53 00 	lds	r24, 0x0053
  a6:	85 60       	ori	r24, 0x05	; 5
  a8:	80 93 53 00 	sts	0x0053, r24
 TIMSK|= (1<<TOIE0);               //允许TC0溢出中断
  ac:	80 91 59 00 	lds	r24, 0x0059
  b0:	81 60       	ori	r24, 0x01	; 1
  b2:	80 93 59 00 	sts	0x0059, r24
  b6:	df 91       	pop	r29
  b8:	cf 91       	pop	r28
  ba:	08 95       	ret

000000bc <__vector_9>:
}

SIGNAL(SIG_OVERFLOW0)
{
  bc:	1f 92       	push	r1
  be:	0f 92       	push	r0
  c0:	0f b6       	in	r0, 0x3f	; 63
  c2:	0f 92       	push	r0
  c4:	11 24       	eor	r1, r1
  c6:	2f 93       	push	r18
  c8:	3f 93       	push	r19
  ca:	4f 93       	push	r20
  cc:	5f 93       	push	r21
  ce:	6f 93       	push	r22
  d0:	7f 93       	push	r23
  d2:	8f 93       	push	r24
  d4:	9f 93       	push	r25
  d6:	af 93       	push	r26
  d8:	bf 93       	push	r27
  da:	ef 93       	push	r30
  dc:	ff 93       	push	r31
  de:	cf 93       	push	r28
  e0:	df 93       	push	r29
  e2:	cd b7       	in	r28, 0x3d	; 61
  e4:	de b7       	in	r29, 0x3e	; 62
  TCNT0 = 0x1A;  //set count
  e6:	8a e1       	ldi	r24, 0x1A	; 26
  e8:	80 93 52 00 	sts	0x0052, r24
	key();
  ec:	0e 94 1e 01 	call	0x23c <key>
  f0:	df 91       	pop	r29
  f2:	cf 91       	pop	r28
  f4:	ff 91       	pop	r31
  f6:	ef 91       	pop	r30
  f8:	bf 91       	pop	r27
  fa:	af 91       	pop	r26
  fc:	9f 91       	pop	r25
  fe:	8f 91       	pop	r24
 100:	7f 91       	pop	r23
 102:	6f 91       	pop	r22
 104:	5f 91       	pop	r21
 106:	4f 91       	pop	r20
 108:	3f 91       	pop	r19
 10a:	2f 91       	pop	r18
 10c:	0f 90       	pop	r0
 10e:	0f be       	out	0x3f, r0	; 63
 110:	0f 90       	pop	r0
 112:	1f 90       	pop	r1
 114:	18 95       	reti

00000116 <main>:
}

int main(void)
{
 116:	c2 e5       	ldi	r28, 0x52	; 82
 118:	d4 e0       	ldi	r29, 0x04	; 4
 11a:	de bf       	out	0x3e, r29	; 62
 11c:	cd bf       	out	0x3d, r28	; 61
  key_init();
 11e:	0e 94 f2 00 	call	0x1e4 <key_init>
	Timer0_init();
 122:	0e 94 47 00 	call	0x8e <Timer0_init>
	LCM1602Init();
 126:	0e 94 69 01 	call	0x2d2 <LCM1602Init>
	sei();
 12a:	78 94       	sei
	while(1)
	{
	  unsigned char temp_key1;
		temp_key1=key();
 12c:	0e 94 1e 01 	call	0x23c <key>
 130:	89 83       	std	Y+1, r24	; 0x01
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
 */
void
_delay_ms(double __ms)
{
 132:	80 e0       	ldi	r24, 0x00	; 0
 134:	90 e0       	ldi	r25, 0x00	; 0
 136:	a8 e4       	ldi	r26, 0x48	; 72
 138:	b2 e4       	ldi	r27, 0x42	; 66
 13a:	8a 83       	std	Y+2, r24	; 0x02
 13c:	9b 83       	std	Y+3, r25	; 0x03
 13e:	ac 83       	std	Y+4, r26	; 0x04
 140:	bd 83       	std	Y+5, r27	; 0x05
	uint16_t __ticks;
	double __tmp = ((F_CPU) / 4e3) * __ms;
 142:	26 e6       	ldi	r18, 0x66	; 102
 144:	36 e6       	ldi	r19, 0x66	; 102
 146:	46 ee       	ldi	r20, 0xE6	; 230
 148:	54 e4       	ldi	r21, 0x44	; 68
 14a:	6a 81       	ldd	r22, Y+2	; 0x02
 14c:	7b 81       	ldd	r23, Y+3	; 0x03
 14e:	8c 81       	ldd	r24, Y+4	; 0x04
 150:	9d 81       	ldd	r25, Y+5	; 0x05
 152:	0e 94 0e 07 	call	0xe1c <__mulsf3>
 156:	dc 01       	movw	r26, r24
 158:	cb 01       	movw	r24, r22
 15a:	88 87       	std	Y+8, r24	; 0x08
 15c:	99 87       	std	Y+9, r25	; 0x09
 15e:	aa 87       	std	Y+10, r26	; 0x0a
 160:	bb 87       	std	Y+11, r27	; 0x0b
	if (__tmp < 1.0)
 162:	20 e0       	ldi	r18, 0x00	; 0
 164:	30 e0       	ldi	r19, 0x00	; 0
 166:	40 e8       	ldi	r20, 0x80	; 128
 168:	5f e3       	ldi	r21, 0x3F	; 63
 16a:	68 85       	ldd	r22, Y+8	; 0x08
 16c:	79 85       	ldd	r23, Y+9	; 0x09
 16e:	8a 85       	ldd	r24, Y+10	; 0x0a
 170:	9b 85       	ldd	r25, Y+11	; 0x0b
 172:	0e 94 be 06 	call	0xd7c <__eqsf2>
 176:	88 23       	and	r24, r24
 178:	0c f0       	brlt	.+2      	; 0x17c <main+0x66>
 17a:	05 c0       	rjmp	.+10     	; 0x186 <main+0x70>
		__ticks = 1;
 17c:	81 e0       	ldi	r24, 0x01	; 1
 17e:	90 e0       	ldi	r25, 0x00	; 0
 180:	9f 83       	std	Y+7, r25	; 0x07
 182:	8e 83       	std	Y+6, r24	; 0x06
 184:	1a c0       	rjmp	.+52     	; 0x1ba <main+0xa4>
	else if (__tmp > 65535)
 186:	20 e0       	ldi	r18, 0x00	; 0
 188:	3f ef       	ldi	r19, 0xFF	; 255
 18a:	4f e7       	ldi	r20, 0x7F	; 127
 18c:	57 e4       	ldi	r21, 0x47	; 71
 18e:	68 85       	ldd	r22, Y+8	; 0x08
 190:	79 85       	ldd	r23, Y+9	; 0x09
 192:	8a 85       	ldd	r24, Y+10	; 0x0a
 194:	9b 85       	ldd	r25, Y+11	; 0x0b
 196:	0e 94 c1 06 	call	0xd82 <__gesf2>
 19a:	18 16       	cp	r1, r24
 19c:	0c f0       	brlt	.+2      	; 0x1a0 <main+0x8a>
 19e:	03 c0       	rjmp	.+6      	; 0x1a6 <main+0x90>
		__ticks = 0;	/* i.e. 65536 */
 1a0:	1f 82       	std	Y+7, r1	; 0x07
 1a2:	1e 82       	std	Y+6, r1	; 0x06
 1a4:	0a c0       	rjmp	.+20     	; 0x1ba <main+0xa4>
	else
		__ticks = (uint16_t)__tmp;
 1a6:	68 85       	ldd	r22, Y+8	; 0x08
 1a8:	79 85       	ldd	r23, Y+9	; 0x09
 1aa:	8a 85       	ldd	r24, Y+10	; 0x0a
 1ac:	9b 85       	ldd	r25, Y+11	; 0x0b
 1ae:	0e 94 a3 06 	call	0xd46 <__fixsfsi>
 1b2:	dc 01       	movw	r26, r24
 1b4:	cb 01       	movw	r24, r22
 1b6:	9f 83       	std	Y+7, r25	; 0x07
 1b8:	8e 83       	std	Y+6, r24	; 0x06
 1ba:	8e 81       	ldd	r24, Y+6	; 0x06
 1bc:	9f 81       	ldd	r25, Y+7	; 0x07
 1be:	9d 87       	std	Y+13, r25	; 0x0d
 1c0:	8c 87       	std	Y+12, r24	; 0x0c
 1c2:	8c 85       	ldd	r24, Y+12	; 0x0c
 1c4:	9d 85       	ldd	r25, Y+13	; 0x0d
 1c6:	01 97       	sbiw	r24, 0x01	; 1
 1c8:	f1 f7       	brne	.-4      	; 0x1c6 <main+0xb0>
 1ca:	9d 87       	std	Y+13, r25	; 0x0d
 1cc:	8c 87       	std	Y+12, r24	; 0x0c
		_delay_ms(50);
		if(temp_key1==key())
 1ce:	0e 94 1e 01 	call	0x23c <key>
 1d2:	98 2f       	mov	r25, r24
 1d4:	89 81       	ldd	r24, Y+1	; 0x01
 1d6:	98 17       	cp	r25, r24
 1d8:	09 f0       	breq	.+2      	; 0x1dc <main+0xc6>
 1da:	a8 cf       	rjmp	.-176    	; 0x12c <main+0x16>
		{
		  //LCM1602Write_String(0,0,temp_key1);
			LCM1602Write_number(temp_key1);
 1dc:	89 81       	ldd	r24, Y+1	; 0x01
 1de:	0e 94 d2 03 	call	0x7a4 <LCM1602Write_number>
 1e2:	a4 cf       	rjmp	.-184    	; 0x12c <main+0x16>

000001e4 <key_init>:
作者     :ken
日期     :2007-08-15
--------------------------------------------------------------*/
void key_init(void)
{
 1e4:	cf 93       	push	r28
 1e6:	df 93       	push	r29
 1e8:	cd b7       	in	r28, 0x3d	; 61
 1ea:	de b7       	in	r29, 0x3e	; 62
  key_SEL_DDR|=((1<<key_SELA)|(1<<key_SELB)|(1<<key_SELC));      //设置为输出
 1ec:	80 91 3a 00 	lds	r24, 0x003A
 1f0:	80 6e       	ori	r24, 0xE0	; 224
 1f2:	80 93 3a 00 	sts	0x003A, r24
  key_SEL_PORT&=~(1<<key_SELA);
 1f6:	80 91 3b 00 	lds	r24, 0x003B
 1fa:	8f 7d       	andi	r24, 0xDF	; 223
 1fc:	80 93 3b 00 	sts	0x003B, r24
	key_SEL_PORT&=~(1<<key_SELB);
 200:	80 91 3b 00 	lds	r24, 0x003B
 204:	8f 7b       	andi	r24, 0xBF	; 191
 206:	80 93 3b 00 	sts	0x003B, r24
	key_SEL_PORT&=~(1<<key_SELC);
 20a:	9f e7       	ldi	r25, 0x7F	; 127
 20c:	80 91 3b 00 	lds	r24, 0x003B
 210:	89 23       	and	r24, r25
 212:	80 93 3b 00 	sts	0x003B, r24
	key_PORT|=((1<<key_KIN0)|(1<<key_KIN1));                       //设置内部上拉电阻
 216:	80 91 35 00 	lds	r24, 0x0035
 21a:	80 6c       	ori	r24, 0xC0	; 192
 21c:	80 93 35 00 	sts	0x0035, r24
  key_DDR&=~(1<<key_KIN0);                                        //设置为输入  
 220:	80 91 34 00 	lds	r24, 0x0034
 224:	8f 7b       	andi	r24, 0xBF	; 191
 226:	80 93 34 00 	sts	0x0034, r24
	key_DDR&=~(1<<key_KIN1);
 22a:	9f e7       	ldi	r25, 0x7F	; 127
 22c:	80 91 34 00 	lds	r24, 0x0034
 230:	89 23       	and	r24, r25
 232:	80 93 34 00 	sts	0x0034, r24
 236:	df 91       	pop	r29
 238:	cf 91       	pop	r28
 23a:	08 95       	ret

0000023c <key>:
}


/*-------------------------------------------------------------------
key :按键扫描函数
输入参数 :无
输出参数 :键码
作者     :ken
日期     :2007-08-15
---------------------------------------------------------------*/
unsigned char key(void)
{
 23c:	cf 93       	push	r28
 23e:	df 93       	push	r29
 240:	cd b7       	in	r28, 0x3d	; 61
 242:	de b7       	in	r29, 0x3e	; 62
 244:	23 97       	sbiw	r28, 0x03	; 3
 246:	0f b6       	in	r0, 0x3f	; 63
 248:	f8 94       	cli
 24a:	de bf       	out	0x3e, r29	; 62
 24c:	0f be       	out	0x3f, r0	; 63
 24e:	cd bf       	out	0x3d, r28	; 61
  unsigned char row;                         //col表示行,row表示列
  for(row=0;row<8;row++)
 250:	19 82       	std	Y+1, r1	; 0x01
 252:	89 81       	ldd	r24, Y+1	; 0x01
 254:	88 30       	cpi	r24, 0x08	; 8
 256:	70 f5       	brcc	.+92     	; 0x2b4 <key+0x78>
  {
    key_SEL_PORT&=0x1f;                       
 258:	80 91 3b 00 	lds	r24, 0x003B

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -