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

📄 demo_key_test.lss

📁 基于MEGA16的按键识别程序
💻 LSS
字号:

Demo_key_test.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000134  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000020  00800060  00000134  000001a8  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .stab         00000378  00000000  00000000  000001c8  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000071  00000000  00000000  00000540  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_aranges 00000020  00000000  00000000  000005b1  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_pubnames 00000070  00000000  00000000  000005d1  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_info   00000244  00000000  00000000  00000641  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_abbrev 000000fd  00000000  00000000  00000885  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_line   000001bf  00000000  00000000  00000982  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_frame  00000050  00000000  00000000  00000b44  2**2
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    00000122  00000000  00000000  00000b94  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_loc    00000068  00000000  00000000  00000cb6  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54	; 0x54 <__ctors_end>
   4:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   8:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  10:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  14:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  18:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  1c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  20:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  24:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  28:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  2c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  30:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  34:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  38:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  3c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  40:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  44:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  48:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  4c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  50:	0c 94 47 00 	jmp	0x8e	; 0x8e <__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:	e4 e3       	ldi	r30, 0x34	; 52
  68:	f1 e0       	ldi	r31, 0x01	; 1
  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 38       	cpi	r26, 0x80	; 128
  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 e8       	ldi	r26, 0x80	; 128
  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:	a0 38       	cpi	r26, 0x80	; 128
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 7d 00 	call	0xfa	; 0xfa <main>
  8a:	0c 94 99 00 	jmp	0x132	; 0x132 <_exit>

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

00000092 <port_init>:


//**************端口初始化程序*************************//
void port_init()
{
  92:	8f ef       	ldi	r24, 0xFF	; 255
  94:	8a bb       	out	0x1a, r24	; 26
    DDRA=0xff;
	PORTA=0xff;
  96:	8b bb       	out	0x1b, r24	; 27
	DDRC=0xff;
  98:	84 bb       	out	0x14, r24	; 20
	PORTC=0xff;
  9a:	85 bb       	out	0x15, r24	; 21
	DDRB&=~(1<<0);//出现AVR的位操作
  9c:	b8 98       	cbi	0x17, 0	; 23
	PORTB=0xff;
  9e:	88 bb       	out	0x18, r24	; 24
  a0:	08 95       	ret

000000a2 <led_display_1>:
	}


//****************显示程序1*************************//
//****************显示01234567*********************//
void led_display_1()
{
  a2:	cf 93       	push	r28
  a4:	df 93       	push	r29
  a6:	e0 e7       	ldi	r30, 0x70	; 112
  a8:	f0 e0       	ldi	r31, 0x00	; 0
  aa:	c0 e6       	ldi	r28, 0x60	; 96
  ac:	d0 e0       	ldi	r29, 0x00	; 0
  ae:	a0 ea       	ldi	r26, 0xA0	; 160
  b0:	bf e0       	ldi	r27, 0x0F	; 15
  uchar j;
  for(j=0;j<8;j++)
  {
    PORTA=disnumber_code[j];
  b2:	81 91       	ld	r24, Z+
  b4:	8b bb       	out	0x1b, r24	; 27
	PORTC=disbeat_run[j];
  b6:	89 91       	ld	r24, Y+
  b8:	85 bb       	out	0x15, r24	; 21
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  ba:	cd 01       	movw	r24, r26
  bc:	01 97       	sbiw	r24, 0x01	; 1
  be:	f1 f7       	brne	.-4      	; 0xbc <led_display_1+0x1a>
  c0:	80 e0       	ldi	r24, 0x00	; 0
  c2:	e8 37       	cpi	r30, 0x78	; 120
  c4:	f8 07       	cpc	r31, r24
  c6:	a9 f7       	brne	.-22     	; 0xb2 <led_display_1+0x10>
  c8:	df 91       	pop	r29
  ca:	cf 91       	pop	r28
  cc:	08 95       	ret

000000ce <led_display_2>:
	_delay_ms(2);
   }
}

//***************显示程序2***************************//
//********************显示89ABCDEF*******************//
void led_display_2()
{
  ce:	cf 93       	push	r28
  d0:	df 93       	push	r29
  d2:	e8 e7       	ldi	r30, 0x78	; 120
  d4:	f0 e0       	ldi	r31, 0x00	; 0
  d6:	c8 e6       	ldi	r28, 0x68	; 104
  d8:	d0 e0       	ldi	r29, 0x00	; 0
  da:	a0 ea       	ldi	r26, 0xA0	; 160
  dc:	bf e0       	ldi	r27, 0x0F	; 15
  uchar i;
  for(i=8;i<16;i++)
  {
    PORTA=disnumber_code[i];
  de:	81 91       	ld	r24, Z+
  e0:	8b bb       	out	0x1b, r24	; 27
	PORTC=disbeat_run[i];
  e2:	89 91       	ld	r24, Y+
  e4:	85 bb       	out	0x15, r24	; 21
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  e6:	cd 01       	movw	r24, r26
  e8:	01 97       	sbiw	r24, 0x01	; 1
  ea:	f1 f7       	brne	.-4      	; 0xe8 <led_display_2+0x1a>
  ec:	80 e0       	ldi	r24, 0x00	; 0
  ee:	e0 38       	cpi	r30, 0x80	; 128
  f0:	f8 07       	cpc	r31, r24
  f2:	a9 f7       	brne	.-22     	; 0xde <led_display_2+0x10>
  f4:	df 91       	pop	r29
  f6:	cf 91       	pop	r28
  f8:	08 95       	ret

000000fa <main>:
	_delay_ms(2);
   }
}


//****************主函数开始****************************//

void main()
{
  fa:	1f 93       	push	r17
  uchar flat=0;//设定一个标志位,为以后的状态选择做准备
               //不同的状态对应不同的输出结果 如果flat是0,进入状态1输出“01234567”如果
			   //flat是1进入状态2输出“89ABCDEF”
			   //flat为2时,则从状态2跳到状态3,状态3时即把flat从新给0,回到状态1
			   
 
 
  port_init();
  fc:	0e 94 49 00 	call	0x92	; 0x92 <port_init>
 100:	10 e0       	ldi	r17, 0x00	; 0
  
  while(1)
    {
      if((PINB&0x01)==0)  //消抖要检测两次,这是最基本的写法
 102:	b0 99       	sbic	0x16, 0	; 22
 104:	09 c0       	rjmp	.+18     	; 0x118 <main+0x1e>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 106:	80 e2       	ldi	r24, 0x20	; 32
 108:	9e e4       	ldi	r25, 0x4E	; 78
 10a:	01 97       	sbiw	r24, 0x01	; 1
 10c:	f1 f7       	brne	.-4      	; 0x10a <main+0x10>
        {
	     _delay_ms(10);  //延时10毫秒是为了消抖
		  if((PINB&0x01)==0)  
 10e:	b0 99       	sbic	0x16, 0	; 22
 110:	03 c0       	rjmp	.+6      	; 0x118 <main+0x1e>
	       {
		        flat++;
				while((PINB&0x01)==0); //思考出现这条语句的作用是什么,有和没有有区别吗
 112:	b0 9b       	sbis	0x16, 0	; 22
 114:	fe cf       	rjmp	.-4      	; 0x112 <main+0x18>
 116:	1f 5f       	subi	r17, 0xFF	; 255
				                        //这条语句是为了保证按下按键多久,flat都只加1;如果没有,就会连续加下去
									    //这样就不符合实际的要求
	        }
	  		  
	    }
			//三种状态,有限状态机的思想	
	  if(flat==0)   //状态1
 118:	11 23       	and	r17, r17
 11a:	19 f4       	brne	.+6      	; 0x122 <main+0x28>
	    {
		  led_display_1();
 11c:	0e 94 51 00 	call	0xa2	; 0xa2 <led_display_1>
 120:	f0 cf       	rjmp	.-32     	; 0x102 <main+0x8>
        }
		
	  if(flat==1)  //状态2
 122:	11 30       	cpi	r17, 0x01	; 1
 124:	19 f4       	brne	.+6      	; 0x12c <main+0x32>
	    {
		  led_display_2();
 126:	0e 94 67 00 	call	0xce	; 0xce <led_display_2>
 12a:	eb cf       	rjmp	.-42     	; 0x102 <main+0x8>
		}
	
	  if(flat==2)  //状态3
 12c:	12 30       	cpi	r17, 0x02	; 2
 12e:	49 f7       	brne	.-46     	; 0x102 <main+0x8>
 130:	e7 cf       	rjmp	.-50     	; 0x100 <main+0x6>

00000132 <_exit>:
 132:	ff cf       	rjmp	.-2      	; 0x132 <_exit>

⌨️ 快捷键说明

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