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

📄 main.lss

📁 AVR单片机控制下的实时按键显示,已测试通过
💻 LSS
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000002d6  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000012  00800060  000002d6  0000036a  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000004  00800072  00800072  0000037c  2**0
                  ALLOC
  3 .noinit       00000000  00800076  00800076  0000037c  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  0000037c  2**0
                  CONTENTS
  5 .stab         000004a4  00000000  00000000  0000037c  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000584  00000000  00000000  00000820  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54
   4:	0c 94 45 00 	jmp	0x8a
   8:	0c 94 45 00 	jmp	0x8a
   c:	0c 94 45 00 	jmp	0x8a
  10:	0c 94 45 00 	jmp	0x8a
  14:	0c 94 45 00 	jmp	0x8a
  18:	0c 94 45 00 	jmp	0x8a
  1c:	0c 94 45 00 	jmp	0x8a
  20:	0c 94 45 00 	jmp	0x8a
  24:	0c 94 32 01 	jmp	0x264
  28:	0c 94 45 00 	jmp	0x8a
  2c:	0c 94 45 00 	jmp	0x8a
  30:	0c 94 45 00 	jmp	0x8a
  34:	0c 94 45 00 	jmp	0x8a
  38:	0c 94 45 00 	jmp	0x8a
  3c:	0c 94 45 00 	jmp	0x8a
  40:	0c 94 45 00 	jmp	0x8a
  44:	0c 94 45 00 	jmp	0x8a
  48:	0c 94 45 00 	jmp	0x8a
  4c:	0c 94 45 00 	jmp	0x8a
  50:	0c 94 45 00 	jmp	0x8a

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:	e6 ed       	ldi	r30, 0xD6	; 214
  68:	f2 e0       	ldi	r31, 0x02	; 2
  6a:	02 c0       	rjmp	.+4      	; 0x70

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

00000070 <.do_copy_data_start>:
  70:	a2 37       	cpi	r26, 0x72	; 114
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a2 e7       	ldi	r26, 0x72	; 114
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

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

00000080 <.do_clear_bss_start>:
  80:	a6 37       	cpi	r26, 0x76	; 118
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 59 01 	jmp	0x2b2

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

0000008e <Keyboard>:
uint8_t ledcode[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x7C,0x58,0x5E,0x79,0x71};//定义数组用来表示"0"到"F"


uint8_t Keyboard(void)
{
  8e:	9f 92       	push	r9
  90:	af 92       	push	r10
  92:	bf 92       	push	r11
  94:	cf 92       	push	r12
  96:	df 92       	push	r13
  98:	ef 92       	push	r14
  9a:	ff 92       	push	r15
  9c:	0f 93       	push	r16
  9e:	1f 93       	push	r17
  a0:	cf 93       	push	r28
  a2:	50 91 70 00 	lds	r21, 0x0070
  a6:	90 90 60 00 	lds	r9, 0x0060
  aa:	90 91 73 00 	lds	r25, 0x0073
  ae:	40 91 72 00 	lds	r20, 0x0072
  b2:	a0 90 61 00 	lds	r10, 0x0061
  b6:	b0 90 62 00 	lds	r11, 0x0062
  ba:	c0 90 63 00 	lds	r12, 0x0063
  be:	d0 90 64 00 	lds	r13, 0x0064
  c2:	e0 90 65 00 	lds	r14, 0x0065
  c6:	f0 90 66 00 	lds	r15, 0x0066
  ca:	00 91 67 00 	lds	r16, 0x0067
  ce:	10 91 68 00 	lds	r17, 0x0068
  d2:	c0 91 69 00 	lds	r28, 0x0069
  d6:	b0 91 6a 00 	lds	r27, 0x006A
  da:	a0 91 6b 00 	lds	r26, 0x006B
  de:	f0 91 6c 00 	lds	r31, 0x006C
  e2:	e0 91 6d 00 	lds	r30, 0x006D
  e6:	70 91 6e 00 	lds	r23, 0x006E
  ea:	60 91 6f 00 	lds	r22, 0x006F
static uint8_t ScanCode=0xF7,Time=0,led=0x00,ledcurrent=0x00,ledlast=0x00;
	do			//键盘扫描
		{
		switch(ScanCode)	//扫描信号
  ee:	25 2f       	mov	r18, r21
  f0:	33 27       	eor	r19, r19
  f2:	2b 3f       	cpi	r18, 0xFB	; 251
  f4:	31 05       	cpc	r19, r1
  f6:	69 f0       	breq	.+26     	; 0x112
  f8:	2c 3f       	cpi	r18, 0xFC	; 252
  fa:	31 05       	cpc	r19, r1
  fc:	24 f4       	brge	.+8      	; 0x106
  fe:	27 3f       	cpi	r18, 0xF7	; 247
 100:	31 05       	cpc	r19, r1
 102:	29 f0       	breq	.+10     	; 0x10e
 104:	0a c0       	rjmp	.+20     	; 0x11a
 106:	2d 3f       	cpi	r18, 0xFD	; 253
 108:	31 05       	cpc	r19, r1
 10a:	29 f0       	breq	.+10     	; 0x116
 10c:	06 c0       	rjmp	.+12     	; 0x11a
			{   
   // 扫描信号从0111-1011
				case 0XF7: ScanCode=0XFB;break;
 10e:	5b ef       	ldi	r21, 0xFB	; 251
 110:	05 c0       	rjmp	.+10     	; 0x11c
   // 扫描信号从1011-1101
			     case 0XFB: ScanCode=0XFD;break;
 112:	5d ef       	ldi	r21, 0xFD	; 253
 114:	03 c0       	rjmp	.+6      	; 0x11c
   //扫描信号从1101-1110
				case 0XFD: ScanCode=0XFE;break;
 116:	5e ef       	ldi	r21, 0xFE	; 254
 118:	01 c0       	rjmp	.+2      	; 0x11c
   //扫描信号从1110-0111
				case 0XFE: ScanCode=0XF7;break;
				default: {ScanCode=0XF7;break;}
 11a:	57 ef       	ldi	r21, 0xF7	; 247
			}

    /*在main()函数里需将DDRC设成0x0F,即PC7~PC4为输入,PC3~PC0为输出。
    下面PORTC=ScanCode意味着,将PC7~PC4设为带上拉功能的输入,
    而PC3~PC0输出扫描信号。*/
		KEY_PORT=ScanCode;
 11c:	55 bb       	out	0x15, r21	; 21

/*键值判断,有按键时,将键值赋予led ,否则计数变量time加1*/
		switch(KEY_PIN)	        // 解读行列电平值与按键值的关系			
 11e:	83 b3       	in	r24, 0x13	; 19
 120:	28 2f       	mov	r18, r24
 122:	33 27       	eor	r19, r19
 124:	2e 3b       	cpi	r18, 0xBE	; 190
 126:	31 05       	cpc	r19, r1
 128:	09 f4       	brne	.+2      	; 0x12c
 12a:	6a c0       	rjmp	.+212    	; 0x200
 12c:	2f 3b       	cpi	r18, 0xBF	; 191
 12e:	31 05       	cpc	r19, r1
 130:	34 f5       	brge	.+76     	; 0x17e
 132:	2e 37       	cpi	r18, 0x7E	; 126
 134:	31 05       	cpc	r19, r1
 136:	09 f4       	brne	.+2      	; 0x13a
 138:	65 c0       	rjmp	.+202    	; 0x204
 13a:	2f 37       	cpi	r18, 0x7F	; 127
 13c:	31 05       	cpc	r19, r1
 13e:	8c f4       	brge	.+34     	; 0x162
 140:	2b 37       	cpi	r18, 0x7B	; 123
 142:	31 05       	cpc	r19, r1
 144:	09 f4       	brne	.+2      	; 0x148
 146:	4e c0       	rjmp	.+156    	; 0x1e4
 148:	2c 37       	cpi	r18, 0x7C	; 124
 14a:	31 05       	cpc	r19, r1
 14c:	2c f4       	brge	.+10     	; 0x158
 14e:	27 37       	cpi	r18, 0x77	; 119
 150:	31 05       	cpc	r19, r1
 152:	09 f4       	brne	.+2      	; 0x156
 154:	3f c0       	rjmp	.+126    	; 0x1d4
 156:	59 c0       	rjmp	.+178    	; 0x20a
 158:	2d 37       	cpi	r18, 0x7D	; 125
 15a:	31 05       	cpc	r19, r1
 15c:	09 f4       	brne	.+2      	; 0x160
 15e:	4a c0       	rjmp	.+148    	; 0x1f4
 160:	54 c0       	rjmp	.+168    	; 0x20a
 162:	2b 3b       	cpi	r18, 0xBB	; 187
 164:	31 05       	cpc	r19, r1
 166:	e1 f1       	breq	.+120    	; 0x1e0
 168:	2c 3b       	cpi	r18, 0xBC	; 188
 16a:	31 05       	cpc	r19, r1
 16c:	24 f4       	brge	.+8      	; 0x176
 16e:	27 3b       	cpi	r18, 0xB7	; 183
 170:	31 05       	cpc	r19, r1
 172:	71 f1       	breq	.+92     	; 0x1d0
 174:	4a c0       	rjmp	.+148    	; 0x20a
 176:	2d 3b       	cpi	r18, 0xBD	; 189
 178:	31 05       	cpc	r19, r1
 17a:	d1 f1       	breq	.+116    	; 0x1f0
 17c:	46 c0       	rjmp	.+140    	; 0x20a
 17e:	2e 3d       	cpi	r18, 0xDE	; 222
 180:	31 05       	cpc	r19, r1
 182:	e1 f1       	breq	.+120    	; 0x1fc
 184:	2f 3d       	cpi	r18, 0xDF	; 223
 186:	31 05       	cpc	r19, r1
 188:	74 f4       	brge	.+28     	; 0x1a6
 18a:	2b 3d       	cpi	r18, 0xDB	; 219
 18c:	31 05       	cpc	r19, r1
 18e:	31 f1       	breq	.+76     	; 0x1dc
 190:	2c 3d       	cpi	r18, 0xDC	; 220
 192:	31 05       	cpc	r19, r1
 194:	24 f4       	brge	.+8      	; 0x19e
 196:	27 3d       	cpi	r18, 0xD7	; 215
 198:	31 05       	cpc	r19, r1
 19a:	c1 f0       	breq	.+48     	; 0x1cc
 19c:	36 c0       	rjmp	.+108    	; 0x20a
 19e:	2d 3d       	cpi	r18, 0xDD	; 221
 1a0:	31 05       	cpc	r19, r1
 1a2:	21 f1       	breq	.+72     	; 0x1ec
 1a4:	32 c0       	rjmp	.+100    	; 0x20a
 1a6:	2b 3e       	cpi	r18, 0xEB	; 235
 1a8:	31 05       	cpc	r19, r1
 1aa:	b1 f0       	breq	.+44     	; 0x1d8
 1ac:	2c 3e       	cpi	r18, 0xEC	; 236
 1ae:	31 05       	cpc	r19, r1
 1b0:	24 f4       	brge	.+8      	; 0x1ba
 1b2:	27 3e       	cpi	r18, 0xE7	; 231
 1b4:	31 05       	cpc	r19, r1
 1b6:	41 f0       	breq	.+16     	; 0x1c8
 1b8:	28 c0       	rjmp	.+80     	; 0x20a
 1ba:	2d 3e       	cpi	r18, 0xED	; 237
 1bc:	31 05       	cpc	r19, r1
 1be:	a1 f0       	breq	.+40     	; 0x1e8
 1c0:	2e 3e       	cpi	r18, 0xEE	; 238
 1c2:	31 05       	cpc	r19, r1
 1c4:	c9 f0       	breq	.+50     	; 0x1f8
 1c6:	21 c0       	rjmp	.+66     	; 0x20a
			{
				case keycode0: led=ledcode[0];Time=0;break;
 1c8:	99 2d       	mov	r25, r9
 1ca:	1d c0       	rjmp	.+58     	; 0x206
				case keycode1: led=ledcode[1];Time=0;break;
 1cc:	9a 2d       	mov	r25, r10
 1ce:	1b c0       	rjmp	.+54     	; 0x206
				case keycode2: led=ledcode[2];Time=0;break;
 1d0:	9b 2d       	mov	r25, r11
 1d2:	19 c0       	rjmp	.+50     	; 0x206
				case keycode3: led=ledcode[3];Time=0;break;
 1d4:	9c 2d       	mov	r25, r12
 1d6:	17 c0       	rjmp	.+46     	; 0x206
				case keycode4: led=ledcode[4];Time=0;break;
 1d8:	9d 2d       	mov	r25, r13
 1da:	15 c0       	rjmp	.+42     	; 0x206
				case keycode5: led=ledcode[5];Time=0;break;
 1dc:	9e 2d       	mov	r25, r14
 1de:	13 c0       	rjmp	.+38     	; 0x206
				case keycode6: led=ledcode[6];Time=0;break;
 1e0:	9f 2d       	mov	r25, r15
 1e2:	11 c0       	rjmp	.+34     	; 0x206
				case keycode7: led=ledcode[7];Time=0;break;
 1e4:	90 2f       	mov	r25, r16
 1e6:	0f c0       	rjmp	.+30     	; 0x206
				case keycode8: led=ledcode[8];Time=0;break;
 1e8:	91 2f       	mov	r25, r17
 1ea:	0d c0       	rjmp	.+26     	; 0x206
				case keycode9: led=ledcode[9];Time=0;break;
 1ec:	9c 2f       	mov	r25, r28
 1ee:	0b c0       	rjmp	.+22     	; 0x206
				case keycodeA: led=ledcode[10];Time=0;break;
 1f0:	9b 2f       	mov	r25, r27
 1f2:	09 c0       	rjmp	.+18     	; 0x206
				case keycodeB: led=ledcode[11];Time=0;break;
 1f4:	9a 2f       	mov	r25, r26
 1f6:	07 c0       	rjmp	.+14     	; 0x206
				case keycodeC: led=ledcode[12];Time=0;break;
 1f8:	9f 2f       	mov	r25, r31
 1fa:	05 c0       	rjmp	.+10     	; 0x206
				case keycodeD: led=ledcode[13];Time=0;break;
 1fc:	9e 2f       	mov	r25, r30
 1fe:	03 c0       	rjmp	.+6      	; 0x206
				case keycodeE: led=ledcode[14];Time=0;break;
 200:	97 2f       	mov	r25, r23
 202:	01 c0       	rjmp	.+2      	; 0x206
				case keycodeF: led=ledcode[15];Time=0;break;
 204:	96 2f       	mov	r25, r22
 206:	40 e0       	ldi	r20, 0x00	; 0
 208:	01 c0       	rjmp	.+2      	; 0x20c
				default : {
					Time++;
 20a:	4f 5f       	subi	r20, 0xFF	; 255
					break;
					}
			}
		}
 20c:	84 2f       	mov	r24, r20
 20e:	81 50       	subi	r24, 0x01	; 1
 210:	83 30       	cpi	r24, 0x03	; 3
 212:	08 f4       	brcc	.+2      	; 0x216
 214:	6c cf       	rjmp	.-296    	; 0xee
 216:	40 93 72 00 	sts	0x0072, r20
 21a:	90 93 73 00 	sts	0x0073, r25
 21e:	50 93 70 00 	sts	0x0070, r21
		while((Time!=0)&(Time<4));	//如果time=4(键盘扫描一遍)

		
		if(Time==4)			//由time=4条件而退出,即没有扫描到按键
 222:	44 30       	cpi	r20, 0x04	; 4
 224:	21 f4       	brne	.+8      	; 0x22e
			{
				return(ledlast);
 226:	80 91 75 00 	lds	r24, 0x0075
 22a:	99 27       	eor	r25, r25
 22c:	08 c0       	rjmp	.+16     	; 0x23e
			}
		else
			{
		//检测到有按键时,更新按键值
			ledlast=ledcurrent;
 22e:	80 91 74 00 	lds	r24, 0x0074
 232:	80 93 75 00 	sts	0x0075, r24
			ledcurrent=led;
 236:	90 93 74 00 	sts	0x0074, r25
			return(ledcurrent);
 23a:	89 2f       	mov	r24, r25
 23c:	99 27       	eor	r25, r25
 23e:	cf 91       	pop	r28
 240:	1f 91       	pop	r17
 242:	0f 91       	pop	r16
 244:	ff 90       	pop	r15
 246:	ef 90       	pop	r14
 248:	df 90       	pop	r13
 24a:	cf 90       	pop	r12
 24c:	bf 90       	pop	r11
 24e:	af 90       	pop	r10
 250:	9f 90       	pop	r9
 252:	08 95       	ret

00000254 <Initi_Device>:
			}
}


void Initi_Device(void)
{
	LED_ADD_DDR=0xFF;    //定义为输出
 254:	8f ef       	ldi	r24, 0xFF	; 255
 256:	81 bb       	out	0x11, r24	; 17
	LED_ADD_PORT=0xFE;   //控制最后一个八段数码管亮
 258:	9e ef       	ldi	r25, 0xFE	; 254
 25a:	92 bb       	out	0x12, r25	; 18
	LED_DATA_DDR=0xFF;   //定义为输出
 25c:	87 bb       	out	0x17, r24	; 23
	LED_DATA_PORT=0xBF;  //输出数字
 25e:	8f eb       	ldi	r24, 0xBF	; 191
 260:	88 bb       	out	0x18, r24	; 24
 262:	08 95       	ret

00000264 <__vector_9>:
}

SIGNAL(SIG_OVERFLOW0)
{
 264:	1f 92       	push	r1
 266:	0f 92       	push	r0
 268:	0f b6       	in	r0, 0x3f	; 63
 26a:	0f 92       	push	r0
 26c:	11 24       	eor	r1, r1
 26e:	2f 93       	push	r18
 270:	3f 93       	push	r19
 272:	4f 93       	push	r20
 274:	5f 93       	push	r21
 276:	6f 93       	push	r22
 278:	7f 93       	push	r23
 27a:	8f 93       	push	r24
 27c:	9f 93       	push	r25
 27e:	af 93       	push	r26
 280:	bf 93       	push	r27
 282:	ef 93       	push	r30
 284:	ff 93       	push	r31
TCNT0=0XB2;
 286:	82 eb       	ldi	r24, 0xB2	; 178
 288:	82 bf       	out	0x32, r24	; 50
LED_DATA_PORT=Keyboard();
 28a:	0e 94 47 00 	call	0x8e
 28e:	88 bb       	out	0x18, r24	; 24
 290:	ff 91       	pop	r31
 292:	ef 91       	pop	r30
 294:	bf 91       	pop	r27
 296:	af 91       	pop	r26
 298:	9f 91       	pop	r25
 29a:	8f 91       	pop	r24
 29c:	7f 91       	pop	r23
 29e:	6f 91       	pop	r22
 2a0:	5f 91       	pop	r21
 2a2:	4f 91       	pop	r20
 2a4:	3f 91       	pop	r19
 2a6:	2f 91       	pop	r18
 2a8:	0f 90       	pop	r0
 2aa:	0f be       	out	0x3f, r0	; 63
 2ac:	0f 90       	pop	r0
 2ae:	1f 90       	pop	r1
 2b0:	18 95       	reti

000002b2 <main>:
}

int main(void)
{
 2b2:	cf e5       	ldi	r28, 0x5F	; 95
 2b4:	d4 e0       	ldi	r29, 0x04	; 4
 2b6:	de bf       	out	0x3e, r29	; 62
 2b8:	cd bf       	out	0x3d, r28	; 61
KEY_DDR=0X0F;
 2ba:	8f e0       	ldi	r24, 0x0F	; 15
 2bc:	84 bb       	out	0x14, r24	; 20
KEY_PORT=0XFF;
 2be:	8f ef       	ldi	r24, 0xFF	; 255
 2c0:	85 bb       	out	0x15, r24	; 21
Initi_Device();
 2c2:	0e 94 2a 01 	call	0x254
TCCR0=5;
 2c6:	85 e0       	ldi	r24, 0x05	; 5
 2c8:	83 bf       	out	0x33, r24	; 51
TCNT0=0XB2;
 2ca:	82 eb       	ldi	r24, 0xB2	; 178
 2cc:	82 bf       	out	0x32, r24	; 50
TIMSK=(1<<TOIE0);
 2ce:	81 e0       	ldi	r24, 0x01	; 1
 2d0:	89 bf       	out	0x39, r24	; 57
sei();
 2d2:	78 94       	sei
for(;;)
 2d4:	ff cf       	rjmp	.-2      	; 0x2d4

⌨️ 快捷键说明

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