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

📄 dtmf2.lss

📁 来电显示例程
💻 LSS
📖 第 1 页 / 共 3 页
字号:


void trnsfr(char line, char eol)		//Moves digits from eeprom to LCD line
{
 3f6:	1f 93       	push	r17
 3f8:	cf 93       	push	r28
 3fa:	c8 2f       	mov	r28, r24
 3fc:	16 2f       	mov	r17, r22
 unsigned char hold,pop;
 if(line<10) {							//test if line is less than 10
 3fe:	8a 30       	cpi	r24, 0x0A	; 10
 400:	20 f4       	brcc	.+8      	; 0x40a
 	lcdata (' ');						//write space on LCD
 402:	60 e2       	ldi	r22, 0x20	; 32
 404:	81 e0       	ldi	r24, 0x01	; 1
 406:	b9 d0       	rcall	.+370    	; 0x57a
 	lcdata ((line|0x30));				//write 'ones' line number on LCD
 408:	04 c0       	rjmp	.+8      	; 0x412
 }
 else {								//if line greater than 9....
 	lcdata ('1');						//write 1 on LCD
 40a:	61 e3       	ldi	r22, 0x31	; 49
 40c:	81 e0       	ldi	r24, 0x01	; 1
 40e:	b5 d0       	rcall	.+362    	; 0x57a
 	lcdata (((line-10)|0x30));			//write 'ones' line number on LCD
 410:	ca 50       	subi	r28, 0x0A	; 10
 412:	c0 63       	ori	r28, 0x30	; 48
 414:	6c 2f       	mov	r22, r28
 416:	81 e0       	ldi	r24, 0x01	; 1
 418:	b0 d0       	rcall	.+352    	; 0x57a
 }
 lcdata ('-');							//write "-" after line number
 41a:	6d e2       	ldi	r22, 0x2D	; 45
 41c:	81 e0       	ldi	r24, 0x01	; 1
 41e:	ad d0       	rcall	.+346    	; 0x57a
 for(pop=1;pop<=13;pop++) {				//Read nibbles
 420:	c1 e0       	ldi	r28, 0x01	; 1
 	hold = eread(pop+eref-eol-14);		//Get byte from eeprom
 422:	80 91 78 00 	lds	r24, 0x0078
 426:	8c 0f       	add	r24, r28
 428:	81 1b       	sub	r24, r17
 42a:	8e 50       	subi	r24, 0x0E	; 14
 42c:	ab df       	rcall	.-170    	; 0x384
 	lcdata (fltr(hold));				//Send to LCD
 42e:	8d d0       	rcall	.+282    	; 0x54a
 430:	68 2f       	mov	r22, r24
 432:	81 e0       	ldi	r24, 0x01	; 1
 434:	a2 d0       	rcall	.+324    	; 0x57a
 436:	cf 5f       	subi	r28, 0xFF	; 255
 438:	ce 30       	cpi	r28, 0x0E	; 14
 43a:	98 f3       	brcs	.-26     	; 0x422
 }
}
 43c:	cf 91       	pop	r28
 43e:	1f 91       	pop	r17
 440:	08 95       	ret

00000442 <updtlcd>:

void updtlcd(unsigned char ldata)		//Handles writing new dtmf digit to LCD
{
 442:	cf 93       	push	r28
 444:	c8 2f       	mov	r28, r24
 if (redraw==1 && lcdpos<13) {			// Redraw LCD if up/dn stuff is on it
 446:	60 91 73 00 	lds	r22, 0x0073
 44a:	61 30       	cpi	r22, 0x01	; 1
 44c:	a1 f4       	brne	.+40     	; 0x476
 44e:	80 91 72 00 	lds	r24, 0x0072
 452:	8d 30       	cpi	r24, 0x0D	; 13
 454:	80 f4       	brcc	.+32     	; 0x476
 	redraw = 0;
 456:	10 92 73 00 	sts	0x0073, r1
 	esrl = 0;
 45a:	10 92 60 00 	sts	0x0060, r1
 	lcdln = 19;						//reset line numbner
 45e:	83 e1       	ldi	r24, 0x13	; 19
 460:	80 93 62 00 	sts	0x0062, r24
 	lcdcmd (0x01);						//Clear LCD, move home//clear lcd
 464:	80 e0       	ldi	r24, 0x00	; 0
 466:	89 d0       	rcall	.+274    	; 0x57a
 	trnsfr (18, 0);					//draw line 18
 468:	60 e0       	ldi	r22, 0x00	; 0
 46a:	82 e1       	ldi	r24, 0x12	; 18
 46c:	c4 df       	rcall	.-120    	; 0x3f6
 	lcdcmd (0xC0);						//set cursor at begining of bottom line
 46e:	60 ec       	ldi	r22, 0xC0	; 192
 470:	80 e0       	ldi	r24, 0x00	; 0
 472:	83 d0       	rcall	.+262    	; 0x57a
 	line19();							//re-draw line 19
 474:	48 d0       	rcall	.+144    	; 0x506
 }
 if (lcdpos>=13) {
 476:	80 91 72 00 	lds	r24, 0x0072
 47a:	8d 30       	cpi	r24, 0x0D	; 13
 47c:	a8 f1       	brcs	.+106    	; 0x4e8
 	lcdcmd (0x01);						//Clear LCD, move home//clear lcd
 47e:	61 e0       	ldi	r22, 0x01	; 1
 480:	80 e0       	ldi	r24, 0x00	; 0
 482:	7b d0       	rcall	.+246    	; 0x57a
 	lcdata ('1');						//write "18-"
 484:	61 e3       	ldi	r22, 0x31	; 49
 486:	81 e0       	ldi	r24, 0x01	; 1
 488:	78 d0       	rcall	.+240    	; 0x57a
 	lcdata ('8');
 48a:	68 e3       	ldi	r22, 0x38	; 56
 48c:	81 e0       	ldi	r24, 0x01	; 1
 48e:	75 d0       	rcall	.+234    	; 0x57a
 	lcdata ('-');
 490:	6d e2       	ldi	r22, 0x2D	; 45
 492:	81 e0       	ldi	r24, 0x01	; 1
 494:	72 d0       	rcall	.+228    	; 0x57a
 	for (lcdpos=0;lcdpos<=13;lcdpos++) {	//Move bottom line to top
 496:	10 92 72 00 	sts	0x0072, r1
 		lcdata (lcdtemp[lcdpos]);
 49a:	80 91 72 00 	lds	r24, 0x0072
 49e:	e8 2f       	mov	r30, r24
 4a0:	ff 27       	eor	r31, r31
 4a2:	eb 59       	subi	r30, 0x9B	; 155
 4a4:	ff 4f       	sbci	r31, 0xFF	; 255
 4a6:	60 81       	ld	r22, Z
 4a8:	81 e0       	ldi	r24, 0x01	; 1
 4aa:	67 d0       	rcall	.+206    	; 0x57a
 4ac:	80 91 72 00 	lds	r24, 0x0072
 4b0:	8f 5f       	subi	r24, 0xFF	; 255
 4b2:	80 93 72 00 	sts	0x0072, r24
 4b6:	8e 30       	cpi	r24, 0x0E	; 14
 4b8:	80 f3       	brcs	.-32     	; 0x49a
 	}
 	lcdcmd (0xC0);						//set cursor at begining of bottom line
 4ba:	60 ec       	ldi	r22, 0xC0	; 192
 4bc:	80 e0       	ldi	r24, 0x00	; 0
 4be:	5d d0       	rcall	.+186    	; 0x57a
 	lcdata ('1');						//write "19-"
 4c0:	61 e3       	ldi	r22, 0x31	; 49
 4c2:	81 e0       	ldi	r24, 0x01	; 1
 4c4:	5a d0       	rcall	.+180    	; 0x57a
 	lcdata ('9');
 4c6:	69 e3       	ldi	r22, 0x39	; 57
 4c8:	81 e0       	ldi	r24, 0x01	; 1
 4ca:	57 d0       	rcall	.+174    	; 0x57a
 	lcdata ('-');
 4cc:	6d e2       	ldi	r22, 0x2D	; 45
 4ce:	81 e0       	ldi	r24, 0x01	; 1
 4d0:	54 d0       	rcall	.+168    	; 0x57a
 	lcdpos = 0;						//Reset line position
 4d2:	10 92 72 00 	sts	0x0072, r1
 	
 	eref = eepos;						//set end of line 18 at end of eeprom
 4d6:	80 91 64 00 	lds	r24, 0x0064
 4da:	80 93 78 00 	sts	0x0078, r24
 	esrl = 0;
 4de:	10 92 60 00 	sts	0x0060, r1
 	lcdln = 19;						//reset line numbner
 4e2:	83 e1       	ldi	r24, 0x13	; 19
 4e4:	80 93 62 00 	sts	0x0062, r24
 }
 lcdata (ldata);						//Write digit to LCD
 4e8:	6c 2f       	mov	r22, r28
 4ea:	81 e0       	ldi	r24, 0x01	; 1
 4ec:	46 d0       	rcall	.+140    	; 0x57a
 lcdtemp[lcdpos] = ldata;				//Store digit in ram
 4ee:	80 91 72 00 	lds	r24, 0x0072
 4f2:	e8 2f       	mov	r30, r24
 4f4:	ff 27       	eor	r31, r31
 4f6:	eb 59       	subi	r30, 0x9B	; 155
 4f8:	ff 4f       	sbci	r31, 0xFF	; 255
 4fa:	c0 83       	st	Z, r28
 lcdpos++;
 4fc:	8f 5f       	subi	r24, 0xFF	; 255
 4fe:	80 93 72 00 	sts	0x0072, r24
}
 502:	cf 91       	pop	r28
 504:	08 95       	ret

00000506 <line19>:

void line19(void)					//restores Ln 19 before the scroll
{
 lcdata ('1');							//Write "19-
 506:	61 e3       	ldi	r22, 0x31	; 49
 508:	81 e0       	ldi	r24, 0x01	; 1
 50a:	37 d0       	rcall	.+110    	; 0x57a
 lcdata ('9');
 50c:	69 e3       	ldi	r22, 0x39	; 57
 50e:	81 e0       	ldi	r24, 0x01	; 1
 510:	34 d0       	rcall	.+104    	; 0x57a
 lcdata ('-');
 512:	6d e2       	ldi	r22, 0x2D	; 45
 514:	81 e0       	ldi	r24, 0x01	; 1
 516:	31 d0       	rcall	.+98     	; 0x57a
 for (a=0;a<lcdpos;a++) {				//loop until all digits have been restored
 518:	10 92 79 00 	sts	0x0079, r1
 51c:	80 91 72 00 	lds	r24, 0x0072
 520:	88 23       	and	r24, r24
 522:	91 f0       	breq	.+36     	; 0x548
 	lcdata (lcdtemp[a]);				//restore LCD Line 19 from ram
 524:	80 91 79 00 	lds	r24, 0x0079
 528:	e8 2f       	mov	r30, r24
 52a:	ff 27       	eor	r31, r31
 52c:	eb 59       	subi	r30, 0x9B	; 155
 52e:	ff 4f       	sbci	r31, 0xFF	; 255
 530:	60 81       	ld	r22, Z
 532:	81 e0       	ldi	r24, 0x01	; 1
 534:	22 d0       	rcall	.+68     	; 0x57a
 536:	80 91 79 00 	lds	r24, 0x0079
 53a:	8f 5f       	subi	r24, 0xFF	; 255
 53c:	80 93 79 00 	sts	0x0079, r24
 540:	90 91 72 00 	lds	r25, 0x0072
 544:	89 17       	cp	r24, r25
 546:	70 f3       	brcs	.-36     	; 0x524
 }
}
 548:	08 95       	ret

0000054a <fltr>:

unsigned char fltr(char fdata)		//Filters digits for 10,#, and *
{
 if(fdata==0x0F) return (0x20);			//correct for blank cell
 54a:	8f 30       	cpi	r24, 0x0F	; 15
 54c:	19 f4       	brne	.+6      	; 0x554
 54e:	80 e2       	ldi	r24, 0x20	; 32
 550:	90 e0       	ldi	r25, 0x00	; 0
 if(fdata==0x0A) return (0x30);			//correct for Zero from decoder
 if(fdata==0x0B) return (0x2A);			//correct for * from decoder
 if(fdata==0x0C) return (0x23);			//correct for # from decoder
 else return (fdata|0x30);
}
 552:	08 95       	ret
 554:	8a 30       	cpi	r24, 0x0A	; 10
 556:	19 f4       	brne	.+6      	; 0x55e
 558:	80 e3       	ldi	r24, 0x30	; 48
 55a:	90 e0       	ldi	r25, 0x00	; 0
 55c:	08 95       	ret
 55e:	8b 30       	cpi	r24, 0x0B	; 11
 560:	19 f4       	brne	.+6      	; 0x568
 562:	8a e2       	ldi	r24, 0x2A	; 42
 564:	90 e0       	ldi	r25, 0x00	; 0
 566:	08 95       	ret
 568:	8c 30       	cpi	r24, 0x0C	; 12
 56a:	19 f4       	brne	.+6      	; 0x572
 56c:	83 e2       	ldi	r24, 0x23	; 35
 56e:	90 e0       	ldi	r25, 0x00	; 0
 570:	08 95       	ret
 572:	80 63       	ori	r24, 0x30	; 48
 574:	99 27       	eor	r25, r25
 576:	08 95       	ret
 578:	08 95       	ret

0000057a <lcdwrt>:

