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

📄 lcd12864_3wires.lst

📁 实现12864液晶的图形显示
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0309) 	}
    05CC C003      RJMP	0x05D0
(0310) 	else					//if(RS==1)
(0311) 	{
(0312) 	 	S_ID |= 0X02;
    05CD 01C5      MOVW	R24,R10
    05CE 6082      ORI	R24,2
    05CF 015C      MOVW	R10,R24
(0313) 	}
(0314) 	H_data = W_data;
    05D0 816E      LDD	R22,Y+6
    05D1 2777      CLR	R23
(0315) 	H_data &= 0xf0;			//屏蔽低4位的数据
    05D2 7F60      ANDI	R22,0xF0
    05D3 7070      ANDI	R23,0
(0316) 	L_data = W_data;	   	//xxxx0000格式
    05D4 814E      LDD	R20,Y+6
    05D5 2755      CLR	R21
(0317) 	L_data &= 0x0f;			//屏蔽高4位的数据
    05D6 704F      ANDI	R20,0xF
    05D7 7050      ANDI	R21,0
(0318) 	L_data <<= 4;			//xxxx0000格式
    05D8 0F44      LSL	R20
    05D9 1F55      ROL	R21
    05DA 0F44      LSL	R20
    05DB 1F55      ROL	R21
    05DC 0F44      LSL	R20
    05DD 1F55      ROL	R21
    05DE 0F44      LSL	R20
    05DF 1F55      ROL	R21
(0319) 	Set_CS();
    05E0 9ABD      SBI	0x17,5
    05E1 9AC5      SBI	0x18,5
(0320) 	Write_8bits(S_ID); 		//发送S_ID
    05E2 0185      MOVW	R16,R10
    05E3 D009      RCALL	_Write_8bits
(0321) 	Write_8bits(H_data);	//发送H_data
    05E4 018B      MOVW	R16,R22
    05E5 D007      RCALL	_Write_8bits
(0322) 	Write_8bits(L_data);	//发送L_data
    05E6 018A      MOVW	R16,R20
    05E7 D005      RCALL	_Write_8bits
(0323) 	Clr_CS();	
    05E8 9ABD      SBI	0x17,5
    05E9 98C5      CBI	0x18,5
    05EA 940E074A  CALL	pop_gset3
    05EC 9508      RET
_Write_8bits:
  Temp_data            --> R20
  i                    --> R22
  W_bits               --> R10
    05ED 940E0754  CALL	push_gset3
    05EF 0158      MOVW	R10,R16
(0324) }
(0325) /********************************************************************
(0326) 函 数 名:Write_8bits
(0327) 入口参数:W_bits
(0328) 出口参数:无
(0329) 建立日期:2007年3月3日
(0330) 修改日期:
(0331) 函数作用:负责串行输出8个bit位
(0332) 说    明:
(0333) ********************************************************************/
(0334) void Write_8bits(uint W_bits)
(0335) {
(0336) 	uint i,Temp_data;
(0337) 	for(i=0; i<8; i++)
    05F0 2766      CLR	R22
    05F1 2777      CLR	R23
    05F2 C019      RJMP	0x060C
(0338) 	{
(0339) 		Temp_data = W_bits;
    05F3 01A5      MOVW	R20,R10
(0340) 		Temp_data <<= i;
    05F4 019B      MOVW	R18,R22
    05F5 018A      MOVW	R16,R20
    05F6 940E076F  CALL	lsl16
    05F8 01A8      MOVW	R20,R16
(0341) 		if((Temp_data&0x80)==0)
    05F9 FD07      SBRC	R16,7
    05FA C003      RJMP	0x05FE
(0342) 		{
(0343) 		 	Clr_SID();
    05FB 9ABE      SBI	0x17,6
    05FC 98C6      CBI	0x18,6
(0344) 		}
    05FD C002      RJMP	0x0600
(0345) 		else
(0346) 		{
(0347) 		 	Set_SID();
    05FE 9ABE      SBI	0x17,6
    05FF 9AC6      SBI	0x18,6
(0348) 		} 
(0349) 		nop();
    0600 0000      NOP
(0350) 		Set_SCLK();
    0601 9ABF      SBI	0x17,7
    0602 9AC7      SBI	0x18,7
(0351) 		nop();
    0603 0000      NOP
(0352) 		nop();
    0604 0000      NOP
(0353) 		Clr_SCLK();
    0605 9ABF      SBI	0x17,7
    0606 98C7      CBI	0x18,7
(0354) 		nop();
    0607 0000      NOP
(0355) 		Clr_SID();
    0608 9ABE      SBI	0x17,6
    0609 98C6      CBI	0x18,6
    060A 5F6F      SUBI	R22,0xFF
    060B 4F7F      SBCI	R23,0xFF
    060C 3068      CPI	R22,0x8
    060D E0E0      LDI	R30,0
    060E 077E      CPC	R23,R30
    060F F318      BCS	0x05F3
    0610 940E074A  CALL	pop_gset3
    0612 9508      RET
_Delay:
  i                    --> R20
  ms                   --> R16
    0613 940E0758  CALL	push_gset1
(0356) 	}
(0357) }
(0358) /********************************************************************
(0359) 函 数 名:Delay
(0360) 入口参数:ms
(0361) 出口参数:无
(0362) 建立日期:2007年3月3日
(0363) 修改日期:
(0364) 函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
(0365) 说    明:
(0366) ********************************************************************/
(0367) void Delay(uint ms) 
(0368) { 
    0615 C009      RJMP	0x061F
(0369)     uint i; 
(0370)     while(ms--)    
(0371)    { 
(0372)      for(i=1;i<(uint)(xtal*143-2);i++) 
    0616 E041      LDI	R20,1
    0617 E050      LDI	R21,0
    0618 C002      RJMP	0x061B
    0619 5F4F      SUBI	R20,0xFF
    061A 4F5F      SBCI	R21,0xFF
    061B 3746      CPI	R20,0x76
    061C E0E4      LDI	R30,4
    061D 075E      CPC	R21,R30
    061E F3D0      BCS	0x0619
    061F 0118      MOVW	R2,R16
    0620 5001      SUBI	R16,1
    0621 4010      SBCI	R17,0
    0622 2022      TST	R2
    0623 F791      BNE	0x0616
    0624 2033      TST	R3
    0625 F781      BNE	0x0616
    0626 940E075B  CALL	pop_gset1
    0628 9508      RET
_Char_Set_XY:
  p                    --> R20
  y                    --> R10
  x                    --> R22
    0629 940E0754  CALL	push_gset3
    062B 2EA2      MOV	R10,R18
    062C 2F60      MOV	R22,R16
    062D 9721      SBIW	R28,1
    062E 814F      LDD	R20,Y+7
    062F 8558      LDD	R21,Y+8
(0373)          ; 
(0374)    }   
(0375) }
(0376) //===================================================================*/
(0377) /********************************************************************
(0378) 函 数 名:Char_Set_XY
(0379) 入口参数:x,y,*p
(0380) 出口参数:无
(0381) 建立日期:2007年8月26日
(0382) 修改日期:
(0383) 函数作用:
(0384) 说    明:
(0385) ********************************************************************/
(0386) void Char_Set_XY(uchar x, uchar y, uchar *p) 
(0387) { 
(0388)      if(y == 0)
    0630 20AA      TST	R10
    0631 F431      BNE	0x0638
(0389) 	{
(0390) 	 	W_1byte(0,0,(0x80+x));	
    0632 2F86      MOV	R24,R22
    0633 5880      SUBI	R24,0x80
    0634 8388      STD	Y+0,R24
    0635 2722      CLR	R18
    0636 2700      CLR	R16
    0637 DF80      RCALL	_W_1byte
(0391) 	}
(0392) 	if(y == 1)
    0638 2D8A      MOV	R24,R10
    0639 3081      CPI	R24,1
    063A F431      BNE	0x0641
(0393) 	{
(0394) 		W_1byte(0,0,(0x90+x));
    063B 2F86      MOV	R24,R22
    063C 5780      SUBI	R24,0x70
    063D 8388      STD	Y+0,R24
    063E 2722      CLR	R18
    063F 2700      CLR	R16
    0640 DF77      RCALL	_W_1byte
(0395) 	}
(0396) 	if(y == 2)
    0641 2D8A      MOV	R24,R10
    0642 3082      CPI	R24,2
    0643 F431      BNE	0x064A
(0397) 	{
(0398) 		W_1byte(0,0,(0x88+x));
    0644 2F86      MOV	R24,R22
    0645 5788      SUBI	R24,0x78
    0646 8388      STD	Y+0,R24
    0647 2722      CLR	R18
    0648 2700      CLR	R16
    0649 DF6E      RCALL	_W_1byte
(0399) 	}
(0400) 	if(y == 3)
    064A 2D8A      MOV	R24,R10
    064B 3083      CPI	R24,3
    064C F471      BNE	0x065B
(0401) 	{
(0402) 		W_1byte(0,0,(0x98+x));
    064D 2F86      MOV	R24,R22
    064E 5688      SUBI	R24,0x68
    064F 8388      STD	Y+0,R24
    0650 2722      CLR	R18
    0651 2700      CLR	R16
    0652 DF65      RCALL	_W_1byte
(0403) 	}
    0653 C007      RJMP	0x065B
(0404) 	while(*p != 0)
(0405) 	{
(0406) 		W_1byte(0,1,*p++);
    0654 01FA      MOVW	R30,R20
    0655 9021      LD	R2,Z+
    0656 01AF      MOVW	R20,R30
    0657 8228      STD	Y+0,R2
    0658 E021      LDI	R18,1
    0659 2700      CLR	R16
    065A DF5D      RCALL	_W_1byte
    065B 01FA      MOVW	R30,R20
    065C 8020      LDD	R2,Z+0
    065D 2022      TST	R2
    065E F7A9      BNE	0x0654
    065F 9621      ADIW	R28,1
    0660 940E074A  CALL	pop_gset3
    0662 9508      RET
_Set_Draw:
    0663 9721      SBIW	R28,1
(0407) 	}
(0408) }
(0409) //===================================================================*/
(0410) 
(0411) /********************************************************************
(0412) 函 数 名:Set_Draw(
(0413) 入口参数:无
(0414) 出口参数:无
(0415) 建立日期:2007年8月26日
(0416) 修改日期:
(0417) 函数作用:
(0418) 说    明:
(0419) ********************************************************************/
(0420) void Set_Draw(void)
(0421) {
(0422) 	//W_1byte(0,0,0x01);			//清屏
(0423) 	Delay(20);					//延时
    0664 E104      LDI	R16,0x14
    0665 E010      LDI	R17,0
    0666 DFAC      RCALL	_Delay
(0424) 	//W_1byte(0,0,0x34);			//8BIT控制界面,扩充指令集,,绘图显示OFF
(0425) 	W_1byte(0,0,0x36);
    0667 E386      LDI	R24,0x36
    0668 8388      STD	Y+0,R24
    0669 2722      CLR	R18
    066A 2700      CLR	R16
    066B DF4C      RCALL	_W_1byte
(0426) 	Delay(20);					//延时
    066C E104      LDI	R16,0x14
    066D E010      LDI	R17,0
    066E DFA4      RCALL	_Delay
    066F 9621      ADIW	R28,1
    0670 9508      RET
_Draw_Pic:
  temp_y               --> R20
  temp_x               --> R22
  i                    --> R10
  j                    --> R12
  Draw                 --> R14
  y                    --> R10
  x                    --> R20
    0671 940E0750  CALL	push_gset5
    0673 2EA2      MOV	R10,R18
    0674 2F40      MOV	R20,R16
    0675 9721      SBIW	R28,1
    0676 84EB      LDD	R14,Y+11
    0677 84FC      LDD	R15,Y+12
(0427) }
(0428) //===================================================================*/
(0429) /********************************************************************
(0430) 函 数 名:Draw_Pic  128*64
(0431) 入口参数:x,y,*Draw
(0432) 出口参数:无
(0433) 建立日期:2007年8月26日
(0434) 修改日期:
(0435) 函数作用:
(0436) 说    明:
(0437) ********************************************************************/
(0438) /*************************************************/
(0439) 
(0440) void Draw_Pic(uchar x, uchar y, const uchar *Draw)
(0441) {
(0442) 	uchar i, j, temp_x, temp_y;		//
(0443) 	temp_x = x;						//
    0678 2F64      MOV	R22,R20
(0444) 	temp_y = y;						//
    0679 2D4A      MOV	R20,R10
(0445) 	temp_x |= 0x80;					//
    067A 6860      ORI	R22,0x80
(0446) 	temp_y |= 0x80;					//
    067B 6840      ORI	R20,0x80
(0447) 	for(i=0;i<32;i++ )				//上半屏32行
    067C 24AA      CLR	R10
    067D C01B      RJMP	0x0699
(0448) 	{
(0449) 		W_1byte(0,0,temp_y++);		//设置绘图区的Y地址坐标0
    067E 2E24      MOV	R2,R20
    067F 5F4F      SUBI	R20,0xFF
    0680 8228      STD	Y+0,R2
    0681 2722      CLR	R18
    0682 2700      CLR	R16
    0683 DF34      RCALL	_W_1byte
(0450) 		W_1byte(0,0,temp_x);		//设置绘图区的X地址坐标0
    0684 8368      STD	Y+0,R22
    0685 2722      CLR	R18
    0686 2700      CLR	R16
    0687 DF30      RCALL	_W_1byte
(0451) 		for(j=0;j<16;j++)			//
    0688 24CC      CLR	R12

⌨️ 快捷键说明

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