📄 12864.lst
字号:
04E1 DD72 RCALL _read_LCD
04E2 2F60 MOV R22,R16
(0364) ch_r&=0xf0;
04E3 7F60 ANDI R22,0xF0
(0365) ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;
04E4 E18A LDI R24,0x1A
04E5 9D8A MUL R24,R10
04E6 0110 MOVW R2,R0
04E7 E584 LDI R24,0x54
04E8 E092 LDI R25,2
04E9 0E28 ADD R2,R24
04EA 1E39 ADC R3,R25
04EB 2FE4 MOV R30,R20
04EC 27FF CLR R31
04ED 963C ADIW R30,0xC
04EE 0DE2 ADD R30,R2
04EF 1DF3 ADC R31,R3
04F0 91E4 LPM R30,0(Z)
04F1 70EF ANDI R30,0xF
04F2 2EEE MOV R14,R30
(0366) ch_w|=ch_r;
04F3 2AE6 OR R14,R22
(0367) SetPageCol(uPage+1,uCol+j);
04F4 2D2C MOV R18,R12
04F5 0F24 ADD R18,R20
04F6 8109 LDD R16,Y+1
04F7 5F0F SUBI R16,0xFF
04F8 DE1F RCALL _SetPageCol
(0368) if(uCol+j<64)
04F9 2D8C MOV R24,R12
04FA 0F84 ADD R24,R20
04FB 3480 CPI R24,0x40
04FC F428 BCC 0x0502
(0369) write_LCD(LEFT,DATA,ch_w);
04FD 82E8 STD Y+0,R14
04FE E021 LDI R18,1
04FF 2700 CLR R16
0500 DD36 RCALL _write_LCD
0501 C004 RJMP 0x0506
(0370) else
(0371) write_LCD(RIGHT,DATA,ch_w);
0502 82E8 STD Y+0,R14
0503 E021 LDI R18,1
0504 E001 LDI R16,1
0505 DD31 RCALL _write_LCD
0506 9543 INC R20
0507 304C CPI R20,0xC
0508 F408 BCC 0x050A
0509 CFC9 RJMP 0x04D3
(0372) }
(0373) SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
050A 2D2C MOV R18,R12
050B 5F24 SUBI R18,0xF4
050C 8109 LDD R16,Y+1
050D DE0A RCALL _SetPageCol
(0374) }
050E C07F RJMP 0x058E
(0375)
(0376) else //汉字上半部是写半个字节
(0377) {
(0378) for(j=0;j<ASC_HZ_WIDTH;j++)
050F 2744 CLR R20
0510 C033 RJMP 0x0544
(0379) {
(0380) SetPageCol(uPage,uCol+j);
0511 2D2C MOV R18,R12
0512 0F24 ADD R18,R20
0513 8109 LDD R16,Y+1
0514 DE03 RCALL _SetPageCol
(0381) if(uCol+j<64)
0515 2D8C MOV R24,R12
0516 0F84 ADD R24,R20
0517 3480 CPI R24,0x40
0518 F420 BCC 0x051D
(0382) ch_r=read_LCD(LEFT);
0519 2700 CLR R16
051A DD39 RCALL _read_LCD
051B 2F60 MOV R22,R16
051C C003 RJMP 0x0520
(0383) else ch_r=read_LCD(RIGHT);
051D E001 LDI R16,1
051E DD35 RCALL _read_LCD
051F 2F60 MOV R22,R16
(0384) ch_r&=0x0f;
0520 706F ANDI R22,0xF
(0385) ch_w=GB_16[k].Msk[j];
0521 E18A LDI R24,0x1A
0522 9D8A MUL R24,R10
0523 0110 MOVW R2,R0
0524 E584 LDI R24,0x54
0525 E092 LDI R25,2
0526 0E28 ADD R2,R24
0527 1E39 ADC R3,R25
0528 2FE4 MOV R30,R20
0529 27FF CLR R31
052A 0DE2 ADD R30,R2
052B 1DF3 ADC R31,R3
052C 90E4 LPM R14,0(Z)
(0386) ch_w=ch_w<<4;
052D 2D8E MOV R24,R14
052E 708F ANDI R24,0xF
052F 9582 SWAP R24
0530 2EE8 MOV R14,R24
(0387) ch_w|=ch_r;
0531 2AE6 OR R14,R22
(0388) SetPageCol(uPage,uCol+j);
0532 2D2C MOV R18,R12
0533 0F24 ADD R18,R20
0534 8109 LDD R16,Y+1
0535 DDE2 RCALL _SetPageCol
(0389) if(uCol+j<64)
0536 2D8C MOV R24,R12
0537 0F84 ADD R24,R20
0538 3480 CPI R24,0x40
0539 F428 BCC 0x053F
(0390) write_LCD(LEFT,DATA,ch_w);
053A 82E8 STD Y+0,R14
053B E021 LDI R18,1
053C 2700 CLR R16
053D DCF9 RCALL _write_LCD
053E C004 RJMP 0x0543
(0391) else
(0392) write_LCD(RIGHT,DATA,ch_w);
053F 82E8 STD Y+0,R14
0540 E021 LDI R18,1
0541 E001 LDI R16,1
0542 DCF4 RCALL _write_LCD
0543 9543 INC R20
0544 304C CPI R20,0xC
0545 F408 BCC 0x0547
0546 CFCA RJMP 0x0511
(0393) }
(0394) SetPageCol(uPage+1,uCol);
0547 2D2C MOV R18,R12
0548 8109 LDD R16,Y+1
0549 5F0F SUBI R16,0xFF
054A DDCD RCALL _SetPageCol
(0395) for(j=0;j<ASC_HZ_WIDTH;j++)
054B 2744 CLR R20
054C C03A RJMP 0x0587
(0396) {
(0397) SetPageCol(uPage+1,uCol+j);
054D 2D2C MOV R18,R12
054E 0F24 ADD R18,R20
054F 8109 LDD R16,Y+1
0550 5F0F SUBI R16,0xFF
0551 DDC6 RCALL _SetPageCol
(0398)
(0399) ch_r=GB_16[k].Msk[j];
0552 E18A LDI R24,0x1A
0553 9D8A MUL R24,R10
0554 0110 MOVW R2,R0
0555 E584 LDI R24,0x54
0556 E092 LDI R25,2
0557 0E28 ADD R2,R24
0558 1E39 ADC R3,R25
0559 2FE4 MOV R30,R20
055A 27FF CLR R31
055B 0DE2 ADD R30,R2
055C 1DF3 ADC R31,R3
055D 9164 LPM R22,0(Z)
(0400) ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
055E E18A LDI R24,0x1A
055F 9D8A MUL R24,R10
0560 0110 MOVW R2,R0
0561 E584 LDI R24,0x54
0562 E092 LDI R25,2
0563 0E28 ADD R2,R24
0564 1E39 ADC R3,R25
0565 2FE4 MOV R30,R20
0566 27FF CLR R31
0567 963C ADIW R30,0xC
0568 0DE2 ADD R30,R2
0569 1DF3 ADC R31,R3
056A 90E4 LPM R14,0(Z)
(0401) ch_r=ch_r>>4;
056B 2F86 MOV R24,R22
056C 9582 SWAP R24
056D 708F ANDI R24,0xF
056E 2F68 MOV R22,R24
(0402) ch_w=ch_w<<4;
056F 2D8E MOV R24,R14
0570 708F ANDI R24,0xF
0571 9582 SWAP R24
0572 2EE8 MOV R14,R24
(0403) ch_w|=ch_r;
0573 2AE6 OR R14,R22
(0404) SetPageCol(uPage+1,uCol+j);
0574 2D2C MOV R18,R12
0575 0F24 ADD R18,R20
0576 8109 LDD R16,Y+1
0577 5F0F SUBI R16,0xFF
0578 DD9F RCALL _SetPageCol
(0405) if(uCol+j<64)
0579 2D8C MOV R24,R12
057A 0F84 ADD R24,R20
057B 3480 CPI R24,0x40
057C F428 BCC 0x0582
(0406) write_LCD(LEFT,DATA,ch_w);
057D 82E8 STD Y+0,R14
057E E021 LDI R18,1
057F 2700 CLR R16
0580 DCB6 RCALL _write_LCD
0581 C004 RJMP 0x0586
(0407) else
(0408) write_LCD(RIGHT,DATA,ch_w);
0582 82E8 STD Y+0,R14
0583 E021 LDI R18,1
0584 E001 LDI R16,1
0585 DCB1 RCALL _write_LCD
0586 9543 INC R20
0587 304C CPI R20,0xC
0588 F408 BCC 0x058A
0589 CFC3 RJMP 0x054D
(0409) }
(0410) SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
058A 2D2C MOV R18,R12
058B 5F24 SUBI R18,0xF4
058C 8109 LDD R16,Y+1
058D DD8A RCALL _SetPageCol
(0411) }
058E 9622 ADIW R28,2
058F 940E1809 CALL pop_gset5
0591 9508 RET
_disp_str:
i --> R20
p --> R22
0592 940E1812 CALL push_gset2
0594 01B8 MOVW R22,R16
(0412) }
(0413)
(0414)
(0415) //-----------字符串显示函数----------------
(0416) void disp_str(unsigned char *p)
(0417) {
(0418) unsigned char i=0;
0595 2744 CLR R20
0596 C015 RJMP 0x05AC
(0419) while(p[i]>0)
(0420) {
(0421) if(p[i] < 128)
0597 2FE4 MOV R30,R20
0598 27FF CLR R31
0599 0FE6 ADD R30,R22
059A 1FF7 ADC R31,R23
059B 8180 LDD R24,Z+0
059C 3880 CPI R24,0x80
059D F438 BCC 0x05A5
(0422) { /* ASCII */
(0423) disp_char(p[i]);
059E 2FE4 MOV R30,R20
059F 27FF CLR R31
05A0 0FE6 ADD R30,R22
05A1 1FF7 ADC R31,R23
05A2 8100 LDD R16,Z+0
05A3 DDC7 RCALL _disp_char
(0424) }
05A4 C006 RJMP 0x05AB
(0425) else
(0426) { /* 中文 */
(0427) disp_hz(&p[i]);
05A5 2F04 MOV R16,R20
05A6 2711 CLR R17
05A7 0F06 ADD R16,R22
05A8 1F17 ADC R17,R23
05A9 DED6 RCALL _disp_hz
(0428) i++;
05AA 9543 INC R20
(0429) }
(0430) i++;
05AB 9543 INC R20
05AC 2FE4 MOV R30,R20
05AD 27FF CLR R31
05AE 0FE6 ADD R30,R22
05AF 1FF7 ADC R31,R23
05B0 8020 LDD R2,Z+0
05B1 2433 CLR R3
05B2 1432 CP R3,R2
05B3 F318 BCS 0x0597
05B4 940E1800 CALL pop_gset2
05B6 9508 RET
_GUI_Point:
y --> R22
ch --> R20
flag --> R10
yy --> R14
xx --> R12
05B7 940E180C CALL push_gset5
05B9 2EE2 MOV R14,R18
05BA 2EC0 MOV R12,R16
05BB 9721 SBIW R28,1
05BC 84AB LDD R10,Y+11
(0431) }
(0432) }
(0433)
(0434)
(0435) //-------------------绘点函数----------------------------------
(0436) //XX--(0-128) YY--(0-63) FLAG=1绘点 FLAG=0 清点
(0437) void GUI_Point(unsigned char xx,unsigned char yy,unsigned char flag)
(0438) {
(0439) unsigned int y,ch;
(0440) ch=yy%8; //余数
05BD E028 LDI R18,0x8
05BE E030 LDI R19,0
05BF 2D0E MOV R16,R14
05C0 2711 CLR R17
05C1 940E1786 CALL mod16s
05C3 01A8 MOVW R20,R16
(0441)
(0442) y=1;
05C4 E061 LDI R22,1
05C5 E070 LDI R23,0
(0443) for(;ch!=0;)
05C6 C008 RJMP 0x05CF
(0444) {
(0445) y=y*2;
05C7 E002 LDI R16,2
05C8 E010 LDI R17,0
05C9 019B MOVW R18,R22
05CA 940E17C0 CALL empy16s
05CC 01B8 MOVW R22,R16
(0446) ch--;
05CD 5041 SUBI R20,1
05CE 4050 SBCI R21,0
05CF 3040 CPI R20,0
05D0 0745 CPC R20,R21
05D1 F7A9 BNE 0x05C7
(0447) }
(0448) if(xx<64)
05D2 2D8C MOV R24,R12
05D3 3480 CPI R24,0x40
05D4 F510 BCC 0x05F7
(0449) {
(0450) set_page_L(yy/8);
05D5 2D0E MOV R16,R14
05D6 9506 LSR R16
05D7 9506 LSR R16
05D8 9506 LSR R16
05D9 DCC2 RCALL _set_page_L
(0451) set_col_addr_L(xx);
05DA 2D0C MOV R16,R12
05DB DCDC RCALL _set_col_addr_L
(0452) ch=read_LCD(LEFT);
05DC 2700 CLR R16
05DD DC76 RCALL _read_LCD
05DE 2F40 MOV R20,R16
05DF 2755 CLR R21
(0453) set_col_addr_L(xx);
05E0 2D0C MOV R16,R12
05E1 DCD6 RCALL _set_col_addr_L
(0454) if(flag)
05E2 20AA TST R10
05E3 F041 BEQ 0x05EC
(0455) write_LCD(LEFT,DATA,ch|y);
05E4 011A MOVW R2,R20
05E5 2A26 OR R2,R22
05E6 2A37 OR R3,R23
05E7 8228 STD Y+0,R2
05E8 E021 LDI R18,1
05E9 2700 CLR R16
05EA DC4C RCALL _write_LCD
05EB C02E RJMP 0x061A
(0456) else
(0457) write_LCD(LEFT,DATA,ch&(~y));
05EC 011B MOVW R2,R22
05ED 9420 COM R2
05EE 9430 COM R3
05EF 012A MOVW R4,R20
05F0 2042 AND R4,R2
05F1 2053 AND R5,R3
05F2 8248 STD Y+0,R4
05F3 E021 LDI R18,1
05F4 2700 CLR R16
05F5 DC41 RCALL _write_LCD
(0458) }
05F6 C023 RJMP 0x061A
(0459) else
(0460) {
(0461) set_page_R(yy/8);
05F7 2D0E MOV R16,R14
05F8 9506 LSR R16
05F9 9506 LSR R16
05FA 9506 LSR R16
05FB DCAE RCALL _set_page_R
(0462) set_col_addr_R(xx-64);
05FC 2D0C MOV R16,R12
05FD 5400 SUBI R16,0x40
05FE DCC7 RCALL _set_col_addr_R
(0463) ch=read_LCD(RIGHT);
05FF E001 LDI R16,1
0600 DC53 RCALL _read_LCD
0601 2F40 MOV R20,R16
0602 2755 CLR R21
(0464) set_col_addr_R(xx-64);
0603 2D0C MOV R16,R12
0604 5400 SUBI R16,0x40
0605 DCC0 RCALL _set_col_addr_R
(0465) if(flag)
0606 20AA TST R10
0607 F041 BEQ 0x0610
(0466) write_LCD(RIGHT,DATA,ch|y);
0608 011A MOVW R2,R20
0609 2A26 OR R2,R22
060A 2A37 OR R3,R23
060B 8228 STD Y+0,R2
060C E021 LDI R18,1
060D E001 LDI R16,1
060E DC28 RCALL _write_LCD
060F C00A RJMP 0x061A
(0467) else
(0468) write_LCD(RIGHT,DATA,ch&(~y));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -