?? keyboard.lss
字號:
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 + -