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

📄 lcd1286418.lst

📁 3D LCD for running graphical lCDs
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0133) 		    ClrBit(LCDPORTCS2,LCDCS2);
     53A 981B      CBI	0x03,3
(0134) 		}
(0135)     NOP;						  		   /* DELAY AT LEAST 140ns */
     53B 0000      NOP
(0136) 	NOP;
     53C 0000      NOP
(0137) 	SetBit(LCDPORTEN,LCDEN); 			   /* EN = 1 */
     53D 9AC3      SBI	0x18,3
     53E 940E 15B4 CALL	0x15B4
(0138) 	NOP;						  		   /* DELAY AT LEAST 450ns */
(0139) 	NOP;
(0140) 	NOP;
(0141) 	NOP;
(0142) 	NOP;
     540 0000      NOP
(0143) 	LCDDDRDATA = 0XFF;                     /* WRITE DATA TO LCD */
     541 EF8F      LDI	R24,0xFF
     542 9380 0061 STS	0x0061,R24
(0144) 	LCDPORTDATA = data;
     544 92A0 0062 STS	0x0062,R10
     546 940E 163A CALL	0x163A
(0145) 	ClrBit(LCDPORTEN,LCDEN); 			   /* EN = 0 */
(0146) 	NOP;                                   /* DELAY AT LEAST 10ns */
(0147) 	SetBit(LCDPORTCS1,LCDCS1);	           /* CHIP DISABLE */		
(0148) 	SetBit(LCDPORTCS2,LCDCS2);
(0149) 	NOP;
     548 9149      LD	R20,Y+
     549 90A9      LD	R10,Y+
     54A 9508      RET
_LcdRdSta:
  temp                 --> R10
  chiplr               --> R16
     54B 92AA      ST	R10,-Y
(0150) }
(0151) 
(0152) /*****************************************
(0153) *  FUNCTION NAME: LcdRdSta
(0154) *  DESCRIPTION:   Read Status From LCD
(0155) /*****************************************/
(0156) unsigned char LcdRdSta(unsigned char chiplr)
(0157) {
(0158)     unsigned char temp;
(0159) 	ClrBit(LCDPORTRS,LCDRS);				/* RS = 0 ,COMMAND */
     54C 98C2      CBI	0x18,2
(0160) 	SetBit(LCDPORTRW,LCDRW);				/* RW = 1 ,READ */
     54D 9A1C      SBI	0x03,4
(0161) 	if(chiplr == 'L')						/* CS = 0 ,CHIP SELECT */
     54E 340C      CPI	R16,0x4C
     54F F411      BNE	0x0552
(0162) 	    ClrBit(LCDPORTCS1,LCDCS1);
     550 981A      CBI	0x03,2
     551 C006      RJMP	0x0558
(0163) 	else if(chiplr == 'R')
     552 3502      CPI	R16,0x52
     553 F411      BNE	0x0556
(0164) 	    ClrBit(LCDPORTCS2,LCDCS2);
     554 981B      CBI	0x03,3
     555 C002      RJMP	0x0558
(0165) 	else
(0166) 	    {
(0167) 		    ClrBit(LCDPORTCS1,LCDCS1);
     556 981A      CBI	0x03,2
(0168) 		    ClrBit(LCDPORTCS2,LCDCS2);
     557 981B      CBI	0x03,3
(0169) 		}
(0170)     NOP;						  		   /* DELAY AT LEAS;T 140ns */
     558 940E 1555 CALL	0x1555
(0171) 	NOP;
(0172) 	SetBit(LCDPORTEN,LCDEN); 			   /* EN = 1 */
(0173) 	NOP;						  		   /* DELAY AT LEAST 450ns */
(0174) 	NOP;
(0175) 	NOP;
(0176) 	NOP;
(0177) 	NOP;
(0178) 	LCDDDRDATA = 0X00;                     /* READ DATA FROM LCD */
(0179) 	temp = LCDPINDATA;
(0180) 	ClrBit(LCDPORTEN,LCDEN); 			   /* EN = 0 */
(0181) 	NOP;                                   /* DELAY AT LEAST 10ns */
(0182) 	SetBit(LCDPORTCS1,LCDCS1);	           /* CHIP DISABLE */		
(0183) 	SetBit(LCDPORTCS2,LCDCS2);
(0184) 	NOP;
(0185) 	return temp;    
     55A 90A9      LD	R10,Y+
     55B 9508      RET
_LcdRdDat:
  temp                 --> R10
  chiplr               --> R20
     55C 92AA      ST	R10,-Y
     55D 934A      ST	R20,-Y
     55E 2F40      MOV	R20,R16
(0186) }
(0187) 
(0188) /*****************************************
(0189) *  FUNCTION NAME: LcdRdDat
(0190) *  DESCRIPTION:   Read Data From LCD 
(0191) /*****************************************/
(0192) unsigned char LcdRdDat(unsigned char chiplr)
(0193) {
(0194)     unsigned char temp;
(0195) 	while(LcdBusy() == 0)                   /* IF LCD BUSY,WAIT... */
     55F D013      RCALL	_LcdBusy
     560 2300      TST	R16
     561 F3E9      BEQ	0x055F
(0196) 	    ;
(0197) 	SetBit(LCDPORTRS,LCDRS);				/* RS = 1 ,DATA */
     562 9AC2      SBI	0x18,2
(0198) 	SetBit(LCDPORTRW,LCDRW);				/* RW = 1 ,READ */
     563 9A1C      SBI	0x03,4
(0199) 	if(chiplr == 'L')						/* CS = 0 ,CHIP SELECT */
     564 344C      CPI	R20,0x4C
     565 F411      BNE	0x0568
(0200) 	    ClrBit(LCDPORTCS1,LCDCS1);
     566 981A      CBI	0x03,2
     567 C006      RJMP	0x056E
(0201) 	else if(chiplr == 'R')
     568 3542      CPI	R20,0x52
     569 F411      BNE	0x056C
(0202) 	    ClrBit(LCDPORTCS2,LCDCS2);
     56A 981B      CBI	0x03,3
     56B C002      RJMP	0x056E
(0203) 	else
(0204) 	    {
(0205) 		    ClrBit(LCDPORTCS1,LCDCS1);
     56C 981A      CBI	0x03,2
(0206) 		    ClrBit(LCDPORTCS2,LCDCS2);
     56D 981B      CBI	0x03,3
(0207) 		}
(0208)     NOP;						  		   /* DELAY AT LEAS;T 140ns */
     56E 940E 1555 CALL	0x1555
(0209) 	NOP;
(0210) 	SetBit(LCDPORTEN,LCDEN); 			   /* EN = 1 */
(0211) 	NOP;						  		   /* DELAY AT LEAST 450ns */
(0212) 	NOP;
(0213) 	NOP;
(0214) 	NOP;
(0215) 	NOP;
(0216) 	LCDDDRDATA = 0X00;                     /* READ DATA FROM LCD */
(0217) 	temp = LCDPINDATA;
(0218) 	ClrBit(LCDPORTEN,LCDEN); 			   /* EN = 0 */
(0219) 	NOP;                                   /* DELAY AT LEAST 10ns */
(0220) 	SetBit(LCDPORTCS1,LCDCS1);	           /* CHIP DISABLE */		
(0221) 	SetBit(LCDPORTCS2,LCDCS2);
(0222) 	NOP;
(0223) 	return temp;    
     570 9149      LD	R20,Y+
     571 90A9      LD	R10,Y+
     572 9508      RET
_LcdBusy:
  temp2                --> R20
  temp1                --> R22
     573 934A      ST	R20,-Y
     574 936A      ST	R22,-Y
(0224) }
(0225) 
(0226) /*****************************************
(0227) *  FUNCTION NAME: LcdBusy
(0228) *  DESCRIPTION:   LCD BUSY OR NOT
(0229) *                 BUSY-RETURN 0
(0230) *                 NOT BUSY-RETURN 1
(0231) /*****************************************/
(0232) unsigned char LcdBusy(void)
(0233) {
(0234)     unsigned char temp1,temp2;
(0235) 	temp1 = LcdRdSta('L'); 				   /* READ LCD STA. */
     575 E40C      LDI	R16,0x4C
     576 DFD4      RCALL	_LcdRdSta
     577 2F60      MOV	R22,R16
(0236) 	temp1 = temp1&0X80;
     578 7860      ANDI	R22,0x80
(0237) 	temp2 = LcdRdSta('R');
     579 E502      LDI	R16,0x52
     57A DFD0      RCALL	_LcdRdSta
     57B 2F40      MOV	R20,R16
(0238) 	temp2 = temp2&0X80;
     57C 7840      ANDI	R20,0x80
(0239) 	if(temp1|temp2)
     57D 2E26      MOV	R2,R22
     57E 2A24      OR	R2,R20
     57F F011      BEQ	0x0582
(0240) 	    return 0;
     580 2700      CLR	R16
     581 C001      RJMP	0x0583
(0241) 	else
(0242) 	    return 1;
     582 E001      LDI	R16,1
     583 9169      LD	R22,Y+
     584 9149      LD	R20,Y+
     585 9508      RET
_LcdClr:
  count                --> R20
  temp                 --> R22
     586 934A      ST	R20,-Y
     587 936A      ST	R22,-Y
(0243) }
(0244) 
(0245) /*****************************************
(0246) *  FUNCTION NAME: LcdClr
(0247) *  DESCRIPTION:   CLEAR LCD
(0248) /*****************************************/
(0249) void LcdClr(void)
(0250) {
(0251) 	unsigned char count;
(0252) 	unsigned char temp;
(0253) 	/* CLEAR LEFT&RIGHT SCREEN */
(0254) 	LcdWrCmd('B',0X3E);      			   /* LCD OFF */
     588 E32E      LDI	R18,0x3E
     589 E402      LDI	R16,0x42
     58A DF7E      RCALL	_LcdWrCmd
(0255) 	LcdWrCmd('B',0XC0);                    /* SET ROW */
     58B EC20      LDI	R18,0xC0
     58C E402      LDI	R16,0x42
     58D DF7B      RCALL	_LcdWrCmd
(0256) 	for(count=0; count<8; count++)
     58E 2744      CLR	R20
     58F C010      RJMP	0x05A0
(0257) 	{
(0258) 	    LcdWrCmd('B',0XB8+count);          /* SET PAGE */
     590 2F24      MOV	R18,R20
     591 5428      SUBI	R18,0x48
     592 E402      LDI	R16,0x42
     593 DF75      RCALL	_LcdWrCmd
(0259) 		LcdWrCmd('B',0X40);     		   /* SET Y */
     594 E420      LDI	R18,0x40
     595 E402      LDI	R16,0x42
     596 DF72      RCALL	_LcdWrCmd
(0260) 		for(temp=0; temp<64; temp++)
     597 2766      CLR	R22
     598 C004      RJMP	0x059D
(0261) 		{
(0262) 		     LcdWrDat('B',0X00);
     599 2722      CLR	R18
     59A E402      LDI	R16,0x42
     59B DF8E      RCALL	_LcdWrDat
     59C 9563      INC	R22
     59D 3460      CPI	R22,0x40
     59E F3D0      BCS	0x0599
     59F 9543      INC	R20
     5A0 3048      CPI	R20,0x8
     5A1 F370      BCS	0x0590
(0263) 		}
(0264) 	}
(0265) 	LcdWrCmd('B',0X3F);      			   /* LCD ON */
     5A2 E32F      LDI	R18,0x3F
     5A3 E402      LDI	R16,0x42
     5A4 DF64      RCALL	_LcdWrCmd
     5A5 9169      LD	R22,Y+
     5A6 9149      LD	R20,Y+
     5A7 9508      RET
_LcdDisplaySeg:
  data                 --> R10
  offset               --> R20
  page                 --> R22
     5A8 940E 10D2 CALL	push_xgsetF00C
     5AA 2F42      MOV	R20,R18
     5AB 2F60      MOV	R22,R16
     5AC 80AE      LDD	R10,Y+6
(0266) }
(0267) 
(0268) /*****************************************
(0269) *  FUNCTION NAME: LcdDisplaySeg
(0270) *  DESCRIPTION:   DISPLAY 8-BIT SEGMENT
(0271) *  <---------offset 0 to 127----------->
(0272) *                page0
(0273) *                  |
(0274) *                page7
(0275) *  <---------offset 0 to 127----------->
(0276) /*****************************************/
(0277) void LcdDisplaySeg(unsigned char page,unsigned char offset,unsigned char data)
(0278) {
(0279)     /* Display at Left Part */
(0280) 	if(offset < 64)
     5AD 3440      CPI	R20,0x40
     5AE F478      BCC	0x05BE
(0281) 	{
(0282) 		//LcdWrCmd('L',0X3F);      			   /* LCD ON */
(0283)  	    LcdWrCmd('L',0XC0);                    /* SET ROW */
     5AF EC20      LDI	R18,0xC0
     5B0 E40C      LDI	R16,0x4C
     5B1 DF57      RCALL	_LcdWrCmd
(0284) 		LcdWrCmd('L',0XB8+page);               /* SET PAGE */
     5B2 2F26      MOV	R18,R22
     5B3 5428      SUBI	R18,0x48
     5B4 E40C      LDI	R16,0x4C
     5B5 DF53      RCALL	_LcdWrCmd
(0285) 		LcdWrCmd('L',0X40+offset);     		   /* SET Y */
     5B6 2F24      MOV	R18,R20
     5B7 5C20      SUBI	R18,0xC0
     5B8 E40C      LDI	R16,0x4C
     5B9 DF4F      RCALL	_LcdWrCmd
(0286) 		LcdWrDat('L',data);					   /* WRITE SEGMENT */
     5BA 2D2A      MOV	R18,R10
     5BB E40C      LDI	R16,0x4C
     5BC DF6D      RCALL	_LcdWrDat
(0287) 	}
     5BD C012      RJMP	0x05D0
(0288)     else
(0289)     {
(0290) 	    LcdWrCmd('R',0X3F);      			   /* LCD ON */
     5BE E32F      LDI	R18,0x3F
     5BF E502      LDI	R16,0x52
     5C0 DF48      RCALL	_LcdWrCmd
(0291)  	    LcdWrCmd('R',0XC0);                    /* SET ROW */
     5C1 EC20      LDI	R18,0xC0
     5C2 E502      LDI	R16,0x52
     5C3 DF45      RCALL	_LcdWrCmd
(0292) 		LcdWrCmd('R',0XB8+page);               /* SET PAGE */
     5C4 2F26      MOV	R18,R22
     5C5 5428      SUBI	R18,0x48
     5C6 E502      LDI	R16,0x52
     5C7 DF41      RCALL	_LcdWrCmd
(0293) 		LcdWrCmd('R',0X40+offset-64);     	   /* SET Y */
     5C8 2F24      MOV	R18,R20
     5C9 5C20      SUBI	R18,0xC0
     5CA 5420      SUBI	R18,0x40
     5CB E502      LDI	R16,0x52
     5CC DF3C      RCALL	_LcdWrCmd
(0294) 		LcdWrDat('R',data);					   /* WRITE SEGMENT */
     5CD 2D2A      MOV	R18,R10
     5CE E502      LDI	R16,0x52
     5CF DF5A      RCALL	_LcdWrDat
(0295) 	}
     5D0 940C 10D7 JMP	pop_xgsetF00C
_LcdDisplayDot:
  temp2                --> R12
  temp1                --> R22
  a                    --> R10
  data                 --> R14
  y                    --> R10
  x                    --> Y,+10
     5D2 940E 16A8 CALL	0x16A8
     5D4 2EA2      MOV	R10,R18
     5D5 84EE      LDD	R14,Y+14
(0296) }
(0297) 
(0298) /************************************************
(0299) *  FUNCTION NAME: LcdDisplayDot
(0300) *  DESCRIPTION:   DISPLAY 1-BIT DOT
(0301) *  不在单片机里面开设缓存,直接修改LCD的RAM后显示
(0302) *  <---------offset 0 to 127----------->
(0303) *                  0
(0304) *                  |
(0305) *                  64
(0306) *  <---------offset 0 to 127----------->
(0307) /*************************************************/
(0308) void LcdDisplayDot(unsigned char x,unsigned char y,unsigned char data)
(0309) {
(0310)     unsigned char temp1,temp2,a;
(0311)     if(x>127 | y>63)
     5D6 E78F      LDI	R24,0x7F
     5D7 840A      LDD	R0,Y+10
     5D8 1580      CP	R24,R0
     5D9 940E 15CF CALL	0x15CF
     5DB 158A      CP	R24,R10
     5DC F418      BCC	0x05E0
     5DD E041      LDI	R20,1
     5DE E050      LDI	R21,0
     5DF C002      RJMP	0x05E2
     5E0 2744      CLR	R20
     5E1 2755      CLR	R21
     5E2 011B      MOVW	R2,R22
     5E3 2A24      OR	R2,R20
     5E4 2A35      OR	R3,R21
     5E5 2022      TST	R2
     5E6 F411      BNE	0x05E9
     5E7 2033      TST	R3
     5E8 F009      BEQ	0x05EA
(0312) 	    return;
     5E9 C062      RJMP	0x064C
(0313) 	temp1 = y / 8;			  	 			   /* GET VALUE OF WHICH PAGE */
     5EA 2D6A      MOV	R22,R10
     5EB 9566      LSR	R22
     5EC 9566      LSR	R22
     5ED 9566      LSR	R22
(0314)     temp2 = y % 8;                             /* GET VALUE OF WHICH Y-OFFSET */
     5EE E018      LDI	R17,0x8
     5EF 2D0A      MOV	R16,R10
     5F0 940E 1076 CALL	mod8u
     5F2 2EC0      MOV	R12,R16
(0315) 	/* IN ORDER TO NOT MODFIY NOW DISPLY VALUE */ 
(0316) 	if(x < 64)							       /* GET PRE. SEGMENT VALUE */
     5F3 858A      LDD	R24,Y+10
     5F4 3480      CPI	R24,0x40
     5F5 F4E0      BCC	0x0612
(0317) 	{
(0318)  	    LcdWrCmd('L',0XC0);                    /* SET ROW */
     5F6 EC20      LDI	R18,0xC0
     5F7 E40C      LDI	R16,0x4C

⌨️ 快捷键说明

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