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

📄 lcd_lat.lst

📁 ICC LCD波形显示子程序,采用MEGA128单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0388 F408      BCC	0x038A
    0389 C02A      RJMP	0x03B4
(0142)         { 
(0143) 			
(0144) 		   LCD_X=X_Position;
    038A 2CAC      MOV	R10,R12
(0145) 		   LCD_Y=Y;   
    038B 2EE2      MOV	R14,R18
(0146) 		   byte_adr=LCD_Y*16+LCD_X;
    038C E180      LDI	R24,0x10
    038D 9D8E      MUL	R24,R14
    038E 01B0      MOVW	R22,R0
    038F 2C2A      MOV	R2,R10
    0390 2433      CLR	R3
    0391 0D62      ADD	R22,R2
    0392 1D73      ADC	R23,R3
(0147) 		   
(0148) 		   if(State==0)
    0393 2066      TST	R6
    0394 F481      BNE	0x03A5
(0149) 		  {   		   
(0150) 		  data_buffer[byte_adr]&=data2[X_Temp];
    0395 E080      LDI	R24,0
    0396 E091      LDI	R25,1
    0397 011B      MOVW	R2,R22
    0398 0E28      ADD	R2,R24
    0399 1E39      ADC	R3,R25
    039A EA88      LDI	R24,0xA8
    039B E095      LDI	R25,5
    039C 01FA      MOVW	R30,R20
    039D 0FE8      ADD	R30,R24
    039E 1FF9      ADC	R31,R25
    039F 8040      LDD	R4,Z+0
    03A0 01F1      MOVW	R30,R2
    03A1 8050      LDD	R5,Z+0
    03A2 2054      AND	R5,R4
    03A3 8250      STD	Z+0,R5
(0151) 		   } 
    03A4 C00F      RJMP	0x03B4
(0152) 		   else
(0153) 		   { 
(0154) 		    data_buffer[byte_adr]|=data[X_Temp];
    03A5 E080      LDI	R24,0
    03A6 E091      LDI	R25,1
    03A7 011B      MOVW	R2,R22
    03A8 0E28      ADD	R2,R24
    03A9 1E39      ADC	R3,R25
    03AA EA80      LDI	R24,0xA0
    03AB E095      LDI	R25,5
    03AC 01FA      MOVW	R30,R20
    03AD 0FE8      ADD	R30,R24
    03AE 1FF9      ADC	R31,R25
    03AF 8040      LDD	R4,Z+0
    03B0 01F1      MOVW	R30,R2
    03B1 8050      LDD	R5,Z+0
    03B2 2854      OR	R5,R4
    03B3 8250      STD	Z+0,R5
(0155) 		    }
(0156) 						
(0157) 		  } 
    03B4 940E05F5  CALL	pop_gset5
    03B6 9508      RET
_draw_line:
  temp                 --> R20
  d_x                  --> R22
  d_y                  --> R10
  err                  --> R6
  y                    --> R14
  x                    --> R12
  y2                   --> Y+17
  x2                   --> Y+15
  y1                   --> Y+13
  x1                   --> Y+11
    03B7 940E05ED  CALL	push_arg4
    03B9 940E05F8  CALL	push_gset5
    03BB 9721      SBIW	R28,1
