lcd.s

来自「用avr单片机接收GPS的数据的c语言程序」· S 代码 · 共 2,558 行 · 第 1/4 页

S
2,558
字号
	.dbline 516
;  	NOP();	
	nop
	.dbline 517
;  	DDRA&=0x03;
	in R24,0x1a
	andi R24,3
	out 0x1a,R24
	.dbline 518
; 	DDRC&=0XFC;
	in R24,0x14
	andi R24,252
	out 0x14,R24
	.dbline -2
L53:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r lcd_wr_temp 20 c
	.dbsym r lcd_wr_buffer 16 c
	.dbend
	.dbfunc e lcd_display2 _lcd_display2 fV
; lcd_row_counter -> y+1
; lcd_column_counter -> y+0
;     lcd_invter -> R10
;        lcd_asc -> R12
;        asc_rdp -> R20,R21
;    lcd_buffer1 -> R22
; lcd_asc_column -> R14
	.even
_lcd_display2::
	xcall push_gset5
	sbiw R28,2
	.dbline -1
	.dbline 525
; }
; 
; //LCD显示刷屏函数,起始地址放在lcd_display2_buffer[0][0]中
; //使用的全局变量:*lcd_display_rdp; 
; //API function
; void lcd_display2(void)
; {
	.dbline 533
;     const unsigned char *asc_rdp;
;  	unsigned char lcd_row_counter;
;  	unsigned char lcd_column_counter;
;  	unsigned char lcd_asc;
;  	unsigned char lcd_asc_column; 
;  	unsigned char lcd_buffer1;
;  	unsigned char lcd_invter;
;  	lcd_wr1_ins(0xc0);							 //显示起始行为0
	ldi R16,192
	xcall _lcd_wr1_ins
	.dbline 534
;  	lcd_wr2_ins(0xc0);							 //显示起始行为0
	ldi R16,192
	xcall _lcd_wr2_ins
	.dbline 535
;  	*lcd_display_rdp=lcd_display2_buffer[0][0];   
	lds R2,_lcd_display2_buffer
	lds R30,_lcd_display_rdp
	lds R31,_lcd_display_rdp+1
	std z+0,R2
	.dbline 536
;  	for (lcd_row_counter=0;lcd_row_counter<=7;lcd_row_counter++)  //显示的0~7行循环计数
	clr R0
	std y+1,R0
	xjmp L61
L58:
	.dbline 537
;     {
	.dbline 538
;   	    lcd_wr1_ins(lcd_row_counter+0xb8);			 //设置x页地址
	ldd R16,y+1
	subi R16,72    ; addi 184
	xcall _lcd_wr1_ins
	.dbline 539
;  	   	lcd_wr2_ins(lcd_row_counter+0xb8);			 //设置x页地址
	ldd R16,y+1
	subi R16,72    ; addi 184
	xcall _lcd_wr2_ins
	.dbline 540
;  	   	lcd_wr1_ins(0x40);						 	 //y地址清零
	ldi R16,64
	xcall _lcd_wr1_ins
	.dbline 541
;  	   	lcd_wr2_ins(0x40);						 	 //y地址清零
	ldi R16,64
	xcall _lcd_wr2_ins
	.dbline 542
;        	for (lcd_column_counter=0;lcd_column_counter<=9;lcd_column_counter++)  //显示的0~20列循环计数(cs1为0~9列)
	clr R0
	std y+0,R0
	xjmp L65
L62:
	.dbline 543
; 	    {
	.dbline 544
; 	  	    lcd_asc=*lcd_display_rdp;					          //要显示的字符ASC码放在lcd_asc中		 
	lds R30,_lcd_display_rdp
	lds R31,_lcd_display_rdp+1
	ldd R12,z+0
	.dbline 545
; 		    lcd_display_rdp++;
	movw R24,R30
	adiw R24,1
	sts _lcd_display_rdp+1,R25
	sts _lcd_display_rdp,R24
	.dbline 546
; 			if (lcd_asc&BIT(7))
	sbrs R12,7
	rjmp L66
	.dbline 547
; 			{
	.dbline 548
; 			    lcd_invter|=BIT(0);
	mov R24,R10
	ori R24,1
	mov R10,R24
	.dbline 549
; 				lcd_asc&=(~BIT(7));
	mov R24,R12
	andi R24,127
	mov R12,R24
	.dbline 550
; 			}
	xjmp L67
L66:
	.dbline 552
; 			else
; 			{
	.dbline 553
; 			    lcd_invter&=(~BIT(0));
	mov R24,R10
	andi R24,254
	mov R10,R24
	.dbline 554
; 			}
L67:
	.dbline 555
; 		    if ((lcd_asc<0x20)||(lcd_asc>=0x80))
	mov R24,R12
	cpi R24,32
	brlo L70
	cpi R24,128
	brlo L68
L70:
	.dbline 556
; 		    {
	.dbline 557
; 		        lcd_asc=0x20;
	ldi R24,32
	mov R12,R24
	.dbline 558
; 		    }
L68:
	.dbline 559
; 		    lcd_asc=lcd_asc-0x20;
	mov R24,R12
	subi R24,32
	mov R12,R24
	.dbline 560
; 		    for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++)	  //显示的5列的循环
	clr R14
	xjmp L74
L71:
	.dbline 561
; 		    {
	.dbline 562
; 		        asc_rdp=&asc[lcd_asc][lcd_asc_column];		  //取出当前字符的每列内容
	ldi R24,5
	mul R24,R12
	movw R2,R0
	ldi R24,<_asc
	ldi R25,>_asc
	add R2,R24
	adc R3,R25
	mov R20,R14
	clr R21
	add R20,R2
	adc R21,R3
	.dbline 563
; 		        lcd_buffer1=*asc_rdp;						  //要写入lcd的数据放入lcd_buffer1中
	movw R30,R20
	lpm R22,Z
	.dbline 564
; 	            if(lcd_invter&BIT(0))
	sbrc R10,0
	.dbline 565
; 			    {
	.dbline 566
; 				    lcd_buffer1=~lcd_buffer1;
	com R22
	.dbline 567
; 			    }
L75:
	.dbline 568
	mov R16,R22
	xcall _lcd_wr1_data
	.dbline 569
L72:
	.dbline 560
	inc R14
L74:
	.dbline 560
	ldi R24,4
	cp R24,R14
	brsh L71
	.dbline 570
; 				lcd_wr1_data(lcd_buffer1);			  			 
; 		    }
; 		    if(lcd_invter&BIT(0))
	sbrs R10,0
	rjmp L77
	.dbline 571
; 		    {
	.dbline 572
; 				   lcd_wr1_data(0xff);
	ldi R16,255
	xcall _lcd_wr1_data
	.dbline 573
; 			}
	xjmp L78
L77:
	.dbline 575
; 			else
; 			{
	.dbline 576
; 				   lcd_wr1_data(0x00);
	clr R16
	xcall _lcd_wr1_data
	.dbline 577
; 			}
L78:
	.dbline 578
L63:
	.dbline 542
	ldd R0,y+0
	inc R0
	std y+0,R0
L65:
	.dbline 542
	ldi R24,9
	ldd R0,y+0
	cp R24,R0
	brlo X0
	xjmp L62
X0:
	.dbline 579
; 	   	}
; 	    lcd_asc=*lcd_display_rdp;					          //要显示的字符ASC码放在lcd_asc中		 
	lds R30,_lcd_display_rdp
	lds R31,_lcd_display_rdp+1
	ldd R12,z+0
	.dbline 580
; 	    lcd_display_rdp++;
	movw R24,R30
	adiw R24,1
	sts _lcd_display_rdp+1,R25
	sts _lcd_display_rdp,R24
	.dbline 581
; 	    if (lcd_asc&BIT(7))
	sbrs R12,7
	rjmp L79
	.dbline 582
; 		{
	.dbline 583
; 			lcd_invter|=BIT(0);
	mov R24,R10
	ori R24,1
	mov R10,R24
	.dbline 584
; 			lcd_asc&=(~BIT(7));
	mov R24,R12
	andi R24,127
	mov R12,R24
	.dbline 585
; 		}
	xjmp L80
L79:
	.dbline 587
; 	    else  
; 		{
	.dbline 588
; 			lcd_invter&=(~BIT(0));
	mov R24,R10
	andi R24,254
	mov R10,R24
	.dbline 589
; 		}
L80:
	.dbline 590
; 	    if ((lcd_asc<0x20)||(lcd_asc>=0x80))
	mov R24,R12
	cpi R24,32
	brlo L83
	cpi R24,128
	brlo L81
L83:
	.dbline 591
; 	    {
	.dbline 592
; 		    lcd_asc=0x20;
	ldi R24,32
	mov R12,R24
	.dbline 593
; 	   	}
L81:
	.dbline 594
; 	    lcd_asc=lcd_asc-0x20;
	mov R24,R12
	subi R24,32
	mov R12,R24
	.dbline 595
; 	    for (lcd_asc_column=0;lcd_asc_column<=0x03;lcd_asc_column++)	  //显示的5列的循环
	clr R14
	xjmp L87
L84:
	.dbline 596
; 	    {
	.dbline 597
; 	        asc_rdp=&asc[lcd_asc][lcd_asc_column];		  //取出当前字符的每列内容
	ldi R24,5
	mul R24,R12
	movw R2,R0
	ldi R24,<_asc
	ldi R25,>_asc
	add R2,R24
	adc R3,R25
	mov R20,R14
	clr R21
	add R20,R2
	adc R21,R3
	.dbline 598
; 		 	lcd_buffer1=*asc_rdp;						  //要写入lcd的数据放入lcd_buffer1中
	movw R30,R20
	lpm R22,Z
	.dbline 599
; 	     	if(lcd_invter&BIT(0))
	sbrc R10,0
	.dbline 600
; 			{
	.dbline 601
; 				lcd_buffer1=~lcd_buffer1;
	com R22
	.dbline 602
; 			}
L88:
	.dbline 603
	mov R16,R22
	xcall _lcd_wr1_data
	.dbline 604
L85:
	.dbline 595
	inc R14
L87:
	.dbline 595
	ldi R24,3
	cp R24,R14
	brsh L84
	.dbline 605
; 			lcd_wr1_data(lcd_buffer1);			  			 
; 	   	}
; 	    asc_rdp=&asc[lcd_asc][lcd_asc_column];		  	  //取出当前字符的每列内容
	ldi R24,5
	mul R24,R12
	movw R2,R0
	ldi R24,<_asc
	ldi R25,>_asc
	add R2,R24
	adc R3,R25
	mov R20,R14
	clr R21
	add R20,R2
	adc R21,R3
	.dbline 606
; 	    lcd_buffer1=*asc_rdp;						  	  //要写入lcd的数据放入lcd_buffer1中
	movw R30,R20
	lpm R22,Z
	.dbline 607
; 	    if(lcd_invter&BIT(0))
	sbrc R10,0
	.dbline 608
; 		{
	.dbline 609
; 			lcd_buffer1=~lcd_buffer1;
	com R22
	.dbline 610
; 		}
L90:
	.dbline 611
; 	    lcd_wr2_data(lcd_buffer1);
	mov R16,R22
	xcall _lcd_wr2_data
	.dbline 612
; 	    if(lcd_invter&BIT(0))
	sbrs R10,0
	rjmp L92
	.dbline 613
; 		{
	.dbline 614
; 			 lcd_wr2_data(0xff);
	ldi R16,255
	xcall _lcd_wr2_data
	.dbline 615
; 		}
	xjmp L93
L92:
	.dbline 617
; 	    else 
; 	    {
	.dbline 618
; 			lcd_wr2_data(0x00);
	clr R16
	xcall _lcd_wr2_data
	.dbline 619
; 		}	
L93:
	.dbline 620
; 	    for (lcd_column_counter=11;lcd_column_counter<=20;lcd_column_counter++)  //显示的0~20列循环计数(cs2为11~20列)
	ldi R24,11
	std y+0,R24
	xjmp L97
L94:
	.dbline 621
; 	   	{
	.dbline 622
; 	  	    lcd_asc=*lcd_display_rdp;					          //要显示的字符ASC码放在lcd_asc中		 
	lds R30,_lcd_display_rdp
	lds R31,_lcd_display_rdp+1
	ldd R12,z+0
	.dbline 623
; 		    lcd_display_rdp++;
	movw R24,R30
	adiw R24,1
	sts _lcd_display_rdp+1,R25
	sts _lcd_display_rdp,R24
	.dbline 624
; 			if (lcd_asc&BIT(7))
	sbrs R12,7
	rjmp L98
	.dbline 625
; 			{
	.dbline 626
; 				lcd_invter|=BIT(0);
	mov R24,R10
	ori R24,1
	mov R10,R24
	.dbline 627
; 				lcd_asc&=(~BIT(7));
	mov R24,R12
	andi R24,127
	mov R12,R24
	.dbline 628
; 			}
	xjmp L99
L98:
	.dbline 630
; 			else  
; 			{
	.dbline 631
; 			    lcd_invter&=(~BIT(0));
	mov R24,R10
	andi R24,254
	mov R10,R24
	.dbline 632
; 			}
L99:
	.dbline 633
; 		    if ((lcd_asc<0x20)||(lcd_asc>=0x80))
	mov R24,R12
	cpi R24,32
	brlo L102
	cpi R24,128
	brlo L100
L102:
	.dbline 634
; 		    {
	.dbline 635
; 		        lcd_asc=0x20;
	ldi R24,32
	mov R12,R24
	.dbline 636
; 		    }
L100:
	.dbline 637
; 		    lcd_asc=lcd_asc-0x20;
	mov R24,R12
	subi R24,32
	mov R12,R24
	.dbline 638
; 		    for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++)	  //显示的5列的循环
	clr R14
	xjmp L106
L103:
	.dbline 639
; 		    {
	.dbline 640
; 		        asc_rdp=&asc[lcd_asc][lcd_asc_column];		  //取出当前字符的每列内容
	ldi R24,5
	mul R24,R12
	movw R2,R0
	ldi R24,<_asc
	ldi R25,>_asc
	add R2,R24
	adc R3,R25
	mov R20,R14
	clr R21
	add R20,R2
	adc R21,R3
	.dbline 641
; 		        lcd_buffer1=*asc_rdp;						  //要写入lcd的数据放入lcd_buffer1中
	movw R30,R20
	lpm R22,Z
	.dbline 642
; 	            if(lcd_invter&BIT(0))
	sbrc R10,0
	.dbline 643
; 				{
	.dbline 644
; 					lcd_buffer1=~lcd_buffer1;
	com R22
	.dbline 645
; 				}
L107:
	.dbline 646
	mov R16,R22
	xcall _lcd_wr2_data
	.dbline 647
L104:
	.dbline 638
	inc R14
L106:
	.dbline 638
	ldi R24,4
	cp R24,R14
	brsh L103
	.dbline 648
; 				lcd_wr2_data(lcd_buffer1);			  			 
; 		    }
; 			if(lcd_invter&BIT(0))
	sbrs R10,0
	rjmp L109
	.dbline 649
; 			{
	.dbline 650
; 				lcd_wr2_data(0xff);
	ldi R16,255
	xcall _lcd_wr2_data
	.dbline 651
; 			}
	xjmp L110
L109:
	.dbline 653
; 			else
; 			{
	.dbline 654
; 				lcd_wr2_data(0x00);
	clr R16
	xcall _lcd_wr2_data
	.dbline 655
; 			}
L110:
	.dbline 656
L95:
	.dbline 620
	ldd R0,y+0
	inc R0
	std y+0,R0
L97:
	.dbline 620
	ldi R24,20
	ldd R0,y+0
	cp R24,R0
	brlo X1
	xjmp L94
X1:
	.dbline 657
	clr R16
	xcall _lcd_wr2_data
	.dbline 658
	clr R16
	xcall _lcd_wr2_data
	.dbline 659
L59:
	.dbline 536
	ldd R0,y+1
	inc R0
	std y+1,R0
L61:
	.dbline 536
	ldi R24,7
	ldd R0,y+1
	cp R24,R0
	brlo X2
	xjmp L58
X2:
	.dbline 660
; 	    }
; 	    lcd_wr2_data(0x00);
; 	    lcd_wr2_data(0x00);
;     }
;     lcd_wr1_ins(0x3f);	  				  		 //lcd模块1显示
	ldi R16,63
	xcall _lcd_wr1_ins
	.dbline 661
;     lcd_wr2_ins(0x3f);	  				  		 //lcd模块2显示 
	ldi R16,63
	xcall _lcd_wr2_ins
	.dbline -2
L57:
	adiw R28,2
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l lcd_row_counter 1 c
	.dbsym l lcd_column_counter 0 c
	.dbsym r lcd_invter 10 c
	.dbsym r lcd_asc 12 c
	.dbsym r asc_rdp 20 pkc
	.dbsym r lcd_buffer1 22 c
	.dbsym r lcd_asc_column 14 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\Program\gps\lcd.c
_temp_i::
	.blkb 1
	.dbsym e temp_i _temp_i c
_lcd_display_rdp::
	.blkb 2
	.dbsym e lcd_display_rdp _lcd_display_rdp pc
_lcd_display_wrp::
	.blkb 2
	.dbsym e lcd_display_wrp _lcd_display_wrp pc
_lcd_display2_buffer::
	.blkb 168
	.dbsym e lcd_display2_buffer _lcd_display2_buffer A[168:8:21]c

⌨️ 快捷键说明

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