📄 test.lst
字号:
(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 + -