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

📄 test.lst

📁 用ATmega88驱动LCD240128
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0195)                 LCD_WR_CODE(LCD_AUT_WR);
    05EC EB00      LDI	R16,0xB0
    05ED DF39      RCALL	_LCD_WR_CODE
(0196)                 LCD_WR_DATA(ASC_MSK[(ptr[i]-0x20)*16+j]);
    05EE 2DEC      MOV	R30,R12
    05EF 27FF      CLR	R31
    05F0 840F      LDD	R0,Y+15
    05F1 8818      LDD	R1,Y+16
    05F2 0DE0      ADD	R30,R0
    05F3 1DF1      ADC	R31,R1
    05F4 8020      LDD	R2,Z+0
    05F5 E180      LDI	R24,0x10
    05F6 9D82      MUL	R24,R2
    05F7 01F0      MOVW	R30,R0
    05F8 50E0      SUBI	R30,0
    05F9 40F2      SBCI	R31,2
    05FA 2E24      MOV	R2,R20
    05FB 2433      CLR	R3
    05FC 0DE2      ADD	R30,R2
    05FD 1DF3      ADC	R31,R3
    05FE E384      LDI	R24,0x34
    05FF E090      LDI	R25,0
    0600 0FE8      ADD	R30,R24
    0601 1FF9      ADC	R31,R25
    0602 9104      LPM	R16,0(Z)
    0603 DF18      RCALL	_LCD_WR_DATA
(0197)                 LCD_WR_CODE(LCD_AUT_OVR);
    0604 EB02      LDI	R16,0xB2
    0605 DF21      RCALL	_LCD_WR_CODE
(0198)                 LCD_SET_ADD(uRow+j+1,uCol);
    0606 2D2A      MOV	R18,R10
    0607 2F06      MOV	R16,R22
    0608 0F04      ADD	R16,R20
    0609 5F0F      SUBI	R16,0xFF
    060A DF96      RCALL	_LCD_SET_ADD
    060B 9543      INC	R20
    060C 3140      CPI	R20,0x10
    060D F2F0      BCS	0x05EC
(0199)             }
(0200)             uCol += 1;
    060E 94A3      INC	R10
(0201)         }
    060F C06F      RJMP	0x067F
(0202)     	else//中文
(0203)       	{
(0204)             for(j=0;j<sizeof(GB_16x16)/sizeof(GB_16x16[0]);j++)  	// 查找定位
    0610 2744      CLR	R20
    0611 C01F      RJMP	0x0631
(0205)             {
(0206)                 if(ptr[i] == GB_16x16[j].Index[0] && ptr[i+1] == GB_16x16[j].Index[1])
    0612 2C2C      MOV	R2,R12
    0613 2433      CLR	R3
    0614 840F      LDD	R0,Y+15
    0615 8818      LDD	R1,Y+16
    0616 0C20      ADD	R2,R0
    0617 1C31      ADC	R3,R1
    0618 E282      LDI	R24,0x22
    0619 9F84      MUL	R24,R20
    061A 0120      MOVW	R4,R0
    061B E384      LDI	R24,0x34
    061C E096      LDI	R25,6
    061D 01F2      MOVW	R30,R4
    061E 0FE8      ADD	R30,R24
    061F 1FF9      ADC	R31,R25
    0620 91E4      LPM	R30,0(Z)
    0621 01D1      MOVW	R26,R2
    0622 906C      LD	R6,0(X)
    0623 166E      CP	R6,R30
    0624 F459      BNE	0x0630
    0625 E385      LDI	R24,0x35
    0626 E096      LDI	R25,6
    0627 01F2      MOVW	R30,R4
    0628 0FE8      ADD	R30,R24
    0629 1FF9      ADC	R31,R25
    062A 91E4      LPM	R30,0(Z)
    062B 9611      ADIW	R26,1
    062C 902C      LD	R2,0(X)
    062D 162E      CP	R2,R30
    062E F409      BNE	0x0630
(0207)                 {
(0208)                     break;
    062F C003      RJMP	0x0633
    0630 9543      INC	R20
    0631 304A      CPI	R20,0xA
    0632 F2F8      BCS	0x0612
(0209)                 }	
(0210)             }
(0211)             for(k=0;k<sizeof(GB_16x16[0].Msk)/2;k++)
    0633 24EE      CLR	R14
    0634 24FF      CLR	R15
    0635 C03F      RJMP	0x0675
(0212)             {
(0213)                 LCD_SET_ADD(uRow+k,uCol);
    0636 2D2A      MOV	R18,R10
    0637 2F06      MOV	R16,R22
    0638 2711      CLR	R17
    0639 0D0E      ADD	R16,R14
    063A 1D1F      ADC	R17,R15
    063B DF65      RCALL	_LCD_SET_ADD
(0214)         	    LCD_WR_CODE(LCD_AUT_WR);      		// 写数据
    063C EB00      LDI	R16,0xB0
    063D DEE9      RCALL	_LCD_WR_CODE
(0215)         	    if(j < sizeof(GB_16x16)/sizeof(GB_16x16[0]))
    063E 304A      CPI	R20,0xA
    063F F510      BCC	0x0662
(0216)           	    {
(0217)           	        LCD_WR_DATA(GB_16x16[j].Msk[k*2]);
    0640 E282      LDI	R24,0x22
    0641 9F84      MUL	R24,R20
    0642 0110      MOVW	R2,R0
    0643 E386      LDI	R24,0x36
    0644 E096      LDI	R25,6
    0645 0E28      ADD	R2,R24
    0646 1E39      ADC	R3,R25
    0647 E002      LDI	R16,2
    0648 E010      LDI	R17,0
    0649 0197      MOVW	R18,R14
    064A D1D7      RCALL	empy16s
    064B 01F8      MOVW	R30,R16
    064C 0DE2      ADD	R30,R2
    064D 1DF3      ADC	R31,R3
    064E 9104      LPM	R16,0(Z)
    064F DECC      RCALL	_LCD_WR_DATA
(0218)           	        LCD_WR_DATA(GB_16x16[j].Msk[k*2+1]);
    0650 E282      LDI	R24,0x22
    0651 9F84      MUL	R24,R20
    0652 0110      MOVW	R2,R0
    0653 E386      LDI	R24,0x36
    0654 E096      LDI	R25,6
    0655 0E28      ADD	R2,R24
    0656 1E39      ADC	R3,R25
    0657 E002      LDI	R16,2
    0658 E010      LDI	R17,0
    0659 0197      MOVW	R18,R14
    065A D1C7      RCALL	empy16s
    065B 01F8      MOVW	R30,R16
    065C 9631      ADIW	R30,1
    065D 0DE2      ADD	R30,R2
    065E 1DF3      ADC	R31,R3
    065F 9104      LPM	R16,0(Z)
    0660 DEBB      RCALL	_LCD_WR_DATA
(0219)           	    }
    0661 C00E      RJMP	0x0670
(0220)         	    else   		// 未找到该字
(0221)           	    {
(0222)           	        if(k < sizeof(GB_16x16[0].Msk)/4)
    0662 01C7      MOVW	R24,R14
    0663 3088      CPI	R24,0x8
    0664 E0E0      LDI	R30,0
    0665 079E      CPC	R25,R30
    0666 F428      BCC	0x066C
(0223)             	    {
(0224)                         LCD_WR_DATA(0x00);
    0667 2700      CLR	R16
    0668 DEB3      RCALL	_LCD_WR_DATA
(0225)             		    LCD_WR_DATA(0x00);
    0669 2700      CLR	R16
    066A DEB1      RCALL	_LCD_WR_DATA
(0226)             	    }
    066B C004      RJMP	0x0670
(0227)          	        else
(0228)             	    {
(0229)             		    LCD_WR_DATA(0xff);
    066C EF0F      LDI	R16,0xFF
    066D DEAE      RCALL	_LCD_WR_DATA
(0230) 			            LCD_WR_DATA(0xff);
    066E EF0F      LDI	R16,0xFF
    066F DEAC      RCALL	_LCD_WR_DATA
(0231)             	    }
(0232)                 }
(0233)         	    LCD_WR_CODE(LCD_AUT_OVR);
    0670 EB02      LDI	R16,0xB2
    0671 DEB5      RCALL	_LCD_WR_CODE
    0672 01C7      MOVW	R24,R14
    0673 9601      ADIW	R24,1
    0674 017C      MOVW	R14,R24
    0675 01C7      MOVW	R24,R14
    0676 3180      CPI	R24,0x10
    0677 E0E0      LDI	R30,0
    0678 079E      CPC	R25,R30
    0679 F408      BCC	0x067B
    067A CFBB      RJMP	0x0636
(0234)             }
(0235)       	    uCol += 2;
    067B 2D8A      MOV	R24,R10
    067C 5F8E      SUBI	R24,0xFE
    067D 2EA8      MOV	R10,R24
(0236)       	    i++;
    067E 94C3      INC	R12
(0237)         }		
(0238)     	if(uCol >= 30)      					// 光标后移
    067F 2D8A      MOV	R24,R10
    0680 318E      CPI	R24,0x1E
    0681 F040      BCS	0x068A
(0239)       	{
(0240)       	    uRow += 16;
    0682 5F60      SUBI	R22,0xF0
(0241)             if(uRow < 0x80)
    0683 3860      CPI	R22,0x80
    0684 F418      BCC	0x0688
(0242)             {
(0243)                 uCol -= 30;
    0685 518E      SUBI	R24,0x1E
    0686 2EA8      MOV	R10,R24
(0244)             }
    0687 C002      RJMP	0x068A
(0245)       	    else
(0246)             {
(0247)         	uRow = 0;
    0688 2766      CLR	R22
(0248)         	uCol = 0;
    0689 24AA      CLR	R10
(0249)             }
(0250)       	 }
(0251)          LCD_SET_ADD(uRow,uCol);
    068A 2D2A      MOV	R18,R10
    068B 2F06      MOV	R16,R22
    068C DF14      RCALL	_LCD_SET_ADD
(0252)     	 i++;
    068D 94C3      INC	R12
    068E 8008      LDD	R0,Y+0
    068F 14C0      CP	R12,R0
    0690 F408      BCC	0x0692
    0691 CF4A      RJMP	0x05DC
    0692 9621      ADIW	R28,1
    0693 D1A2      RCALL	pop_gset5
    0694 9624      ADIW	R28,4
    0695 9508      RET
_PRINT_point:
  x1                   --> R20
  s                    --> Y+6
  y                    --> R10
  x                    --> R22
    0696 D1A5      RCALL	push_gset3
    0697 2EA2      MOV	R10,R18
    0698 2F60      MOV	R22,R16
(0253)     }
(0254) }
(0255) /*******************************************************************************
(0256)  画点
(0257) *******************************************************************************/
(0258) void PRINT_point(unsigned char x,unsigned char y,unsigned char s)
(0259) {
(0260)     unsigned char x1;
(0261)     x1 = x >> 3; // 取Y方向分页地址
    0699 2F46      MOV	R20,R22
    069A 9546      LSR	R20
    069B 9546      LSR	R20
    069C 9546      LSR	R20
(0262)     LCD_SET_ADD(y,x1); // 起点定位
    069D 2F24      MOV	R18,R20
    069E 2D0A      MOV	R16,R10
    069F DF01      RCALL	_LCD_SET_ADD
(0263)     x1 = turnf[ x & 0x07 ];
    06A0 E888      LDI	R24,0x88
    06A1 E097      LDI	R25,7
    06A2 2FE6      MOV	R30,R22
    06A3 27FF      CLR	R31
    06A4 70E7      ANDI	R30,7
    06A5 70F0      ANDI	R31,0
    06A6 0FE8      ADD	R30,R24
    06A7 1FF9      ADC	R31,R25
    06A8 9144      LPM	R20,0(Z)
(0264)     x1 = 0xF0 | x1 | s; // 字节内位置计算
    06A9 6F40      ORI	R20,0xF0
    06AA 800E      LDD	R0,Y+6
    06AB 2940      OR	R20,R0
(0265)     LCD_WR_CODE(x1); // 画上屏幕S显示属性8 画点0 擦除点
    06AC 2F04      MOV	R16,R20
    06AD DE79      RCALL	_LCD_WR_CODE
    06AE D185      RCALL	pop_gset3
    06AF 9508      RET
_PRINT_line:
  incy                 --> Y+9
  incx                 --> Y+7
  delta_y              --> Y+5
  delta_x              --> Y+3
  uCol                 --> Y+1
  uRow                 --> R20
  yerr                 --> R22
  xerr                 --> R10
  distance             --> R12
  t                    --> R14
  s                    --> Y+25
  yt                   --> Y+23
  xt                   --> Y+21
  y0                   --> R12
  x0                   --> R20
    06B0 D187      RCALL	push_gset5
    06B1 2EC2      MOV	R12,R18
    06B2 2F40      MOV	R20,R16
    06B3 972B      SBIW	R28,0xB
(0266) }
(0267) /*******************************************************************************
(0268)  画线任意方向的斜线,直线数学方程aX+bY=1
(0269) *******************************************************************************/
(0270) void PRINT_line(unsigned char x0,unsigned char y0,unsigned char xt,unsigned char yt,unsigned char s)
(0271) {
(0272)     register unsigned char t;
(0273)     int xerr = 0,yerr = 0;
    06B4 24AA      CLR	R10
    06B5 24BB      CLR	R11
    06B6 2766      CLR	R22
    06B7 2777      CLR	R23
(0274)     int delta_x,delta_y,distance;
(0275)     int incx,incy,uRow,uCol;
(0276)     delta_x = xt-x0; // 计算坐标增量
    06B8 2E24      MOV	R2,R20
    06B9 2433      CLR	R3
    06BA 884D      LDD	R4,Y+21
    06BB 2455      CLR	R5
    06BC 1842      SUB	R4,R2
    06BD 0853      SBC	R5,R3
    06BE 825C      STD	Y+4,R5
    06BF 824B      STD	Y+3,R4
(0277)     delta_y = yt-y0;
    06C0 2C2C      MOV	R2,R12
    06C1 2433      CLR	R3
    06C2 884F      LDD	R4,Y+23
    06C3 2455      CLR	R5
    06C4 1842      SUB	R4,R2
    06C5 0853      SBC	R5,R3
    06C6 825E      STD	Y+6,R5
    06C7 824D      STD	Y+5,R4
(0278)     uRow = x0;
    06C8 2755      CLR	R21
(0279)     uCol = y0;
    06C9 2433      CLR	R3
    06CA 823A      STD	Y+2,R3
    06CB 8229      STD	Y+1,R2
(0280)     if(delta_x>0)
    06CC 2422      CLR	R2
    06CD 804B      LDD	R4,Y+3
    06CE 805C      LDD	R5,Y+4
    06CF 1424      CP	R2,R4
    06D0 0435      CPC	R3,R5
    06D1 F42C      BGE	0x06D7
(0281)     {
(0282)         incx = 1; // 设置单步方向
    06D2 E081      LDI	R24,1
    06D3 E090      LDI	R25,0
    06D4 8798      STD	Y+8,R25
    06D5 838F      STD	Y+7,R24
(0283)     }
    06D6 C017      RJMP	0x06EE
(0284)     else if( delta_x==0 )
    06D7 802B      LDD	R2,Y+3
    06D8 803C      LDD	R3,Y+4
    06D9 2022      TST	R2
    06DA F439      BNE	0x06E2
    06DB 2033      TST	R3
    06DC F429      BNE	0x06E2
(0285)     {
(0286)         incx=0; // 垂直线
    06DD 2422      CLR	R2
    06DE 2433      CLR	R3
    06DF 8638      STD	Y+8,R3
    06E0 822F      STD	Y+7,R2
(0287)     }
    06E1 C00C      RJMP	0x06EE
(0288)     else
(0289)     {
(0290)         incx = -1;
    06E2 EF8F      LDI	R24,0xFF
    06E3 EF9F      LDI	R25,0xFF
    06E4 8798      STD	Y+8,R25
    06E5 838F      STD	Y+7,R24
(0291)         delta_x = -delta_x;
    06E6 818B      LDD	R24,Y+3
    06E7 819C      LDD	R25,Y+4
    06E8 9580      COM	R24
    06E9 9590      COM	R25
    06EA 5F8F      SUBI	R24,0xFF
    06EB 4F9F      SBCI	R25,0xFF
    06EC 839C      STD	Y+4,R25
    06ED 838B      STD	Y+3,R24
(0292)      
(0293)     }
(0294)     if(delta_y>0)
    06EE 2422      CLR	R2
    06EF 2433      CLR	R3
    06F0 804D      LDD	R4,Y+5
    06F1 805E      LDD	R5,Y+6
    06F2 1424      CP	R2,R4
    06F3 0435      CPC	R3,R5
    06F4 F42C      BGE	0x06FA
(0295)     {
(0296)         incy=1;
    06F5 E081      LDI	R24,1
    06F6 E090      LDI	R25,0
    06F7 879A      STD	Y+10,R25
    06F8 8789      STD	Y+9,R24
(0297)     }
    06F9 C017      RJMP	0x0711
(0298)     else if( delta_y==0 ) 
    06FA 802D      LDD	R2,Y+5
    06FB 803E      LDD	R3,Y+6
    06FC 2022      TST	R2
    06FD F439      BNE	0x0705
    06FE 2033      TST	R3
    06FF F429      BNE	0x0705
(0299)     {
(0300)         incy=0; // 水平线
    0700 2422      CLR	R2
    0701 2433      CLR	R3
    0702 863A      STD	Y+10,R3
    0703 8629      STD	Y+9,R2
(0301)     }
    0704 C00C      RJMP	0x0711
(0302)     else 
(0303)     {
(0304)         incy=-1;
    0705 EF8F      LDI	R24,0xFF
    0706 EF9F      LDI	R25,0xFF
    0707 879A      STD	Y+10,R25
    0708 8789      STD	Y+9,R24
(0305)         delta_y=-delta_y;
    0709 818D      LDD	R24,Y+5
    070A 819E      LDD	R25,Y+6
    070B 9580      COM	R24
    070C 9590      COM	R25
    070D 5F8F      SUBI	R24,0xFF
    070E 4F9F      SBCI	R25,0xFF
    070F 839E      STD	Y+6,R25

⌨️ 快捷键说明

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