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

📄 dtmf2.lst

📁 使用2X16的液晶(国内型号叫1602B)。可以将234个来电存在EEPROM中
💻 LST
📖 第 1 页 / 共 4 页
字号:
 368               	.LM50:
 369               	/* prologue: frame size=0 */
 370 012c 1F92      		push __zero_reg__
 371 012e 0F92      		push __tmp_reg__
 372 0130 0FB6      		in __tmp_reg__,__SREG__
 373 0132 0F92      		push __tmp_reg__
 374 0134 1124      		clr __zero_reg__
 375 0136 1F93      		push r17
 376 0138 2F93      		push r18
 377 013a 3F93      		push r19
 378 013c 4F93      		push r20
 379 013e 5F93      		push r21
 380 0140 6F93      		push r22
 381 0142 7F93      		push r23
 382 0144 8F93      		push r24
 383 0146 9F93      		push r25
 384 0148 AF93      		push r26
 385 014a BF93      		push r27
 386 014c CF93      		push r28
 387 014e EF93      		push r30
 388 0150 FF93      		push r31
 389               	/* prologue end (size=19) */
 113:dtmf2.c       ****  if((PIND >> PD0) & 1) {					//test if up button is released
 391               	.LM51:
 392 0152 809B      		sbis 48-0x20,0
 393 0154 0EC0      		rjmp .L21
 114:dtmf2.c       ****  	uptimeL=22;						//reset up depressed timer
 395               	.LM52:
 396 0156 86E1      		ldi r24,lo8(22)
 397 0158 8093 0000 		sts uptimeL,r24
 115:dtmf2.c       ****  	if(uptimeH<22)uptimeH++;				//increment up released timer
 399               	.LM53:
 400 015c 8091 0000 		lds r24,uptimeH
 401 0160 8631      		cpi r24,lo8(22)
 402 0162 20F4      		brsh .L22
 403 0164 8F5F      		subi r24,lo8(-(1))
 404 0166 8093 0000 		sts uptimeH,r24
 405 016a 41C0      		rjmp .L24
 406               	.L22:
 116:dtmf2.c       ****  	else up=0;						//indicate up filtered release
 408               	.LM54:
 409 016c 1092 0000 		sts up,__zero_reg__
 410 0170 3EC0      		rjmp .L24
 411               	.L21:
 117:dtmf2.c       ****  }
 118:dtmf2.c       ****  else {
 119:dtmf2.c       ****  	uptimeH=0;				 		//reset up release timer
 413               	.LM55:
 414 0172 1092 0000 		sts uptimeH,__zero_reg__
 120:dtmf2.c       ****  	if(uptimeL>0)uptimeL--;				//increment up depressed timer
 416               	.LM56:
 417 0176 8091 0000 		lds r24,uptimeL
 418 017a 8823      		tst r24
 419 017c 21F0      		breq .L25
 420 017e 8150      		subi r24,lo8(-(-1))
 421 0180 8093 0000 		sts uptimeL,r24
 422 0184 34C0      		rjmp .L24
 423               	.L25:
 121:dtmf2.c       ****  	else {
 122:dtmf2.c       ****  		if(up==0 && lcdln<19) {			//scroll up if not at end (Line 19)
 425               	.LM57:
 426 0186 C091 0000 		lds r28,up
 427 018a CC23      		tst r28
 428 018c 81F5      		brne .L24
 429 018e 8091 0000 		lds r24,lcdln
 430 0192 8331      		cpi r24,lo8(19)
 431 0194 60F5      		brsh .L24
 123:dtmf2.c       ****  	 		redraw = 1;				//set flag to redraw incomming screen
 433               	.LM58:
 434 0196 11E0      		ldi r17,lo8(1)
 435 0198 1093 0000 		sts redraw,r17
 124:dtmf2.c       ****  	 		lcdln++;					//increment line number
 437               	.LM59:
 438 019c 810F      		add r24,r17
 439 019e 8093 0000 		sts lcdln,r24
 125:dtmf2.c       ****  			lcdcmd (0x01);				//Clear LCD, move home//clear lcd
 441               	.LM60:
 442 01a2 612F      		mov r22,r17
 443 01a4 8C2F      		mov r24,r28
 444 01a6 B3D1      		rcall lcdwrt
 126:dtmf2.c       ****  			trnsfr (lcdln-1, esrl-13);			//draw top line
 446               	.LM61:
 447 01a8 9091 0000 		lds r25,esrl
 448 01ac 9D50      		subi r25,lo8(-(-13))
 449 01ae 8091 0000 		lds r24,lcdln
 450 01b2 8150      		subi r24,lo8(-(-1))
 451 01b4 692F      		mov r22,r25
 452 01b6 E9D0      		rcall trnsfr
 127:dtmf2.c       ****  			lcdcmd (0xC0);						//set cursor at bottom line
 454               	.LM62:
 455 01b8 60EC      		ldi r22,lo8(-64)
 456 01ba 8C2F      		mov r24,r28
 457 01bc A8D1      		rcall lcdwrt
 128:dtmf2.c       ****  			if(lcdln!=19) trnsfr (lcdln, esrl-26);	//draw bottom line
 459               	.LM63:
 460 01be 9091 0000 		lds r25,lcdln
 461 01c2 9331      		cpi r25,lo8(19)
 462 01c4 31F0      		breq .L28
 463 01c6 8091 0000 		lds r24,esrl
 464 01ca 8A51      		subi r24,lo8(-(-26))
 465 01cc 682F      		mov r22,r24
 466 01ce 892F      		mov r24,r25
 467 01d0 DCD0      		rcall trnsfr
 468               	.L28:
 129:dtmf2.c       ****  			esrl=esrl-13;						//adjust eeprom scroll offset
 470               	.LM64:
 471 01d2 8091 0000 		lds r24,esrl
 472 01d6 8D50      		subi r24,lo8(-(-13))
 473 01d8 8093 0000 		sts esrl,r24
 130:dtmf2.c       ****  			if(lcdln==19) {
 475               	.LM65:
 476 01dc 8091 0000 		lds r24,lcdln
 477 01e0 8331      		cpi r24,lo8(19)
 478 01e2 19F4      		brne .L29
 131:dtmf2.c       ****  				line19();				//re-draw line 19
 480               	.LM66:
 481 01e4 5AD1      		rcall line19
 132:dtmf2.c       ****  				redraw = 0;
 483               	.LM67:
 484 01e6 C093 0000 		sts redraw,r28
 485               	.L29:
 133:dtmf2.c       ****  			}
 134:dtmf2.c       ****  			up = 1;
 487               	.LM68:
 488 01ea 1093 0000 		sts up,r17
 489               	.L24:
 135:dtmf2.c       ****  		}
 136:dtmf2.c       ****  	}
 137:dtmf2.c       ****  }
 138:dtmf2.c       ****  if((PIND >> PD2) & 1) {					//test if down button is released
 491               	.LM69:
 492 01ee 80B3      		in r24,48-0x20
 493 01f0 8695      		lsr r24
 494 01f2 8695      		lsr r24
 495 01f4 80FF      		sbrs r24,0
 496 01f6 0EC0      		rjmp .L30
 139:dtmf2.c       ****  	dntimeL=22;						//reset down depressed timer
 498               	.LM70:
 499 01f8 86E1      		ldi r24,lo8(22)
 500 01fa 8093 0000 		sts dntimeL,r24
 140:dtmf2.c       ****  	if(dntimeH<22)dntimeH++;				//increment down released timer
 502               	.LM71:
 503 01fe 8091 0000 		lds r24,dntimeH
 504 0202 8631      		cpi r24,lo8(22)
 505 0204 20F4      		brsh .L31
 506 0206 8F5F      		subi r24,lo8(-(1))
 507 0208 8093 0000 		sts dntimeH,r24
 508 020c 35C0      		rjmp .L20
 509               	.L31:
 141:dtmf2.c       ****  	else dn=0;						//indicate down filtered release
 511               	.LM72:
 512 020e 1092 0000 		sts dn,__zero_reg__
 513 0212 32C0      		rjmp .L20
 514               	.L30:
 142:dtmf2.c       ****  }
 143:dtmf2.c       ****  else {
 144:dtmf2.c       ****  	dntimeH=0;						//reset down release timer
 516               	.LM73:
 517 0214 1092 0000 		sts dntimeH,__zero_reg__
 145:dtmf2.c       ****  	if(dntimeL>0)dntimeL--;				//increment down depressed timer
 519               	.LM74:
 520 0218 8091 0000 		lds r24,dntimeL
 521 021c 8823      		tst r24
 522 021e 21F0      		breq .L34
 523 0220 8150      		subi r24,lo8(-(-1))
 524 0222 8093 0000 		sts dntimeL,r24
 525 0226 28C0      		rjmp .L20
 526               	.L34:
 146:dtmf2.c       ****  	else {							
 147:dtmf2.c       ****  		if(dn==0 && lcdln>2) {			//scroll down if not at end (Line 1)
 528               	.LM75:
 529 0228 C091 0000 		lds r28,dn
 530 022c CC23      		tst r28
 531 022e 21F5      		brne .L20
 532 0230 8091 0000 		lds r24,lcdln
 533 0234 8330      		cpi r24,lo8(3)
 534 0236 00F1      		brlo .L20
 148:dtmf2.c       ****  			redraw = 1;				//set flag to redraw incomming screen
 536               	.LM76:
 537 0238 11E0      		ldi r17,lo8(1)
 538 023a 1093 0000 		sts redraw,r17
 149:dtmf2.c       ****  			lcdln--;
 540               	.LM77:
 541 023e 8150      		subi r24,lo8(-(-1))
 542 0240 8093 0000 		sts lcdln,r24
 150:dtmf2.c       ****  			lcdcmd (0x01);				//Clear LCD, move home//clear lcd
 544               	.LM78:
 545 0244 612F      		mov r22,r17
 546 0246 8C2F      		mov r24,r28
 547 0248 62D1      		rcall lcdwrt
 151:dtmf2.c       ****  			trnsfr (lcdln-1, esrl+13);	//draw top line
 549               	.LM79:
 550 024a 9091 0000 		lds r25,esrl
 551 024e 935F      		subi r25,lo8(-(13))
 552 0250 8091 0000 		lds r24,lcdln
 553 0254 8150      		subi r24,lo8(-(-1))
 554 0256 692F      		mov r22,r25
 555 0258 98D0      		rcall trnsfr
 152:dtmf2.c       ****  			lcdcmd (0xC0);				//set cursor at of bottom line
 557               	.LM80:
 558 025a 60EC      		ldi r22,lo8(-64)
 559 025c 8C2F      		mov r24,r28
 560 025e 57D1      		rcall lcdwrt
 153:dtmf2.c       ****  			trnsfr (lcdln, esrl);		//draw bottom line
 562               	.LM81:
 563 0260 6091 0000 		lds r22,esrl
 564 0264 8091 0000 		lds r24,lcdln
 565 0268 90D0      		rcall trnsfr
 154:dtmf2.c       ****  			esrl=esrl+13;				//adjust eeprom scroll offset
 567               	.LM82:
 568 026a 8091 0000 		lds r24,esrl
 569 026e 835F      		subi r24,lo8(-(13))
 570 0270 8093 0000 		sts esrl,r24
 155:dtmf2.c       ****  			dn = 1;
 572               	.LM83:
 573 0274 1093 0000 		sts dn,r17
 156:dtmf2.c       **** 		} 	
 157:dtmf2.c       ****  	}
 158:dtmf2.c       ****  }
 159:dtmf2.c       **** }
 575               	.LM84:
 576               	.L20:
 577               	/* epilogue: frame size=0 */
 578 0278 FF91      		pop r31
 579 027a EF91      		pop r30
 580 027c CF91      		pop r28
 581 027e BF91      		pop r27
 582 0280 AF91      		pop r26
 583 0282 9F91      		pop r25
 584 0284 8F91      		pop r24
 585 0286 7F91      		pop r23
 586 0288 6F91      		pop r22
 587 028a 5F91      		pop r21
 588 028c 4F91      		pop r20
 589 028e 3F91      		pop r19
 590 0290 2F91      		pop r18
 591 0292 1F91      		pop r17
 592 0294 0F90      		pop __tmp_reg__
 593 0296 0FBE      		out __SREG__,__tmp_reg__
 594 0298 0F90      		pop __tmp_reg__
 595 029a 1F90      		pop __zero_reg__
 596 029c 1895      		reti
 597               	/* epilogue end (size=19) */
 598               	/* function __vector_6 size 185 (147) */
 600               	.Lscope2:
 604               	.global	UART_PrintfProgStr
 606               	UART_PrintfProgStr:
 160:dtmf2.c       **** 
 161:dtmf2.c       **** void UART_PrintfProgStr(unsigned char* pBuf) 
 162:dtmf2.c       **** { 
 608               	.LM85:
 609               	/* prologue: frame size=0 */
 610 029e 0F93      		push r16
 611 02a0 1F93      		push r17
 612 02a2 CF93      		push r28
 613 02a4 DF93      		push r29
 614               	/* prologue end (size=4) */
 615 02a6 D92F      		mov r29,r25
 616 02a8 C82F      		mov r28,r24
 163:dtmf2.c       ****  unsigned char pos;
 164:dtmf2.c       ****  pos = 0;
 618               	.LM86:
 619               	.LBB4:
 620 02aa 00E0      		ldi r16,lo8(0)
 165:dtmf2.c       ****  lcdcmd (0x80);						//LCD Start Position on 1st Row
 622               	.LM87:
 623 02ac 60E8      		ldi r22,lo8(-128)
 624 02ae 802F      		mov r24,r16
 625 02b0 2ED1      		rcall lcdwrt
 166:dtmf2.c       ****  while (PRG_RDB(pBuf)!=0) { 				//Go through string until end(null)
 627               	.LM88:
 628 02b2 FD2F      		mov r31,r29
 629 02b4 EC2F      		mov r30,r28
 630               	.LBB5:
 631               	/* #APP */
 632 02b6 C895      		lpm
 633 02b8 802D      		mov r24, r0
 634               		
 635               	/* #NOAPP */
 636               	.LBE5:
 637 02ba 8823      		tst r24
 638 02bc B9F0      		breq .L48
 639               	.L46:
 167:dtmf2.c       **** 	UDR = PRG_RDB(pBuf);				//Send string byte out UART
 641               	.LM89:
 642 02be FD2F      		mov r31,r29
 643 02c0 EC2F      		mov r30,r28
 644               	.LBB6:
 645               	/* #APP */
 646 02c2 C895      		lpm
 647 02c4 102D      		mov r17, r0
 648               		
 649               	/* #NOAPP */
 650               	.LBE6:
 651 02c6 1CB9      		out 44-0x20,r17
 168:dtmf2.c       ****     	if (pos == 0x10) lcdcmd (0xC0);		//If end of 1st goto 2nd Row
 653               	.LM90:
 654 02c8 0031      		cpi r16,lo8(16)
 655 02ca 19F4      		brne .L41
 656 02cc 60EC      		ldi r22,lo8(-64)
 657 02ce 80E0      		ldi r24,lo8(0)
 658 02d0 1ED1      		rcall lcdwrt
 659               	.L41:
 169:dtmf2.c       **** 	lcdata (PRG_RDB(pBuf));				//Send string byte to LCD
 661               	.LM91:
 662 02d2 612F      		mov r22,r17
 663 02d4 81E0      		ldi r24,lo8(1)
 664 02d6 1BD1      		rcall lcdwrt
 170:dtmf2.c       ****   	pBuf++;							//Point to next byte in string
 666               	.LM92:
 667 02d8 2196      		adiw r28,1
 171:dtmf2.c       ****   	pos++;							//point to next LCD position
 669               	.LM93:
 670 02da 0F5F      		subi r16,lo8(-(1))
 172:dtmf2.c       ****     	while ( !(USR & (1<<UDRE)) ); 		//Wait for UART to finish TXing
 672               	.LM94:
 673               	.L42:
 674 02dc 5D9B      		sbis 43-0x20,5
 675 02de FECF      		rjmp .L42
 676 02e0 FD2F      		mov r31,r29
 677 02e2 EC2F      		mov r30,r28
 678               	.LBB7:
 679               	/* #APP */
 680 02e4 C895      		lpm
 681 02e6 802D      		mov r24, r0
 682               		
 683               	/* #NOAPP */
 684               	.LBE7:
 685 02e8 8823      		tst r24
 686 02ea 49F7      		brne .L46
 687               	.L48:
 173:dtmf2.c       ****  }     	
 174:dtmf2.c       **** } 
 689               	.LM95:
 690               	.LBE4:
 691               	/* epilogue: frame size=0 */
 692 02ec DF91      		pop r29
 693 02ee CF91      		pop r28
 694 02f0 1F91      		pop r17
 695 02f2 0F91      		pop r16
 696 02f4 0895      		ret
 697               	/* epilogue end (size=5) */
 698               	/* function UART_PrintfProgStr size 56 (47) */
 712               	.Lscope3:
 716               	.global	TXbyte
 718               	TXbyte:
 175:dtmf2.c       **** 
 176:dtmf2.c       **** void TXbyte ( char data ) 			//Transmits 1 byte out the UART
 177:dtmf2.c       **** { 
 720               	.LM96:
 721               	/* prologue: frame size=0 */
 722               	/* prologue end (size=0) */
 178:dtmf2.c       ****  while ( !(USR & (1<<UDRE)) );   			//wait for empty transmit buffer 
 724               	.LM97:
 725               	.L50:
 726 02f6 5D9B      		sbis 43-0x20,5

⌨️ 快捷键说明

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