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

📄 mega32-lcm.lst

📁 proteus实例集锦
💻 LST
📖 第 1 页 / 共 5 页
字号:
    06CC 9D8A      MUL	R24,R10
    06CD 0110      MOVW	R2,R0
    06CE E584      LDI	R24,0x54
    06CF E092      LDI	R25,2
    06D0 0E28      ADD	R2,R24
    06D1 1E39      ADC	R3,R25
    06D2 2FE4      MOV	R30,R20
    06D3 27FF      CLR	R31
    06D4 0DE2      ADD	R30,R2
    06D5 1DF3      ADC	R31,R3
    06D6 9164      LPM	R22,0(Z)
(0492) 		ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
    06D7 E18A      LDI	R24,0x1A
    06D8 9D8A      MUL	R24,R10
    06D9 0110      MOVW	R2,R0
    06DA E584      LDI	R24,0x54
    06DB E092      LDI	R25,2
    06DC 0E28      ADD	R2,R24
    06DD 1E39      ADC	R3,R25
    06DE 2FE4      MOV	R30,R20
    06DF 27FF      CLR	R31
    06E0 963C      ADIW	R30,0xC
    06E1 0DE2      ADD	R30,R2
    06E2 1DF3      ADC	R31,R3
    06E3 90E4      LPM	R14,0(Z)
(0493) 		ch_r=ch_r>>4;
    06E4 2F86      MOV	R24,R22
    06E5 9582      SWAP	R24
    06E6 708F      ANDI	R24,0xF
    06E7 2F68      MOV	R22,R24
(0494) 		ch_w=ch_w<<4; 
    06E8 2D8E      MOV	R24,R14
    06E9 708F      ANDI	R24,0xF
    06EA 9582      SWAP	R24
    06EB 2EE8      MOV	R14,R24
(0495) 		ch_w|=ch_r;
    06EC 2AE6      OR	R14,R22
(0496) 		SetPageCol(uPage+1,uCol+j);
    06ED 2D2C      MOV	R18,R12
    06EE 0F24      ADD	R18,R20
    06EF 8109      LDD	R16,Y+1
    06F0 5F0F      SUBI	R16,0xFF
    06F1 DD9F      RCALL	_SetPageCol
(0497) 		if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w); 
    06F2 2D8C      MOV	R24,R12
    06F3 0F84      ADD	R24,R20
    06F4 3480      CPI	R24,0x40
    06F5 F428      BCC	0x06FB
    06F6 82E8      STD	Y+0,R14
    06F7 E021      LDI	R18,1
    06F8 2700      CLR	R16
    06F9 DC27      RCALL	_write_LCD
    06FA C004      RJMP	0x06FF
(0498) 		else write_LCD(RIGHT,DATA,ch_w); 
    06FB 82E8      STD	Y+0,R14
    06FC E021      LDI	R18,1
    06FD E001      LDI	R16,1
    06FE DC22      RCALL	_write_LCD
    06FF 9543      INC	R20
    0700 304C      CPI	R20,0xC
    0701 F408      BCC	0x0703
    0702 CFC3      RJMP	0x06C6
(0499) 	}
(0500) 	SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
    0703 2D2C      MOV	R18,R12
    0704 5F24      SUBI	R18,0xF4
    0705 8109      LDD	R16,Y+1
    0706 DD8A      RCALL	_SetPageCol
(0501) 	}
(0502) }
    0707 9622      ADIW	R28,2
    0708 940E09C1  CALL	pop_gset5
    070A 9508      RET
_disp_str:
  i                    --> R20
  p                    --> R22
    070B 940E09DB  CALL	push_gset2
    070D 01B8      MOVW	R22,R16
(0503) 
(0504) void disp_str(unsigned char *p)
(0505) {
(0506) 	unsigned char i=0;
    070E 2744      CLR	R20
    070F C015      RJMP	0x0725
(0507) 	while(p[i]>0)
(0508) 	{
(0509) 		if(p[i] < 128)
    0710 2FE4      MOV	R30,R20
    0711 27FF      CLR	R31
    0712 0FE6      ADD	R30,R22
    0713 1FF7      ADC	R31,R23
    0714 8180      LDD	R24,Z+0
    0715 3880      CPI	R24,0x80
    0716 F438      BCC	0x071E
(0510) 		{	/* ASCII */
(0511) 			disp_ch(p[i]);
    0717 2FE4      MOV	R30,R20
    0718 27FF      CLR	R31
    0719 0FE6      ADD	R30,R22
    071A 1FF7      ADC	R31,R23
    071B 8100      LDD	R16,Z+0
    071C DDC7      RCALL	_disp_ch
(0512) 		}
    071D C006      RJMP	0x0724
(0513) 		else
(0514) 		{	/* 中文 */
(0515) 			disp_hz(&p[i]);
    071E 2F04      MOV	R16,R20
    071F 2711      CLR	R17
    0720 0F06      ADD	R16,R22
    0721 1F17      ADC	R17,R23
    0722 DED6      RCALL	_disp_hz
(0516) 			i++;
    0723 9543      INC	R20
(0517) 		}
(0518) 		i++;
    0724 9543      INC	R20
    0725 2FE4      MOV	R30,R20
    0726 27FF      CLR	R31
    0727 0FE6      ADD	R30,R22
    0728 1FF7      ADC	R31,R23
    0729 8020      LDD	R2,Z+0
    072A 2433      CLR	R3
    072B 1432      CP	R3,R2
    072C F318      BCS	0x0710
(0519) 	}
(0520) }
    072D 940E09BB  CALL	pop_gset2
    072F 9508      RET
_pixel:
  ch                   --> R22
  y                    --> R20
  flag                 --> R10
  yy                   --> R14
  xx                   --> R12
    0730 940E09E7  CALL	push_gset5
    0732 2EE2      MOV	R14,R18
    0733 2EC0      MOV	R12,R16
    0734 9721      SBIW	R28,1
    0735 84AB      LDD	R10,Y+11
(0521) 
(0522) /*************************************/
(0523) /*             绘点函数              */
(0524) /*************************************/
(0525) /* XX--(0-128) YY--(0-63) FLAG=1绘点   FLAG=0 清点 */
(0526) void pixel(unsigned char xx,unsigned char yy,unsigned char flag)
(0527) {
(0528) 	unsigned int y,ch;
(0529) 	ch=yy%8;  //余数
    0736 E028      LDI	R18,0x8
    0737 E030      LDI	R19,0
    0738 2D0E      MOV	R16,R14
    0739 2711      CLR	R17
    073A 940E0971  CALL	mod16s
    073C 01B8      MOVW	R22,R16
(0530) 
(0531) 	y=1;
    073D E041      LDI	R20,1
    073E E050      LDI	R21,0
(0532) 	for(;ch!=0;)
    073F C008      RJMP	0x0748
(0533) 		{
(0534) 			y=y*2;
    0740 E002      LDI	R16,2
    0741 E010      LDI	R17,0
    0742 019A      MOVW	R18,R20
    0743 940E09AB  CALL	empy16s
    0745 01A8      MOVW	R20,R16
(0535) 			ch--;
    0746 5061      SUBI	R22,1
    0747 4070      SBCI	R23,0
    0748 3060      CPI	R22,0
    0749 0767      CPC	R22,R23
    074A F7A9      BNE	0x0740
(0536) 		}
(0537) 	if(xx<64)
    074B 2D8C      MOV	R24,R12
    074C 3480      CPI	R24,0x40
    074D F518      BCC	0x0771
(0538) 		{
(0539) 			set_page_L(yy/8);
    074E 2D0E      MOV	R16,R14
    074F 9506      LSR	R16
    0750 9506      LSR	R16
    0751 9506      LSR	R16
    0752 DCCC      RCALL	_set_page_L
(0540) 			set_col_addr_L(xx);	
    0753 2D0C      MOV	R16,R12
    0754 DCE6      RCALL	_set_col_addr_L
(0541) 			ch=read_LCD(LEFT);
    0755 2700      CLR	R16
    0756 DC1B      RCALL	_read_LCD
    0757 2F60      MOV	R22,R16
    0758 2777      CLR	R23
(0542) 			set_col_addr_L(xx);
    0759 2D0C      MOV	R16,R12
    075A DCE0      RCALL	_set_col_addr_L
(0543) 			if(flag)
    075B 20AA      TST	R10
    075C F041      BEQ	0x0765
(0544) 				write_LCD(LEFT,DATA,ch|y);
    075D 011B      MOVW	R2,R22
    075E 2A24      OR	R2,R20
    075F 2A35      OR	R3,R21
    0760 8228      STD	Y+0,R2
    0761 E021      LDI	R18,1
    0762 2700      CLR	R16
    0763 DBBD      RCALL	_write_LCD
    0764 C030      RJMP	0x0795
(0545) 			else
(0546) 			{
(0547) 				y=~y;
    0765 9540      COM	R20
    0766 9550      COM	R21
(0548) 				ch&=y;
    0767 2364      AND	R22,R20
    0768 2375      AND	R23,R21
(0549) 				write_LCD(LEFT,DATA,ch|y);
    0769 011B      MOVW	R2,R22
    076A 2A24      OR	R2,R20
    076B 2A35      OR	R3,R21
    076C 8228      STD	Y+0,R2
    076D E021      LDI	R18,1
    076E 2700      CLR	R16
    076F DBB1      RCALL	_write_LCD
(0550) 			}
(0551) 		}
    0770 C024      RJMP	0x0795
(0552) 	else
(0553) 		{
(0554) 			set_page_R(yy/8);
    0771 2D0E      MOV	R16,R14
    0772 9506      LSR	R16
    0773 9506      LSR	R16
    0774 9506      LSR	R16
    0775 DCB7      RCALL	_set_page_R
(0555) 			set_col_addr_R(xx-64);	
    0776 2D0C      MOV	R16,R12
    0777 5400      SUBI	R16,0x40
    0778 DCD0      RCALL	_set_col_addr_R
(0556) 			ch=read_LCD(RIGHT);
    0779 E001      LDI	R16,1
    077A DBF7      RCALL	_read_LCD
    077B 2F60      MOV	R22,R16
    077C 2777      CLR	R23
(0557) 			set_col_addr_R(xx-64);	
    077D 2D0C      MOV	R16,R12
    077E 5400      SUBI	R16,0x40
    077F DCC9      RCALL	_set_col_addr_R
(0558) 			if(flag)
    0780 20AA      TST	R10
    0781 F041      BEQ	0x078A
(0559) 				write_LCD(RIGHT,DATA,ch|y);
    0782 011B      MOVW	R2,R22
    0783 2A24      OR	R2,R20
    0784 2A35      OR	R3,R21
    0785 8228      STD	Y+0,R2
    0786 E021      LDI	R18,1
    0787 E001      LDI	R16,1
    0788 DB98      RCALL	_write_LCD
    0789 C00B      RJMP	0x0795
(0560) 			else
(0561) 			{
(0562) 				y=~y;
    078A 9540      COM	R20
    078B 9550      COM	R21
(0563) 				ch&=y;
    078C 2364      AND	R22,R20
    078D 2375      AND	R23,R21
(0564) 				write_LCD(RIGHT,DATA,ch|y);
    078E 011B      MOVW	R2,R22
    078F 2A24      OR	R2,R20
    0790 2A35      OR	R3,R21
    0791 8228      STD	Y+0,R2
    0792 E021      LDI	R18,1
    0793 E001      LDI	R16,1
    0794 DB8C      RCALL	_write_LCD
(0565) 			}
(0566) 		}
(0567) }
    0795 9621      ADIW	R28,1
    0796 940E09C1  CALL	pop_gset5
    0798 9508      RET
_Linexy:
  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
    0799 940E09E7  CALL	push_gset5
    079B 2EC2      MOV	R12,R18
    079C 2F40      MOV	R20,R16
    079D 972B      SBIW	R28,0xB
(0568) /*void point(void) 
(0569) { 
(0570)    uchar   x1, y1, y; 
(0571) 
(0572)    x1 = CurCol; 
(0573)    y1 = CurRow; 
(0574)    CurRow = y1 >> 3;      //取Y方向分页地址   
(0575)    Rddata();               // get cbyte on screen 
(0576)    y = y1 & 0x07;     //字节内位置计算  
(0577)    Wrdata(cbyte | (1 << y));   //画上屏幕    /
(0578)    CurCol = x1;         ///恢复xy坐标     /
(0579)    CurRow = y1; 
(0580) } */
(0581) 
(0582) /************************************************/ 
(0583) /*画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2      */ 
(0584) /************************************************/ 
(0585) 
(0586) /*void circle(uchar Ox, uchar Oy, uchar Rx) 
(0587) { 
(0588)    unsigned int xx, rr, xt, yt, rs; 
(0589)     
(0590)     yt = Rx; 
(0591)    rr = Rx * Rx + 1;         //补偿 1 修正方形 
(0592)    rs = (yt + (yt >> 1)) >> 1;      //(*0.75)分开1/8圆弧来画 
(0593)    for (xt = 0; xt <= rs; xt++) 
(0594)    { 
(0595)       xx = xt * xt; 
(0596)       while ((yt * yt) > (rr - xx)) 
(0597)             yt--; 
(0598)       col = Ox + xt;      //第一象限 
(0599)       row=Oy-yt; 
(0600)       point(); 
(0601)       col = Ox - xt;      //第二象限 
(0602)       point(); 
(0603)       row = Oy + yt;      //第三象限 
(0604)       point(); 
(0605)       col = Ox + xt;      //第四象限 
(0606)       point(); 
(0607) 
(0608) // ***************45度镜象画另一半*************** 
(0609) 
(0610)       col = Ox + yt;      //第一象限 
(0611)       row = Oy - xt; 
(0612)       point(); 
(0613)       col = Ox - yt;      //第二象限 
(0614)       point(); 
(0615)       row = Oy + xt;      //第三象限 
(0616)       point(); 
(0617)       col = Ox + yt;      //第四象限 
(0618)       point(); 
(0619)    } 
(0620) } 
(0621) */
(0622)              
(0623) /************************************************/ 
(0624) /*画线。任意方向的斜线,直线数学方程 aX+bY=1   */ 
(0625) /************************************************/ 
(0626) 
(0627) /*void Linexy(uchar x0,uchar y0,uchar xt,uchar yt) 
(0628) { 
(0629)    uchar t; 
(0630)    int xerr = 0, yerr = 0, delta_x, delta_y, distance; 
(0631)    int incx, incy; 
(0632) 
(0633)    delta_x = xt - x0;            // 计算坐标增量 
(0634)    delta_y = yt - y0; 
(0635)    col = x0; 
(0636)    row = y0; 
(0637)     
(0638)     if (delta_x > 0)  
(0639)     { 
(0640)         incx = 1;         // 水平+方向 
(0641)     } 
(0642)    else if (delta_x == 0 )  
(0643)         { 
(0644)             incx = 0;      // 垂直线 
(0645)         } 
(0646)       else  
(0647)         { 
(0648)             incx =- 1;  //水平负方向 
(0649)             delta_x =- delta_x; 
(0650)         } 
(0651)      
(0652)    if (delta_y > 0)  
(0653)     { 
(0654)         incy = 1;       // 垂直+方向 
(0655)     } 
(0656)    else  
(0657)         if (delta_y == 0)  
(0658)         { 
(0659)             incy = 0;      // 水平线 
(0660)         } 
(0661)       else  
(0662)         { 
(0663)             incy =- 1;      //垂直-方向 
(0664)             delta_y =- delta_y; 
(0665)         } 
(0666)   

⌨️ 快捷键说明

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