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

📄 smg12232zk.lst

📁 m48,8兆,smg12232带16*16汉字库点阵液晶屏驱动程序,有详细注视,
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0093) 	{
(0094) 		Lcd_Write(0xfa,*lcd_pointer);	
    011F 01FB      MOVW	R30,R22
    0120 8120      LDD	R18,Z+0
    0121 EF0A      LDI	R16,0xFA
    0122 D094      RCALL	_Lcd_Write
(0095) 		lcd_pointer++;
    0123 5F6F      SUBI	R22,0xFF
    0124 4F7F      SBCI	R23,0xFF
    0125 954A      DEC	R20
    0126 2422      CLR	R2
    0127 1624      CP	R2,R20
    0128 F3B0      BCS	0x011F
    0129 D13D      RCALL	pop_gset5
    012A 9508      RET
_Hzk_Dis_Data:
  ram_address          --> R14
  i                    --> R10
  num                  --> R12
  data                 --> Y+14
  xpos                 --> Y+12
  ypos                 --> Y+10
    012B D0C3      RCALL	push_arg4
    012C D13C      RCALL	push_gset5
    012D 88CA      LDD	R12,Y+18
(0096) 	}	
(0097) 	
(0098) }
(0099) 
(0100) /****************发送数据子程序******************
(0101) ** xpos为列数,ypos为行数
(0102) **data为数据
(0103) **num数据占用得位数
(0104) *********************************************************/
(0105) void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num)								
(0106) {
(0107) 	Byte i=0,ram_address;//ram_address:首地址
    012E 24AA      CLR	R10
(0108) 	if(num<16)
    012F 2D8C      MOV	R24,R12
    0130 3180      CPI	R24,0x10
    0131 F008      BCS	0x0133
    0132 C06C      RJMP	0x019F
(0109) 	{
(0110) 		for(i=0;i<num;i++)
    0133 C03B      RJMP	0x016F
(0111) 		{
(0112) 			lcd_buf[num-i-1]= data%10+0x30;
    0134 E04A      LDI	R20,0xA
    0135 E050      LDI	R21,0
    0136 E060      LDI	R22,0
    0137 E070      LDI	R23,0
    0138 01FE      MOVW	R30,R28
    0139 8426      LDD	R2,Z+14
    013A 8437      LDD	R3,Z+15
    013B 8840      LDD	R4,Z+16
    013C 8851      LDD	R5,Z+17
    013D 937A      ST	R23,-Y
    013E 936A      ST	R22,-Y
    013F 935A      ST	R21,-Y
    0140 934A      ST	R20,-Y
    0141 0181      MOVW	R16,R2
    0142 0192      MOVW	R18,R4
    0143 D0B2      RCALL	mod32u
    0144 0118      MOVW	R2,R16
    0145 0129      MOVW	R4,R18
    0146 E340      LDI	R20,0x30
    0147 E050      LDI	R21,0
    0148 E060      LDI	R22,0
    0149 E070      LDI	R23,0
    014A 0E24      ADD	R2,R20
    014B 1E35      ADC	R3,R21
    014C 1E46      ADC	R4,R22
    014D 1E57      ADC	R5,R23
    014E 2C3A      MOV	R3,R10
    014F 2444      CLR	R4
    0150 2DEC      MOV	R30,R12
    0151 27FF      CLR	R31
    0152 19E3      SUB	R30,R3
    0153 09F4      SBC	R31,R4
    0154 E189      LDI	R24,0x19
    0155 E091      LDI	R25,1
    0156 0FE8      ADD	R30,R24
    0157 1FF9      ADC	R31,R25
    0158 8220      STD	Z+0,R2
(0113) 			data /= 10;
    0159 E04A      LDI	R20,0xA
    015A E050      LDI	R21,0
    015B E060      LDI	R22,0
    015C E070      LDI	R23,0
    015D 01FE      MOVW	R30,R28
    015E 8426      LDD	R2,Z+14
    015F 8437      LDD	R3,Z+15
    0160 8840      LDD	R4,Z+16
    0161 8851      LDD	R5,Z+17
    0162 937A      ST	R23,-Y
    0163 936A      ST	R22,-Y
    0164 935A      ST	R21,-Y
    0165 934A      ST	R20,-Y
    0166 0181      MOVW	R16,R2
    0167 0192      MOVW	R18,R4
    0168 D08B      RCALL	div32u
    0169 01FE      MOVW	R30,R28
    016A 8706      STD	Z+14,R16
    016B 8717      STD	Z+15,R17
    016C 8B20      STD	Z+16,R18
    016D 8B31      STD	Z+17,R19
    016E 94A3      INC	R10
    016F 14AC      CP	R10,R12
    0170 F408      BCC	0x0172
    0171 CFC2      RJMP	0x0134
(0114) 		}
(0115) 		//输入灭零程序
(0116) 		if(ypos==1)
    0172 858A      LDD	R24,Y+10
    0173 3081      CPI	R24,1
    0174 F429      BNE	0x017A
(0117) 		{
(0118) 			ram_address = 0x80+xpos-1;
    0175 858C      LDD	R24,Y+12
    0176 5880      SUBI	R24,0x80
    0177 5081      SUBI	R24,1
    0178 2EE8      MOV	R14,R24
(0119) 		}
    0179 C007      RJMP	0x0181
(0120) 		else if(ypos==2)
    017A 858A      LDD	R24,Y+10
    017B 3082      CPI	R24,2
    017C F421      BNE	0x0181
(0121) 		{
(0122) 			ram_address = 0x90+xpos-1;
    017D 858C      LDD	R24,Y+12
    017E 5780      SUBI	R24,0x70
    017F 5081      SUBI	R24,1
    0180 2EE8      MOV	R14,R24
(0123) 		}
(0124) 		Lcd_Write(0xf8,ram_address);
    0181 2D2E      MOV	R18,R14
    0182 EF08      LDI	R16,0xF8
    0183 D033      RCALL	_Lcd_Write
(0125) 		pointer = lcd_buf;
    0184 E18A      LDI	R24,0x1A
    0185 E091      LDI	R25,1
    0186 93900119  STS	pointer+1,R25
    0188 93800118  STS	pointer,R24
(0126) 		for(i=0;i<num;i++)
    018A 24AA      CLR	R10
    018B C011      RJMP	0x019D
(0127) 		{
(0128) 			Lcd_Write(0xfa,*pointer);	
    018C 91E00118  LDS	R30,pointer
    018E 91F00119  LDS	R31,pointer+1
    0190 8120      LDD	R18,Z+0
    0191 EF0A      LDI	R16,0xFA
    0192 D024      RCALL	_Lcd_Write
(0129) 			pointer++;
    0193 91800118  LDS	R24,pointer
    0195 91900119  LDS	R25,pointer+1
    0197 9601      ADIW	R24,1
    0198 93900119  STS	pointer+1,R25
    019A 93800118  STS	pointer,R24
    019C 94A3      INC	R10
    019D 14AC      CP	R10,R12
    019E F368      BCS	0x018C
(0130) 		}
(0131) 	}	
    019F D0C7      RCALL	pop_gset5
    01A0 9624      ADIW	R28,4
    01A1 9508      RET
(0132) }
(0133) 
(0134) 
(0135) void Lcd_Reset(void)
(0136) {
(0137) 	LCD_CS_H;//片选置高
_Lcd_Reset:
    01A2 9A5A      SBI	0x0B,2
(0138) 	Delay_Ms(1);//等待内部复位
    01A3 E001      LDI	R16,1
    01A4 E010      LDI	R17,0
    01A5 DEC0      RCALL	_Delay_Ms
(0139) 	Lcd_Write(0xf8,0x30);//使用基本指令集
    01A6 E320      LDI	R18,0x30
    01A7 EF08      LDI	R16,0xF8
    01A8 D00E      RCALL	_Lcd_Write
(0140) 	Lcd_Write(0xf8,0x0c);//整体显示on
    01A9 E02C      LDI	R18,0xC
    01AA EF08      LDI	R16,0xF8
    01AB D00B      RCALL	_Lcd_Write
(0141) 	Lcd_Write(0xf8,0x01);//清除显示
    01AC E021      LDI	R18,1
    01AD EF08      LDI	R16,0xF8
    01AE D008      RCALL	_Lcd_Write
(0142) 	Delay_Ms(5);//4.6ms
    01AF E005      LDI	R16,5
    01B0 E010      LDI	R17,0
    01B1 DEB4      RCALL	_Delay_Ms
(0143) 	Lcd_Write(0xf8,0x06);//显示右移
    01B2 E026      LDI	R18,6
    01B3 EF08      LDI	R16,0xF8
    01B4 D002      RCALL	_Lcd_Write
(0144) 	LCD_CS_L;//片选置低
    01B5 985A      CBI	0x0B,2
    01B6 9508      RET
_Lcd_Write:
  com                  --> R20
  start                --> R22
    01B7 D0B7      RCALL	push_gset2
    01B8 2F42      MOV	R20,R18
    01B9 2F60      MOV	R22,R16
(0145) }
(0146) 
(0147) void Lcd_Write(Byte start,Byte com)//start :起始字节com:命令/数据 						  
(0148) {
(0149) 	LCD_CS_H;//片选置高
    01BA 9A5A      SBI	0x0B,2
(0150) 	Send_8bit(start);
    01BB 2F06      MOV	R16,R22
    01BC 2711      CLR	R17
    01BD D01B      RCALL	_Send_8bit
(0151) 	Delay_Us(100);//72us
    01BE E604      LDI	R16,0x64
    01BF DE92      RCALL	_Delay_Us
(0152) 		//将data变为datal 0000 datah 0000
(0153) 	Send_8bit(com&0xf0);
    01C0 2F04      MOV	R16,R20
    01C1 2711      CLR	R17
    01C2 7F00      ANDI	R16,0xF0
    01C3 7010      ANDI	R17,0
    01C4 D014      RCALL	_Send_8bit
(0154) 	Delay_Us(100);//72us	
    01C5 E604      LDI	R16,0x64
    01C6 DE8B      RCALL	_Delay_Us
(0155) 	Send_8bit((com&0x0f)<<4);
    01C7 2F04      MOV	R16,R20
    01C8 2711      CLR	R17
    01C9 700F      ANDI	R16,0xF
    01CA 7010      ANDI	R17,0
    01CB 0F00      LSL	R16
    01CC 1F11      ROL	R17
    01CD 0F00      LSL	R16
    01CE 1F11      ROL	R17
    01CF 0F00      LSL	R16
    01D0 1F11      ROL	R17
    01D1 0F00      LSL	R16
    01D2 1F11      ROL	R17
    01D3 D005      RCALL	_Send_8bit
(0156) 	Delay_Us(100);//72us
    01D4 E604      LDI	R16,0x64
    01D5 DE7C      RCALL	_Delay_Us
(0157) 	LCD_CS_L;//片选置低
    01D6 985A      CBI	0x0B,2
    01D7 D08D      RCALL	pop_gset2
    01D8 9508      RET
_Send_8bit:
  i                    --> R20
  x                    --> R22
    01D9 D095      RCALL	push_gset2
    01DA 01B8      MOVW	R22,R16
(0158) }
(0159) 	
(0160) void Send_8bit(Word x)
(0161) {
(0162) 	Byte i;
(0163) 	for(i=0;i<8;i++)
    01DB 2744      CLR	R20
    01DC C00E      RJMP	0x01EB
(0164) 	{
(0165) 		if(x&0x80)//数据线发送数据
    01DD FF67      SBRS	R22,7
    01DE C002      RJMP	0x01E1
(0166) 		{
(0167) 			LCD_STD_H;
    01DF 9A59      SBI	0x0B,1
(0168) 		}
    01E0 C001      RJMP	0x01E2
(0169) 		else
(0170) 		{
(0171) 			LCD_STD_L;
    01E1 9859      CBI	0x0B,1
(0172) 		}
(0173) 		LCD_SCLK_L;//产生同步时钟
    01E2 9858      CBI	0x0B,0
(0174) 		Delay_Us(2);
    01E3 E002      LDI	R16,2
    01E4 DE6D      RCALL	_Delay_Us
(0175) 		LCD_SCLK_H;
    01E5 9A58      SBI	0x0B,0
(0176) 		Delay_Us(2);
    01E6 E002      LDI	R16,2
    01E7 DE6A      RCALL	_Delay_Us
(0177) 		x <<= 1;
FILE: <library>
    01E8 0F66      LSL	R22
    01E9 1F77      ROL	R23
    01EA 9543      INC	R20
    01EB 3048      CPI	R20,0x8
    01EC F380      BCS	0x01DD
    01ED D077      RCALL	pop_gset2
    01EE 9508      RET
push_arg4:
    01EF 933A      ST	R19,-Y
    01F0 932A      ST	R18,-Y
push_arg2:
    01F1 931A      ST	R17,-Y
    01F2 930A      ST	R16,-Y
    01F3 9508      RET
div32u:
    01F4 94E8      BCLR	6
    01F5 C001      RJMP	0x01F7
mod32u:
    01F6 9468      BSET	6
    01F7 D02F      RCALL	long_div_prolog
    01F8 24CC      CLR	R12
    01F9 C008      RJMP	0x0202
div32s:
    01FA 94E8      BCLR	6
    01FB C001      RJMP	0x01FD
mod32s:
    01FC 9468      BSET	6
    01FD D029      RCALL	long_div_prolog
    01FE FD37      SBRC	R19,7
    01FF D053      RCALL	neg_R16_R19
    0200 FDB7      SBRC	R27,7
    0201 D05A      RCALL	neg_R24_R27
    0202 2477      CLR	R7
    0203 2488      CLR	R8
    0204 2499      CLR	R9
    0205 24AA      CLR	R10
    0206 24BB      CLR	R11
    0207 D041      RCALL	tst_R16_R19
    0208 F0C1      BEQ	0x0221
    0209 D044      RCALL	tst_R24_R27
    020A F0B1      BEQ	0x0221
    020B E2E8      LDI	R30,0x28
    020C 0F00      LSL	R16
    020D 1F11      ROL	R17
    020E 1F22      ROL	R18
    020F 1F33      ROL	R19
    0210 1C77      ROL	R7
    0211 1C88      ROL	R8
    0212 1C99      ROL	R9
    0213 1CAA      ROL	R10
    0214 1CBB      ROL	R11
    0215 1688      CP	R8,R24
    0216 0699      CPC	R9,R25
    0217 06AA      CPC	R10,R26
    0218 06BB      CPC	R11,R27
    0219 F028      BCS	0x021F
    021A 1A88      SUB	R8,R24
    021B 0A99      SBC	R9,R25
    021C 0AAA      SBC	R10,R26
    021D 0ABB      SBC	R11,R27
    021E 9503      INC	R16
    021F 95EA      DEC	R30
    0220 F759      BNE	0x020C
    0221 F426      BRTC	0x0226
    0222 2D08      MOV	R16,R8
    0223 2D19      MOV	R17,R9
    0224 2D2A      MOV	R18,R10
    0225 2D3B      MOV	R19,R11
    0226 C013      RJMP	long_div_epilog
long_div_prolog:
    0227 927A      ST	R7,-Y
    0228 928A      ST	R8,-Y
    0229 929A      ST	R9,-Y
    022A 92AA      ST	R10,-Y
    022B 92BA      ST	R11,-Y
    022C 92CA      ST	R12,-Y
    022D 93EA      ST	R30,-Y
    022E 938A      ST	R24,-Y
    022F 939A      ST	R25,-Y
    0230 93AA      ST	R26,-Y
    0231 93BA      ST	R27,-Y
    0232 858B      LDD	R24,Y+11
    0233 859C      LDD	R25,Y+12
    0234 85AD      LDD	R26,Y+13
    0235 85BE      LDD	R27,Y+14
    0236 2EC3      MOV	R12,R19
    0237 F00E      BRTS	0x0239
    0238 26CB      EOR	R12,R27
    0239 9508      RET
long_div_epilog:
    023A FCC7      SBRC	R12,7
    023B D017      RCALL	neg_R16_R19
    023C 91B9      LD	R27,Y+
    023D 91A9      LD	R26,Y+
    023E 9199      LD	R25,Y+
    023F 9189      LD	R24,Y+
    0240 91E9      LD	R30,Y+
    0241 90C9      LD	R12,Y+
    0242 90B9      LD	R11,Y+
    0243 90A9      LD	R10,Y+
    0244 9099      LD	R9,Y+
    0245 9089      LD	R8,Y+
    0246 9079      LD	R7,Y+
    0247 9624      ADIW	R28,4
    0248 9508      RET
tst_R16_R19:
    0249 2FE0      MOV	R30,R16
    024A 2BE1      OR	R30,R17
    024B 2BE2      OR	R30,R18
    024C 2BE3      OR	R30,R19
    024D 9508      RET
tst_R24_R27:
    024E 2FE8      MOV	R30,R24
    024F 2BE9      OR	R30,R25
    0250 2BEA      OR	R30,R26
    0251 2BEB      OR	R30,R27
    0252 9508      RET
neg_R16_R19:
    0253 9500      COM	R16
    0254 9510      COM	R17
    0255 9520      COM	R18
    0256 9530      COM	R19
    0257 5F0F      SUBI	R16,0xFF
    0258 4F1F      SBCI	R17,0xFF
    0259 4F2F      SBCI	R18,0xFF
    025A 4F3F      SBCI	R19,0xFF
    025B 9508      RET
neg_R24_R27:
    025C 9580      COM	R24
    025D 9590      COM	R25
    025E 95A0      COM	R26
    025F 95B0      COM	R27
    0260 5F8F      SUBI	R24,0xFF
    0261 4F9F      SBCI	R25,0xFF
    0262 4FAF      SBCI	R26,0xFF
    0263 4FBF      SBCI	R27,0xFF
    0264 9508      RET
pop_gset2:
    0265 E0E2      LDI	R30,2
    0266 C00E      RJMP	pop
pop_gset5:
    0267 27EE      CLR	R30
    0268 C00C      RJMP	pop
push_gset5:
    0269 92FA      ST	R15,-Y
    026A 92EA      ST	R14,-Y
push_gset4:
    026B 92DA      ST	R13,-Y
    026C 92CA      ST	R12,-Y
push_gset3:
    026D 92BA      ST	R11,-Y
    026E 92AA      ST	R10,-Y
push_gset2:
    026F 937A      ST	R23,-Y
    0270 936A      ST	R22,-Y
push_gset1:
    0271 935A      ST	R21,-Y
    0272 934A      ST	R20,-Y
    0273 9508      RET
pop_gset1:
    0274 E0E1      LDI	R30,1
pop:
    0275 9149      LD	R20,Y+
    0276 9159      LD	R21,Y+
    0277 FDE0      SBRC	R30,0
    0278 9508      RET
    0279 9169      LD	R22,Y+
    027A 9179      LD	R23,Y+
    027B FDE1      SBRC	R30,1
    027C 9508      RET
    027D 90A9      LD	R10,Y+
    027E 90B9      LD	R11,Y+
    027F FDE2      SBRC	R30,2
    0280 9508      RET
    0281 90C9      LD	R12,Y+
    0282 90D9      LD	R13,Y+
    0283 FDE3      SBRC	R30,3
    0284 9508      RET
    0285 90E9      LD	R14,Y+
    0286 90F9      LD	R15,Y+
    0287 9508      RET

⌨️ 快捷键说明

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