void lcdwrt (char dt, char data)		// Writes Byte to LCD dt=0 Control dt=1 data
{
 57a:	cf 93       	push	r28
 57c:	df 93       	push	r29
 57e:	cd b7       	in	r28, 0x3d	; 61
 580:	de b7       	in	r29, 0x3e	; 62
 582:	22 97       	sbiw	r28, 0x02	; 2
 584:	0f b6       	in	r0, 0x3f	; 63
 586:	f8 94       	cli
 588:	de bf       	out	0x3e, r29	; 62
 58a:	0f be       	out	0x3f, r0	; 63
 58c:	cd bf       	out	0x3d, r28	; 61
 58e:	98 2f       	mov	r25, r24
 volatile unsigned int x;
 DDRB = 0xFF;							//Set PORTB as Output
 590:	8f ef       	ldi	r24, 0xFF	; 255
 592:	87 bb       	out	0x17, r24	; 23
 if (dt == 1) sbi(PORTD,5);  				//Data PD5=1 or Control PD5=0
 594:	91 30       	cpi	r25, 0x01	; 1
 596:	11 f4       	brne	.+4      	; 0x59c
 598:	95 9a       	sbi	0x12, 5	; 18
 59a:	01 c0       	rjmp	.+2      	; 0x59e
 else cbi(PORTD,5);						
 59c:	95 98       	cbi	0x12, 5	; 18
 PORTB = data;							//Send data byte (PORTB)
 59e:	68 bb       	out	0x18, r22	; 24
 for (x=0;x < 50;x++);					//Delay 250uS
 5a0:	19 82       	std	Y+1, r1	; 0x01
 5a2:	1a 82       	std	Y+2, r1	; 0x02
 5a4:	89 81       	ldd	r24, Y+1	; 0x01
 5a6:	9a 81       	ldd	r25, Y+2	; 0x02
 5a8:	c2 97       	sbiw	r24, 0x32	; 50
 5aa:	48 f4       	brcc	.+18     	; 0x5be
 5ac:	89 81       	ldd	r24, Y+1	; 0x01
 5ae:	9a 81       	ldd	r25, Y+2	; 0x02
 5b0:	01 96       	adiw	r24, 0x01	; 1
 5b2:	89 83       	std	Y+1, r24	; 0x01
 5b4:	9a 83       	std	Y+2, r25	; 0x02
 5b6:	89 81       	ldd	r24, Y+1	; 0x01
 5b8:	9a 81       	ldd	r25, Y+2	; 0x02
 5ba:	c2 97       	sbiw	r24, 0x32	; 50
 5bc:	b8 f3       	brcs	.-18     	; 0x5ac
  sbi(PORTD,6);	   					//Set Strobe 
 5be:	96 9a       	sbi	0x12, 6	; 18
 for (x=0;x < 50;x++);					//Delay 250uS
 5c0:	19 82       	std	Y+1, r1	; 0x01
 5c2:	1a 82       	std	Y+2, r1	; 0x02
 5c4:	89 81       	ldd	r24, Y+1	; 0x01
 5c6:	9a 81       	ldd	r25, Y+2	; 0x02
 5c8:	c2 97       	sbiw	r24, 0x32	; 50
 5ca:	48 f4       	brcc	.+18     	; 0x5de
 5cc:	89 81       	ldd	r24, Y+1	; 0x01
 5ce:	9a 81       	ldd	r25, Y+2	; 0x02
 5d0:	01 96       	adiw	r24, 0x01	; 1
 5d2:	89 83       	std	Y+1, r24	; 0x01
 5d4:	9a 83       	std	Y+2, r25	; 0x02
 5d6:	89 81       	ldd	r24, Y+1	; 0x01
 5d8:	9a 81       	ldd	r25, Y+2	; 0x02
 5da:	c2 97       	sbiw	r24, 0x32	; 50
 5dc:	b8 f3       	brcs	.-18     	; 0x5cc
 cbi(PORTD,6);	   						//Clear Strobe 
 5de:	96 98       	cbi	0x12, 6	; 18
 for (x=0;x < 200;x++);					//Delay 1000uS
 5e0:	19 82       	std	Y+1, r1	; 0x01
 5e2:	1a 82       	std	Y+2, r1	; 0x02
 5e4:	89 81       	ldd	r24, Y+1	; 0x01
 5e6:	9a 81       	ldd	r25, Y+2	; 0x02
 5e8:	88 3c       	cpi	r24, 0xC8	; 200
 5ea:	91 05       	cpc	r25, r1
 5ec:	50 f4       	brcc	.+20     	; 0x602
 5ee:	89 81       	ldd	r24, Y+1	; 0x01
 5f0:	9a 81       	ldd	r25, Y+2	; 0x02
 5f2:	01 96       	adiw	r24, 0x01	; 1
 5f4:	89 83       	std	Y+1, r24	; 0x01
 5f6:	9a 83       	std	Y+2, r25	; 0x02
 5f8:	89 81       	ldd	r24, Y+1	; 0x01
 5fa:	9a 81       	ldd	r25, Y+2	; 0x02
 5fc:	88 3c       	cpi	r24, 0xC8	; 200
 5fe:	91 05       	cpc	r25, r1
 600:	b0 f3       	brcs	.-20     	; 0x5ee
 DDRB = 0x00;							//Set PORTB as Input
 602:	17 ba       	out	0x17, r1	; 23
}
 604:	22 96       	adiw	r28, 0x02	; 2
 606:	0f b6       	in	r0, 0x3f	; 63
 608:	f8 94       	cli
 60a:	de bf       	out	0x3e, r29	; 62
 60c:	0f be       	out	0x3f, r0	; 63
 60e:	cd bf       	out	0x3d, r28	; 61
 610:	df 91       	pop	r29
 612:	cf 91       	pop	r28
 614:	08 95       	ret

⌨️ 快捷键说明

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