📄 ks0108_12864lcd_m16.lst
字号:
62B 9D80 MUL R24,R0
62C 0110 MOVW R2,R0
62D 880B LDD R0,Y+19
62E 881C LDD R1,Y+20
62F 0C20 ADD R2,R0
630 1C31 ADC R3,R1
631 9D8A MUL R24,R10
632 0120 MOVW R4,R0
633 0C42 ADD R4,R2
634 1C53 ADC R5,R3
635 2FE6 MOV R30,R22
636 27FF CLR R31
637 0DE4 ADD R30,R4
638 1DF5 ADC R31,R5
639 9104 LPM R16,20(Z)
63A DF53 RCALL KS0108_12864LCD.C:LCD_Send_Byte
63B 9563 INC R22
63C 2C2C MOV R2,R12
63D 0C22 LSL R2
63E 1562 CP R22,R2
63F F2C8 BCS 0x0619
(0432) D_DATA, Video_Mode);
(0433) }
(0434) Y = Y + Char_Length + Char_Gap;
640 2C2E MOV R2,R14
641 0C2C ADD R2,R12
642 8809 LDD R0,Y+17
643 0C20 ADD R2,R0
644 2CE2 MOV R14,R2
(0435) nm++;
645 94A3 INC R10
646 840D LDD R0,Y+13
647 14A0 CP R10,R0
648 F270 BCS 0x0617
649 9621 ADIW R28,1
64A 940C 06E4 JMP pop_xgsetF0FC
KS0108_12864LCD.C:LCD_Disp_an_Image:
_LCD_Disp_an_Image:
Page --> R20
pg --> R10
cl --> R14
Video_Mode --> Y,+21
Pixel_Y --> R12
Pixel_X --> R10
pImage --> Y,+15
Y --> R22
X --> Y,+11
64C 940E 06C0 CALL push_arg4
64E 940E 06EF CALL push_xgsetF0FC
650 2F62 MOV R22,R18
651 9721 SBIW R28,1
652 88A9 LDD R10,Y+17
653 88CB LDD R12,Y+19
(0436) }
(0437) }
(0438)
(0439) /*----------------------------------------------------------------------------*-
(0440)
(0441) LCD_Disp_an_Image()
(0442)
(0443) Display an Image on the LCD panel.
(0444)
(0445) Parameters:
(0446) ---------------------------------------------------------------------------
(0447) X, Y : The Image start coordinates on the LCD panel
(0448)
(0449) pImage : Image data pointer (Image stored in Flash area)
(0450)
(0451) pixel_X, pixel_Y : The Image's size
(0452)
(0453) Pixel_X, the height of the Image (in pixel)
(0454) Pixel_Y, the length of the Image (in pixel)
(0455)
(0456) Video_Mode : If Video_Mode == INVERSE(1), inverse video mode
(0457) If Video_Mode == NORMAL(0), normal video mode
(0458)
(0459) -*----------------------------------------------------------------------------*/
(0460) static void LCD_Disp_an_Image(uInt8 X, uInt8 Y, flash uInt8 * pImage,
(0461) uInt8 Pixel_X, uInt8 Pixel_Y, uInt8 Video_Mode)
(0462) {
(0463) uInt8 cl, pg;
(0464) uInt8 Page;
(0465)
(0466) // Figure out needs how many Pages
(0467) // to display the Image
(0468) if (Pixel_X % 8 == 0)
654 E018 LDI R17,0x8
655 2D0A MOV R16,R10
656 940E 06C5 CALL mod8u
658 2300 TST R16
659 F429 BNE 0x065F
(0469) Page = Pixel_X / 8;
65A 2D4A MOV R20,R10
65B 9546 LSR R20
65C 9546 LSR R20
65D 9546 LSR R20
65E C005 RJMP 0x0664
(0470) else
(0471) Page = Pixel_X / 8 + 1;
65F 2D4A MOV R20,R10
660 9546 LSR R20
661 9546 LSR R20
662 9546 LSR R20
663 5F4F SUBI R20,0xFF
(0472)
(0473) // Now send the Image
(0474) for (pg = 0; pg < Page; pg++)
664 24AA CLR R10
665 C019 RJMP 0x067F
(0475) {
(0476) // Send Image data
(0477) for(cl = 0; cl < Pixel_Y; cl++)
666 24EE CLR R14
667 C014 RJMP 0x067C
(0478) {
(0479) // Set coordinates
(0480) LCD_Set_XY(X + pg, Y + cl);
668 2F26 MOV R18,R22
669 0D2E ADD R18,R14
66A 850B LDD R16,Y+11
66B 0D0A ADD R16,R10
66C DF3C RCALL _LCD_Set_XY
(0481)
(0482) LCD_Send_Byte(pImage[cl + Pixel_Y * pg], D_DATA, Video_Mode);
66D 880D LDD R0,Y+21
66E 8208 STD Y+0,R0
66F E021 LDI R18,1
670 9CCA MUL R12,R10
671 2DEE MOV R30,R14
672 27FF CLR R31
673 0DE0 ADD R30,R0
674 1DF1 ADC R31,R1
675 840F LDD R0,Y+15
676 8818 LDD R1,Y+16
677 0DE0 ADD R30,R0
678 1DF1 ADC R31,R1
679 9104 LPM R16,16(Z)
67A DF13 RCALL KS0108_12864LCD.C:LCD_Send_Byte
67B 94E3 INC R14
67C 14EC CP R14,R12
67D F350 BCS 0x0668
67E 94A3 INC R10
67F 16A4 CP R10,R20
680 F328 BCS 0x0666
681 9621 ADIW R28,1
682 940E 06E4 CALL pop_xgsetF0FC
684 9624 ADIW R28,4
685 9508 RET
_LCD_Draw_a_Dot:
Page --> R12
Which_Bit_Should_be_Lit --> R10
Video_Mode --> Y,+7
Y --> R14
X --> R10
KS0108_12864LCD.C:LCD_Draw_a_Dot:
686 940E 06F3 CALL push_xgset00FC
688 2EE2 MOV R14,R18
689 2EA0 MOV R10,R16
68A 9721 SBIW R28,1
(0483) }
(0484) }
(0485) }
(0486)
(0487) /*----------------------------------------------------------------------------*-
(0488)
(0489) LCD_Draw_a_Dot()
(0490)
(0491) Draw a dot (one pixel) on specific location of the LCD panel.
(0492)
(0493) Parameters:
(0494) ---------------------------------------------------------------------------
(0495) X, Y : The dot location on the LCD panel
(0496)
(0497) X range : (0 ~ 63), Y range : (0 ~ 127)
(0498)
(0499) -*----------------------------------------------------------------------------*/
(0500) static void LCD_Draw_a_Dot(uInt8 X, uInt8 Y, uInt8 Video_Mode)
(0501) {
(0502) uInt8 Page, Which_Bit_Should_be_Lit;
(0503)
(0504) // Figure out which Page the dot locate
(0505) Page = X / 8;
68B 2CCA MOV R12,R10
68C 94C6 LSR R12
68D 94C6 LSR R12
68E 94C6 LSR R12
(0506)
(0507) // Find which bit of the data should be lit up
(0508) Which_Bit_Should_be_Lit = (1 << (X % 8));
68F E018 LDI R17,0x8
690 2D0A MOV R16,R10
691 940E 06C5 CALL mod8u
693 2F10 MOV R17,R16
694 E001 LDI R16,1
695 940E 0724 CALL lsl8
697 2EA0 MOV R10,R16
(0509)
(0510) LCD_Set_XY(Page, Y);
698 2D2E MOV R18,R14
699 2D0C MOV R16,R12
69A DF0E RCALL _LCD_Set_XY
(0511)
(0512) LCD_DATA_PORT = 0xFF;
69B EF8F LDI R24,0xFF
69C BB8B OUT 0x1B,R24
(0513) LCD_DATA_PORT_DIR = INPUT; // Set data PORT direction
69D 2422 CLR R2
69E BA2A OUT 0x1A,R2
(0514)
(0515) LCD_INSTR_PORT |= LCD_DI; // Set data
69F 9A90 SBI 0x12,0
(0516) LCD_INSTR_PORT |= LCD_RW; // Set read
6A0 9A91 SBI 0x12,1
(0517)
(0518) LCD_INSTR_PORT |= LCD_EN;
6A1 9A92 SBI 0x12,2
(0519) asm("nop");
6A2 0000 NOP
(0520) asm("nop");
6A3 0000 NOP
(0521)
(0522) LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
6A4 9892 CBI 0x12,2
(0523) asm("nop");
6A5 0000 NOP
(0524) asm("nop");
6A6 0000 NOP
(0525)
(0526) if (Video_Mode) // Clear a dot on the panel
6A7 800F LDD R0,Y+7
6A8 2000 TST R0
6A9 F031 BEQ 0x06B0
(0527) Which_Bit_Should_be_Lit = (~Which_Bit_Should_be_Lit & LCD_DATA_PORT_VL);
6AA B229 IN R2,0x19
6AB 2C3A MOV R3,R10
6AC 9430 COM R3
6AD 2032 AND R3,R2
6AE 2CA3 MOV R10,R3
6AF C002 RJMP 0x06B2
(0528)
(0529) else // Set a dot on the panel
(0530) Which_Bit_Should_be_Lit = (Which_Bit_Should_be_Lit | LCD_DATA_PORT_VL);
6B0 B229 IN R2,0x19
6B1 28A2 OR R10,R2
(0531)
(0532) LCD_DATA_PORT_DIR = OUTPUT; // Set data PORT direction back to an output
6B2 EF8F LDI R24,0xFF
6B3 BB8A OUT 0x1A,R24
(0533) LCD_INSTR_PORT &= ~LCD_EN;
6B4 9892 CBI 0x12,2
(0534)
(0535) LCD_Set_XY(Page, Y);
6B5 2D2E MOV R18,R14
6B6 2D0C MOV R16,R12
6B7 DEF1 RCALL _LCD_Set_XY
(0536) LCD_Send_Byte(Which_Bit_Should_be_Lit, D_DATA, NORMAL);
FILE: <library>
6B8 2422 CLR R2
6B9 8228 STD Y+0,R2
6BA E021 LDI R18,1
6BB 2D0A MOV R16,R10
6BC DED1 RCALL KS0108_12864LCD.C:LCD_Send_Byte
6BD 9621 ADIW R28,1
6BE 940C 06DD JMP pop_xgset00FC
push_arg4:
6C0 933A ST R19,-Y
6C1 932A ST R18,-Y
push_arg2:
6C2 931A ST R17,-Y
6C3 930A ST R16,-Y
6C4 9508 RET
mod8u:
6C5 9468 BSET 6
6C6 C001 RJMP xdiv8u
div8u:
6C7 94E8 BCLR 6
xdiv8u:
6C8 932A ST R18,-Y
6C9 92FA ST R15,-Y
6CA 92EA ST R14,-Y
6CB 24FF CLR R15
6CC 24EE CLR R14
6CD E120 LDI R18,0x10
6CE 0F00 LSL R16
6CF 1CFF ROL R15
6D0 1CEE ROL R14
6D1 16E1 CP R14,R17
6D2 F010 BCS 0x06D5
6D3 1AE1 SUB R14,R17
6D4 9503 INC R16
6D5 952A DEC R18
6D6 F7B9 BNE 0x06CE
6D7 F40E BRTC 0x06D9
6D8 2D0E MOV R16,R14
6D9 90E9 LD R14,Y+
6DA 90F9 LD R15,Y+
6DB 9129 LD R18,Y+
6DC 9508 RET
pop_xgset00FC:
6DD 90A9 LD R10,Y+
6DE 90B9 LD R11,Y+
6DF 90C9 LD R12,Y+
6E0 90D9 LD R13,Y+
6E1 90E9 LD R14,Y+
6E2 90F9 LD R15,Y+
6E3 9508 RET
pop_xgsetF0FC:
6E4 90A9 LD R10,Y+
6E5 90B9 LD R11,Y+
6E6 90C9 LD R12,Y+
6E7 90D9 LD R13,Y+
6E8 90E9 LD R14,Y+
6E9 90F9 LD R15,Y+
6EA 9149 LD R20,Y+
6EB 9159 LD R21,Y+
6EC 9169 LD R22,Y+
6ED 9179 LD R23,Y+
6EE 9508 RET
push_xgsetF0FC:
6EF 937A ST R23,-Y
6F0 936A ST R22,-Y
push_xgset30FC:
6F1 935A ST R21,-Y
6F2 934A ST R20,-Y
push_xgset00FC:
6F3 92FA ST R15,-Y
6F4 92EA ST R14,-Y
push_xgset003C:
6F5 92DA ST R13,-Y
6F6 92CA ST R12,-Y
6F7 92BA ST R11,-Y
6F8 92AA ST R10,-Y
6F9 9508 RET
push_xgsetF000:
6FA 937A ST R23,-Y
6FB 936A ST R22,-Y
6FC 935A ST R21,-Y
6FD 934A ST R20,-Y
6FE 9508 RET
pop_xgsetF000:
6FF 9149 LD R20,Y+
700 9159 LD R21,Y+
701 9169 LD R22,Y+
702 9179 LD R23,Y+
703 9508 RET
push_xgsetF00C:
704 937A ST R23,-Y
705 936A ST R22,-Y
706 935A ST R21,-Y
707 934A ST R20,-Y
708 92BA ST R11,-Y
709 92AA ST R10,-Y
70A 9508 RET
pop_xgsetF00C:
70B 90A9 LD R10,Y+
70C 90B9 LD R11,Y+
70D 9149 LD R20,Y+
70E 9159 LD R21,Y+
70F 9169 LD R22,Y+
710 9179 LD R23,Y+
711 9508 RET
push_xgsetF03C:
712 937A ST R23,-Y
713 936A ST R22,-Y
714 935A ST R21,-Y
715 934A ST R20,-Y
716 92DA ST R13,-Y
717 92CA ST R12,-Y
718 92BA ST R11,-Y
719 92AA ST R10,-Y
71A 9508 RET
pop_xgsetF03C:
71B 90A9 LD R10,Y+
71C 90B9 LD R11,Y+
71D 90C9 LD R12,Y+
71E 90D9 LD R13,Y+
71F 9149 LD R20,Y+
720 9159 LD R21,Y+
721 9169 LD R22,Y+
722 9179 LD R23,Y+
723 9508 RET
lsl8:
724 2311 TST R17
725 F019 BEQ 0x0729
726 0F00 LSL R16
727 951A DEC R17
728 CFFB RJMP lsl8
729 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -