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

📄 demo_t1_clock.lss

📁 基于MEGA16的按键识别程序
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 16a:	df 93       	push	r29
  uchar i;
  display_handle();
 16c:	0e 94 6f 00 	call	0xde	; 0xde <display_handle>
 170:	e4 e7       	ldi	r30, 0x74	; 116
 172:	f0 e0       	ldi	r31, 0x00	; 0
 174:	cb e6       	ldi	r28, 0x6B	; 107
 176:	d0 e0       	ldi	r29, 0x00	; 0
 178:	a0 ea       	ldi	r26, 0xA0	; 160
 17a:	bf e0       	ldi	r27, 0x0F	; 15
  for(i=0;i<8;i++)
   {
     PORTA=dis_data[i];
 17c:	81 91       	ld	r24, Z+
 17e:	8b bb       	out	0x1b, r24	; 27
	 PORTC=disbeat_run[i];
 180:	89 91       	ld	r24, Y+
 182:	85 bb       	out	0x15, r24	; 21
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 184:	cd 01       	movw	r24, r26
 186:	01 97       	sbiw	r24, 0x01	; 1
 188:	f1 f7       	brne	.-4      	; 0x186 <display+0x1e>
 18a:	80 e0       	ldi	r24, 0x00	; 0
 18c:	ec 37       	cpi	r30, 0x7C	; 124
 18e:	f8 07       	cpc	r31, r24
 190:	a9 f7       	brne	.-22     	; 0x17c <display+0x14>
 192:	df 91       	pop	r29
 194:	cf 91       	pop	r28
 196:	08 95       	ret

00000198 <read_key>:
	 _delay_ms(2);
	}
} 
	

//键盘识别程序

void read_key()
{  
 198:	86 b3       	in	r24, 0x16	; 22
 19a:	8f 70       	andi	r24, 0x0F	; 15
 19c:	8f 30       	cpi	r24, 0x0F	; 15
 19e:	09 f4       	brne	.+2      	; 0x1a2 <read_key+0xa>
 1a0:	40 c0       	rjmp	.+128    	; 0x222 <read_key+0x8a>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 1a2:	80 e2       	ldi	r24, 0x20	; 32
 1a4:	9e e4       	ldi	r25, 0x4E	; 78
 1a6:	01 97       	sbiw	r24, 0x01	; 1
 1a8:	f1 f7       	brne	.-4      	; 0x1a6 <read_key+0xe>
  if((PINB&0x0f)!=0x0f)
  {
     _delay_ms(10);
     switch(PINB&0x0f)
 1aa:	86 b3       	in	r24, 0x16	; 22
 1ac:	99 27       	eor	r25, r25
 1ae:	8f 70       	andi	r24, 0x0F	; 15
 1b0:	90 70       	andi	r25, 0x00	; 0
 1b2:	8d 30       	cpi	r24, 0x0D	; 13
 1b4:	91 05       	cpc	r25, r1
 1b6:	81 f0       	breq	.+32     	; 0x1d8 <read_key+0x40>
 1b8:	8e 30       	cpi	r24, 0x0E	; 14
 1ba:	91 05       	cpc	r25, r1
 1bc:	19 f0       	breq	.+6      	; 0x1c4 <read_key+0x2c>
 1be:	0b 97       	sbiw	r24, 0x0b	; 11
 1c0:	81 f5       	brne	.+96     	; 0x222 <read_key+0x8a>
 1c2:	1d c0       	rjmp	.+58     	; 0x1fe <read_key+0x66>
      {
        case 0x0e: 
                  seconds=0;
 1c4:	10 92 7c 00 	sts	0x007C, r1
 1c8:	02 c0       	rjmp	.+4      	; 0x1ce <read_key+0x36>
			      while((PINB&0x0f)==0x0e)
				  {
				    display();
 1ca:	0e 94 b4 00 	call	0x168	; 0x168 <display>
 1ce:	86 b3       	in	r24, 0x16	; 22
 1d0:	8f 70       	andi	r24, 0x0F	; 15
 1d2:	8e 30       	cpi	r24, 0x0E	; 14
 1d4:	d1 f3       	breq	.-12     	; 0x1ca <read_key+0x32>
 1d6:	08 95       	ret
					}
					break;//可以思考为什么在这里要放置display()函数
        case 0x0d: 
                  minutes++;
 1d8:	80 91 7d 00 	lds	r24, 0x007D
 1dc:	8f 5f       	subi	r24, 0xFF	; 255
 1de:	80 93 7d 00 	sts	0x007D, r24
		    	  if(minutes==60){minutes=0;}
 1e2:	80 91 7d 00 	lds	r24, 0x007D
 1e6:	8c 33       	cpi	r24, 0x3C	; 60
 1e8:	29 f4       	brne	.+10     	; 0x1f4 <read_key+0x5c>
 1ea:	10 92 7d 00 	sts	0x007D, r1
 1ee:	02 c0       	rjmp	.+4      	; 0x1f4 <read_key+0x5c>
		    	  while((PINB&0x0f)==0x0d)
				  {
				    display();
 1f0:	0e 94 b4 00 	call	0x168	; 0x168 <display>
 1f4:	86 b3       	in	r24, 0x16	; 22
 1f6:	8f 70       	andi	r24, 0x0F	; 15
 1f8:	8d 30       	cpi	r24, 0x0D	; 13
 1fa:	d1 f3       	breq	.-12     	; 0x1f0 <read_key+0x58>
 1fc:	08 95       	ret
					}
					break;
        case 0x0b: 
                  hours++;
 1fe:	80 91 7e 00 	lds	r24, 0x007E
 202:	8f 5f       	subi	r24, 0xFF	; 255
 204:	80 93 7e 00 	sts	0x007E, r24
                  if(hours==60){hours=0;}  
 208:	80 91 7e 00 	lds	r24, 0x007E
 20c:	8c 33       	cpi	r24, 0x3C	; 60
 20e:	29 f4       	brne	.+10     	; 0x21a <read_key+0x82>
 210:	10 92 7e 00 	sts	0x007E, r1
 214:	02 c0       	rjmp	.+4      	; 0x21a <read_key+0x82>
			      while((PINB&0x0f)==0x0b)
				  {
				   display();
 216:	0e 94 b4 00 	call	0x168	; 0x168 <display>
 21a:	86 b3       	in	r24, 0x16	; 22
 21c:	8f 70       	andi	r24, 0x0F	; 15
 21e:	8b 30       	cpi	r24, 0x0B	; 11
 220:	d1 f3       	breq	.-12     	; 0x216 <read_key+0x7e>
 222:	08 95       	ret

00000224 <__vector_6>:
				   }
				   break; 
      }
   }	
} 

 
//定时器T1匹配中断A服务程序
//#pragma interrupt_handler timer1_compa_isr:8
//void timer1_compa_isr(void)
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
 224:	1f 92       	push	r1
 226:	0f 92       	push	r0
 228:	0f b6       	in	r0, 0x3f	; 63
 22a:	0f 92       	push	r0
 22c:	11 24       	eor	r1, r1
 22e:	8f 93       	push	r24
	  
	   static uchar count=0;
	   count++;
 230:	80 91 7f 00 	lds	r24, 0x007F
 234:	8f 5f       	subi	r24, 0xFF	; 255
 236:	80 93 7f 00 	sts	0x007F, r24
	   if(count==10)//有误差,需要重新计算
 23a:	8a 30       	cpi	r24, 0x0A	; 10
 23c:	19 f5       	brne	.+70     	; 0x284 <__vector_6+0x60>
	   {
	     count=0;
 23e:	10 92 7f 00 	sts	0x007F, r1
		 seconds++;
 242:	80 91 7c 00 	lds	r24, 0x007C
 246:	8f 5f       	subi	r24, 0xFF	; 255
 248:	80 93 7c 00 	sts	0x007C, r24
		 if(seconds==60)
 24c:	80 91 7c 00 	lds	r24, 0x007C
 250:	8c 33       	cpi	r24, 0x3C	; 60
 252:	c1 f4       	brne	.+48     	; 0x284 <__vector_6+0x60>
		   {
		     seconds=0;
 254:	10 92 7c 00 	sts	0x007C, r1
		     minutes++;
 258:	80 91 7d 00 	lds	r24, 0x007D
 25c:	8f 5f       	subi	r24, 0xFF	; 255
 25e:	80 93 7d 00 	sts	0x007D, r24
			 if(minutes==60)
 262:	80 91 7d 00 	lds	r24, 0x007D
 266:	8c 33       	cpi	r24, 0x3C	; 60
 268:	69 f4       	brne	.+26     	; 0x284 <__vector_6+0x60>
			   {
			     minutes=0;
 26a:	10 92 7d 00 	sts	0x007D, r1
				 hours++;
 26e:	80 91 7e 00 	lds	r24, 0x007E
 272:	8f 5f       	subi	r24, 0xFF	; 255
 274:	80 93 7e 00 	sts	0x007E, r24
				 if(hours==24)
 278:	80 91 7e 00 	lds	r24, 0x007E
 27c:	88 31       	cpi	r24, 0x18	; 24
 27e:	11 f4       	brne	.+4      	; 0x284 <__vector_6+0x60>
				 {
				    hours=0;
 280:	10 92 7e 00 	sts	0x007E, r1
 284:	8f 91       	pop	r24
 286:	0f 90       	pop	r0
 288:	0f be       	out	0x3f, r0	; 63
 28a:	0f 90       	pop	r0
 28c:	1f 90       	pop	r1
 28e:	18 95       	reti

00000290 <main>:
					
				   }
				}
			}	
		}
     
	
}



void main()
{
 290:	0e 94 61 00 	call	0xc2	; 0xc2 <init_devices>

  
  init_devices();
  while(1)
  { 
    
     read_key();	
 294:	0e 94 cc 00 	call	0x198	; 0x198 <read_key>
     display();	
 298:	0e 94 b4 00 	call	0x168	; 0x168 <display>
 29c:	fb cf       	rjmp	.-10     	; 0x294 <main+0x4>

0000029e <__udivmodqi4>:
 29e:	99 1b       	sub	r25, r25
 2a0:	79 e0       	ldi	r23, 0x09	; 9
 2a2:	04 c0       	rjmp	.+8      	; 0x2ac <__udivmodqi4_ep>

000002a4 <__udivmodqi4_loop>:
 2a4:	99 1f       	adc	r25, r25
 2a6:	96 17       	cp	r25, r22
 2a8:	08 f0       	brcs	.+2      	; 0x2ac <__udivmodqi4_ep>
 2aa:	96 1b       	sub	r25, r22

000002ac <__udivmodqi4_ep>:
 2ac:	88 1f       	adc	r24, r24
 2ae:	7a 95       	dec	r23
 2b0:	c9 f7       	brne	.-14     	; 0x2a4 <__udivmodqi4_loop>
 2b2:	80 95       	com	r24
 2b4:	08 95       	ret

000002b6 <_exit>:
 2b6:	ff cf       	rjmp	.-2      	; 0x2b6 <_exit>

⌨️ 快捷键说明

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