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

📄 12864r.lst

📁 avr驱动显示屏LCD12864R(7920)
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0107 2722      CLR	R18
    0108 2700      CLR	R16
    0109 D00F      RCALL	_W_1byte
(0093)  	Delay(2);
    010A E002      LDI	R16,2
    010B E010      LDI	R17,0
    010C D071      RCALL	_Delay
(0094)  	cmd=0x80;   				//设置DDRAM地址
    010D E840      LDI	R20,0x80
(0095)  	W_1byte(0,0,cmd); 			//写指令
    010E 8348      STD	Y+0,R20
    010F 2722      CLR	R18
    0110 2700      CLR	R16
    0111 D007      RCALL	_W_1byte
(0096)  	Delay(2);   				//延时
    0112 E002      LDI	R16,2
    0113 E010      LDI	R17,0
    0114 D069      RCALL	_Delay
    0115 9621      ADIW	R28,1
    0116 940E01A2  CALL	pop_gset1
    0118 9508      RET
_W_1byte:
  H_data               --> R22
  S_ID                 --> R10
  L_data               --> R20
  W_data               --> Y+6
  RS                   --> R20
  RW                   --> R22
    0119 940E019B  CALL	push_gset3
    011B 2F42      MOV	R20,R18
    011C 2F60      MOV	R22,R16
(0097) }
(0098) /*******************************************************************
(0099) 函 数 名:W_1byte
(0100) 入口参数:RW、RS、W_data
(0101) 函数作用:写一个字节的数据到12864液晶,包括指令和数据
(0102) 说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(0103)    	 (一般RW都设为0,即只向液晶写数据,不读数据)
(0104)           RS=1,写入的是数据;RS=0,写入的是指令;
(0105)     	 一般模式:RW=0,RS=1;写数据
(0106)        	 RW=0,RS=0;写指令
(0107) ********************************************************************/
(0108) void W_1byte(uchar RW, uchar RS, uchar W_data)
(0109) {
(0110) 	uint H_data,L_data,S_ID = 0xf8;  	//11111RWRS0
    011D EF88      LDI	R24,0xF8
    011E E090      LDI	R25,0
    011F 015C      MOVW	R10,R24
(0111)  	if(RW == 0)
    0120 2366      TST	R22
    0121 F419      BNE	0x0125
(0112)  	{
(0113)    		S_ID &=~ 0x04;
    0122 7F8B      ANDI	R24,0xFB
    0123 015C      MOVW	R10,R24
(0114) 	}
    0124 C003      RJMP	0x0128
(0115)  	else     //if(RW==1)
(0116)  	{
(0117)    		S_ID |= 0X04;
    0125 01C5      MOVW	R24,R10
    0126 6084      ORI	R24,4
    0127 015C      MOVW	R10,R24
(0118)  	}
(0119)  	if(RS == 0)
    0128 2344      TST	R20
    0129 F421      BNE	0x012E
(0120)  	{
(0121)    		S_ID &=~ 0x02;
    012A 01C5      MOVW	R24,R10
    012B 7F8D      ANDI	R24,0xFD
    012C 015C      MOVW	R10,R24
(0122)  	}
    012D C003      RJMP	0x0131
(0123)  	else     //if(RS==1)
(0124)  	{
(0125)    		S_ID |= 0X02;
    012E 01C5      MOVW	R24,R10
    012F 6082      ORI	R24,2
    0130 015C      MOVW	R10,R24
(0126)  	}
(0127)  	H_data = W_data;
    0131 816E      LDD	R22,Y+6
    0132 2777      CLR	R23
(0128)  	H_data &= 0xf0;   			//屏蔽低4位的数据
    0133 7F60      ANDI	R22,0xF0
    0134 7070      ANDI	R23,0
(0129)  	L_data = W_data;     			//xxxx0000格式
    0135 814E      LDD	R20,Y+6
    0136 2755      CLR	R21
(0130)  	L_data &= 0x0f;   			//屏蔽高4位的数据
    0137 704F      ANDI	R20,0xF
    0138 7050      ANDI	R21,0
(0131)  	L_data <<= 4;   			//xxxx0000格式
    0139 0F44      LSL	R20
    013A 1F55      ROL	R21
    013B 0F44      LSL	R20
    013C 1F55      ROL	R21
    013D 0F44      LSL	R20
    013E 1F55      ROL	R21
    013F 0F44      LSL	R20
    0140 1F55      ROL	R21
(0132)  	Set_CS();
    0141 9AB8      SBI	0x17,0
    0142 9AC0      SBI	0x18,0
(0133)  	Write_8bits(S_ID);   			//发送S_ID
    0143 0185      MOVW	R16,R10
    0144 D009      RCALL	_Write_8bits
(0134)  	Write_8bits(H_data); 			//发送H_data
    0145 018B      MOVW	R16,R22
    0146 D007      RCALL	_Write_8bits
(0135)  	Write_8bits(L_data); 			//发送L_data
    0147 018A      MOVW	R16,R20
    0148 D005      RCALL	_Write_8bits
(0136)  	Clr_CS(); 
    0149 9AB8      SBI	0x17,0
    014A 98C0      CBI	0x18,0
    014B 940E0194  CALL	pop_gset3
    014D 9508      RET
_Write_8bits:
  Temp_data            --> R20
  i                    --> R22
  W_bits               --> R10
    014E 940E019B  CALL	push_gset3
    0150 0158      MOVW	R10,R16
(0137) }
(0138) /********************************************************************
(0139) 函 数 名:Write_8bits
(0140) 入口参数:W_bits
(0141) 函数作用:负责串行输出8个bit位
(0142) ********************************************************************/
(0143) void Write_8bits(uint W_bits)
(0144) {
(0145) 	uint i,Temp_data;
(0146)  	for(i=0; i<8; i++)
    0151 2766      CLR	R22
    0152 2777      CLR	R23
    0153 C023      RJMP	0x0177
(0147)  	{
(0148)   		Temp_data = W_bits;
    0154 01A5      MOVW	R20,R10
(0149)   		Temp_data <<= i;
    0155 019B      MOVW	R18,R22
    0156 018A      MOVW	R16,R20
    0157 940E01B6  CALL	lsl16
    0159 01A8      MOVW	R20,R16
(0150)   		if((Temp_data&0x80)==0)  //bit7 is zero
    015A FD07      SBRC	R16,7
    015B C00D      RJMP	0x0169
(0151)   		{
(0152)    			Clr_SID();
    015C 9AB9      SBI	0x17,1
    015D 98C1      CBI	0x18,1
(0153)    			nop();
    015E 0000      NOP
(0154)    			Set_SCLK();
    015F 9ABA      SBI	0x17,2
    0160 9AC2      SBI	0x18,2
(0155)    			nop();
    0161 0000      NOP
(0156)    			nop();
    0162 0000      NOP
(0157)    			Clr_SCLK();
    0163 9ABA      SBI	0x17,2
    0164 98C2      CBI	0x18,2
(0158)    			nop();
    0165 0000      NOP
(0159)    			Clr_SID();
    0166 9AB9      SBI	0x17,1
    0167 98C1      CBI	0x18,1
(0160)   		}
    0168 C00C      RJMP	0x0175
(0161)   		else         //bit7 is one
(0162)   		{
(0163)    			Set_SID();
    0169 9AB9      SBI	0x17,1
    016A 9AC1      SBI	0x18,1
(0164)    			nop();
    016B 0000      NOP
(0165)    			Set_SCLK();
    016C 9ABA      SBI	0x17,2
    016D 9AC2      SBI	0x18,2
(0166)    			nop();
    016E 0000      NOP
(0167)    			nop();
    016F 0000      NOP
(0168)    			Clr_SCLK();
    0170 9ABA      SBI	0x17,2
    0171 98C2      CBI	0x18,2
(0169)    			nop();
    0172 0000      NOP
(0170)    			Clr_SID();
    0173 9AB9      SBI	0x17,1
    0174 98C1      CBI	0x18,1
    0175 5F6F      SUBI	R22,0xFF
    0176 4F7F      SBCI	R23,0xFF
    0177 3068      CPI	R22,0x8
    0178 E0E0      LDI	R30,0
    0179 077E      CPC	R23,R30
    017A F2C8      BCS	0x0154
    017B 940E0194  CALL	pop_gset3
    017D 9508      RET
_Delay:
  i                    --> R20
  ms                   --> R16
    017E 940E019F  CALL	push_gset1
(0171)   		} 
(0172)  	}
(0173) }
(0174) /********************************************************************
(0175) 函 数 名:Delay
(0176) 入口参数:ms
(0177) 函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
(0178) ********************************************************************/
(0179) void Delay(uint ms) 
(0180) { 
    0180 C009      RJMP	0x018A
(0181) 	uint i; 
(0182)     	while(ms--)    
(0183)    	{ 
(0184)      		for(i=1;i<(uint)(xtal*143-2);i++) 
FILE: <library>
    0181 E041      LDI	R20,1
    0182 E050      LDI	R21,0
    0183 C002      RJMP	0x0186
    0184 5F4F      SUBI	R20,0xFF
    0185 4F5F      SBCI	R21,0xFF
    0186 3746      CPI	R20,0x76
    0187 E0E4      LDI	R30,4
    0188 075E      CPC	R21,R30
    0189 F3D0      BCS	0x0184
    018A 0118      MOVW	R2,R16
    018B 5001      SUBI	R16,1
    018C 4010      SBCI	R17,0
    018D 2022      TST	R2
    018E F791      BNE	0x0181
    018F 2033      TST	R3
    0190 F781      BNE	0x0181
    0191 940E01A2  CALL	pop_gset1
    0193 9508      RET
pop_gset3:
    0194 E0E4      LDI	R30,4
    0195 940C01A3  JMP	pop
push_gset5:
    0197 92FA      ST	R15,-Y
    0198 92EA      ST	R14,-Y
push_gset4:
    0199 92DA      ST	R13,-Y
    019A 92CA      ST	R12,-Y
push_gset3:
    019B 92BA      ST	R11,-Y
    019C 92AA      ST	R10,-Y
push_gset2:
    019D 937A      ST	R23,-Y
    019E 936A      ST	R22,-Y
push_gset1:
    019F 935A      ST	R21,-Y
    01A0 934A      ST	R20,-Y
    01A1 9508      RET
pop_gset1:
    01A2 E0E1      LDI	R30,1
pop:
    01A3 9149      LD	R20,Y+
    01A4 9159      LD	R21,Y+
    01A5 FDE0      SBRC	R30,0
    01A6 9508      RET
    01A7 9169      LD	R22,Y+
    01A8 9179      LD	R23,Y+
    01A9 FDE1      SBRC	R30,1
    01AA 9508      RET
    01AB 90A9      LD	R10,Y+
    01AC 90B9      LD	R11,Y+
    01AD FDE2      SBRC	R30,2
    01AE 9508      RET
    01AF 90C9      LD	R12,Y+
    01B0 90D9      LD	R13,Y+
    01B1 FDE3      SBRC	R30,3
    01B2 9508      RET
    01B3 90E9      LD	R14,Y+
    01B4 90F9      LD	R15,Y+
    01B5 9508      RET
lsl16:
    01B6 2322      TST	R18
    01B7 F021      BEQ	0x01BC
    01B8 0F00      LSL	R16
    01B9 1F11      ROL	R17
    01BA 952A      DEC	R18
    01BB CFFA      RJMP	lsl16
    01BC 9508      RET

⌨️ 快捷键说明

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