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

📄 avr_ks0108.lst

📁 用avr控制的ks0108型128×64显示程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    056F 16C6      CP	R12,R22
    0570 F408      BCC	0x0572
    0571 CFC7      RJMP	0x0539
(0412) 			}
(0413) 		}
    0572 C07D      RJMP	0x05F0
(0414) 		else //上半部是写半个字节
(0415) 		{
(0416) 			for(j=0;j<width;j++)
    0573 24CC      CLR	R12
    0574 C035      RJMP	0x05AA
(0417) 			{
(0418) 				SetPageCol(uPage,uCol+j);
    0575 8129      LDD	R18,Y+1
    0576 0D2C      ADD	R18,R12
    0577 810A      LDD	R16,Y+2
    0578 DF17      RCALL	_SetPageCol
(0419) 				if(uCol+j<64) ch_r=read_LCD(LEFT);
    0579 8189      LDD	R24,Y+1
    057A 0D8C      ADD	R24,R12
    057B 3480      CPI	R24,0x40
    057C F420      BCC	0x0581
    057D 2700      CLR	R16
    057E DDDF      RCALL	_read_LCD
    057F 2EA0      MOV	R10,R16
    0580 C003      RJMP	0x0584
(0420) 				else ch_r=read_LCD(RIGHT);
    0581 E001      LDI	R16,1
    0582 DDDB      RCALL	_read_LCD
    0583 2EA0      MOV	R10,R16
(0421) 				ch_r&=0x0f;
    0584 2D8A      MOV	R24,R10
    0585 708F      ANDI	R24,0xF
    0586 2EA8      MOV	R10,R24
(0422) 				ch_w=ASC_16[k].Msk[j];
    0587 E181      LDI	R24,0x11
    0588 9F84      MUL	R24,R20
    0589 0110      MOVW	R2,R0
    058A E585      LDI	R24,0x55
    058B E090      LDI	R25,0
    058C 0E28      ADD	R2,R24
    058D 1E39      ADC	R3,R25
    058E 2DEC      MOV	R30,R12
    058F 27FF      CLR	R31
    0590 0DE2      ADD	R30,R2
    0591 1DF3      ADC	R31,R3
    0592 90E4      LPM	R14,0(Z)
(0423) 				ch_w=ch_w<<4;
    0593 2D8E      MOV	R24,R14
    0594 708F      ANDI	R24,0xF
    0595 9582      SWAP	R24
    0596 2EE8      MOV	R14,R24
(0424) 				ch_w|=ch_r;
    0597 28EA      OR	R14,R10
(0425) 				SetPageCol(uPage,uCol+j);
    0598 8129      LDD	R18,Y+1
    0599 0D2C      ADD	R18,R12
    059A 810A      LDD	R16,Y+2
    059B DEF4      RCALL	_SetPageCol
(0426) 				if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w); 
    059C 8189      LDD	R24,Y+1
    059D 0D8C      ADD	R24,R12
    059E 3480      CPI	R24,0x40
    059F F428      BCC	0x05A5
    05A0 82E8      STD	Y+0,R14
    05A1 E021      LDI	R18,1
    05A2 2700      CLR	R16
    05A3 DD67      RCALL	_write_LCD
    05A4 C004      RJMP	0x05A9
(0427) 				else write_LCD(RIGHT,DATA,ch_w); 
    05A5 82E8      STD	Y+0,R14
    05A6 E021      LDI	R18,1
    05A7 E001      LDI	R16,1
    05A8 DD62      RCALL	_write_LCD
    05A9 94C3      INC	R12
    05AA 16C6      CP	R12,R22
    05AB F408      BCC	0x05AD
    05AC CFC8      RJMP	0x0575
(0428) 			}
(0429) 			SetPageCol(uPage+1,uCol);
    05AD 8129      LDD	R18,Y+1
    05AE 810A      LDD	R16,Y+2
    05AF 5F0F      SUBI	R16,0xFF
    05B0 DEDF      RCALL	_SetPageCol
(0430) 			for(j=0;j<width;j++)
    05B1 24CC      CLR	R12
    05B2 C03A      RJMP	0x05ED
(0431) 			{
(0432) 				SetPageCol(uPage+1,uCol+j);
    05B3 8129      LDD	R18,Y+1
    05B4 0D2C      ADD	R18,R12
    05B5 810A      LDD	R16,Y+2
    05B6 5F0F      SUBI	R16,0xFF
    05B7 DED8      RCALL	_SetPageCol
(0433) 				
(0434) 				ch_r=ASC_16[k].Msk[j];
    05B8 E181      LDI	R24,0x11
    05B9 9F84      MUL	R24,R20
    05BA 0110      MOVW	R2,R0
    05BB E585      LDI	R24,0x55
    05BC E090      LDI	R25,0
    05BD 0E28      ADD	R2,R24
    05BE 1E39      ADC	R3,R25
    05BF 2DEC      MOV	R30,R12
    05C0 27FF      CLR	R31
    05C1 0DE2      ADD	R30,R2
    05C2 1DF3      ADC	R31,R3
    05C3 90A4      LPM	R10,0(Z)
(0435) 				ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j];
    05C4 E181      LDI	R24,0x11
    05C5 9F84      MUL	R24,R20
    05C6 0110      MOVW	R2,R0
    05C7 E585      LDI	R24,0x55
    05C8 E090      LDI	R25,0
    05C9 0E28      ADD	R2,R24
    05CA 1E39      ADC	R3,R25
    05CB 2DEC      MOV	R30,R12
    05CC 27FF      CLR	R31
    05CD 9638      ADIW	R30,0x8
    05CE 0DE2      ADD	R30,R2
    05CF 1DF3      ADC	R31,R3
    05D0 90E4      LPM	R14,0(Z)
(0436) 				ch_r=ch_r>>4;
    05D1 2D8A      MOV	R24,R10
    05D2 9582      SWAP	R24
    05D3 708F      ANDI	R24,0xF
    05D4 2EA8      MOV	R10,R24
(0437) 				ch_w=ch_w<<4; 
    05D5 2D8E      MOV	R24,R14
    05D6 708F      ANDI	R24,0xF
    05D7 9582      SWAP	R24
    05D8 2EE8      MOV	R14,R24
(0438) 				ch_w|=ch_r;
    05D9 28EA      OR	R14,R10
(0439) 				SetPageCol(uPage+1,uCol+j);
    05DA 8129      LDD	R18,Y+1
    05DB 0D2C      ADD	R18,R12
    05DC 810A      LDD	R16,Y+2
    05DD 5F0F      SUBI	R16,0xFF
    05DE DEB1      RCALL	_SetPageCol
(0440) 				if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w); 
    05DF 8189      LDD	R24,Y+1
    05E0 0D8C      ADD	R24,R12
    05E1 3480      CPI	R24,0x40
    05E2 F428      BCC	0x05E8
    05E3 82E8      STD	Y+0,R14
    05E4 E021      LDI	R18,1
    05E5 2700      CLR	R16
    05E6 DD24      RCALL	_write_LCD
    05E7 C004      RJMP	0x05EC
(0441) 				else write_LCD(RIGHT,DATA,ch_w); 
    05E8 82E8      STD	Y+0,R14
    05E9 E021      LDI	R18,1
    05EA E001      LDI	R16,1
    05EB DD1F      RCALL	_write_LCD
    05EC 94C3      INC	R12
    05ED 16C6      CP	R12,R22
    05EE F408      BCC	0x05F0
    05EF CFC3      RJMP	0x05B3
(0442) 			}
(0443) 		}
(0444) 	}
(0445) 	SetPageCol(uPage,uCol+width);
    05F0 8129      LDD	R18,Y+1
    05F1 0F26      ADD	R18,R22
    05F2 810A      LDD	R16,Y+2
    05F3 DE9C      RCALL	_SetPageCol
    05F4 9623      ADIW	R28,3
    05F5 940E0990  CALL	pop_gset5
    05F7 9508      RET
_disp_hz:
  uPage                --> Y+1
  ch_r                 --> R22
  k                    --> R10
  uCol                 --> R12
  ch_w                 --> R14
  j                    --> R20
  hz                   --> R20
    05F8 940E0993  CALL	push_gset5
    05FA 01A8      MOVW	R20,R16
    05FB 9722      SBIW	R28,2
(0446) }
(0447) 
(0448) 
(0449) void disp_hz(unsigned char *hz)
(0450) {
(0451) 	unsigned char k,j,uPage,uCol,ch_r,ch_w;
(0452) 	uPage = GetPage();
    05FC DE8D      RCALL	_GetPage
    05FD 8309      STD	Y+1,R16
(0453) 	uCol = GetCol();
    05FE DE8E      RCALL	_GetCol
    05FF 2EC0      MOV	R12,R16
(0454) 	for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
    0600 24AA      CLR	R10
    0601 C019      RJMP	0x061B
(0455) 	{
(0456) 		if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1])
    0602 E18A      LDI	R24,0x1A
    0603 9D8A      MUL	R24,R10
    0604 0110      MOVW	R2,R0
    0605 E582      LDI	R24,0x52
    0606 E092      LDI	R25,2
    0607 01F1      MOVW	R30,R2
    0608 0FE8      ADD	R30,R24
    0609 1FF9      ADC	R31,R25
    060A 91E4      LPM	R30,0(Z)
    060B 01DA      MOVW	R26,R20
    060C 904C      LD	R4,0(X)
    060D 164E      CP	R4,R30
    060E F459      BNE	0x061A
    060F E583      LDI	R24,0x53
    0610 E092      LDI	R25,2
    0611 01F1      MOVW	R30,R2
    0612 0FE8      ADD	R30,R24
    0613 1FF9      ADC	R31,R25
    0614 91E4      LPM	R30,0(Z)
    0615 9611      ADIW	R26,1
    0616 902C      LD	R2,0(X)
    0617 162E      CP	R2,R30
    0618 F409      BNE	0x061A
(0457) 			break;
    0619 C004      RJMP	0x061E
    061A 94A3      INC	R10
    061B 2D8A      MOV	R24,R10
    061C 3182      CPI	R24,0x12
    061D F320      BCS	0x0602
(0458) 	}
(0459) 
(0460) 	if(CurOffset==1) 
    061E 91800092  LDS	R24,CurOffset
    0620 3081      CPI	R24,1
    0621 F009      BEQ	0x0623
    0622 C064      RJMP	0x0687
(0461) 	{
(0462) 	for(j=0;j<ASC_HZ_WIDTH;j++)
    0623 2744      CLR	R20
    0624 C01E      RJMP	0x0643
(0463) 	{
(0464) 		SetPageCol(uPage,uCol+j);
    0625 2D2C      MOV	R18,R12
    0626 0F24      ADD	R18,R20
    0627 8109      LDD	R16,Y+1
    0628 DE67      RCALL	_SetPageCol
(0465) 		ch_w=GB_16[k].Msk[j];
    0629 E18A      LDI	R24,0x1A
    062A 9D8A      MUL	R24,R10
    062B 0110      MOVW	R2,R0
    062C E584      LDI	R24,0x54
    062D E092      LDI	R25,2
    062E 0E28      ADD	R2,R24
    062F 1E39      ADC	R3,R25
    0630 2FE4      MOV	R30,R20
    0631 27FF      CLR	R31
    0632 0DE2      ADD	R30,R2
    0633 1DF3      ADC	R31,R3
    0634 90E4      LPM	R14,0(Z)
(0466) 		if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w);
    0635 2D8C      MOV	R24,R12
    0636 0F84      ADD	R24,R20
    0637 3480      CPI	R24,0x40
    0638 F428      BCC	0x063E
    0639 82E8      STD	Y+0,R14
    063A E021      LDI	R18,1
    063B 2700      CLR	R16
    063C DCCE      RCALL	_write_LCD
    063D C004      RJMP	0x0642
(0467) 		else write_LCD(RIGHT,DATA,ch_w);
    063E 82E8      STD	Y+0,R14
    063F E021      LDI	R18,1
    0640 E001      LDI	R16,1
    0641 DCC9      RCALL	_write_LCD
    0642 9543      INC	R20
    0643 304C      CPI	R20,0xC
    0644 F300      BCS	0x0625
(0468) 	}
(0469) 	SetPageCol(uPage+1,uCol);
    0645 2D2C      MOV	R18,R12
    0646 8109      LDD	R16,Y+1
    0647 5F0F      SUBI	R16,0xFF
    0648 DE47      RCALL	_SetPageCol
(0470) 
(0471) 	for(j=0;j<ASC_HZ_WIDTH;j++)
    0649 2744      CLR	R20
    064A C034      RJMP	0x067F
(0472) 	{
(0473) 		SetPageCol(uPage+1,uCol+j);
    064B 2D2C      MOV	R18,R12
    064C 0F24      ADD	R18,R20
    064D 8109      LDD	R16,Y+1
    064E 5F0F      SUBI	R16,0xFF
    064F DE40      RCALL	_SetPageCol
(0474) 		if(uCol+j<64) ch_r=read_LCD(LEFT);
    0650 2D8C      MOV	R24,R12
    0651 0F84      ADD	R24,R20
    0652 3480      CPI	R24,0x40
    0653 F420      BCC	0x0658
    0654 2700      CLR	R16
    0655 DD08      RCALL	_read_LCD
    0656 2F60      MOV	R22,R16
    0657 C003      RJMP	0x065B
(0475) 		else ch_r=read_LCD(RIGHT);
    0658 E001      LDI	R16,1
    0659 DD04      RCALL	_read_LCD
    065A 2F60      MOV	R22,R16
(0476) 		ch_r&=0xf0;
    065B 7F60      ANDI	R22,0xF0
(0477) 		ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f; 
    065C E18A      LDI	R24,0x1A
    065D 9D8A      MUL	R24,R10
    065E 0110      MOVW	R2,R0
    065F E584      LDI	R24,0x54
    0660 E092      LDI	R25,2
    0661 0E28      ADD	R2,R24
    0662 1E39      ADC	R3,R25
    0663 2FE4      MOV	R30,R20
    0664 27FF      CLR	R31
    0665 963C      ADIW	R30,0xC
    0666 0DE2      ADD	R30,R2
    0667 1DF3      ADC	R31,R3
    0668 91E4      LPM	R30,0(Z)
    0669 70EF      ANDI	R30,0xF
    066A 2EEE      MOV	R14,R30
(0478) 		ch_w|=ch_r;
    066B 2AE6      OR	R14,R22
(0479) 		SetPageCol(uPage+1,uCol+j);
    066C 2D2C      MOV	R18,R12
    066D 0F24      ADD	R18,R20
    066E 8109      LDD	R16,Y+1
    066F 5F0F      SUBI	R16,0xFF
    0670 DE1F      RCALL	_SetPageCol
(0480) 		if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w); 
    0671 2D8C      MOV	R24,R12
    0672 0F84      ADD	R24,R20
    0673 3480      CPI	R24,0x40
    0674 F428      BCC	0x067A
    0675 82E8      STD	Y+0,R14
    0676 E021      LDI	R18,1
    0677 2700      CLR	R16
    0678 DC92      RCALL	_write_LCD
    0679 C004      RJMP	0x067E
(0481) 		else write_LCD(RIGHT,DATA,ch_w);
    067A 82E8      STD	Y+0,R14
    067B E021      LDI	R18,1
    067C E001      LDI	R16,1
    067D DC8D      RCALL	_write_LCD
    067E 9543      INC	R20
    067F 304C      CPI	R20,0xC
    0680 F408      BCC	0x0682
    0681 CFC9      RJMP	0x064B
(0482) 	}
(0483) 	SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
    0682 2D2C      MOV	R18,R12
    0683 5F24      SUBI	R18,0xF4
    0684 8109      LDD	R16,Y+1
    0685 DE0A      RCALL	_SetPageCol
(0484) 	}
    0686 C07F      RJMP	0x0706
(0485) 
(0486) 	else //汉字上半部是写半个字节
(0487) 	{
(0488) 	for(j=0;j<ASC_HZ_WIDTH;j++)
    0687 2744      CLR	R20
    0688 C033      RJMP	0x06BC
(0489) 	{
(0490) 		SetPageCol(uPage,uCol+j);
    0689 2D2C      MOV	R18,R12
    068A 0F24      ADD	R18,R20
    068B 8109      LDD	R16,Y+1
    068C DE03      RCALL	_SetPageCol
(0491) 		if(uCol+j<64) ch_r=read_LCD(LEFT);
    068D 2D8C      MOV	R24,R12
    068E 0F84      ADD	R24,R20
    068F 3480      CPI	R24,0x40
    0690 F420      BCC	0x0695
    0691 2700      CLR	R16
    0692 DCCB      RCALL	_read_LCD
    0693 2F60      MOV	R22,R16
    0694 C003      RJMP	0x0698
(0492) 		else ch_r=read_LCD(RIGHT);
    0695 E001      LDI	R16,1
    0696 DCC7      RCALL	_read_LCD
    0697 2F60      MOV	R22,R16
(0493) 		ch_r&=0x0f;
    0698 706F      ANDI	R22,0xF
(0494) 		ch_w=GB_16[k].Msk[j];
    0699 E18A      LDI	R24,0x1A
    069A 9D8A      MUL	R24,R10
    069B 0110      MOVW	R2,R0
    069C E584      LDI	R24,0x54
    069D E092      LDI	R25,2
    069E 0E28      ADD	R2,R24
    069F 1E39      ADC	R3,R25
    06A0 2FE4      MOV	R30,R20
    06A1 27FF      CLR	R31
    06A2 0DE2      ADD	R30,R2
    06A3 1DF3      ADC	R31,R3
    06A4 90E4      LPM	R14,0(Z)

⌨️ 快捷键说明

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