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