📄 mega32-lcm.lst
字号:
0592 1DF3 ADC R31,R3
0593 90E4 LPM R14,0(Z)
(0408) ch_w=ch_w<<4;
0594 2D8E MOV R24,R14
0595 708F ANDI R24,0xF
0596 9582 SWAP R24
0597 2EE8 MOV R14,R24
(0409) ch_w|=ch_r;
0598 28EA OR R14,R10
(0410) SetPageCol(uPage,uCol+j);
0599 8129 LDD R18,Y+1
059A 0D2C ADD R18,R12
059B 810A LDD R16,Y+2
059C DEF4 RCALL _SetPageCol
(0411) if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
059D 8189 LDD R24,Y+1
059E 0D8C ADD R24,R12
059F 3480 CPI R24,0x40
05A0 F428 BCC 0x05A6
05A1 82E8 STD Y+0,R14
05A2 E021 LDI R18,1
05A3 2700 CLR R16
05A4 DD7C RCALL _write_LCD
05A5 C004 RJMP 0x05AA
(0412) else write_LCD(RIGHT,DATA,ch_w);
05A6 82E8 STD Y+0,R14
05A7 E021 LDI R18,1
05A8 E001 LDI R16,1
05A9 DD77 RCALL _write_LCD
05AA 94C3 INC R12
05AB 16C6 CP R12,R22
05AC F408 BCC 0x05AE
05AD CFC8 RJMP 0x0576
(0413) }
(0414) SetPageCol(uPage+1,uCol);
05AE 8129 LDD R18,Y+1
05AF 810A LDD R16,Y+2
05B0 5F0F SUBI R16,0xFF
05B1 DEDF RCALL _SetPageCol
(0415) for(j=0;j<width;j++)
05B2 24CC CLR R12
05B3 C03A RJMP 0x05EE
(0416) {
(0417) SetPageCol(uPage+1,uCol+j);
05B4 8129 LDD R18,Y+1
05B5 0D2C ADD R18,R12
05B6 810A LDD R16,Y+2
05B7 5F0F SUBI R16,0xFF
05B8 DED8 RCALL _SetPageCol
(0418)
(0419) ch_r=ASC_16[k].Msk[j];
05B9 E181 LDI R24,0x11
05BA 9F84 MUL R24,R20
05BB 0110 MOVW R2,R0
05BC E585 LDI R24,0x55
05BD E090 LDI R25,0
05BE 0E28 ADD R2,R24
05BF 1E39 ADC R3,R25
05C0 2DEC MOV R30,R12
05C1 27FF CLR R31
05C2 0DE2 ADD R30,R2
05C3 1DF3 ADC R31,R3
05C4 90A4 LPM R10,0(Z)
(0420) ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j];
05C5 E181 LDI R24,0x11
05C6 9F84 MUL R24,R20
05C7 0110 MOVW R2,R0
05C8 E585 LDI R24,0x55
05C9 E090 LDI R25,0
05CA 0E28 ADD R2,R24
05CB 1E39 ADC R3,R25
05CC 2DEC MOV R30,R12
05CD 27FF CLR R31
05CE 9638 ADIW R30,0x8
05CF 0DE2 ADD R30,R2
05D0 1DF3 ADC R31,R3
05D1 90E4 LPM R14,0(Z)
(0421) ch_r=ch_r>>4;
05D2 2D8A MOV R24,R10
05D3 9582 SWAP R24
05D4 708F ANDI R24,0xF
05D5 2EA8 MOV R10,R24
(0422) ch_w=ch_w<<4;
05D6 2D8E MOV R24,R14
05D7 708F ANDI R24,0xF
05D8 9582 SWAP R24
05D9 2EE8 MOV R14,R24
(0423) ch_w|=ch_r;
05DA 28EA OR R14,R10
(0424) SetPageCol(uPage+1,uCol+j);
05DB 8129 LDD R18,Y+1
05DC 0D2C ADD R18,R12
05DD 810A LDD R16,Y+2
05DE 5F0F SUBI R16,0xFF
05DF DEB1 RCALL _SetPageCol
(0425) if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
05E0 8189 LDD R24,Y+1
05E1 0D8C ADD R24,R12
05E2 3480 CPI R24,0x40
05E3 F428 BCC 0x05E9
05E4 82E8 STD Y+0,R14
05E5 E021 LDI R18,1
05E6 2700 CLR R16
05E7 DD39 RCALL _write_LCD
05E8 C004 RJMP 0x05ED
(0426) else write_LCD(RIGHT,DATA,ch_w);
05E9 82E8 STD Y+0,R14
05EA E021 LDI R18,1
05EB E001 LDI R16,1
05EC DD34 RCALL _write_LCD
05ED 94C3 INC R12
05EE 16C6 CP R12,R22
05EF F408 BCC 0x05F1
05F0 CFC3 RJMP 0x05B4
(0427) }
(0428) }
(0429) }
(0430) SetPageCol(uPage,uCol+width);
05F1 8129 LDD R18,Y+1
05F2 0F26 ADD R18,R22
05F3 810A LDD R16,Y+2
05F4 DE9C RCALL _SetPageCol
(0431) }
05F5 9623 ADIW R28,3
05F6 940E09C1 CALL pop_gset5
05F8 9508 RET
_disp_hz:
uPage --> Y+1
ch_r --> R22
k --> R10
uCol --> R12
ch_w --> R14
j --> R20
hz --> R20
05F9 940E09E7 CALL push_gset5
05FB 01A8 MOVW R20,R16
05FC 9722 SBIW R28,2
(0432)
(0433)
(0434) void disp_hz(unsigned char *hz)
(0435) {
(0436) unsigned char k,j,uPage,uCol,ch_r,ch_w;
(0437) uPage = GetPage();
05FD DE8D RCALL _GetPage
05FE 8309 STD Y+1,R16
(0438) uCol = GetCol();
05FF DE8E RCALL _GetCol
0600 2EC0 MOV R12,R16
(0439) for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
0601 24AA CLR R10
0602 C019 RJMP 0x061C
(0440) {
(0441) if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1])
0603 E18A LDI R24,0x1A
0604 9D8A MUL R24,R10
0605 0110 MOVW R2,R0
0606 E582 LDI R24,0x52
0607 E092 LDI R25,2
0608 01F1 MOVW R30,R2
0609 0FE8 ADD R30,R24
060A 1FF9 ADC R31,R25
060B 91E4 LPM R30,0(Z)
060C 01DA MOVW R26,R20
060D 904C LD R4,0(X)
060E 164E CP R4,R30
060F F459 BNE 0x061B
0610 E583 LDI R24,0x53
0611 E092 LDI R25,2
0612 01F1 MOVW R30,R2
0613 0FE8 ADD R30,R24
0614 1FF9 ADC R31,R25
0615 91E4 LPM R30,0(Z)
0616 9611 ADIW R26,1
0617 902C LD R2,0(X)
0618 162E CP R2,R30
0619 F409 BNE 0x061B
(0442) break;
061A C004 RJMP 0x061F
061B 94A3 INC R10
061C 2D8A MOV R24,R10
061D 3182 CPI R24,0x12
061E F320 BCS 0x0603
(0443) }
(0444)
(0445) if(CurOffset==1)
061F 918000C8 LDS R24,_CurOffset
0621 3081 CPI R24,1
0622 F009 BEQ 0x0624
0623 C064 RJMP 0x0688
(0446) {
(0447) for(j=0;j<ASC_HZ_WIDTH;j++)
0624 2744 CLR R20
0625 C01E RJMP 0x0644
(0448) {
(0449) SetPageCol(uPage,uCol+j);
0626 2D2C MOV R18,R12
0627 0F24 ADD R18,R20
0628 8109 LDD R16,Y+1
0629 DE67 RCALL _SetPageCol
(0450) ch_w=GB_16[k].Msk[j];
062A E18A LDI R24,0x1A
062B 9D8A MUL R24,R10
062C 0110 MOVW R2,R0
062D E584 LDI R24,0x54
062E E092 LDI R25,2
062F 0E28 ADD R2,R24
0630 1E39 ADC R3,R25
0631 2FE4 MOV R30,R20
0632 27FF CLR R31
0633 0DE2 ADD R30,R2
0634 1DF3 ADC R31,R3
0635 90E4 LPM R14,0(Z)
(0451) if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
0636 2D8C MOV R24,R12
0637 0F84 ADD R24,R20
0638 3480 CPI R24,0x40
0639 F428 BCC 0x063F
063A 82E8 STD Y+0,R14
063B E021 LDI R18,1
063C 2700 CLR R16
063D DCE3 RCALL _write_LCD
063E C004 RJMP 0x0643
(0452) else write_LCD(RIGHT,DATA,ch_w);
063F 82E8 STD Y+0,R14
0640 E021 LDI R18,1
0641 E001 LDI R16,1
0642 DCDE RCALL _write_LCD
0643 9543 INC R20
0644 304C CPI R20,0xC
0645 F300 BCS 0x0626
(0453) }
(0454) SetPageCol(uPage+1,uCol);
0646 2D2C MOV R18,R12
0647 8109 LDD R16,Y+1
0648 5F0F SUBI R16,0xFF
0649 DE47 RCALL _SetPageCol
(0455)
(0456) for(j=0;j<ASC_HZ_WIDTH;j++)
064A 2744 CLR R20
064B C034 RJMP 0x0680
(0457) {
(0458) SetPageCol(uPage+1,uCol+j);
064C 2D2C MOV R18,R12
064D 0F24 ADD R18,R20
064E 8109 LDD R16,Y+1
064F 5F0F SUBI R16,0xFF
0650 DE40 RCALL _SetPageCol
(0459) if(uCol+j<64) ch_r=read_LCD(LEFT);
0651 2D8C MOV R24,R12
0652 0F84 ADD R24,R20
0653 3480 CPI R24,0x40
0654 F420 BCC 0x0659
0655 2700 CLR R16
0656 DD1B RCALL _read_LCD
0657 2F60 MOV R22,R16
0658 C003 RJMP 0x065C
(0460) else ch_r=read_LCD(RIGHT);
0659 E001 LDI R16,1
065A DD17 RCALL _read_LCD
065B 2F60 MOV R22,R16
(0461) ch_r&=0xf0;
065C 7F60 ANDI R22,0xF0
(0462) ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;
065D E18A LDI R24,0x1A
065E 9D8A MUL R24,R10
065F 0110 MOVW R2,R0
0660 E584 LDI R24,0x54
0661 E092 LDI R25,2
0662 0E28 ADD R2,R24
0663 1E39 ADC R3,R25
0664 2FE4 MOV R30,R20
0665 27FF CLR R31
0666 963C ADIW R30,0xC
0667 0DE2 ADD R30,R2
0668 1DF3 ADC R31,R3
0669 91E4 LPM R30,0(Z)
066A 70EF ANDI R30,0xF
066B 2EEE MOV R14,R30
(0463) ch_w|=ch_r;
066C 2AE6 OR R14,R22
(0464) SetPageCol(uPage+1,uCol+j);
066D 2D2C MOV R18,R12
066E 0F24 ADD R18,R20
066F 8109 LDD R16,Y+1
0670 5F0F SUBI R16,0xFF
0671 DE1F RCALL _SetPageCol
(0465) if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
0672 2D8C MOV R24,R12
0673 0F84 ADD R24,R20
0674 3480 CPI R24,0x40
0675 F428 BCC 0x067B
0676 82E8 STD Y+0,R14
0677 E021 LDI R18,1
0678 2700 CLR R16
0679 DCA7 RCALL _write_LCD
067A C004 RJMP 0x067F
(0466) else write_LCD(RIGHT,DATA,ch_w);
067B 82E8 STD Y+0,R14
067C E021 LDI R18,1
067D E001 LDI R16,1
067E DCA2 RCALL _write_LCD
067F 9543 INC R20
0680 304C CPI R20,0xC
0681 F408 BCC 0x0683
0682 CFC9 RJMP 0x064C
(0467) }
(0468) SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
0683 2D2C MOV R18,R12
0684 5F24 SUBI R18,0xF4
0685 8109 LDD R16,Y+1
0686 DE0A RCALL _SetPageCol
(0469) }
0687 C07F RJMP 0x0707
(0470)
(0471) else //汉字上半部是写半个字节
(0472) {
(0473) for(j=0;j<ASC_HZ_WIDTH;j++)
0688 2744 CLR R20
0689 C033 RJMP 0x06BD
(0474) {
(0475) SetPageCol(uPage,uCol+j);
068A 2D2C MOV R18,R12
068B 0F24 ADD R18,R20
068C 8109 LDD R16,Y+1
068D DE03 RCALL _SetPageCol
(0476) if(uCol+j<64) ch_r=read_LCD(LEFT);
068E 2D8C MOV R24,R12
068F 0F84 ADD R24,R20
0690 3480 CPI R24,0x40
0691 F420 BCC 0x0696
0692 2700 CLR R16
0693 DCDE RCALL _read_LCD
0694 2F60 MOV R22,R16
0695 C003 RJMP 0x0699
(0477) else ch_r=read_LCD(RIGHT);
0696 E001 LDI R16,1
0697 DCDA RCALL _read_LCD
0698 2F60 MOV R22,R16
(0478) ch_r&=0x0f;
0699 706F ANDI R22,0xF
(0479) ch_w=GB_16[k].Msk[j];
069A E18A LDI R24,0x1A
069B 9D8A MUL R24,R10
069C 0110 MOVW R2,R0
069D E584 LDI R24,0x54
069E E092 LDI R25,2
069F 0E28 ADD R2,R24
06A0 1E39 ADC R3,R25
06A1 2FE4 MOV R30,R20
06A2 27FF CLR R31
06A3 0DE2 ADD R30,R2
06A4 1DF3 ADC R31,R3
06A5 90E4 LPM R14,0(Z)
(0480) ch_w=ch_w<<4;
06A6 2D8E MOV R24,R14
06A7 708F ANDI R24,0xF
06A8 9582 SWAP R24
06A9 2EE8 MOV R14,R24
(0481) ch_w|=ch_r;
06AA 2AE6 OR R14,R22
(0482) SetPageCol(uPage,uCol+j);
06AB 2D2C MOV R18,R12
06AC 0F24 ADD R18,R20
06AD 8109 LDD R16,Y+1
06AE DDE2 RCALL _SetPageCol
(0483) if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
06AF 2D8C MOV R24,R12
06B0 0F84 ADD R24,R20
06B1 3480 CPI R24,0x40
06B2 F428 BCC 0x06B8
06B3 82E8 STD Y+0,R14
06B4 E021 LDI R18,1
06B5 2700 CLR R16
06B6 DC6A RCALL _write_LCD
06B7 C004 RJMP 0x06BC
(0484) else write_LCD(RIGHT,DATA,ch_w);
06B8 82E8 STD Y+0,R14
06B9 E021 LDI R18,1
06BA E001 LDI R16,1
06BB DC65 RCALL _write_LCD
06BC 9543 INC R20
06BD 304C CPI R20,0xC
06BE F408 BCC 0x06C0
06BF CFCA RJMP 0x068A
(0485) }
(0486) SetPageCol(uPage+1,uCol);
06C0 2D2C MOV R18,R12
06C1 8109 LDD R16,Y+1
06C2 5F0F SUBI R16,0xFF
06C3 DDCD RCALL _SetPageCol
(0487) for(j=0;j<ASC_HZ_WIDTH;j++)
06C4 2744 CLR R20
06C5 C03A RJMP 0x0700
(0488) {
(0489) SetPageCol(uPage+1,uCol+j);
06C6 2D2C MOV R18,R12
06C7 0F24 ADD R18,R20
06C8 8109 LDD R16,Y+1
06C9 5F0F SUBI R16,0xFF
06CA DDC6 RCALL _SetPageCol
(0490)
(0491) ch_r=GB_16[k].Msk[j];
06CB E18A LDI R24,0x1A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -