📄 ks0108_12864lcd_m16.lst
字号:
631 840F LDD R0,Y+15
632 9D80 MUL R24,R0
633 0110 MOVW R2,R0
634 880B LDD R0,Y+19
635 881C LDD R1,Y+20
636 0C20 ADD R2,R0
637 1C31 ADC R3,R1
638 9D8A MUL R24,R10
639 0120 MOVW R4,R0
63A 0C42 ADD R4,R2
63B 1C53 ADC R5,R3
63C 2FE6 MOV R30,R22
63D 27FF CLR R31
63E 0DE4 ADD R30,R4
63F 1DF5 ADC R31,R5
640 9104 LPM R16,20(Z)
641 DF4C RCALL KS0108_12864LCD.C:LCD_Send_Byte
642 9563 INC R22
643 2C2C MOV R2,R12
644 0C22 LSL R2
645 1562 CP R22,R2
646 F2C8 BCS 0x0620
(0432) D_DATA, Video_Mode);
(0433) }
(0434) Y = Y + Char_Length + Char_Gap;
647 2C2E MOV R2,R14
648 0C2C ADD R2,R12
649 8809 LDD R0,Y+17
64A 0C20 ADD R2,R0
64B 2CE2 MOV R14,R2
(0435) nm++;
64C 94A3 INC R10
64D 840D LDD R0,Y+13
64E 14A0 CP R10,R0
64F F270 BCS 0x061E
650 9621 ADIW R28,1
651 940C 06EB 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
653 940E 06C7 CALL push_arg4
655 940E 06F6 CALL push_xgsetF0FC
657 2F62 MOV R22,R18
658 9721 SBIW R28,1
659 88A9 LDD R10,Y+17
65A 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)
65B E018 LDI R17,0x8
65C 2D0A MOV R16,R10
65D 940E 06CC CALL mod8u
65F 2300 TST R16
660 F429 BNE 0x0666
(0469) Page = Pixel_X / 8;
661 2D4A MOV R20,R10
662 9546 LSR R20
663 9546 LSR R20
664 9546 LSR R20
665 C005 RJMP 0x066B
(0470) else
(0471) Page = Pixel_X / 8 + 1;
666 2D4A MOV R20,R10
667 9546 LSR R20
668 9546 LSR R20
669 9546 LSR R20
66A 5F4F SUBI R20,0xFF
(0472)
(0473) // Now send the Image
(0474) for (pg = 0; pg < Page; pg++)
66B 24AA CLR R10
66C C019 RJMP 0x0686
(0475) {
(0476) // Send Image data
(0477) for(cl = 0; cl < Pixel_Y; cl++)
66D 24EE CLR R14
66E C014 RJMP 0x0683
(0478) {
(0479) // Set coordinates
(0480) LCD_Set_XY(X + pg, Y + cl);
66F 2F26 MOV R18,R22
670 0D2E ADD R18,R14
671 850B LDD R16,Y+11
672 0D0A ADD R16,R10
673 DF3C RCALL _LCD_Set_XY
(0481)
(0482) LCD_Send_Byte(pImage[cl + Pixel_Y * pg], D_DATA, Video_Mode);
674 880D LDD R0,Y+21
675 8208 STD Y+0,R0
676 E021 LDI R18,1
677 9CCA MUL R12,R10
678 2DEE MOV R30,R14
679 27FF CLR R31
67A 0DE0 ADD R30,R0
67B 1DF1 ADC R31,R1
67C 840F LDD R0,Y+15
67D 8818 LDD R1,Y+16
67E 0DE0 ADD R30,R0
67F 1DF1 ADC R31,R1
680 9104 LPM R16,16(Z)
681 DF0C RCALL KS0108_12864LCD.C:LCD_Send_Byte
682 94E3 INC R14
683 14EC CP R14,R12
684 F350 BCS 0x066F
685 94A3 INC R10
686 16A4 CP R10,R20
687 F328 BCS 0x066D
688 9621 ADIW R28,1
689 940E 06EB CALL pop_xgsetF0FC
68B 9624 ADIW R28,4
68C 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:
68D 940E 06FA CALL push_xgset00FC
68F 2EE2 MOV R14,R18
690 2EA0 MOV R10,R16
691 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;
692 2CCA MOV R12,R10
693 94C6 LSR R12
694 94C6 LSR R12
695 94C6 LSR R12
(0506)
(0507) // Find which bit of the data should be lit up
(0508) Which_Bit_Should_be_Lit = (1 << (X % 8));
696 E018 LDI R17,0x8
697 2D0A MOV R16,R10
698 940E 06CC CALL mod8u
69A 2F10 MOV R17,R16
69B E001 LDI R16,1
69C 940E 072B CALL lsl8
69E 2EA0 MOV R10,R16
(0509)
(0510) LCD_Set_XY(Page, Y);
69F 2D2E MOV R18,R14
6A0 2D0C MOV R16,R12
6A1 DF0E RCALL _LCD_Set_XY
(0511)
(0512) LCD_DATA_PORT = 0xFF;
6A2 EF8F LDI R24,0xFF
6A3 BB8B OUT 0x1B,R24
(0513) LCD_DATA_PORT_DIR = INPUT; // Set data PORT direction
6A4 2422 CLR R2
6A5 BA2A OUT 0x1A,R2
(0514)
(0515) LCD_INSTR_PORT |= LCD_DI; // Set data
6A6 9A90 SBI 0x12,0
(0516) LCD_INSTR_PORT |= LCD_RW; // Set read
6A7 9A91 SBI 0x12,1
(0517)
(0518) LCD_INSTR_PORT |= LCD_EN;
6A8 9A92 SBI 0x12,2
(0519) asm("nop");
6A9 0000 NOP
(0520) asm("nop");
6AA 0000 NOP
(0521)
(0522) LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
6AB 9892 CBI 0x12,2
(0523) asm("nop");
6AC 0000 NOP
(0524) asm("nop");
6AD 0000 NOP
(0525)
(0526) if (Video_Mode) // Clear a dot on the panel
6AE 800F LDD R0,Y+7
6AF 2000 TST R0
6B0 F031 BEQ 0x06B7
(0527) Which_Bit_Should_be_Lit = (~Which_Bit_Should_be_Lit & LCD_DATA_PORT_VL);
6B1 B229 IN R2,0x19
6B2 2C3A MOV R3,R10
6B3 9430 COM R3
6B4 2032 AND R3,R2
6B5 2CA3 MOV R10,R3
6B6 C002 RJMP 0x06B9
(0528)
(0529) else // Set a dot on the panel
(0530) Which_Bit_Should_be_Lit = (Which_Bit_Should_be_Lit | LCD_DATA_PORT_VL);
6B7 B229 IN R2,0x19
6B8 28A2 OR R10,R2
(0531)
(0532) LCD_DATA_PORT_DIR = OUTPUT; // Set data PORT direction back to an output
6B9 EF8F LDI R24,0xFF
6BA BB8A OUT 0x1A,R24
(0533) LCD_INSTR_PORT &= ~LCD_EN;
6BB 9892 CBI 0x12,2
(0534)
(0535) LCD_Set_XY(Page, Y);
6BC 2D2E MOV R18,R14
6BD 2D0C MOV R16,R12
6BE DEF1 RCALL _LCD_Set_XY
(0536) LCD_Send_Byte(Which_Bit_Should_be_Lit, D_DATA, NORMAL);
FILE: <library>
6BF 2422 CLR R2
6C0 8228 STD Y+0,R2
6C1 E021 LDI R18,1
6C2 2D0A MOV R16,R10
6C3 DECA RCALL KS0108_12864LCD.C:LCD_Send_Byte
6C4 9621 ADIW R28,1
6C5 940C 06E4 JMP pop_xgset00FC
push_arg4:
6C7 933A ST R19,-Y
6C8 932A ST R18,-Y
push_arg2:
6C9 931A ST R17,-Y
6CA 930A ST R16,-Y
6CB 9508 RET
mod8u:
6CC 9468 BSET 6
6CD C001 RJMP xdiv8u
div8u:
6CE 94E8 BCLR 6
xdiv8u:
6CF 932A ST R18,-Y
6D0 92FA ST R15,-Y
6D1 92EA ST R14,-Y
6D2 24FF CLR R15
6D3 24EE CLR R14
6D4 E120 LDI R18,0x10
6D5 0F00 LSL R16
6D6 1CFF ROL R15
6D7 1CEE ROL R14
6D8 16E1 CP R14,R17
6D9 F010 BCS 0x06DC
6DA 1AE1 SUB R14,R17
6DB 9503 INC R16
6DC 952A DEC R18
6DD F7B9 BNE 0x06D5
6DE F40E BRTC 0x06E0
6DF 2D0E MOV R16,R14
6E0 90E9 LD R14,Y+
6E1 90F9 LD R15,Y+
6E2 9129 LD R18,Y+
6E3 9508 RET
pop_xgset00FC:
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 9508 RET
pop_xgsetF0FC:
6EB 90A9 LD R10,Y+
6EC 90B9 LD R11,Y+
6ED 90C9 LD R12,Y+
6EE 90D9 LD R13,Y+
6EF 90E9 LD R14,Y+
6F0 90F9 LD R15,Y+
6F1 9149 LD R20,Y+
6F2 9159 LD R21,Y+
6F3 9169 LD R22,Y+
6F4 9179 LD R23,Y+
6F5 9508 RET
push_xgsetF0FC:
6F6 937A ST R23,-Y
6F7 936A ST R22,-Y
push_xgset30FC:
6F8 935A ST R21,-Y
6F9 934A ST R20,-Y
push_xgset00FC:
6FA 92FA ST R15,-Y
6FB 92EA ST R14,-Y
push_xgset003C:
6FC 92DA ST R13,-Y
6FD 92CA ST R12,-Y
6FE 92BA ST R11,-Y
6FF 92AA ST R10,-Y
700 9508 RET
push_xgsetF000:
701 937A ST R23,-Y
702 936A ST R22,-Y
703 935A ST R21,-Y
704 934A ST R20,-Y
705 9508 RET
pop_xgsetF000:
706 9149 LD R20,Y+
707 9159 LD R21,Y+
708 9169 LD R22,Y+
709 9179 LD R23,Y+
70A 9508 RET
push_xgsetF00C:
70B 937A ST R23,-Y
70C 936A ST R22,-Y
70D 935A ST R21,-Y
70E 934A ST R20,-Y
70F 92BA ST R11,-Y
710 92AA ST R10,-Y
711 9508 RET
pop_xgsetF00C:
712 90A9 LD R10,Y+
713 90B9 LD R11,Y+
714 9149 LD R20,Y+
715 9159 LD R21,Y+
716 9169 LD R22,Y+
717 9179 LD R23,Y+
718 9508 RET
push_xgsetF03C:
719 937A ST R23,-Y
71A 936A ST R22,-Y
71B 935A ST R21,-Y
71C 934A ST R20,-Y
71D 92DA ST R13,-Y
71E 92CA ST R12,-Y
71F 92BA ST R11,-Y
720 92AA ST R10,-Y
721 9508 RET
pop_xgsetF03C:
722 90A9 LD R10,Y+
723 90B9 LD R11,Y+
724 90C9 LD R12,Y+
725 90D9 LD R13,Y+
726 9149 LD R20,Y+
727 9159 LD R21,Y+
728 9169 LD R22,Y+
729 9179 LD R23,Y+
72A 9508 RET
lsl8:
72B 2311 TST R17
72C F019 BEQ 0x0730
72D 0F00 LSL R16
72E 951A DEC R17
72F CFFB RJMP lsl8
730 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -