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

📄 keyboard.lss

📁 AVR Devolpment Board
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 198:	31 f1       	breq	.+76     	; 0x1e6 <read_keyboard+0x148>
 19a:	26 c0       	rjmp	.+76     	; 0x1e8 <read_keyboard+0x14a>
 19c:	8d 38       	cpi	r24, 0x8D	; 141
 19e:	91 05       	cpc	r25, r1
 1a0:	f1 f0       	breq	.+60     	; 0x1de <read_keyboard+0x140>
 1a2:	8e 38       	cpi	r24, 0x8E	; 142
 1a4:	91 05       	cpc	r25, r1
 1a6:	c9 f0       	breq	.+50     	; 0x1da <read_keyboard+0x13c>
 1a8:	1f c0       	rjmp	.+62     	; 0x1e8 <read_keyboard+0x14a>
				{ // 键盘编码,返回编码值
					case 0b00011110:
						key_return = K0_0;
 1aa:	60 e0       	ldi	r22, 0x00	; 0
						break;
 1ac:	1d c0       	rjmp	.+58     	; 0x1e8 <read_keyboard+0x14a>
					case 0b00011101:
						key_return = K0_1;
 1ae:	64 e0       	ldi	r22, 0x04	; 4
						break;
 1b0:	1b c0       	rjmp	.+54     	; 0x1e8 <read_keyboard+0x14a>
					case 0b00011011:
						key_return = K0_2;
 1b2:	68 e0       	ldi	r22, 0x08	; 8
						break;
 1b4:	19 c0       	rjmp	.+50     	; 0x1e8 <read_keyboard+0x14a>
					case 0b00010111:
						key_return = K0_3;
 1b6:	6c e0       	ldi	r22, 0x0C	; 12
						break;
 1b8:	17 c0       	rjmp	.+46     	; 0x1e8 <read_keyboard+0x14a>
					case 0b00101110:
						key_return = K1_0;
 1ba:	61 e0       	ldi	r22, 0x01	; 1
						break;
 1bc:	15 c0       	rjmp	.+42     	; 0x1e8 <read_keyboard+0x14a>
					case 0b00101101:
						key_return = K1_1;
 1be:	65 e0       	ldi	r22, 0x05	; 5
						break;
 1c0:	13 c0       	rjmp	.+38     	; 0x1e8 <read_keyboard+0x14a>
					case 0b00101011:
						key_return = K1_2;
 1c2:	69 e0       	ldi	r22, 0x09	; 9
						break;
 1c4:	11 c0       	rjmp	.+34     	; 0x1e8 <read_keyboard+0x14a>
					case 0b00100111:
						key_return = K1_3;
 1c6:	6d e0       	ldi	r22, 0x0D	; 13
						break;
 1c8:	0f c0       	rjmp	.+30     	; 0x1e8 <read_keyboard+0x14a>
					case 0b01001110:
						key_return = K2_0;
 1ca:	62 e0       	ldi	r22, 0x02	; 2
						break;
 1cc:	0d c0       	rjmp	.+26     	; 0x1e8 <read_keyboard+0x14a>
					case 0b01001101:
						key_return = K2_1;
 1ce:	66 e0       	ldi	r22, 0x06	; 6
						break;
 1d0:	0b c0       	rjmp	.+22     	; 0x1e8 <read_keyboard+0x14a>
					case 0b01001011:
						key_return = K2_2;
 1d2:	6a e0       	ldi	r22, 0x0A	; 10
						break;
 1d4:	09 c0       	rjmp	.+18     	; 0x1e8 <read_keyboard+0x14a>
					case 0b01000111:
						key_return = K2_3;
 1d6:	6e e0       	ldi	r22, 0x0E	; 14
						break;
 1d8:	07 c0       	rjmp	.+14     	; 0x1e8 <read_keyboard+0x14a>
					case 0b10001110:
						key_return = K3_0;
 1da:	63 e0       	ldi	r22, 0x03	; 3
						break;
 1dc:	05 c0       	rjmp	.+10     	; 0x1e8 <read_keyboard+0x14a>
					case 0b10001101:
						key_return = K3_1;
 1de:	67 e0       	ldi	r22, 0x07	; 7
						break;
 1e0:	03 c0       	rjmp	.+6      	; 0x1e8 <read_keyboard+0x14a>
					case 0b10001011:
						key_return = K3_2;
 1e2:	6b e0       	ldi	r22, 0x0B	; 11
						break;
 1e4:	01 c0       	rjmp	.+2      	; 0x1e8 <read_keyboard+0x14a>
					case 0b10000111:
						key_return = K3_3;
 1e6:	6f e0       	ldi	r22, 0x0F	; 15
						break;
				}
				key_state++; // 转入等待按键释放状态
 1e8:	5f 5f       	subi	r21, 0xFF	; 255
 1ea:	01 c0       	rjmp	.+2      	; 0x1ee <read_keyboard+0x150>
			}
			else
				key_state--; // 两次列电平不同返回状态0,(消抖处理)
 1ec:	51 50       	subi	r21, 0x01	; 1
 1ee:	50 93 68 00 	sts	0x0068, r21
			break;
 1f2:	0b c0       	rjmp	.+22     	; 0x20a <read_keyboard+0x16c>
		case 2: // 等待按键释放状态
			PORTD = 0b00001111; // 行线全部输出低电平
 1f4:	8f e0       	ldi	r24, 0x0F	; 15
 1f6:	82 bb       	out	0x12, r24	; 18
			PORTD = 0b00001111; // 重复送一次
 1f8:	82 bb       	out	0x12, r24	; 18
			if ( (Key_mask & PIND) == Key_mask)
 1fa:	80 b3       	in	r24, 0x10	; 16
 1fc:	99 27       	eor	r25, r25
 1fe:	8f 70       	andi	r24, 0x0F	; 15
 200:	90 70       	andi	r25, 0x00	; 0
 202:	0f 97       	sbiw	r24, 0x0f	; 15
 204:	11 f4       	brne	.+4      	; 0x20a <read_keyboard+0x16c>
				key_state=0; // 列线全部为高电平返回状态0
 206:	10 92 68 00 	sts	0x0068, r1
			break;
	}
	return key_return;
}
 20a:	86 2f       	mov	r24, r22
 20c:	99 27       	eor	r25, r25
 20e:	08 95       	ret

00000210 <Scanf>:

const prog_char SegCode[16]={
/* Cathode common Smg display code*/
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 

unsigned char DisBuffer[8]={0,0,0,0,0,0,0,0};

void Scanf(void)
{
 210:	0f 93       	push	r16
 212:	1f 93       	push	r17
 214:	cf 93       	push	r28
 216:	df 93       	push	r29
 218:	01 e0       	ldi	r16, 0x01	; 1
 21a:	10 e0       	ldi	r17, 0x00	; 0
 21c:	a4 ef       	ldi	r26, 0xF4	; 244
 21e:	b1 e0       	ldi	r27, 0x01	; 1
 220:	c0 e0       	ldi	r28, 0x00	; 0
 222:	d0 e0       	ldi	r29, 0x00	; 0
 224:	60 e6       	ldi	r22, 0x60	; 96
 226:	70 e0       	ldi	r23, 0x00	; 0
 228:	20 e0       	ldi	r18, 0x00	; 0
 22a:	30 e0       	ldi	r19, 0x00	; 0
 22c:	47 e0       	ldi	r20, 0x07	; 7
	unsigned char i=0;
	for(i=0;i<8;i++)
	{
		PORTB = pgm_read_byte(&SegCode[DisBuffer[i]]);
 22e:	fb 01       	movw	r30, r22
 230:	81 91       	ld	r24, Z+
 232:	bf 01       	movw	r22, r30
 234:	e8 2f       	mov	r30, r24
 236:	ff 27       	eor	r31, r31
 238:	ec 5a       	subi	r30, 0xAC	; 172
 23a:	ff 4f       	sbci	r31, 0xFF	; 255
 23c:	84 91       	lpm	r24, Z
 23e:	88 bb       	out	0x18, r24	; 24
		PORTA|= (1<<PA4);
 240:	dc 9a       	sbi	0x1b, 4	; 27
		PORTA&=~(1<<PA4);	
 242:	dc 98       	cbi	0x1b, 4	; 27
				
		PORTB = (1<<i);
 244:	c8 01       	movw	r24, r16
 246:	02 2e       	mov	r0, r18
 248:	02 c0       	rjmp	.+4      	; 0x24e <Scanf+0x3e>
 24a:	88 0f       	add	r24, r24
 24c:	99 1f       	adc	r25, r25
 24e:	0a 94       	dec	r0
 250:	e2 f7       	brpl	.-8      	; 0x24a <Scanf+0x3a>
 252:	88 bb       	out	0x18, r24	; 24
		PORTA|= (1<<PA5);
 254:	dd 9a       	sbi	0x1b, 5	; 27
		PORTA&=~(1<<PA5);
 256:	dd 98       	cbi	0x1b, 5	; 27
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 258:	cd 01       	movw	r24, r26
 25a:	01 97       	sbiw	r24, 0x01	; 1
 25c:	f1 f7       	brne	.-4      	; 0x25a <Scanf+0x4a>
 25e:	41 50       	subi	r20, 0x01	; 1
 260:	2f 5f       	subi	r18, 0xFF	; 255
 262:	3f 4f       	sbci	r19, 0xFF	; 255
 264:	47 ff       	sbrs	r20, 7
 266:	e3 cf       	rjmp	.-58     	; 0x22e <Scanf+0x1e>
 268:	df 91       	pop	r29
 26a:	cf 91       	pop	r28
 26c:	1f 91       	pop	r17
 26e:	0f 91       	pop	r16
 270:	08 95       	ret

00000272 <main>:
		

		_delay_ms(2);
	}
}

int main(void)
{
 272:	cf e5       	ldi	r28, 0x5F	; 95
 274:	d4 e0       	ldi	r29, 0x04	; 4
 276:	de bf       	out	0x3e, r29	; 62
 278:	cd bf       	out	0x3d, r28	; 61
	unsigned char KeyNumber=0;
	/* Set LED and Smg LE pin as output , databus as output */
	DDRA |=(1<<PA4)|(1<<PA5)|(1<<PA6); 
 27a:	8a b3       	in	r24, 0x1a	; 26
 27c:	80 67       	ori	r24, 0x70	; 112
 27e:	8a bb       	out	0x1a, r24	; 26
	DDRB  = 0xFF;
 280:	8f ef       	ldi	r24, 0xFF	; 255
 282:	87 bb       	out	0x17, r24	; 23

	/* Off the LED display */
	PORTB = 0xFF;
 284:	88 bb       	out	0x18, r24	; 24
	PORTA|= (1<<PA6);
 286:	de 9a       	sbi	0x1b, 6	; 27
	PORTA&=~(1<<PA6);
 288:	de 98       	cbi	0x1b, 6	; 27
	
	/* Set the direction of the keyboard interface */
	DDRD = 0xF0;
 28a:	80 ef       	ldi	r24, 0xF0	; 240
 28c:	81 bb       	out	0x11, r24	; 17

	while(1)
	{
		KeyNumber=read_keyboard();
 28e:	0e 94 4f 00 	call	0x9e <read_keyboard>
		if(KeyNumber!=255)
 292:	8f 3f       	cpi	r24, 0xFF	; 255
 294:	11 f0       	breq	.+4      	; 0x29a <main+0x28>
			DisBuffer[7]=KeyNumber;
 296:	80 93 67 00 	sts	0x0067, r24
		
		Scanf(); /* 16ms */
 29a:	0e 94 08 01 	call	0x210 <Scanf>
 29e:	f7 cf       	rjmp	.-18     	; 0x28e <main+0x1c>

⌨️ 快捷键说明

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