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

📄 lcd1286418.lst

📁 3D LCD for running graphical lCDs
💻 LST
📖 第 1 页 / 共 5 页
字号:
     5F8 DF10      RCALL	_LcdWrCmd
(0319) 		LcdWrCmd('L',0XB8+temp1);              /* SET PAGE */
     5F9 2F26      MOV	R18,R22
     5FA 5428      SUBI	R18,0x48
     5FB E40C      LDI	R16,0x4C
     5FC DF0C      RCALL	_LcdWrCmd
(0320) 		LcdWrCmd('L',0X40+x);     		       /* SET X */
     5FD 852A      LDD	R18,Y+10
     5FE 5C20      SUBI	R18,0xC0
     5FF E40C      LDI	R16,0x4C
     600 DF08      RCALL	_LcdWrCmd
(0321) 		a = LcdRdDat('L');				       /* READ NOW SEGMENT VALUE */
     601 E40C      LDI	R16,0x4C
     602 DF59      RCALL	_LcdRdDat
(0322) 		a = LcdRdDat('L');	
     603 E40C      LDI	R16,0x4C
     604 DF57      RCALL	_LcdRdDat
     605 2EA0      MOV	R10,R16
(0323) 		if(data == 0)						   /* DOT ON/OFF */
     606 20EE      TST	R14
     607 F431      BNE	0x060E
     608 940E 16A3 CALL	0x16A3
(0324) 		    a&=~(1<<temp2);
     60A 2E20      MOV	R2,R16
     60B 9420      COM	R2
     60C 20A2      AND	R10,R2
     60D C01F      RJMP	0x062D
(0325) 		else
(0326) 		    a|=(1<<temp2);
     60E 940E 16A3 CALL	0x16A3
     610 2AA0      OR	R10,R16
(0327) 	}
     611 C01B      RJMP	0x062D
(0328)     else
(0329)     {
(0330)  	    LcdWrCmd('R',0XC0);                    /* SET ROW */
     612 EC20      LDI	R18,0xC0
     613 E502      LDI	R16,0x52
     614 DEF4      RCALL	_LcdWrCmd
(0331) 		LcdWrCmd('R',0XB8+temp1);              /* SET PAGE */
     615 2F26      MOV	R18,R22
     616 5428      SUBI	R18,0x48
     617 E502      LDI	R16,0x52
     618 DEF0      RCALL	_LcdWrCmd
     619 940E 1776 CALL	0x1776
(0332) 		LcdWrCmd('R',0X40+x-64);     	       /* SET X*/
     61B DEED      RCALL	_LcdWrCmd
(0333) 		a = LcdRdDat('R');				       /* READ NOW SEGMENT VALUE */
     61C E502      LDI	R16,0x52
     61D DF3E      RCALL	_LcdRdDat
(0334) 		a = LcdRdDat('R');	
     61E E502      LDI	R16,0x52
     61F DF3C      RCALL	_LcdRdDat
     620 2F40      MOV	R20,R16
     621 2EA4      MOV	R10,R20
(0335) 		if(data == 0)						   /* DOT ON/OFF */
     622 20EE      TST	R14
     623 F431      BNE	0x062A
     624 940E 16A3 CALL	0x16A3
(0336) 		    a&=~(1<<temp2);
     626 2E20      MOV	R2,R16
     627 9420      COM	R2
     628 20A2      AND	R10,R2
     629 C003      RJMP	0x062D
(0337) 		else
(0338) 		    a|=(1<<temp2);
     62A 940E 16A3 CALL	0x16A3
     62C 2AA0      OR	R10,R16
(0339) 	}
(0340) 	
(0341) 	if(x < 64)							       /* WRITE VALUE AS SEGMENT */
     62D 858A      LDD	R24,Y+10
     62E 3480      CPI	R24,0x40
     62F F478      BCC	0x063F
(0342) 	{
(0343) 		//LcdWrCmd('L',0X3F);      			   /* LCD ON */
(0344)  	    LcdWrCmd('L',0XC0);                    /* SET ROW */
     630 EC20      LDI	R18,0xC0
     631 E40C      LDI	R16,0x4C
     632 DED6      RCALL	_LcdWrCmd
(0345) 		LcdWrCmd('L',0XB8+temp1);              /* SET PAGE */
     633 2F26      MOV	R18,R22
     634 5428      SUBI	R18,0x48
     635 E40C      LDI	R16,0x4C
     636 DED2      RCALL	_LcdWrCmd
(0346) 		LcdWrCmd('L',0X40+x);     		       /* SET X */
     637 852A      LDD	R18,Y+10
     638 5C20      SUBI	R18,0xC0
     639 E40C      LDI	R16,0x4C
     63A DECE      RCALL	_LcdWrCmd
(0347) 		LcdWrDat('L',a);				 	   /* WRITE SEGMENT */
     63B 2D2A      MOV	R18,R10
     63C E40C      LDI	R16,0x4C
     63D DEEC      RCALL	_LcdWrDat
(0348) 	}
     63E C00D      RJMP	0x064C
(0349)     else
(0350)     {
(0351) 	    //LcdWrCmd('R',0X3F);      			   /* LCD ON */
(0352)  	    LcdWrCmd('R',0XC0);                    /* SET ROW */
     63F EC20      LDI	R18,0xC0
     640 E502      LDI	R16,0x52
     641 DEC7      RCALL	_LcdWrCmd
(0353) 		LcdWrCmd('R',0XB8+temp1);              /* SET PAGE */
     642 2F26      MOV	R18,R22
     643 5428      SUBI	R18,0x48
     644 E502      LDI	R16,0x52
     645 DEC3      RCALL	_LcdWrCmd
     646 940E 1776 CALL	0x1776
(0354) 		LcdWrCmd('R',0X40+x-64);     	       /* SET X*/
     648 DEC0      RCALL	_LcdWrCmd
(0355) 		LcdWrDat('R',a);				       /* WRITE SEGMENT */
     649 2D2A      MOV	R18,R10
     64A E502      LDI	R16,0x52
     64B DEDE      RCALL	_LcdWrDat
(0356) 	}
     64C 940E 10B2 CALL	pop_xgsetF0FC
     64E 9624      ADIW	R28,4
     64F 9508      RET
_LcdDsiplayRefresh:
  temp1                --> R20
  temp2                --> R22
     650 934A      ST	R20,-Y
     651 936A      ST	R22,-Y
     652 9721      SBIW	R28,1
(0357) }
(0358) 
(0359) /*******************************************************
(0360) *  FUNCTION NAME: LcdDsiplayRefresh 				   *
(0361) *  DESCRIPTION: 显示内容写入单片机RAM中,再LCD上显示    *
(0362) *               为了提高3D图形显示速度。
(0363) /******************************************************/
(0364) void LcdDsiplayRefresh(void)
(0365) {
(0366)     unsigned char temp1,temp2;
(0367) 	for(temp1=0; temp1<8; temp1++)
     653 2744      CLR	R20
     654 C013      RJMP	0x0668
(0368) 	{
(0369) 	    for(temp2=0; temp2<128; temp2++)
     655 2766      CLR	R22
     656 C00E      RJMP	0x0665
(0370) 		{
(0371) 		    LcdDisplaySeg(temp1,temp2,displaybuffer[temp1][temp2]);	
     657 E880      LDI	R24,0x80
     658 9F84      MUL	R24,R20
     659 940E 1645 CALL	0x1645
     65B 2FE6      MOV	R30,R22
     65C 27FF      CLR	R31
     65D 0DE2      ADD	R30,R2
     65E 1DF3      ADC	R31,R3
     65F 8020      LDD	R2,Z+0
     660 8228      STD	Y+0,R2
     661 2F26      MOV	R18,R22
     662 2F04      MOV	R16,R20
     663 DF44      RCALL	_LcdDisplaySeg
     664 9563      INC	R22
     665 3860      CPI	R22,0x80
     666 F380      BCS	0x0657
     667 9543      INC	R20
     668 3048      CPI	R20,0x8
     669 F358      BCS	0x0655
     66A 9621      ADIW	R28,1
     66B 9169      LD	R22,Y+
     66C 9149      LD	R20,Y+
     66D 9508      RET
(0372) 		}
(0373) 	}
(0374) }
(0375) 
(0376) /****************************************
(0377) *  FUNCTION NAME: Delay1ms 				*
(0378) *  DESCRIPTION: MCU CLOCK=11.0592Mhz    *
(0379) /***************************************/
(0380) void Delay1ms(void)
(0381) {
(0382)     unsigned int temp;   
(0383) 	unsigned char i;
(0384) 	for(i=0;i<10;i++)
_Delay1ms:
  i                    --> R16
  temp                 --> R18
     66E 2700      CLR	R16
     66F C004      RJMP	0x0674
(0385) 	{     
(0386)        for(temp=20; temp>0;temp--)              /* Delay About 1ms */
     670 E124      LDI	R18,0x14
     671 E030      LDI	R19,0
     672 940E 169A CALL	0x169A
     674 300A      CPI	R16,0xA
     675 F3D0      BCS	0x0670
     676 9508      RET
_GuiDrawLine:
  signy                --> R14
  signx                --> R12
  dy                   --> R22
  dx                   --> Y,+4
  temp                 --> R20
  y                    --> Y,+3
  x                    --> Y,+2
  p                    --> R10
  color                --> Y,+24
  y2                   --> Y,+22
  x2                   --> Y,+20
  y1                   --> R10
  x1                   --> Y,+16
     677 940E 16A8 CALL	0x16A8
     679 2EA2      MOV	R10,R18
     67A 9726      SBIW	R28,6
FILE: F:\CODE\LCD1286418\gui12864.c
(0001) /***********************************************************************************************
(0002) *  FILE NAME: gui12864.c
(0003) *  PURPOSE: lcd1286418 GUI Firmware
(0004) *  DESCRIPTION: ONLY FOR 128*64 PIXEL LCD 
(0005) *  DEVELOPMENT HISTORY:
(0006) *    Date         Author         Release                   Description Of Change
(0007) *  --------    ------------     ---------     ------------------------------------------------
(0008) *  08-04-11     XuGuohong         1.0                        Testing Edition    	     
(0009) /**********************************************************************************************/
(0010) 
(0011) /* Include Global Parameters */
(0012) #include <iom128v.h>
(0013) #include "avr.h"
(0014) #include "gui12864.h"
(0015) 
(0016) /* Include Global Parameters */
(0017) 
(0018) 
(0019) /* Declare Prototypes */
(0020) void GuiDrawLine(unsigned char,unsigned char,unsigned char,unsigned char,unsigned char);
(0021) void GuiDrawCircle(unsigned char,unsigned char,unsigned char,unsigned char);
(0022) void GuiDrawSquare(unsigned char,unsigned char,unsigned char,unsigned char,unsigned char);
(0023) void GuiDisCharF3(unsigned char,unsigned char,unsigned char,unsigned char);
(0024) void GuiDisStringF3(unsigned char,unsigned char,unsigned char *,unsigned char);
(0025) //void GuiDisCharF2(unsigned char,unsigned char,unsigned char,unsigned char);
(0026) //void GuiDisCharF1(unsigned char,unsigned char,unsigned char,unsigned char);
(0027) void GuiDisLogo(unsigned char);
(0028) void GuiDisRoolStringF3(unsigned char,unsigned char,unsigned char,unsigned char *,unsigned char);
(0029) void GuiDisBattery(unsigned char,unsigned char,unsigned char);
(0030) void GuiDisUsb(unsigned char,unsigned char);
(0031) void GuiDisAcin(unsigned char,unsigned char);
(0032) void GuiDisTemp(unsigned char,unsigned char,signed char);
(0033) void GuiDisShortIcon(unsigned char,unsigned char,unsigned char);
(0034) void GuiDisMainMenu(void);
(0035) void GuiDisMenuIcon(unsigned char,unsigned char,unsigned char);
(0036) 
(0037) /*****************************************
(0038) *  FUNCTION NAME: GuiDrawLine
(0039) *  DESCRIPTION: Draw A Line From Between
(0040) *               Any 2-Point
(0041) *  (x1,y1) as start point
(0042) *  (x2,y2) as end point
(0043) *  Based On "Breshenham Line"
(0044) /*****************************************/
(0045) void  GuiDrawLine(unsigned char  x1, unsigned char  y1, unsigned char  x2, unsigned char  y2, unsigned char color) 
(0046) {
(0047)     unsigned char temp;
(0048) 	int p;	   		 	 		 	 		 /* p-取值判断因子 */
(0049) 	unsigned char x;						 /* x-坐标 */
(0050) 	unsigned char y;						 /* y-坐标 */
(0051) 	int dx;						             /* x方向差值 */
(0052) 	int dy;						             /* y方向差值 */
(0053) 	char signx;	  							 /* x方向标识 */
(0054) 	char signy;								 /* Y方向标识 */
(0055)     if(x1>123 | y1>63 | x2>123 | y2>63)
     67B E78B      LDI	R24,0x7B
     67C 8808      LDD	R0,Y+16
     67D 940E 1568 CALL	0x1568
     67F 880C      LDD	R0,Y+20
     680 1580      CP	R24,R0
     681 940E 15CF CALL	0x15CF
     683 880E      LDD	R0,Y+22
     684 1580      CP	R24,R0
     685 F418      BCC	0x0689
     686 E041      LDI	R20,1
     687 E050      LDI	R21,0
     688 C002      RJMP	0x068B
     689 2744      CLR	R20
     68A 2755      CLR	R21
     68B 0117      MOVW	R2,R14
     68C 282C      OR	R2,R12
     68D 283D      OR	R3,R13
     68E 2A26      OR	R2,R22
     68F 2A37      OR	R3,R23
     690 2A24      OR	R2,R20
     691 2A35      OR	R3,R21
     692 2022      TST	R2
     693 F411      BNE	0x0696
     694 2033      TST	R3
     695 F009      BEQ	0x0697
(0056) 	    return;
     696 C097      RJMP	0x072E
(0057) 	x = x1;
     697 8808      LDD	R0,Y+16
     698 820A      STD	Y+2,R0
(0058) 	y = y1;
     699 82AB      STD	Y+3,R10
(0059) 	 /* 1.计算X方向的参数 */
(0060) 	if(x2 > x1)								
     69A 8828      LDD	R2,Y+16
     69B 2433      CLR	R3
     69C 884C      LDD	R4,Y+20
     69D 2455      CLR	R5
     69E 1424      CP	R2,R4
     69F 0435      CPC	R3,R5
     6A0 F44C      BGE	0x06AA
(0061) 	{
(0062) 	    dx = x2 - x1;	
     6A1 2433      CLR	R3
     6A2 2455      CLR	R5
     6A3 1842      SUB	R4,R2
     6A4 0853      SBC	R5,R3
     6A5 825D      STD	Y+5,R5
     6A6 824C      STD	Y+4,R4
(0063) 		signx = 1;					 
     6A7 24CC      CLR	R12
     6A8 94C3      INC	R12
(0064) 	}
     6A9 C010      RJMP	0x06BA
(0065) 	else if(x2 < x1)
     6AA 880C      LDD	R0,Y+20
     6AB 8908      LDD	R16,Y+16
     6AC 1600      CP	R0,R16
     6AD F438      BCC	0x06B5
     6AE 940E 16D9 CALL	0x16D9
(0066) 	{
(0067) 	    dx = x1 - x2;	
     6B0 825D      STD	Y+5,R5
     6B1 824C      STD	Y+4,R4
(0068) 		signx = -1;					 
     6B2 EF8F      LDI	R24,0xFF
     6B3 2EC8      MOV	R12,R24
(0069) 	}
     6B4 C005      RJMP	0x06BA
(0070) 	else
(0071) 	{
(0072) 	    dx = 0;	
     6B5 2400      CLR	R0
     6B6 2411      CLR	R1
     6B7 821D      STD	Y+5,R1
     6B8 820C      STD	Y+4,R0
(0073) 		signx = 0;					 
     6B9 24CC      CLR	R12
(0074) 	}
(0075) 	 /* 2.计算Y方向的参数 */
(0076) 	if(y2 > y1)								
     6BA 2C2A      MOV	R2,R10
     6BB 2433      CLR	R3
     6BC 884E      LDD	R4,Y+22
     6BD 2455      CLR	R5
     6BE 1424      CP	R2,R4
     6BF 0435      CPC	R3,R5
     6C0 F444      BGE	0x06C9
(0077) 	{
(0078) 	    dy = y2 - y1;	
     6C1 2433      CLR	R3
     6C2 2D64      MOV	R22,R4
     6C3 2777      CLR	R23
     6C4 1962      SUB	R22,R2
     6C5 0973      SBC	R23,R3
(0079) 		signy = 1;					 
     6C6 24EE      CLR	R14
     6C7 94E3      INC	R14
(0080) 	}
     6C8 C00F      RJMP	0x06D8
(0081) 	else if(y2 < y1)
     6C9 880E      LDD	R0,Y+22
     6CA 140A      CP	R0,R10
     6CB F448      BCC	0x06D5
(0082) 	{
(0083) 	    dy = y1 - y2;	
     6CC 2C20      MOV	R2,R0
     6CD 2433      CLR	R3
     6CE 2D6A      MOV	R22,R10
     6CF 2777      CLR	R23
     6D0 1962      SUB	R22,R2
     6D1 0973      SBC	R23,R3
(0084) 		signy = -1;					 
     6D2 EF8F      LDI	R24,0xFF
     6D3 2EE8      MOV	R14,R24
(0085) 	}
     6D4 C003      RJMP	0x06D8
(0086) 	else
(0087) 	{
(0088) 	    dy = 0;	
     6D5 2766      CLR	R22
     6D6 2777      CLR	R23
(0089) 		signy = 0;

⌨️ 快捷键说明

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