(0158) 		  }
(0159) 	  
(0160) void draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
(0161) {
(0162)     unsigned int x,y; 
(0163)     unsigned int d_x,d_y;     //d_x=x2-x1;d_y=y2-y1;
(0164)     int err=0;
    03BC 2466      CLR	R6
    03BD 2477      CLR	R7
(0165)     unsigned char temp=0;
    03BE 2744      CLR	R20
(0166)     if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
    03BF 8809      LDD	R0,Y+17
    03C0 881A      LDD	R1,Y+18
    03C1 850D      LDD	R16,Y+13
    03C2 851E      LDD	R17,Y+14
    03C3 1600      CP	R0,R16
    03C4 0611      CPC	R1,R17
    03C5 F478      BCC	0x03D5
    03C6 84CB      LDD	R12,Y+11
    03C7 84DC      LDD	R13,Y+12
    03C8 0178      MOVW	R14,R16
    03C9 840F      LDD	R0,Y+15
    03CA 8818      LDD	R1,Y+16
    03CB 861C      STD	Y+12,R1
    03CC 860B      STD	Y+11,R0
    03CD 8809      LDD	R0,Y+17
    03CE 881A      LDD	R1,Y+18
    03CF 861E      STD	Y+14,R1
    03D0 860D      STD	Y+13,R0
    03D1 8AD8      STD	Y+16,R13
    03D2 86CF      STD	Y+15,R12
    03D3 8AFA      STD	Y+18,R15
    03D4 8AE9      STD	Y+17,R14
(0167)     d_y=y2-y1;
    03D5 88A9      LDD	R10,Y+17
    03D6 88BA      LDD	R11,Y+18
    03D7 840D      LDD	R0,Y+13
    03D8 841E      LDD	R1,Y+14
    03D9 18A0      SUB	R10,R0
    03DA 08B1      SBC	R11,R1
(0168)     if (d_y==0)
    03DB F509      BNE	0x03FD
(0169)         {
(0170)         if(x1>x2) 
    03DC 840F      LDD	R0,Y+15
    03DD 8818      LDD	R1,Y+16
    03DE 850B      LDD	R16,Y+11
    03DF 851C      LDD	R17,Y+12
    03E0 1600      CP	R0,R16
    03E1 0611      CPC	R1,R17
    03E2 F428      BCC	0x03E8
(0171) 		{x=x1;x1=x2;x2=x;}
    03E3 0168      MOVW	R12,R16
    03E4 861C      STD	Y+12,R1
    03E5 860B      STD	Y+11,R0
    03E6 8AD8      STD	Y+16,R13
    03E7 86CF      STD	Y+15,R12
(0172)         for ( x=x1;x<=x2;x++ )  draw_point(x,y,1);
    03E8 84CB      LDD	R12,Y+11
    03E9 84DC      LDD	R13,Y+12
    03EA C00C      RJMP	0x03F7
    03EB E081      LDI	R24,1
    03EC 8388      STD	Y+0,R24
    03ED 2D2E      MOV	R18,R14
    03EE 2D0C      MOV	R16,R12
    03EF 926F      PUSH	R6
    03F0 927F      PUSH	R7
    03F1 DF7E      RCALL	_draw_point
    03F2 907F      POP	R7
    03F3 906F      POP	R6
    03F4 01C6      MOVW	R24,R12
    03F5 9601      ADIW	R24,1
    03F6 016C      MOVW	R12,R24
    03F7 840F      LDD	R0,Y+15
    03F8 8818      LDD	R1,Y+16
    03F9 140C      CP	R0,R12
    03FA 041D      CPC	R1,R13
    03FB F778      BCC	0x03EB
(0173)         }
    03FC C0FB      RJMP	0x04F8
(0174)     else
(0175)         {
(0176)     if(x2>=x1){temp=1;d_x=x2-x1;}
    03FD 840F      LDD	R0,Y+15
    03FE 8818      LDD	R1,Y+16
    03FF 850B      LDD	R16,Y+11
    0400 851C      LDD	R17,Y+12
    0401 1600      CP	R0,R16
    0402 0611      CPC	R1,R17
    0403 F030      BCS	0x040A
    0404 E041      LDI	R20,1
    0405 01B0      MOVW	R22,R0
    0406 0108      MOVW	R0,R16
    0407 1B60      SUB	R22,R16
    0408 0B71      SBC	R23,R17
    0409 C006      RJMP	0x0410
(0177) 	else d_x=x1-x2;
    040A 856B      LDD	R22,Y+11
    040B 857C      LDD	R23,Y+12
    040C 840F      LDD	R0,Y+15
    040D 8818      LDD	R1,Y+16
    040E 1960      SUB	R22,R0
    040F 0971      SBC	R23,R1
(0178)     x=x1;y=y1; draw_point(x,y,1);
    0410 84CB      LDD	R12,Y+11
    0411 84DC      LDD	R13,Y+12
    0412 84ED      LDD	R14,Y+13
    0413 84FE      LDD	R15,Y+14
    0414 E081      LDI	R24,1
    0415 8388      STD	Y+0,R24
    0416 2D2E      MOV	R18,R14
    0417 2D0C      MOV	R16,R12
    0418 926F      PUSH	R6
    0419 927F      PUSH	R7
    041A DF55      RCALL	_draw_point
    041B 907F      POP	R7
    041C 906F      POP	R6
(0179)     if(temp&&(d_y<=d_x))
    041D 2344      TST	R20
    041E F409      BNE	0x0420
    041F C037      RJMP	0x0457
    0420 156A      CP	R22,R10
    0421 057B      CPC	R23,R11
    0422 F408      BCC	0x0424
    0423 C033      RJMP	0x0457
    0424 C02C      RJMP	0x0451
(0180)         while(x!=x2)
(0181)             {if(err<0){x=x+1;err=err+(y2-y);}
    0425 01C3      MOVW	R24,R6
    0426 3080      CPI	R24,0
    0427 E0E0      LDI	R30,0
    0428 079E      CPC	R25,R30
    0429 F454      BGE	0x0434
    042A 01C6      MOVW	R24,R12
    042B 9601      ADIW	R24,1
    042C 016C      MOVW	R12,R24
    042D 8829      LDD	R2,Y+17
    042E 883A      LDD	R3,Y+18
    042F 182E      SUB	R2,R14
    0430 083F      SBC	R3,R15
    0431 0C62      ADD	R6,R2
    0432 1C73      ADC	R7,R3
    0433 C014      RJMP	0x0448
(0182)             else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);
    0434 01C6      MOVW	R24,R12
    0435 9601      ADIW	R24,1
    0436 016C      MOVW	R12,R24
    0437 01C7      MOVW	R24,R14
    0438 9601      ADIW	R24,1
    0439 017C      MOVW	R14,R24
    043A 8829      LDD	R2,Y+17
    043B 883A      LDD	R3,Y+18
    043C 1A28      SUB	R2,R24
    043D 0A39      SBC	R3,R25
    043E 0123      MOVW	R4,R6
    043F 0C42      ADD	R4,R2
    0440 1C53      ADC	R5,R3
    0441 842F      LDD	R2,Y+15
    0442 8838      LDD	R3,Y+16
    0443 182C      SUB	R2,R12
    0444 083D      SBC	R3,R13
    0445 1842      SUB	R4,R2
    0446 0853      SBC	R5,R3
    0447 0132      MOVW	R6,R4
(0183) 			  }
(0184)              draw_point(x,y,1);
    0448 E081      LDI	R24,1
    0449 8388      STD	Y+0,R24
    044A 2D2E      MOV	R18,R14
    044B 2D0C      MOV	R16,R12
    044C 926F      PUSH	R6
    044D 927F      PUSH	R7
    044E DF21      RCALL	_draw_point
    044F 907F      POP	R7
    0450 906F      POP	R6
    0451 840F      LDD	R0,Y+15
    0452 8818      LDD	R1,Y+16
    0453 14C0      CP	R12,R0
    0454 04D1      CPC	R13,R1
    0455 F679      BNE	0x0425
    0456 C0A1      RJMP	0x04F8
(0185)             }
(0186)     else if(temp&&(d_y>d_x))
    0457 2344      TST	R20
    0458 F409      BNE	0x045A
    0459 C032      RJMP	0x048C
    045A 156A      CP	R22,R10
    045B 057B      CPC	R23,R11
    045C F578      BCC	0x048C
    045D C028      RJMP	0x0486
