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

📄 avr_ks0108.lst

📁 用avr控制的ks0108型128×64显示程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0495) 		ch_w=ch_w<<4;
    06A5 2D8E      MOV	R24,R14
    06A6 708F      ANDI	R24,0xF
    06A7 9582      SWAP	R24
    06A8 2EE8      MOV	R14,R24
(0496) 		ch_w|=ch_r;
    06A9 2AE6      OR	R14,R22
(0497) 		SetPageCol(uPage,uCol+j);
    06AA 2D2C      MOV	R18,R12
    06AB 0F24      ADD	R18,R20
    06AC 8109      LDD	R16,Y+1
    06AD DDE2      RCALL	_SetPageCol
(0498) 		if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w); 
    06AE 2D8C      MOV	R24,R12
    06AF 0F84      ADD	R24,R20
    06B0 3480      CPI	R24,0x40
    06B1 F428      BCC	0x06B7
    06B2 82E8      STD	Y+0,R14
    06B3 E021      LDI	R18,1
    06B4 2700      CLR	R16
    06B5 DC55      RCALL	_write_LCD
    06B6 C004      RJMP	0x06BB
(0499) 		else write_LCD(RIGHT,DATA,ch_w); 
    06B7 82E8      STD	Y+0,R14
    06B8 E021      LDI	R18,1
    06B9 E001      LDI	R16,1
    06BA DC50      RCALL	_write_LCD
    06BB 9543      INC	R20
    06BC 304C      CPI	R20,0xC
    06BD F408      BCC	0x06BF
    06BE CFCA      RJMP	0x0689
(0500) 	}
(0501) 	SetPageCol(uPage+1,uCol);
    06BF 2D2C      MOV	R18,R12
    06C0 8109      LDD	R16,Y+1
    06C1 5F0F      SUBI	R16,0xFF
    06C2 DDCD      RCALL	_SetPageCol
(0502) 	for(j=0;j<ASC_HZ_WIDTH;j++)
    06C3 2744      CLR	R20
    06C4 C03A      RJMP	0x06FF
(0503) 	{
(0504) 		SetPageCol(uPage+1,uCol+j);
    06C5 2D2C      MOV	R18,R12
    06C6 0F24      ADD	R18,R20
    06C7 8109      LDD	R16,Y+1
    06C8 5F0F      SUBI	R16,0xFF
    06C9 DDC6      RCALL	_SetPageCol
(0505) 
(0506) 		ch_r=GB_16[k].Msk[j];
    06CA E18A      LDI	R24,0x1A
    06CB 9D8A      MUL	R24,R10
    06CC 0110      MOVW	R2,R0
    06CD E584      LDI	R24,0x54
    06CE E092      LDI	R25,2
    06CF 0E28      ADD	R2,R24
    06D0 1E39      ADC	R3,R25
    06D1 2FE4      MOV	R30,R20
    06D2 27FF      CLR	R31
    06D3 0DE2      ADD	R30,R2
    06D4 1DF3      ADC	R31,R3
    06D5 9164      LPM	R22,0(Z)
(0507) 		ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
    06D6 E18A      LDI	R24,0x1A
    06D7 9D8A      MUL	R24,R10
    06D8 0110      MOVW	R2,R0
    06D9 E584      LDI	R24,0x54
    06DA E092      LDI	R25,2
    06DB 0E28      ADD	R2,R24
    06DC 1E39      ADC	R3,R25
    06DD 2FE4      MOV	R30,R20
    06DE 27FF      CLR	R31
    06DF 963C      ADIW	R30,0xC
    06E0 0DE2      ADD	R30,R2
    06E1 1DF3      ADC	R31,R3
    06E2 90E4      LPM	R14,0(Z)
(0508) 		ch_r=ch_r>>4;
    06E3 2F86      MOV	R24,R22
    06E4 9582      SWAP	R24
    06E5 708F      ANDI	R24,0xF
    06E6 2F68      MOV	R22,R24
(0509) 		ch_w=ch_w<<4; 
    06E7 2D8E      MOV	R24,R14
    06E8 708F      ANDI	R24,0xF
    06E9 9582      SWAP	R24
    06EA 2EE8      MOV	R14,R24
(0510) 		ch_w|=ch_r;
    06EB 2AE6      OR	R14,R22
(0511) 		SetPageCol(uPage+1,uCol+j);
    06EC 2D2C      MOV	R18,R12
    06ED 0F24      ADD	R18,R20
    06EE 8109      LDD	R16,Y+1
    06EF 5F0F      SUBI	R16,0xFF
    06F0 DD9F      RCALL	_SetPageCol
(0512) 		if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w); 
    06F1 2D8C      MOV	R24,R12
    06F2 0F84      ADD	R24,R20
    06F3 3480      CPI	R24,0x40
    06F4 F428      BCC	0x06FA
    06F5 82E8      STD	Y+0,R14
    06F6 E021      LDI	R18,1
    06F7 2700      CLR	R16
    06F8 DC12      RCALL	_write_LCD
    06F9 C004      RJMP	0x06FE
(0513) 		else write_LCD(RIGHT,DATA,ch_w); 
    06FA 82E8      STD	Y+0,R14
    06FB E021      LDI	R18,1
    06FC E001      LDI	R16,1
    06FD DC0D      RCALL	_write_LCD
    06FE 9543      INC	R20
    06FF 304C      CPI	R20,0xC
    0700 F408      BCC	0x0702
    0701 CFC3      RJMP	0x06C5
(0514) 	}
(0515) 	SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
    0702 2D2C      MOV	R18,R12
    0703 5F24      SUBI	R18,0xF4
    0704 8109      LDD	R16,Y+1
    0705 DD8A      RCALL	_SetPageCol
(0516) 	}
    0706 9622      ADIW	R28,2
    0707 940E0990  CALL	pop_gset5
    0709 9508      RET
_disp_str:
  i                    --> R20
  p                    --> R22
    070A 940E0999  CALL	push_gset2
    070C 01B8      MOVW	R22,R16
(0517) }
(0518) 
(0519) void disp_str(unsigned char *p)
(0520) {
(0521) 	unsigned char i=0;
    070D 2744      CLR	R20
    070E C015      RJMP	0x0724
(0522) 	while(p[i]>0)
(0523) 	{
(0524) 		if(p[i] < 128)
    070F 2FE4      MOV	R30,R20
    0710 27FF      CLR	R31
    0711 0FE6      ADD	R30,R22
    0712 1FF7      ADC	R31,R23
    0713 8180      LDD	R24,Z+0
    0714 3880      CPI	R24,0x80
    0715 F438      BCC	0x071D
(0525) 		{	/* ASCII */
(0526) 			disp_ch(p[i]);
    0716 2FE4      MOV	R30,R20
    0717 27FF      CLR	R31
    0718 0FE6      ADD	R30,R22
    0719 1FF7      ADC	R31,R23
    071A 8100      LDD	R16,Z+0
    071B DDC7      RCALL	_disp_ch
(0527) 		}
    071C C006      RJMP	0x0723
(0528) 		else
(0529) 		{	/* 中文 */
(0530) 			disp_hz(&p[i]);
    071D 2F04      MOV	R16,R20
    071E 2711      CLR	R17
    071F 0F06      ADD	R16,R22
    0720 1F17      ADC	R17,R23
    0721 DED6      RCALL	_disp_hz
(0531) 			i++;
    0722 9543      INC	R20
(0532) 		}
(0533) 		i++;
    0723 9543      INC	R20
    0724 2FE4      MOV	R30,R20
    0725 27FF      CLR	R31
    0726 0FE6      ADD	R30,R22
    0727 1FF7      ADC	R31,R23
    0728 8020      LDD	R2,Z+0
    0729 2433      CLR	R3
    072A 1432      CP	R3,R2
    072B F318      BCS	0x070F
    072C 940E098A  CALL	pop_gset2
    072E 9508      RET
_pixel:
  ch                   --> R22
  y                    --> R20
  flag                 --> R10
  yy                   --> R14
  xx                   --> R12
    072F 940E0993  CALL	push_gset5
    0731 2EE2      MOV	R14,R18
    0732 2EC0      MOV	R12,R16
    0733 9721      SBIW	R28,1
    0734 84AB      LDD	R10,Y+11
(0534) 	}
(0535) }
(0536) 
(0537) /*************************************/
(0538) /*             绘点函数              */
(0539) /*************************************/
(0540) /* XX--(0-128) YY--(0-63) FLAG=1绘点   FLAG=0 清点 */
(0541) void pixel(unsigned char xx,unsigned char yy,unsigned char flag)
(0542) {
(0543) 	unsigned int y,ch;
(0544) 	ch=yy%8;  //余数
    0735 E028      LDI	R18,0x8
    0736 E030      LDI	R19,0
    0737 2D0E      MOV	R16,R14
    0738 2711      CLR	R17
    0739 940E0940  CALL	mod16s
    073B 01B8      MOVW	R22,R16
(0545) 
(0546) 	y=1;
    073C E041      LDI	R20,1
    073D E050      LDI	R21,0
(0547) 	for(;ch!=0;)
    073E C008      RJMP	0x0747
(0548) 		{
(0549) 			y=y*2;
    073F E002      LDI	R16,2
    0740 E010      LDI	R17,0
    0741 019A      MOVW	R18,R20
    0742 940E097A  CALL	empy16s
    0744 01A8      MOVW	R20,R16
(0550) 			ch--;
    0745 5061      SUBI	R22,1
    0746 4070      SBCI	R23,0
    0747 3060      CPI	R22,0
    0748 0767      CPC	R22,R23
    0749 F7A9      BNE	0x073F
(0551) 		}
(0552) 	if(xx<64)
    074A 2D8C      MOV	R24,R12
    074B 3480      CPI	R24,0x40
    074C F518      BCC	0x0770
(0553) 		{
(0554) 			set_page_L(yy/8);
    074D 2D0E      MOV	R16,R14
    074E 9506      LSR	R16
    074F 9506      LSR	R16
    0750 9506      LSR	R16
    0751 DCBD      RCALL	_set_page_L
(0555) 			set_col_addr_L(xx);	
    0752 2D0C      MOV	R16,R12
    0753 DCD7      RCALL	_set_col_addr_L
(0556) 			ch=read_LCD(LEFT);
    0754 2700      CLR	R16
    0755 DC08      RCALL	_read_LCD
    0756 2F60      MOV	R22,R16
    0757 2777      CLR	R23
(0557) 			set_col_addr_L(xx);
    0758 2D0C      MOV	R16,R12
    0759 DCD1      RCALL	_set_col_addr_L
(0558) 			if(flag)
    075A 20AA      TST	R10
    075B F041      BEQ	0x0764
(0559) 				write_LCD(LEFT,DATA,ch|y);
    075C 011B      MOVW	R2,R22
    075D 2A24      OR	R2,R20
    075E 2A35      OR	R3,R21
    075F 8228      STD	Y+0,R2
    0760 E021      LDI	R18,1
    0761 2700      CLR	R16
    0762 DBA8      RCALL	_write_LCD
    0763 C030      RJMP	0x0794
(0560) 			else
(0561) 			{
(0562) 				y=~y;
    0764 9540      COM	R20
    0765 9550      COM	R21
(0563) 				ch&=y;
    0766 2364      AND	R22,R20
    0767 2375      AND	R23,R21
(0564) 				write_LCD(LEFT,DATA,ch|y);
    0768 011B      MOVW	R2,R22
    0769 2A24      OR	R2,R20
    076A 2A35      OR	R3,R21
    076B 8228      STD	Y+0,R2
    076C E021      LDI	R18,1
    076D 2700      CLR	R16
    076E DB9C      RCALL	_write_LCD
(0565) 			}
(0566) 		}
    076F C024      RJMP	0x0794
(0567) 	else
(0568) 		{
(0569) 			set_page_R(yy/8);
    0770 2D0E      MOV	R16,R14
    0771 9506      LSR	R16
    0772 9506      LSR	R16
    0773 9506      LSR	R16
    0774 DCA8      RCALL	_set_page_R
(0570) 			set_col_addr_R(xx-64);	
    0775 2D0C      MOV	R16,R12
    0776 5400      SUBI	R16,0x40
    0777 DCC1      RCALL	_set_col_addr_R
(0571) 			ch=read_LCD(RIGHT);
    0778 E001      LDI	R16,1
    0779 DBE4      RCALL	_read_LCD
    077A 2F60      MOV	R22,R16
    077B 2777      CLR	R23
(0572) 			set_col_addr_R(xx-64);	
    077C 2D0C      MOV	R16,R12
    077D 5400      SUBI	R16,0x40
    077E DCBA      RCALL	_set_col_addr_R
(0573) 			if(flag)
    077F 20AA      TST	R10
    0780 F041      BEQ	0x0789
(0574) 				write_LCD(RIGHT,DATA,ch|y);
    0781 011B      MOVW	R2,R22
    0782 2A24      OR	R2,R20
    0783 2A35      OR	R3,R21
    0784 8228      STD	Y+0,R2
    0785 E021      LDI	R18,1
    0786 E001      LDI	R16,1
    0787 DB83      RCALL	_write_LCD
    0788 C00B      RJMP	0x0794
(0575) 			else
(0576) 			{
(0577) 				y=~y;
    0789 9540      COM	R20
    078A 9550      COM	R21
(0578) 				ch&=y;
    078B 2364      AND	R22,R20
    078C 2375      AND	R23,R21
(0579) 				write_LCD(RIGHT,DATA,ch|y);
    078D 011B      MOVW	R2,R22
    078E 2A24      OR	R2,R20
    078F 2A35      OR	R3,R21
    0790 8228      STD	Y+0,R2
    0791 E021      LDI	R18,1
    0792 E001      LDI	R16,1
    0793 DB77      RCALL	_write_LCD
(0580) 			}
(0581) 		}
    0794 9621      ADIW	R28,1
    0795 940E0990  CALL	pop_gset5
    0797 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
    0798 940E0993  CALL	push_gset5
    079A 2EC2      MOV	R12,R18
    079B 2F40      MOV	R20,R16
    079C 972B      SBIW	R28,0xB
(0582) }
(0583) /*void point(void) 
(0584) { 
(0585)    uchar   x1, y1, y; 
(0586) 
(0587)    x1 = CurCol; 
(0588)    y1 = CurRow; 
(0589)    CurRow = y1 >> 3;      //取Y方向分页地址   
(0590)    Rddata();               // get cbyte on screen 
(0591)    y = y1 & 0x07;     //字节内位置计算  
(0592)    Wrdata(cbyte | (1 << y));   //画上屏幕    /
(0593)    CurCol = x1;         ///恢复xy坐标     /
(0594)    CurRow = y1; 
(0595) } */
(0596) 
(0597) /************************************************/ 
(0598) /*画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2      */ 
(0599) /************************************************/ 
(0600) 
(0601) /*void circle(uchar Ox, uchar Oy, uchar Rx) 
(0602) { 
(0603)    unsigned int xx, rr, xt, yt, rs; 
(0604)     
(0605)     yt = Rx; 
(0606)    rr = Rx * Rx + 1;         //补偿 1 修正方形 
(0607)    rs = (yt + (yt >> 1)) >> 1;      //(*0.75)分开1/8圆弧来画 
(0608)    for (xt = 0; xt <= rs; xt++) 
(0609)    { 
(0610)       xx = xt * xt; 
(0611)       while ((yt * yt) > (rr - xx)) 
(0612)             yt--; 
(0613)       col = Ox + xt;      //第一象限 
(0614)       row=Oy-yt; 
(0615)       point(); 
(0616)       col = Ox - xt;      //第二象限 
(0617)       point(); 
(0618)       row = Oy + yt;      //第三象限 
(0619)       point(); 
(0620)       col = Ox + xt;      //第四象限 
(0621)       point(); 
(0622) 
(0623) // ***************45度镜象画另一半************

⌨️ 快捷键说明

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