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

📄 lcd-m8.lst

📁 AVR ICC基于AVR MEGA8单片机的LCD程序!
💻 LST
📖 第 1 页 / 共 4 页
字号:
    019B 9721      SBIW	R28,1
(0113) }
(0114) 
(0115) void clrlcd(void)
(0116) {
(0117) uchar i,j;
(0118) for(j=0;j<8;j++)
    019C 2744      CLR	R20
    019D C00B      RJMP	0x01A9
(0119)  for(i=0;i<128;i++)
    019E 2766      CLR	R22
    019F C006      RJMP	0x01A6
(0120)  {
(0121)  w8(i,j,0x0);
    01A0 2422      CLR	R2
    01A1 8228      STD	Y+0,R2
    01A2 2F24      MOV	R18,R20
    01A3 2F06      MOV	R16,R22
    01A4 DFE9      RCALL	_w8
    01A5 9563      INC	R22
    01A6 3860      CPI	R22,0x80
    01A7 F3C0      BCS	0x01A0
    01A8 9543      INC	R20
    01A9 3048      CPI	R20,0x8
    01AA F398      BCS	0x019E
    01AB 9621      ADIW	R28,1
    01AC D343      RCALL	pop_gset2
    01AD 9508      RET
_clr_row:
  i                    --> R20
  b                    --> R22
  a                    --> R12
  row                  --> R10
    01AE D34B      RCALL	push_gset4
    01AF 2EC2      MOV	R12,R18
    01B0 2EA0      MOV	R10,R16
    01B1 9721      SBIW	R28,1
    01B2 8569      LDD	R22,Y+9
(0122)  }
(0123) }
(0124) 
(0125) 
(0126) void clr_row(uchar row,uchar a,uchar b)
(0127) {
(0128) uchar i;
(0129) CS1_1,CS2_1;
    01B3 9A5D      SBI	0x0B,5
    01B4 9A5E      SBI	0x0B,6
(0130) for(i=a;i<b;i++)
    01B5 2D4C      MOV	R20,R12
    01B6 C006      RJMP	0x01BD
(0131)  w8(i,row,0);
    01B7 2422      CLR	R2
    01B8 8228      STD	Y+0,R2
    01B9 2D2A      MOV	R18,R10
    01BA 2F04      MOV	R16,R20
    01BB DFD2      RCALL	_w8
    01BC 9543      INC	R20
    01BD 1746      CP	R20,R22
    01BE F3C0      BCS	0x01B7
    01BF 9621      ADIW	R28,1
    01C0 D333      RCALL	pop_gset4
    01C1 9508      RET
_dis_en:
  p                    --> R20
  i                    --> R22
  c                    --> R22
  y                    --> R10
  x                    --> R12
    01C2 D337      RCALL	push_gset4
    01C3 2EA2      MOV	R10,R18
    01C4 2EC0      MOV	R12,R16
    01C5 9721      SBIW	R28,1
    01C6 8569      LDD	R22,Y+9
(0132) }
(0133) 
(0134) uchar dis_en(uchar x,uchar y,uchar c)
(0135) {
(0136) uchar i;
(0137) 	const uchar *p;
(0138) 	//*取指针
(0139) 	if(c>='A'&&c<='Z')
    01C7 3461      CPI	R22,0x41
    01C8 F058      BCS	0x01D4
    01C9 E58A      LDI	R24,0x5A
    01CA 1786      CP	R24,R22
    01CB F040      BCS	0x01D4
(0140) 	{
(0141) 		p=&A_Z[(c-'A')*5];
    01CC E085      LDI	R24,5
    01CD 9F86      MUL	R24,R22
    01CE 01A0      MOVW	R20,R0
    01CF EE8F      LDI	R24,0xEF
    01D0 EF9E      LDI	R25,0xFE
    01D1 0F48      ADD	R20,R24
    01D2 1F59      ADC	R21,R25
(0142) 	}
    01D3 C052      RJMP	0x0226
(0143) 	else if (c>='a' && c<='z')
    01D4 3661      CPI	R22,0x61
    01D5 F058      BCS	0x01E1
    01D6 E78A      LDI	R24,0x7A
    01D7 1786      CP	R24,R22
    01D8 F040      BCS	0x01E1
(0144) 	{
(0145) 		p=&a_z[(c-'a')*5];
    01D9 E085      LDI	R24,5
    01DA 9F86      MUL	R24,R22
    01DB 01A0      MOVW	R20,R0
    01DC ED81      LDI	R24,0xD1
    01DD EF9E      LDI	R25,0xFE
    01DE 0F48      ADD	R20,R24
    01DF 1F59      ADC	R21,R25
(0146) 	}
    01E0 C045      RJMP	0x0226
(0147) 	else if (c>='0' && c<='9')
    01E1 3360      CPI	R22,0x30
    01E2 F058      BCS	0x01EE
    01E3 E389      LDI	R24,0x39
    01E4 1786      CP	R24,R22
    01E5 F040      BCS	0x01EE
(0148) 	{
(0149) 		p=&num0_9[(c-'0')*5];
    01E6 E085      LDI	R24,5
    01E7 9F86      MUL	R24,R22
    01E8 01A0      MOVW	R20,R0
    01E9 E488      LDI	R24,0x48
    01EA E090      LDI	R25,0
    01EB 0F48      ADD	R20,R24
    01EC 1F59      ADC	R21,R25
(0150) 	}
    01ED C038      RJMP	0x0226
(0151) 	else
(0152) 	{
(0153) 		switch (c)
    01EE 2777      CLR	R23
    01EF 336A      CPI	R22,0x3A
    01F0 E0E0      LDI	R30,0
    01F1 077E      CPC	R23,R30
    01F2 F111      BEQ	0x0215
    01F3 E38A      LDI	R24,0x3A
    01F4 E090      LDI	R25,0
    01F5 1786      CP	R24,R22
    01F6 0797      CPC	R25,R23
    01F7 F04C      BLT	0x0201
    01F8 326E      CPI	R22,0x2E
    01F9 E0E0      LDI	R30,0
    01FA 077E      CPC	R23,R30
    01FB F0B1      BEQ	0x0212
    01FC 326F      CPI	R22,0x2F
    01FD E0E0      LDI	R30,0
    01FE 077E      CPC	R23,R30
    01FF F109      BEQ	0x0221
    0200 C023      RJMP	0x0224
    0201 356E      CPI	R22,0x5E
    0202 E0E0      LDI	R30,0
    0203 077E      CPC	R23,R30
    0204 F0B1      BEQ	0x021B
    0205 356F      CPI	R22,0x5F
    0206 E0E0      LDI	R30,0
    0207 077E      CPC	R23,R30
    0208 F079      BEQ	0x0218
    0209 356E      CPI	R22,0x5E
    020A E0E0      LDI	R30,0
    020B 077E      CPC	R23,R30
    020C F0BC      BLT	0x0224
    020D 376E      CPI	R22,0x7E
    020E E0E0      LDI	R30,0
    020F 077E      CPC	R23,R30
    0210 F069      BEQ	0x021E
    0211 C012      RJMP	0x0224
(0154) 		{
(0155) 			case '.':p=x_p;break;
    0212 E843      LDI	R20,0x83
    0213 E051      LDI	R21,1
    0214 C011      RJMP	0x0226
(0156) 			case ':':p=x_mh;break;
    0215 E74E      LDI	R20,0x7E
    0216 E051      LDI	R21,1
    0217 C00E      RJMP	0x0226
(0157) 			case '_':p=x_ds;break;
    0218 E749      LDI	R20,0x79
    0219 E051      LDI	R21,1
    021A C00B      RJMP	0x0226
(0158) 			case '^':p=x_shang;break;
    021B E84D      LDI	R20,0x8D
    021C E051      LDI	R21,1
    021D C008      RJMP	0x0226
(0159) 			case '~':p=x_xia;break;
    021E E848      LDI	R20,0x88
    021F E051      LDI	R21,1
    0220 C005      RJMP	0x0226
(0160) 			case '/':p=x_xg;break;
    0221 E744      LDI	R20,0x74
    0222 E051      LDI	R21,1
    0223 C002      RJMP	0x0226
(0161) 			default:p=space;break;
    0224 E64F      LDI	R20,0x6F
    0225 E051      LDI	R21,1
(0162) 		}
(0163) 	}
(0164) for(i=0;i<5;i++)
    0226 2766      CLR	R22
    0227 C00B      RJMP	0x0233
(0165) w8(x+i,y,p[i]);	
    0228 2FE6      MOV	R30,R22
    0229 27FF      CLR	R31
    022A 0FE4      ADD	R30,R20
    022B 1FF5      ADC	R31,R21
    022C 91E4      LPM	R30,0(Z)
    022D 83E8      STD	Y+0,R30
    022E 2D2A      MOV	R18,R10
    022F 2D0C      MOV	R16,R12
    0230 0F06      ADD	R16,R22
    0231 DF5C      RCALL	_w8
    0232 9563      INC	R22
    0233 3065      CPI	R22,5
    0234 F398      BCS	0x0228
(0166) return x+5;
    0235 2D0C      MOV	R16,R12
    0236 5F0B      SUBI	R16,0xFB
    0237 9621      ADIW	R28,1
    0238 D2BB      RCALL	pop_gset4
    0239 9508      RET
_dis_en_row:
  cnt                  --> R20
  i                    --> R22
  p                    --> R10
  y                    --> R12
  x                    --> R22
    023A D2BF      RCALL	push_gset4
    023B 2EC2      MOV	R12,R18
    023C 2F60      MOV	R22,R16
    023D 9721      SBIW	R28,1
    023E 84A9      LDD	R10,Y+9
    023F 84BA      LDD	R11,Y+10
(0167) }
(0168) 
(0169) 
(0170) //返回操作后的x(列)坐标值
(0171) uchar dis_en_row(uchar x,uchar y,uchar *p)
(0172) {
(0173) 	uchar i,cnt=x;
    0240 2F46      MOV	R20,R22
(0174) 	for(i=0;p[i]!=0;i++)
    0241 2766      CLR	R22
    0242 C00B      RJMP	0x024E
(0175) 	{
(0176) 		cnt=dis_en(cnt,y,p[i]);
    0243 2FE6      MOV	R30,R22
    0244 27FF      CLR	R31
    0245 0DEA      ADD	R30,R10
    0246 1DFB      ADC	R31,R11
    0247 8020      LDD	R2,Z+0
    0248 8228      STD	Y+0,R2
    0249 2D2C      MOV	R18,R12
    024A 2F04      MOV	R16,R20
    024B DF76      RCALL	_dis_en
    024C 2F40      MOV	R20,R16
    024D 9563      INC	R22
    024E 2FE6      MOV	R30,R22
    024F 27FF      CLR	R31
    0250 0DEA      ADD	R30,R10
    0251 1DFB      ADC	R31,R11
    0252 8020      LDD	R2,Z+0
    0253 2022      TST	R2
    0254 F771      BNE	0x0243
(0177) 	}
(0178) 	return cnt;
    0255 2F04      MOV	R16,R20
    0256 9621      ADIW	R28,1
    0257 D29C      RCALL	pop_gset4
    0258 9508      RET
_dis_num:
  i                    --> R20
  c                    --> R22
  y                    --> R10
  x                    --> R12
    0259 D2A0      RCALL	push_gset4
    025A 2EA2      MOV	R10,R18
    025B 2EC0      MOV	R12,R16
    025C 9721      SBIW	R28,1
    025D 8569      LDD	R22,Y+9
(0179) }
(0180) 
(0181) 
(0182) uchar dis_num(uchar x,uchar y,uchar c)
(0183) {
(0184) uchar i;
(0185)  for(i=0;i<5;i++)
    025E 2744      CLR	R20
    025F C012      RJMP	0x0272
(0186)   {
(0187)   w8(x+i,y,num0_9[(5*c)+i]);//num0_9[c*5+i]);
    0260 E085      LDI	R24,5
    0261 9F86      MUL	R24,R22
    0262 01F0      MOVW	R30,R0
    0263 2E24      MOV	R2,R20
    0264 2433      CLR	R3
    0265 0DE2      ADD	R30,R2
    0266 1DF3      ADC	R31,R3
    0267 E388      LDI	R24,0x38
    0268 E091      LDI	R25,1
    0269 0FE8      ADD	R30,R24
    026A 1FF9      ADC	R31,R25
    026B 91E4      LPM	R30,0(Z)
    026C 83E8      STD	Y+0,R30
    026D 2D2A      MOV	R18,R10
    026E 2D0C      MOV	R16,R12
    026F 0D02      ADD	R16,R2
    0270 DF1D      RCALL	_w8
    0271 9543      INC	R20
    0272 3045      CPI	R20,5
    0273 F360      BCS	0x0260
(0188)   } 
(0189)  return x+5;
    0274 2D0C      MOV	R16,R12
    0275 5F0B      SUBI	R16,0xFB
    0276 9621      ADIW	R28,1
    0277 D27C      RCALL	pop_gset4
    0278 9508      RET
_dis_5:
  ent                  --> R20
  n                    --> R22
  lock                 --> R10
  num                  --> Y+1
  i                    --> R12
  dat                  --> R14
  y                    --> Y+18
  x                    --> Y+16
    0279 D23D      RCALL	push_arg4
    027A D27D      RCALL	push_gset5
    027B 9726      SBIW	R28,6
    027C 88EC      LDD	R14,Y+20
    027D 88FD      LDD	R15,Y+21
(0190) }
(0191) 
(0192) 
(0193) uchar dis_5(uchar x,uchar y,unit dat)    
(0194) {
(0195) uchar num[5]={10};
    027E EA8C      LDI	R24,0xAC
    027F E091      LDI	R25,1
    0280 01FE      MOVW	R30,R28
    0281 9631      ADIW	R30,1
    0282 E005      LDI	R16,5
    0283 E010      LDI	R17,0
    0284 93FA      ST	R31,-Y
    0285 93EA      ST	R30,-Y
    0286 939A      ST	R25,-Y
    0287 938A      ST	R24,-Y
    0288 D294      RCALL	asgncblk
(0196) uchar i,n=0,lock=0,ent=x;
    0289 2766      CLR	R22
    028A 24AA      CLR	R10
    028B 8948      LDD	R20,Y+16
(0197) for(i=0;i<5;i++)
    028C 24CC      CLR	R12
    028D C011      RJMP	0x029F
(0198)  {
(0199)  num[i]=dat%10;
    028E E02A      LDI	R18,0xA
    028F E030      LDI	R19,0
    0290 0187      MOVW	R16,R14
    0291 D22A      RCALL	mod16u
    0292 01CE      MOVW	R24,R28
    0293 9601      ADIW	R24,1
    0294 2DEC      MOV	R30,R12
    0295 27FF      CLR	R31
    0296 0FE8      ADD	R30,R24
    0297 1FF9      ADC	R31,R25
    0298 8300      STD	Z+0,R16
(0200)  dat/=10;
    0299 E02A      LDI	R18,0xA
    029A E030      LDI	R19,0
    029B 0187      MOVW	R16,R14
    029C D221      RCALL	div16u
    029D 0178      MOVW	R14,R16
    029E 94C3      INC	R12
    029F 2D8C      MOV	R24,R12
    02A0 3085      CPI	R24,5
    02A1 F360      BCS	0x028E
(0201)  }
(0202) for(i=5;i>1;i--)
    02A2 E085      LDI	R24,5
    02A3 2EC8      MOV	R12,R24
    02A4 C026      RJMP	0x02CB
(0203)  {
(0204)  if((num[i-1]>0&&num[i-1]<10)||(lock==1)) 
    02A5 01CE      MOVW	R24,R28
    02A6 2DEC      MOV	R30,R12
    02A7 27FF      CLR	R31
    02A8 0FE8      ADD	R30,R24
    02A9 1FF9      ADC	R31,R25
    02AA 8020      LDD	R2,Z+0
    02AB 2433      CLR	R3
    02AC 1432      CP	R3,R2
    02AD F440      BCC	0x02B6
    02AE 01CE      MOVW	R24,R28
    02AF 2DEC      MOV	R30,R12
    02B0 27FF      CLR	R31
    02B1 0FE8      ADD	R30,R24
    02B2 1FF9      ADC	R31,R25
    02B3 8180      LDD	R24,Z+0
    02B4 308A      CPI	R24,0xA
    02B5 F018      BCS	0x02B9
    02B6 2D8A      MOV	R24,R10
    02B7 3081      CPI	R24,1
    02B8 F489      BNE	0x02CA
(0205)   {
(0206)    lock=1;
    02B9 24AA      CLR	R10
    02BA 94A3      INC	R10
(0207)    dis_num(x+n*5,y,num[i-1]);
    02BB 01CE      MOVW	R24,R28
    02BC 2DEC      MOV	R30,R12
    02BD 27FF      CLR	R31
    02BE 0FE8      ADD	R30,R24
    02BF 1FF9      ADC	R31,R25
    02C0 8020      LDD	R2,Z+0
    02C1 8228      STD	Y+0,R2
    02C2 892A      LDD	R18,Y+18
    02C3 E085      LDI	R24,5
    02C4 9F86      MUL	R24,R22
    02C5 8908      LDD	R16,Y+16
    02C6 0D00      ADD	R16,R0
    02C7 DF91      RCALL	_dis_num
(0208)    n++; 
    02C8 9563      INC	R22
(0209)    ent+=5;
    02C9 5F4B      SUBI	R20,0xFB
    02CA 94CA      DEC	R12
    02CB E081      LDI	R24,1
    02CC 158C      CP	R24,R12
    02CD F2B8      BCS	0x02A5
(0210)   }
(0211)  }
(0212) dis_num(x+n*5,y,num[0]);
    02CE 8029      LDD	R2,Y+1
    02CF 8228      STD	Y+0,R2
    02D0 892A      LDD	R18,Y+18
    02D1 E085      LDI	R24,5
    02D2 9F86      MUL	R24,R22
    02D3 8908      LDD	R16,Y+16
    02D4 0D00      ADD	R16,R0
    02D5 DF83      RCALL	_dis_num
(0213)  return ent+5;
    02D6 2F04      MOV	R16,R20
    02D7 5F0B      SUBI	R16,0xFB
    02D8 9626      ADIW	R28,6
    02D9 D21C      RCALL	pop_gset5
    02DA 9624      ADIW	R28,4
    02DB 9508      RET
_disen:

⌨️ 快捷键说明

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