(0187)         while(y!=y2)
(0188)             {d_x=x2-x;d_y=y2-y; 
    045E 856F      LDD	R22,Y+15
    045F 8978      LDD	R23,Y+16
    0460 196C      SUB	R22,R12
    0461 097D      SBC	R23,R13
    0462 88A9      LDD	R10,Y+17
    0463 88BA      LDD	R11,Y+18
    0464 18AE      SUB	R10,R14
    0465 08BF      SBC	R11,R15
(0189)             if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
    0466 01C3      MOVW	R24,R6
    0467 3080      CPI	R24,0
    0468 E0E0      LDI	R30,0
    0469 079E      CPC	R25,R30
    046A F46C      BGE	0x0478
    046B 01C6      MOVW	R24,R12
    046C 9601      ADIW	R24,1
    046D 016C      MOVW	R12,R24
    046E 01C7      MOVW	R24,R14
    046F 9601      ADIW	R24,1
    0470 017C      MOVW	R14,R24
    0471 0113      MOVW	R2,R6
    0472 0C2A      ADD	R2,R10
    0473 1C3B      ADC	R3,R11
    0474 1A26      SUB	R2,R22
    0475 0A37      SBC	R3,R23
    0476 0131      MOVW	R6,R2
    0477 C005      RJMP	0x047D
(0190)             else {y=y+1;err=err-d_x;}
    0478 01C7      MOVW	R24,R14
    0479 9601      ADIW	R24,1
    047A 017C      MOVW	R14,R24
    047B 1A66      SUB	R6,R22
    047C 0A77      SBC	R7,R23
(0191)              draw_point(x,y,1);
    047D E081      LDI	R24,1
    047E 8388      STD	Y+0,R24
    047F 2D2E      MOV	R18,R14
    0480 2D0C      MOV	R16,R12
    0481 926F      PUSH	R6
    0482 927F      PUSH	R7
    0483 DEEC      RCALL	_draw_point
    0484 907F      POP	R7
    0485 906F      POP	R6
    0486 8809      LDD	R0,Y+17
    0487 881A      LDD	R1,Y+18
    0488 14E0      CP	R14,R0
    0489 04F1      CPC	R15,R1
    048A F699      BNE	0x045E
    048B C06C      RJMP	0x04F8
(0192)             }
(0193)     else if(!temp&&(d_y<=d_x))
    048C 2344      TST	R20
    048D F009      BEQ	0x048F
    048E C034      RJMP	0x04C3
    048F 156A      CP	R22,R10
    0490 057B      CPC	R23,R11
    0491 F408      BCC	0x0493
    0492 C030      RJMP	0x04C3
    0493 C029      RJMP	0x04BD
(0194)         while(x!=x2)
(0195)             {d_x=x-x2;d_y=y2-y; 
    0494 01B6      MOVW	R22,R12
    0495 840F      LDD	R0,Y+15
    0496 8818      LDD	R1,Y+16
    0497 1960      SUB	R22,R0
    0498 0971      SBC	R23,R1
    0499 88A9      LDD	R10,Y+17
    049A 88BA      LDD	R11,Y+18
    049B 18AE      SUB	R10,R14
    049C 08BF      SBC	R11,R15
(0196)             if(err<0){x=x-1;err=err+d_y;}
    049D 01C3      MOVW	R24,R6
    049E 3080      CPI	R24,0
    049F E0E0      LDI	R30,0
    04A0 079E      CPC	R25,R30
    04A1 F434      BGE	0x04A8
    04A2 01C6      MOVW	R24,R12
    04A3 9701      SBIW	R24,1
    04A4 016C      MOVW	R12,R24
    04A5 0C6A      ADD	R6,R10
    04A6 1C7B      ADC	R7,R11
    04A7 C00C      RJMP	0x04B4
(0197)             else {x=x-1;y=y+1;err=err+d_y-d_x;}
    04A8 01C6      MOVW	R24,R12
    04A9 9701      SBIW	R24,1
    04AA 016C      MOVW	R12,R24
    04AB 01C7      MOVW	R24,R14
    04AC 9601      ADIW	R24,1
    04AD 017C      MOVW	R14,R24
    04AE 0113      MOVW	R2,R6
    04AF 0C2A      ADD	R2,R10
    04B0 1C3B      ADC	R3,R11
    04B1 1A26      SUB	R2,R22
    04B2 0A37      SBC	R3,R23
    04B3 0131      MOVW	R6,R2
(0198)             draw_point(x,y,1);
    04B4 E081      LDI	R24,1
    04B5 8388      STD	Y+0,R24
    04B6 2D2E      MOV	R18,R14
    04B7 2D0C      MOV	R16,R12
    04B8 926F      PUSH	R6
    04B9 927F      PUSH	R7
    04BA DEB5      RCALL	_draw_point
    04BB 907F      POP	R7
    04BC 906F      POP	R6
    04BD 840F      LDD	R0,Y+15
    04BE 8818      LDD	R1,Y+16
    04BF 14C0      CP	R12,R0
    04C0 04D1      CPC	R13,R1
    04C1 F691      BNE	0x0494
    04C2 C035      RJMP	0x04F8
(0199)             }
(0200)     else if(!temp &&(d_y>d_x))
    04C3 2344      TST	R20
    04C4 F009      BEQ	0x04C6
    04C5 C032      RJMP	0x04F8
    04C6 156A      CP	R22,R10
    04C7 057B      CPC	R23,R11
    04C8 F578      BCC	0x04F8
    04C9 C029      RJMP	0x04F3
(0201)         while(y!=y2)
(0202)             {d_x=x-x2;d_y=y2-y; 
    04CA 01B6      MOVW	R22,R12
    04CB 840F      LDD	R0,Y+15
    04CC 8818      LDD	R1,Y+16
    04CD 1960      SUB	R22,R0
    04CE 0971      SBC	R23,R1
    04CF 88A9      LDD	R10,Y+17
    04D0 88BA      LDD	R11,Y+18
    04D1 18AE      SUB	R10,R14
    04D2 08BF      SBC	R11,R15
(0203)             if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
    04D3 01C3      MOVW	R24,R6
    04D4 3080      CPI	R24,0
    04D5 E0E0      LDI	R30,0
    04D6 079E      CPC	R25,R30
    04D7 F46C      BGE	0x04E5
    04D8 01C6      MOVW	R24,R12
    04D9 9701      SBIW	R24,1
    04DA 016C      MOVW	R12,R24
    04DB 01C7      MOVW	R24,R14
    04DC 9601      ADIW	R24,1
    04DD 017C      MOVW	R14,R24
    04DE 0113      MOVW	R2,R6
    04DF 0C2A      ADD	R2,R10
    04E0 1C3B      ADC	R3,R11
    04E1 1A26      SUB	R2,R22
    04E2 0A37      SBC	R3,R23
    04E3 0131      MOVW	R6,R2
    04E4 C005      RJMP	0x04EA

⌨️ 快捷键说明

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