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

📄 gps.lst

📁 用avr单片机接收GPS的数据的c语言程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    059C 9508      RET
_lcd_wr2_data:
  lcd_wr_temp          --> R20
  lcd_wr_buffer        --> R16
    059D 940E0726  CALL	push_gset1
(0457) }
(0458) 
(0459) //向lcd_cs2写数据函数
(0460) void lcd_wr2_data (unsigned char lcd_wr_buffer)
(0461) {
(0462)     unsigned char lcd_wr_temp;
(0463)  	e_off;										  //读lcd状态
    059F 9897      CBI	0x12,7
(0464)  	rw_on;
    05A0 9A93      SBI	0x12,3
(0465)  	di_off;
    05A1 9894      CBI	0x12,4
(0466)  	cs2_on;
    05A2 98AF      CBI	0x15,7
(0467)  	DDRA&=0x03;
    05A3 B38A      IN	R24,0x1A
    05A4 7083      ANDI	R24,3
    05A5 BB8A      OUT	0x1A,R24
(0468)  	PORTA&=0x03;
    05A6 B38B      IN	R24,0x1B
    05A7 7083      ANDI	R24,3
    05A8 BB8B      OUT	0x1B,R24
(0469) 	DDRC&=0xFC;
    05A9 B384      IN	R24,0x14
    05AA 7F8C      ANDI	R24,0xFC
    05AB BB84      OUT	0x14,R24
(0470)  	PORTC&=0xFC;
    05AC B385      IN	R24,0x15
    05AD 7F8C      ANDI	R24,0xFC
    05AE BB85      OUT	0x15,R24
(0471)  	e_on;
    05AF 9A97      SBI	0x12,7
(0472)  	NOP();
    05B0 0000      NOP
(0473)  	NOP();
    05B1 0000      NOP
(0474)  	NOP();
    05B2 0000      NOP
(0475)  	lcd_wr_temp=(PINA&0XFC);
    05B3 B349      IN	R20,0x19
    05B4 7F4C      ANDI	R20,0xFC
(0476) 	lcd_wr_temp|=(PINC&0x03);
    05B5 B383      IN	R24,0x13
    05B6 7083      ANDI	R24,3
    05B7 2B48      OR	R20,R24
(0477)  	e_off;
    05B8 9897      CBI	0x12,7
(0478)  	cs2_off;
    05B9 9AAF      SBI	0x15,7
    05BA C01B      RJMP	0x05D6
(0479)  	while(lcd_wr_temp&0x90)
(0480)  	{
(0481)         e_off;					  				  //读lcd状态
    05BB 9897      CBI	0x12,7
(0482) 	 	rw_on;
    05BC 9A93      SBI	0x12,3
(0483) 	 	di_off;
    05BD 9894      CBI	0x12,4
(0484)  	 	cs2_on;
    05BE 98AF      CBI	0x15,7
(0485)  	 	DDRA&=0x03;
    05BF B38A      IN	R24,0x1A
    05C0 7083      ANDI	R24,3
    05C1 BB8A      OUT	0x1A,R24
(0486)  		PORTA&=0x03;
    05C2 B38B      IN	R24,0x1B
    05C3 7083      ANDI	R24,3
    05C4 BB8B      OUT	0x1B,R24
(0487) 		DDRC&=0xFC;
    05C5 B384      IN	R24,0x14
    05C6 7F8C      ANDI	R24,0xFC
    05C7 BB84      OUT	0x14,R24
(0488)  		PORTC&=0xFC;
    05C8 B385      IN	R24,0x15
    05C9 7F8C      ANDI	R24,0xFC
    05CA BB85      OUT	0x15,R24
(0489)  		e_on;
    05CB 9A97      SBI	0x12,7
(0490)  		NOP();
    05CC 0000      NOP
(0491)  		NOP();
    05CD 0000      NOP
(0492)  		NOP();
    05CE 0000      NOP
(0493)  		lcd_wr_temp=(PINA&0XFC);
    05CF B349      IN	R20,0x19
    05D0 7F4C      ANDI	R20,0xFC
(0494) 		lcd_wr_temp|=(PINC&0x03);
    05D1 B383      IN	R24,0x13
    05D2 7083      ANDI	R24,3
    05D3 2B48      OR	R20,R24
(0495) 	 	e_off;
    05D4 9897      CBI	0x12,7
(0496) 	 	cs2_off;
    05D5 9AAF      SBI	0x15,7
    05D6 2F84      MOV	R24,R20
    05D7 7980      ANDI	R24,0x90
    05D8 F711      BNE	0x05BB
(0497)     }
(0498)  	e_off;										  //向lcd写数据
    05D9 9897      CBI	0x12,7
(0499)  	rw_off;
    05DA 9893      CBI	0x12,3
(0500)  	di_on;
    05DB 9A94      SBI	0x12,4
(0501)  	cs2_on;
    05DC 98AF      CBI	0x15,7
(0502)  	PORTA&=0x03;
    05DD B38B      IN	R24,0x1B
    05DE 7083      ANDI	R24,3
    05DF BB8B      OUT	0x1B,R24
(0503)  	PORTA|=(lcd_wr_buffer&0xFC);
    05E0 2F80      MOV	R24,R16
    05E1 7F8C      ANDI	R24,0xFC
    05E2 B22B      IN	R2,0x1B
    05E3 2A28      OR	R2,R24
    05E4 BA2B      OUT	0x1B,R2
(0504) 	PORTC&=0xFC;
    05E5 B385      IN	R24,0x15
    05E6 7F8C      ANDI	R24,0xFC
    05E7 BB85      OUT	0x15,R24
(0505)  	PORTC|=(lcd_wr_buffer&0x03); 
    05E8 2F80      MOV	R24,R16
    05E9 7083      ANDI	R24,3
    05EA B225      IN	R2,0x15
    05EB 2A28      OR	R2,R24
    05EC BA25      OUT	0x15,R2
(0506)  	DDRA|=0xFC;
    05ED B38A      IN	R24,0x1A
    05EE 6F8C      ORI	R24,0xFC
    05EF BB8A      OUT	0x1A,R24
(0507) 	DDRC|=0X03;
    05F0 B384      IN	R24,0x14
    05F1 6083      ORI	R24,3
    05F2 BB84      OUT	0x14,R24
(0508)  	e_on;
    05F3 9A97      SBI	0x12,7
(0509)  	NOP();
    05F4 0000      NOP
(0510)  	NOP();
    05F5 0000      NOP
(0511)  	NOP();
    05F6 0000      NOP
(0512)  	NOP();
    05F7 0000      NOP
(0513)  	e_off;
    05F8 9897      CBI	0x12,7
(0514)  	cs2_off;
    05F9 9AAF      SBI	0x15,7
(0515)  	NOP();
    05FA 0000      NOP
(0516)  	NOP();	
    05FB 0000      NOP
(0517)  	DDRA&=0x03;
    05FC B38A      IN	R24,0x1A
    05FD 7083      ANDI	R24,3
    05FE BB8A      OUT	0x1A,R24
(0518) 	DDRC&=0XFC;
    05FF B384      IN	R24,0x14
    0600 7F8C      ANDI	R24,0xFC
    0601 BB84      OUT	0x14,R24
    0602 940E0729  CALL	pop_gset1
    0604 9508      RET
_lcd_display2:
  lcd_row_counter      --> Y+1
  lcd_column_counter   --> Y+0
  lcd_invter           --> R10
  lcd_asc              --> R12
  asc_rdp              --> R20
  lcd_buffer1          --> R22
  lcd_asc_column       --> R14
    0605 940E071E  CALL	push_gset5
    0607 9722      SBIW	R28,2
(0519) }
(0520) 
(0521) //LCD显示刷屏函数,起始地址放在lcd_display2_buffer[0][0]中
(0522) //使用的全局变量:*lcd_display_rdp; 
(0523) //API function
(0524) void lcd_display2(void)
(0525) {
(0526)     const unsigned char *asc_rdp;
(0527)  	unsigned char lcd_row_counter;
(0528)  	unsigned char lcd_column_counter;
(0529)  	unsigned char lcd_asc;
(0530)  	unsigned char lcd_asc_column; 
(0531)  	unsigned char lcd_buffer1;
(0532)  	unsigned char lcd_invter;
(0533)  	lcd_wr1_ins(0xc0);							 //显示起始行为0
    0608 EC00      LDI	R16,0xC0
    0609 DE5C      RCALL	_lcd_wr1_ins
(0534)  	lcd_wr2_ins(0xc0);							 //显示起始行为0
    060A EC00      LDI	R16,0xC0
    060B DF2A      RCALL	_lcd_wr2_ins
(0535)  	*lcd_display_rdp=lcd_display2_buffer[0][0];   
    060C 90200491  LDS	R2,lcd_display2_buffer
    060E 91E0048D  LDS	R30,lcd_display_rdp
    0610 91F0048E  LDS	R31,lcd_display_rdp+1
    0612 8220      STD	Z+0,R2
(0536)  	for (lcd_row_counter=0;lcd_row_counter<=7;lcd_row_counter++)  //显示的0~7行循环计数
    0613 2400      CLR	R0
    0614 8209      STD	Y+1,R0
    0615 C0F5      RJMP	0x070B
(0537)     {
(0538)   	    lcd_wr1_ins(lcd_row_counter+0xb8);			 //设置x页地址
    0616 8109      LDD	R16,Y+1
    0617 5408      SUBI	R16,0x48
    0618 DE4D      RCALL	_lcd_wr1_ins
(0539)  	   	lcd_wr2_ins(lcd_row_counter+0xb8);			 //设置x页地址
    0619 8109      LDD	R16,Y+1
    061A 5408      SUBI	R16,0x48
    061B DF1A      RCALL	_lcd_wr2_ins
(0540)  	   	lcd_wr1_ins(0x40);						 	 //y地址清零
    061C E400      LDI	R16,0x40
    061D DE48      RCALL	_lcd_wr1_ins
(0541)  	   	lcd_wr2_ins(0x40);						 	 //y地址清零
    061E E400      LDI	R16,0x40
    061F DF16      RCALL	_lcd_wr2_ins
(0542)        	for (lcd_column_counter=0;lcd_column_counter<=9;lcd_column_counter++)  //显示的0~20列循环计数(cs1为0~9列)
    0620 2400      CLR	R0
    0621 8208      STD	Y+0,R0
    0622 C042      RJMP	0x0665
(0543) 	    {
(0544) 	  	    lcd_asc=*lcd_display_rdp;					          //要显示的字符ASC码放在lcd_asc中		 
    0623 91E0048D  LDS	R30,lcd_display_rdp
    0625 91F0048E  LDS	R31,lcd_display_rdp+1
    0627 80C0      LDD	R12,Z+0
(0545) 		    lcd_display_rdp++;
    0628 01CF      MOVW	R24,R30
    0629 9601      ADIW	R24,1
    062A 9390048E  STS	lcd_display_rdp+1,R25
    062C 9380048D  STS	lcd_display_rdp,R24
(0546) 			if (lcd_asc&BIT(7))
    062E FEC7      SBRS	R12,7
    062F C007      RJMP	0x0637
(0547) 			{
(0548) 			    lcd_invter|=BIT(0);
    0630 2D8A      MOV	R24,R10
    0631 6081      ORI	R24,1
    0632 2EA8      MOV	R10,R24
(0549) 				lcd_asc&=(~BIT(7));
    0633 2D8C      MOV	R24,R12
    0634 778F      ANDI	R24,0x7F
    0635 2EC8      MOV	R12,R24
(0550) 			}
    0636 C003      RJMP	0x063A
(0551) 			else
(0552) 			{
(0553) 			    lcd_invter&=(~BIT(0));
    0637 2D8A      MOV	R24,R10
    0638 7F8E      ANDI	R24,0xFE
    0639 2EA8      MOV	R10,R24
(0554) 			}
(0555) 		    if ((lcd_asc<0x20)||(lcd_asc>=0x80))
    063A 2D8C      MOV	R24,R12
    063B 3280      CPI	R24,0x20
    063C F010      BCS	0x063F
    063D 3880      CPI	R24,0x80
    063E F010      BCS	0x0641
(0556) 		    {
(0557) 		        lcd_asc=0x20;
    063F E280      LDI	R24,0x20
    0640 2EC8      MOV	R12,R24
(0558) 		    }
(0559) 		    lcd_asc=lcd_asc-0x20;
    0641 2D8C      MOV	R24,R12
    0642 5280      SUBI	R24,0x20
    0643 2EC8      MOV	R12,R24
(0560) 		    for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++)	  //显示的5列的循环
    0644 24EE      CLR	R14
    0645 C012      RJMP	0x0658
(0561) 		    {
(0562) 		        asc_rdp=&asc[lcd_asc][lcd_asc_column];		  //取出当前字符的每列内容
    0646 E085      LDI	R24,5
    0647 9D8C      MUL	R24,R12
    0648 0110      MOVW	R2,R0
    0649 E584      LDI	R24,0x54
    064A E090      LDI	R25,0
    064B 0E28      ADD	R2,R24
    064C 1E39      ADC	R3,R25
    064D 2D4E      MOV	R20,R14
    064E 2755      CLR	R21
    064F 0D42      ADD	R20,R2
    0650 1D53      ADC	R21,R3
(0563) 		        lcd_buffer1=*asc_rdp;						  //要写入lcd的数据放入lcd_buffer1中
    0651 01FA      MOVW	R30,R20
    0652 9164      LPM	R22,0(Z)
(0564) 	            if(lcd_invter&BIT(0))
    0653 FCA0      SBRC	R10,0
(0565) 			    {
(0566) 				    lcd_buffer1=~lcd_buffer1;
    0654 9560      COM	R22
(0567) 			    }
(0568) 				lcd_wr1_data(lcd_buffer1);			  			 
    0655 2F06      MOV	R16,R22
    0656 DE77      RCALL	_lcd_wr1_data
    0657 94E3      INC	R14
    0658 E084      LDI	R24,4
    0659 158E      CP	R24,R14
    065A F758      BCC	0x0646
(0569) 		    }
(0570) 		    if(lcd_invter&BIT(0))
    065B FEA0      SBRS	R10,0
    065C C003      RJMP	0x0660
(0571) 		    {
(0572) 				   lcd_wr1_data(0xff);
    065D EF0F      LDI	R16,0xFF
    065E DE6F      RCALL	_lcd_wr1_data
(0573) 			}
    065F C002      RJMP	0x0662
(0574) 			else
(0575) 			{
(0576) 				   lcd_wr1_data(0x00);
    0660 2700      CLR	R16
    0661 DE6C      RCALL	_lcd_wr1_data
    0662 8008      LDD	R0,Y+0
    0663 9403      INC	R0
    0664 8208      STD	Y+0,R0
    0665 E089      LDI	R24,0x9
    0666 8008      LDD	R0,Y+0
    0667 1580      CP	R24,R0
    0668 F008      BCS	0x066A
    0669 CFB9      RJMP	0x0623
(0577) 			}
(0578) 	   	}
(0579) 	    lcd_asc=*lcd_display_rdp;					          //要显示的字符ASC码放在lcd_asc中		 
    066A 91E0048D  LDS	R30,lcd_display_rdp
    066C 91F0048E  LDS	R31,lcd_display_rdp+1
    066E 80C0      LDD	R12,Z+0
(0580) 	    lcd_display_rdp++;
    066F 01CF      MOVW	R24,R30
    0670 9601      ADIW	R24,1
    0671 9390048E  STS	lcd_display_rdp+1,R25
    0673 9380048D  STS	lcd_display_rdp,R24
(0581) 	    if (lcd_asc&BIT(7))
    0675 FEC7      SBRS	R12,7
    0676 C007      RJMP	0x067E
(0582) 		{
(0583) 			lcd_invter|=BIT(0);
    0677 2D8A      MOV	R24,R10
    0678 6081      ORI	R24,1
    0679 2EA8      MOV	R10,R24
(0584) 			lcd_asc&=(~BIT(7));
    067A 2D8C      MOV	R24,R12
    067B 778F      ANDI	R24,0x7F
    067C 2EC8      MOV	R12,R24
(0585) 		}
    067D C003      RJMP	0x0681
(0586) 	    else  
(0587) 		{
(0588) 			lcd_invter&=(~BIT(0));
    067E 2D8A      MOV	R24,R10
    067F 7F8E      ANDI	R24,0xFE
    0680 2EA8      MOV	R10,R24
(0589) 		}
(0590) 	    if ((lcd_asc<0x20)||(lcd_asc>=0x80))
    0681 2D8C      MOV	R24,R12
    0682 3280      CPI	R24,0x20
    0683 F010      BCS	0x0686
    0684 3880      CPI	R24,0x80
    0685 F010      BCS	0x0688
(0591) 	    {
(0592) 		    lcd_asc=0x20;
    0686 E280      LDI	R24,0x20
    0687 2EC8      MOV	R12,R24
(0593) 	   	}
(0594) 	    lcd_asc=lcd_asc-0x20;
    0688 2D8C      MOV	R24,R12
    0689 5280      SUBI	R24,0x20
    068A 2EC8      MOV	R12,R24
(0595) 	    for (lcd_asc_column=0;lcd_asc_column<=0x03;lcd_asc_column++)	  //显示的5列的循环
    068B 24EE      CLR	R14
    068C C012      RJMP	0x069F
(0596) 	    {
(0597) 	        asc_rdp=&asc[lcd_asc][lcd_asc_column];		  //取出当前字符的每列内容
    068D E085      LDI	R24,5
    068E 9D8C      MUL	R24,R12
    068F 0110      MOVW	R2,R0
    0690 E584      LDI	R24,0x54
    0691 E090      LDI	R25,0
    0692 0E28      ADD	R2,R24
    0693 1E39      ADC	R3,R25
    0694 2D4E      MOV	R20,R14
    0695 2755      CLR	R21
    0696 0D42      ADD	R20,R2
    0697 1D53      ADC	R21,R3
(0598) 		 	lcd_buffer1=*asc_rdp;						  //要写入lcd的数据放入lcd_buffer1中
    0698 01FA      MOVW	R30,R20
    0699 9164      LPM	R22,0(Z)
(0599) 	     	if(lcd_invter&BIT(0))
    069A FCA0      SBRC	R10,0
(0600) 			{
(0601) 				lcd_buffer1=~lcd_buffer1;
    069B 9560      COM	R22
(0602) 			}
(0603) 			lcd_wr1_data(lcd_buffer1);			  			 
    069C 2F06      MOV	R16,R22
    069D DE30      RCALL	_lcd_wr1_data
    069E 94E3      INC	R14
    069F E083      LDI	R24,3
    06A0 158E   

⌨️ 快捷键说明

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