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

📄 lcd-m8.lst

📁 AVR ICC基于AVR MEGA8单片机的LCD程序!
💻 LST
📖 第 1 页 / 共 4 页
字号:
  i                    --> R20
  j                    --> R22
  ASD                  --> Y+4
  y                    --> R18
  x                    --> R16
    02DC D221      RCALL	push_gset2
(0214) }
(0215) 
(0216) 
(0217) 
(0218) 		
(0219) 
(0220) 
(0221) uchar disen(uchar x,uchar y,uchar ASD)
(0222)     {
(0223) 	uchar i,j;
(0224)     ASD=ASD-0x20; 
    02DD 818C      LDD	R24,Y+4
    02DE 5280      SUBI	R24,0x20
    02DF 838C      STD	Y+4,R24
(0225)     for(i=0;i<2;i++) 
    02E0 2744      CLR	R20
    02E1 C006      RJMP	0x02E8
(0226) 	   for(j=0;j<8;j++)
    02E2 2766      CLR	R22
    02E3 C001      RJMP	0x02E5
    02E4 9563      INC	R22
    02E5 3068      CPI	R22,0x8
    02E6 F3E8      BCS	0x02E4
    02E7 9543      INC	R20
    02E8 3042      CPI	R20,2
    02E9 F3C0      BCS	0x02E2
(0227) 	    {
(0228) //	     w8(x+j,y+i,ASCII[(unit)ASD*2+i][j]); 
(0229)         } 
(0230) 	return x+8; 
    02EA 5F08      SUBI	R16,0xF8
    02EB D204      RCALL	pop_gset2
    02EC 9508      RET
_disen_row:
  n                    --> R20
  k                    --> R22
  ASD                  --> R10
  y                    --> R12
  x                    --> R14
    02ED D20A      RCALL	push_gset5
    02EE 2EC2      MOV	R12,R18
    02EF 2EE0      MOV	R14,R16
    02F0 9721      SBIW	R28,1
    02F1 84AB      LDD	R10,Y+11
    02F2 84BC      LDD	R11,Y+12
(0231)     }
(0232) 
(0233) uchar disen_row(uchar x,uchar y,uchar *ASD)  //显示ASCLL字符串
(0234) {
(0235) uchar k=0,n;
    02F3 2766      CLR	R22
    02F4 C00E      RJMP	0x0303
(0236)  while(*(ASD+k)!=0x00)
(0237)   {  
(0238)   n=disen(x+8*k,y,ASD[k]);
    02F5 2FE6      MOV	R30,R22
    02F6 27FF      CLR	R31
    02F7 0DEA      ADD	R30,R10
    02F8 1DFB      ADC	R31,R11
    02F9 8020      LDD	R2,Z+0
    02FA 8228      STD	Y+0,R2
    02FB 2D2C      MOV	R18,R12
    02FC E088      LDI	R24,0x8
    02FD 9F86      MUL	R24,R22
    02FE 2D0E      MOV	R16,R14
    02FF 0D00      ADD	R16,R0
    0300 DFDB      RCALL	_disen
    0301 2F40      MOV	R20,R16
(0239) 	k++;
    0302 9563      INC	R22
    0303 2FE6      MOV	R30,R22
    0304 27FF      CLR	R31
    0305 0DEA      ADD	R30,R10
    0306 1DFB      ADC	R31,R11
    0307 8020      LDD	R2,Z+0
    0308 2022      TST	R2
    0309 F759      BNE	0x02F5
(0240)   }
(0241)   return n;
    030A 2F04      MOV	R16,R20
    030B 9621      ADIW	R28,1
    030C D1E9      RCALL	pop_gset5
    030D 9508      RET
_disnum:
  i                    --> R20
  j                    --> R22
  ASD                  --> Y+4
  y                    --> R18
  x                    --> R16
    030E D1EF      RCALL	push_gset2
(0242) }	
(0243) 
(0244) uchar disnum(uchar x,uchar y,uchar ASD)
(0245)     {
(0246) 	uchar i,j;
(0247)     ASD=ASD+0x10; 
    030F 818C      LDD	R24,Y+4
    0310 5F80      SUBI	R24,0xF0
    0311 838C      STD	Y+4,R24
(0248)     for(i=0;i<2;i++) 
    0312 2744      CLR	R20
    0313 C006      RJMP	0x031A
(0249) 	   for(j=0;j<8;j++)
    0314 2766      CLR	R22
    0315 C001      RJMP	0x0317
    0316 9563      INC	R22
    0317 3068      CPI	R22,0x8
    0318 F3E8      BCS	0x0316
    0319 9543      INC	R20
    031A 3042      CPI	R20,2
    031B F3C0      BCS	0x0314
(0250) 	    {
(0251) //	     w8(x+j,y+i,ASCII[ASD*2+i][j]); 
(0252)         } 
(0253) 	return x+8; 
    031C 5F08      SUBI	R16,0xF8
    031D D1D2      RCALL	pop_gset2
    031E 9508      RET
_dis5:
  ent                  --> R20
  n                    --> R22
  lock                 --> R10
  num                  --> Y+1
  i                    --> R12
  dat                  --> R14
  y                    --> Y+18
  x                    --> Y+16
    031F D197      RCALL	push_arg4
    0320 D1D7      RCALL	push_gset5
    0321 9726      SBIW	R28,6
    0322 88EC      LDD	R14,Y+20
    0323 88FD      LDD	R15,Y+21
(0254)     }
(0255) 
(0256) 
(0257) uchar dis5(uchar x,uchar y,unit dat)    
(0258) {
(0259) uchar num[5]={10};
    0324 EB81      LDI	R24,0xB1
    0325 E091      LDI	R25,1
    0326 01FE      MOVW	R30,R28
    0327 9631      ADIW	R30,1
    0328 E005      LDI	R16,5
    0329 E010      LDI	R17,0
    032A 93FA      ST	R31,-Y
    032B 93EA      ST	R30,-Y
    032C 939A      ST	R25,-Y
    032D 938A      ST	R24,-Y
    032E D1EE      RCALL	asgncblk
(0260) uchar i,n=0,lock=0,ent;
    032F 2766      CLR	R22
    0330 24AA      CLR	R10
(0261) for(i=0;i<5;i++)
    0331 24CC      CLR	R12
    0332 C011      RJMP	0x0344
(0262)  {
(0263)  num[i]=dat%10;
    0333 E02A      LDI	R18,0xA
    0334 E030      LDI	R19,0
    0335 0187      MOVW	R16,R14
    0336 D185      RCALL	mod16u
    0337 01CE      MOVW	R24,R28
    0338 9601      ADIW	R24,1
    0339 2DEC      MOV	R30,R12
    033A 27FF      CLR	R31
    033B 0FE8      ADD	R30,R24
    033C 1FF9      ADC	R31,R25
    033D 8300      STD	Z+0,R16
(0264)  dat/=10;
    033E E02A      LDI	R18,0xA
    033F E030      LDI	R19,0
    0340 0187      MOVW	R16,R14
    0341 D17C      RCALL	div16u
    0342 0178      MOVW	R14,R16
    0343 94C3      INC	R12
    0344 2D8C      MOV	R24,R12
    0345 3085      CPI	R24,5
    0346 F360      BCS	0x0333
(0265)  }
(0266) for(i=5;i>1;i--)
    0347 E085      LDI	R24,5
    0348 2EC8      MOV	R12,R24
    0349 C026      RJMP	0x0370
(0267)  {
(0268)  if((num[i-1]>0&&num[i-1]<10)||(lock==1)) 
    034A 01CE      MOVW	R24,R28
    034B 2DEC      MOV	R30,R12
    034C 27FF      CLR	R31
    034D 0FE8      ADD	R30,R24
    034E 1FF9      ADC	R31,R25
    034F 8020      LDD	R2,Z+0
    0350 2433      CLR	R3
    0351 1432      CP	R3,R2
    0352 F440      BCC	0x035B
    0353 01CE      MOVW	R24,R28
    0354 2DEC      MOV	R30,R12
    0355 27FF      CLR	R31
    0356 0FE8      ADD	R30,R24
    0357 1FF9      ADC	R31,R25
    0358 8180      LDD	R24,Z+0
    0359 308A      CPI	R24,0xA
    035A F018      BCS	0x035E
    035B 2D8A      MOV	R24,R10
    035C 3081      CPI	R24,1
    035D F489      BNE	0x036F
(0269)   {
(0270)    lock=1;
    035E 24AA      CLR	R10
    035F 94A3      INC	R10
(0271)    ent=disnum(x+n*8,y,num[i-1]);
    0360 01CE      MOVW	R24,R28
    0361 2DEC      MOV	R30,R12
    0362 27FF      CLR	R31
    0363 0FE8      ADD	R30,R24
    0364 1FF9      ADC	R31,R25
    0365 8020      LDD	R2,Z+0
    0366 8228      STD	Y+0,R2
    0367 892A      LDD	R18,Y+18
    0368 E088      LDI	R24,0x8
    0369 9F86      MUL	R24,R22
    036A 8908      LDD	R16,Y+16
    036B 0D00      ADD	R16,R0
    036C DFA1      RCALL	_disnum
    036D 2F40      MOV	R20,R16
(0272)    n++;   
    036E 9563      INC	R22
    036F 94CA      DEC	R12
    0370 E081      LDI	R24,1
    0371 158C      CP	R24,R12
    0372 F2B8      BCS	0x034A
(0273)   }
(0274)  }
(0275) ent=disnum(x+n*8,y,num[0]); 
    0373 8029      LDD	R2,Y+1
    0374 8228      STD	Y+0,R2
    0375 892A      LDD	R18,Y+18
    0376 E088      LDI	R24,0x8
    0377 9F86      MUL	R24,R22
    0378 8908      LDD	R16,Y+16
    0379 0D00      ADD	R16,R0
    037A DF93      RCALL	_disnum
    037B 2F40      MOV	R20,R16
(0276)  return ent;
    037C 9626      ADIW	R28,6
    037D D178      RCALL	pop_gset5
    037E 9624      ADIW	R28,4
    037F 9508      RET
_dis_hz:
  t                    --> Y+1
  i                    --> R20
  hz                   --> R22
  y                    --> R10
  x                    --> R12
    0380 D179      RCALL	push_gset4
    0381 2EA2      MOV	R10,R18
    0382 2EC0      MOV	R12,R16
    0383 97A1      SBIW	R28,0x21
    0384 A569      LDD	R22,Y+41
    0385 A57A      LDD	R23,Y+42
(0277) }
(0278) 
(0279) 	
(0280) uchar dis_hz(uchar x,uchar y,const uchar  *hz)
(0281)    {
(0282)    uchar i;
(0283)    uchar t[32];
(0284)    for(i=0;i<32;i++)
    0386 2744      CLR	R20
    0387 C00D      RJMP	0x0395
(0285)     t[i]=hz[i];
    0388 2FE4      MOV	R30,R20
    0389 27FF      CLR	R31
    038A 0FE6      ADD	R30,R22
    038B 1FF7      ADC	R31,R23
    038C 91E4      LPM	R30,0(Z)
    038D 01CE      MOVW	R24,R28
    038E 9601      ADIW	R24,1
    038F 2FA4      MOV	R26,R20
    0390 27BB      CLR	R27
    0391 0FA8      ADD	R26,R24
    0392 1FB9      ADC	R27,R25
    0393 93EC      ST	R30,0(X)
    0394 9543      INC	R20
    0395 3240      CPI	R20,0x20
    0396 F388      BCS	0x0388
(0286)    for(i=0;i<16;i++)
    0397 2744      CLR	R20
    0398 C00D      RJMP	0x03A6
(0287) 	w8(i+x,y,t[i]);
    0399 01CE      MOVW	R24,R28
    039A 9601      ADIW	R24,1
    039B 2FE4      MOV	R30,R20
    039C 27FF      CLR	R31
    039D 0FE8      ADD	R30,R24
    039E 1FF9      ADC	R31,R25
    039F 8020      LDD	R2,Z+0
    03A0 8228      STD	Y+0,R2
    03A1 2D2A      MOV	R18,R10
    03A2 2F04      MOV	R16,R20
    03A3 0D0C      ADD	R16,R12
    03A4 DDE9      RCALL	_w8
    03A5 9543      INC	R20
    03A6 3140      CPI	R20,0x10
    03A7 F388      BCS	0x0399
(0288)    for(i=0;i<16;i++)
    03A8 2744      CLR	R20
    03A9 C00E      RJMP	0x03B8
(0289) 	w8(i+x,y+1,t[i+16]);
    03AA 01CE      MOVW	R24,R28
    03AB 9641      ADIW	R24,0x11
    03AC 2FE4      MOV	R30,R20
    03AD 27FF      CLR	R31
    03AE 0FE8      ADD	R30,R24
    03AF 1FF9      ADC	R31,R25
    03B0 8020      LDD	R2,Z+0
    03B1 8228      STD	Y+0,R2
    03B2 2D2A      MOV	R18,R10
    03B3 5F2F      SUBI	R18,0xFF
    03B4 2F04      MOV	R16,R20
    03B5 0D0C      ADD	R16,R12
    03B6 DDD7      RCALL	_w8
    03B7 9543      INC	R20
    03B8 3140      CPI	R20,0x10
    03B9 F380      BCS	0x03AA
(0290)    return x+16; 
    03BA 2D0C      MOV	R16,R12
    03BB 5F00      SUBI	R16,0xF0
    03BC 96A1      ADIW	R28,0x21
    03BD D136      RCALL	pop_gset4
    03BE 9508      RET
_dis_hz_row:
  j                    --> Y+3
  n                    --> R20
  i                    --> R22
  hz                   --> R10
  row                  --> R12
  x                    --> R14
    03BF D138      RCALL	push_gset5
    03C0 2EC2      MOV	R12,R18
    03C1 2EE0      MOV	R14,R16
    03C2 9722      SBIW	R28,2
    03C3 84AC      LDD	R10,Y+12
    03C4 84BD      LDD	R11,Y+13
(0291)    }
(0292)    
(0293) //*显示一行汉字,从y开始显示
(0294) uchar dis_hz_row(uchar x,uchar row,const uchar **hz)
(0295) {
(0296) 	uchar i,j,n=x;
    03C5 2D4E      MOV	R20,R14
(0297) 	for(i=0;hz[i]!=NULL;i++)
    03C6 2766      CLR	R22
    03C7 C011      RJMP	0x03D9
(0298) 	{
(0299) 		dis_hz(i*16+x,row,hz[i]);
    03C8 E082      LDI	R24,2
    03C9 9F86      MUL	R24,R22
    03CA 01F0      MOVW	R30,R0
    03CB 0DEA      ADD	R30,R10
    03CC 1DFB      ADC	R31,R11
    03CD 8020      LDD	R2,Z+0
    03CE 8031      LDD	R3,Z+1
    03CF 8239      STD	Y+1,R3
    03D0 8228      STD	Y+0,R2
    03D1 2D2C      MOV	R18,R12
    03D2 E180      LDI	R24,0x10
    03D3 9F86      MUL	R24,R22
    03D4 2D00      MOV	R16,R0
    03D5 0D0E      ADD	R16,R14
    03D6 DFA9      RCALL	_dis_hz
(0300) 		n+=16;
    03D7 5F40      SUBI	R20,0xF0
    03D8 9563      INC	R22
    03D9 E082      LDI	R24,2
    03DA 9F86      MUL	R24,R22
    03DB 01F0      MOVW	R30,R0
    03DC 0DEA      ADD	R30,R10
    03DD 1DFB      ADC	R31,R11
    03DE 8020      LDD	R2,Z+0
    03DF 8031      LDD	R3,Z+1
    03E0 2022      TST	R2
    03E1 F731      BNE	0x03C8
    03E2 2033      TST	R3
    03E3 F721      BNE	0x03C8
(0301) 	}
(0302) 	return n;
    03E4 2F04      MOV	R16,R20
    03E5 9622      ADIW	R28,2
    03E6 D10F      RCALL	pop_gset5
    03E7 9508      RET
_DRAW_DOT:
  y_date               --> R20
  y                    --> R20
  x                    --> R22
    03E8 D115      RCALL	push_gset2
    03E9 2F42      MOV	R20,R18
    03EA 2F60      MOV	R22,R16
    03EB 9721      SBIW	R28,1
(0303) }
(0304) 
(0305) 
(0306) 
(0307) //*画点函数
(0308) void DRAW_DOT(uchar x,uchar y)   //*128*64*
(0309) {
(0310)   uchar y_date;
(0311)   LCD_Y=y/8;y_date=y%8;y_date=0x01<<y_date;
    03EC 2E24      MOV	R2,R20
    03ED 9426      LSR	R2
    03EE 9426      LSR	R2
    03EF 9426      LSR	R2
    03F0 92200116  STS	LCD_Y,R2
    03F2 E018      LDI	R17,0x8
    03F3 2F04      MOV	R16,R20
    03F4 D0E3      RCALL	mod8u
    03F5 2F40      MOV	R20,R16
    03F6 E001      LDI	R16,1
    03F7 2F14      MOV	R17,R20
    03F8 D11E      RCALL	lsl8
    03F9 2F40      MOV	R20,R16
(0312)   LCD_X=x;
    03FA 93600117  STS	LCD_X,R22
(0313)   w8(LCD_X,LCD_Y,y_date);  
    03FC 8348      STD	Y+0,R20
    03FD 91200116  LDS	R18,LCD_Y
    03FF 2F06      MOV	R16,R22
    0400 DD8D      RCALL	_w8
    0401 9621      ADIW	R28,1
    0402 D0ED      RCALL	pop_gset2
    0403 9508      RET
_read_x:
  c                    --> R20
  line                 --> R22
  row                  --> R20
    0404 D0F9      RCALL	push_gset2
    0405 2F62      MOV	R22,R18
    0406 2F40      MOV	R20,R16
(0314) }
(0315) 
(0316) 
(0317) uchar read_x(uchar row, uchar line)//*读制定行,列的数据
(0318) { 	  
(0319) 	  uchar c;
(0320) 	  sety(line);
    0407 2F06      MOV	R16,R22
    0408 DD6D      RCALL	_sety
(0321) 	  setx(row);
    0409 2F04      MOV	R16,R20

⌨️ 快捷键说明

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