📄 ks0108_12864lcd_m16.lst
字号:
_KS0108_12864LCD_Update:
i --> R20
j --> R22
470 940E 06FA CALL push_xgsetF000
472 972B SBIW R28,0xB
(0131) }
(0132)
(0133) /*----------------------------------------------------------------------------*-
(0134)
(0135) PCD8544_LCD_Update()
(0136)
(0137) This function updates data on the LCD panel (if it requires update).
(0138)
(0139) -*----------------------------------------------------------------------------*/
(0140) void KS0108_12864LCD_Update(void)
(0141) {
(0142) uInt16 i, j;
(0143)
(0144) LCD_Disp_an_Image(0, 0, Image_Test, 64, 128, NORMAL);
473 2422 CLR R2
474 822E STD Y+6,R2
475 E880 LDI R24,0x80
476 838C STD Y+4,R24
477 E480 LDI R24,0x40
478 838A STD Y+2,R24
479 EC88 LDI R24,0xC8
47A E093 LDI R25,3
47B 8399 STD Y+1,R25
47C 8388 STD Y+0,R24
47D 2722 CLR R18
47E 2700 CLR R16
47F D1CC RCALL KS0108_12864LCD.C:LCD_Disp_an_Image
(0145) for(i = 0; i < 1000; i++)
480 2744 CLR R20
481 2755 CLR R21
482 C00B RJMP 0x048E
(0146) for(j = 0; j < 400; j++);
483 2766 CLR R22
484 2777 CLR R23
485 C002 RJMP 0x0488
486 5F6F SUBI R22,0xFF
487 4F7F SBCI R23,0xFF
488 3960 CPI R22,0x90
489 E0E1 LDI R30,1
48A 077E CPC R23,R30
48B F3D0 BCS 0x0486
48C 5F4F SUBI R20,0xFF
48D 4F5F SBCI R21,0xFF
48E 3E48 CPI R20,0xE8
48F E0E3 LDI R30,3
490 075E CPC R21,R30
491 F388 BCS 0x0483
(0147)
(0148) Clear_Screen(NORMAL);
492 2700 CLR R16
493 D0AA RCALL KS0108_12864LCD.C:Clear_Screen
(0149) LCD_Disp_String(0, 1, WELCOME, NORMAL);
494 2422 CLR R2
495 822A STD Y+2,R2
496 E584 LDI R24,0x54
497 E090 LDI R25,0
498 8399 STD Y+1,R25
499 8388 STD Y+0,R24
49A E021 LDI R18,1
49B 2700 CLR R16
49C D158 RCALL KS0108_12864LCD.C:LCD_Disp_String
(0150) LCD_Disp_String(7, 1, WEBSITE, NORMAL);
49D 2422 CLR R2
49E 822A STD Y+2,R2
49F E68A LDI R24,0x6A
4A0 E090 LDI R25,0
4A1 8399 STD Y+1,R25
4A2 8388 STD Y+0,R24
4A3 E021 LDI R18,1
4A4 E007 LDI R16,7
4A5 D14F RCALL KS0108_12864LCD.C:LCD_Disp_String
(0151) LCD_Disp_Chinese_String(2, 32, 16, 4, 0, 0, CN_WELCOME, NORMAL);
4A6 2422 CLR R2
4A7 862A STD Y+10,R2
4A8 EA88 LDI R24,0xA8
4A9 E092 LDI R25,2
4AA 8799 STD Y+9,R25
4AB 8788 STD Y+8,R24
4AC 822E STD Y+6,R2
4AD 822C STD Y+4,R2
4AE E084 LDI R24,4
4AF 838A STD Y+2,R24
4B0 E180 LDI R24,0x10
4B1 8388 STD Y+0,R24
4B2 E220 LDI R18,0x20
4B3 E002 LDI R16,2
4B4 D15A RCALL _LCD_Disp_Chinese_String
(0152) LCD_Disp_Chinese_String(4, 24, 16, 5, 0, 0, CN_EMBEDDED, NORMAL);
4B5 2422 CLR R2
4B6 862A STD Y+10,R2
4B7 E288 LDI R24,0x28
4B8 E093 LDI R25,3
4B9 8799 STD Y+9,R25
4BA 8788 STD Y+8,R24
4BB 822E STD Y+6,R2
4BC 822C STD Y+4,R2
4BD E085 LDI R24,5
4BE 838A STD Y+2,R24
4BF E180 LDI R24,0x10
4C0 8388 STD Y+0,R24
4C1 E128 LDI R18,0x18
4C2 E004 LDI R16,4
4C3 D14B RCALL _LCD_Disp_Chinese_String
(0153) for(i = 0; i < 1000; i++)
4C4 2744 CLR R20
4C5 2755 CLR R21
4C6 C00B RJMP 0x04D2
(0154) for(j = 0; j < 400; j++);
4C7 2766 CLR R22
4C8 2777 CLR R23
4C9 C002 RJMP 0x04CC
4CA 5F6F SUBI R22,0xFF
4CB 4F7F SBCI R23,0xFF
4CC 3960 CPI R22,0x90
4CD E0E1 LDI R30,1
4CE 077E CPC R23,R30
4CF F3D0 BCS 0x04CA
4D0 5F4F SUBI R20,0xFF
4D1 4F5F SBCI R21,0xFF
4D2 3E48 CPI R20,0xE8
4D3 E0E3 LDI R30,3
4D4 075E CPC R21,R30
4D5 F388 BCS 0x04C7
(0155)
(0156) LCD_Disp_an_Image(0, 0, Image_Test, 64, 128, INVERSE);
4D6 E081 LDI R24,1
4D7 838E STD Y+6,R24
4D8 E880 LDI R24,0x80
4D9 838C STD Y+4,R24
4DA E480 LDI R24,0x40
4DB 838A STD Y+2,R24
4DC EC88 LDI R24,0xC8
4DD E093 LDI R25,3
4DE 8399 STD Y+1,R25
4DF 8388 STD Y+0,R24
4E0 2722 CLR R18
4E1 2700 CLR R16
4E2 D169 RCALL KS0108_12864LCD.C:LCD_Disp_an_Image
(0157) for(i = 0; i < 1000; i++)
4E3 2744 CLR R20
4E4 2755 CLR R21
4E5 C00B RJMP 0x04F1
(0158) for(j = 0; j < 400; j++);
4E6 2766 CLR R22
4E7 2777 CLR R23
4E8 C002 RJMP 0x04EB
4E9 5F6F SUBI R22,0xFF
4EA 4F7F SBCI R23,0xFF
4EB 3960 CPI R22,0x90
4EC E0E1 LDI R30,1
4ED 077E CPC R23,R30
4EE F3D0 BCS 0x04E9
4EF 5F4F SUBI R20,0xFF
4F0 4F5F SBCI R21,0xFF
4F1 3E48 CPI R20,0xE8
4F2 E0E3 LDI R30,3
4F3 075E CPC R21,R30
4F4 F388 BCS 0x04E6
(0159)
(0160) Clear_Screen(INVERSE);
4F5 E001 LDI R16,1
4F6 D047 RCALL KS0108_12864LCD.C:Clear_Screen
(0161) LCD_Disp_String(0, 1, WELCOME, INVERSE);
4F7 E081 LDI R24,1
4F8 838A STD Y+2,R24
4F9 E584 LDI R24,0x54
4FA E090 LDI R25,0
4FB 8399 STD Y+1,R25
4FC 8388 STD Y+0,R24
4FD E021 LDI R18,1
4FE 2700 CLR R16
4FF D0F5 RCALL KS0108_12864LCD.C:LCD_Disp_String
(0162) LCD_Disp_String(7, 1, WEBSITE, INVERSE);
500 E081 LDI R24,1
501 838A STD Y+2,R24
502 E68A LDI R24,0x6A
503 E090 LDI R25,0
504 8399 STD Y+1,R25
505 8388 STD Y+0,R24
506 E021 LDI R18,1
507 E007 LDI R16,7
508 D0EC RCALL KS0108_12864LCD.C:LCD_Disp_String
(0163) LCD_Disp_Chinese_String(2, 32, 16, 4, 0, 0, CN_WELCOME, INVERSE);
509 E081 LDI R24,1
50A 878A STD Y+10,R24
50B EA88 LDI R24,0xA8
50C E092 LDI R25,2
50D 8799 STD Y+9,R25
50E 8788 STD Y+8,R24
50F 2422 CLR R2
510 822E STD Y+6,R2
511 822C STD Y+4,R2
512 E084 LDI R24,4
513 838A STD Y+2,R24
514 E180 LDI R24,0x10
515 8388 STD Y+0,R24
516 E220 LDI R18,0x20
517 E002 LDI R16,2
518 D0F6 RCALL _LCD_Disp_Chinese_String
(0164) LCD_Disp_Chinese_String(4, 24, 16, 5, 0, 0, CN_EMBEDDED, INVERSE);
519 E081 LDI R24,1
51A 878A STD Y+10,R24
51B E288 LDI R24,0x28
51C E093 LDI R25,3
51D 8799 STD Y+9,R25
51E 8788 STD Y+8,R24
51F 2422 CLR R2
520 822E STD Y+6,R2
521 822C STD Y+4,R2
522 E085 LDI R24,5
523 838A STD Y+2,R24
524 E180 LDI R24,0x10
525 8388 STD Y+0,R24
526 E128 LDI R18,0x18
527 E004 LDI R16,4
528 D0E6 RCALL _LCD_Disp_Chinese_String
(0165) for(i = 0; i < 1000; i++)
529 2744 CLR R20
52A 2755 CLR R21
52B C00B RJMP 0x0537
(0166) for(j = 0; j < 400; j++);
52C 2766 CLR R22
52D 2777 CLR R23
52E C002 RJMP 0x0531
52F 5F6F SUBI R22,0xFF
530 4F7F SBCI R23,0xFF
531 3960 CPI R22,0x90
532 E0E1 LDI R30,1
533 077E CPC R23,R30
534 F3D0 BCS 0x052F
535 5F4F SUBI R20,0xFF
536 4F5F SBCI R21,0xFF
537 3E48 CPI R20,0xE8
538 E0E3 LDI R30,3
539 075E CPC R21,R30
53A F388 BCS 0x052C
53B 962B ADIW R28,0xB
53C 940C 06FF JMP pop_xgsetF000
KS0108_12864LCD.C:Clear_Screen:
_Clear_Screen:
Page --> R20
Column --> R22
Vedio_Mode --> R10
53E 940E 0704 CALL push_xgsetF00C
540 2EA0 MOV R10,R16
541 9721 SBIW R28,1
(0167) }
(0168)
(0169) /*----------------------------------------------------------------------------*-
(0170)
(0171) Clear_Screen()
(0172)
(0173) This function clears the LCD screen.
(0174)
(0175) -*----------------------------------------------------------------------------*/
(0176) static void Clear_Screen(uInt8 Vedio_Mode)
(0177) {
(0178) uInt8 Page, Column;
(0179)
(0180) for (Page = 0; Page < 8; Page++) // Clear left side
542 2744 CLR R20
543 C026 RJMP 0x056A
(0181) {
(0182) LCD_INSTR_PORT |= LCD_CS1; // Select left side
544 9A94 SBI 0x12,4
(0183) LCD_INSTR_PORT &= ~LCD_CS2;
545 9895 CBI 0x12,5
(0184)
(0185) LCD_Send_Byte(DISPLAY_PAGE_SET + Page, COMMAND, NORMAL); // Sweep pages
546 2422 CLR R2
547 8228 STD Y+0,R2
548 2722 CLR R18
549 2F04 MOV R16,R20
54A 5408 SUBI R16,0x48
54B D042 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0186) LCD_Send_Byte(DISPLAY_COLUMN_SET, COMMAND, NORMAL);
54C 2422 CLR R2
54D 8228 STD Y+0,R2
54E 2722 CLR R18
54F E400 LDI R16,0x40
550 D03D RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0187)
(0188) for (Column = 0; Column < 128; Column++)
551 2766 CLR R22
552 C014 RJMP 0x0567
(0189) {
(0190) // Clear right side
(0191) if(Column == 64)
553 3460 CPI R22,0x40
554 F469 BNE 0x0562
(0192) {
(0193) LCD_INSTR_PORT &= ~LCD_CS1; // Select right side
555 9894 CBI 0x12,4
(0194) LCD_INSTR_PORT |= LCD_CS2;
556 9A95 SBI 0x12,5
(0195)
(0196) // Sweep pages
(0197) LCD_Send_Byte(DISPLAY_PAGE_SET + Page, COMMAND, NORMAL);
557 2422 CLR R2
558 8228 STD Y+0,R2
559 2722 CLR R18
55A 2F04 MOV R16,R20
55B 5408 SUBI R16,0x48
55C D031 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0198) LCD_Send_Byte(DISPLAY_COLUMN_SET, COMMAND, NORMAL);
55D 2422 CLR R2
55E 8228 STD Y+0,R2
55F 2722 CLR R18
560 E400 LDI R16,0x40
561 D02C RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0199) }
(0200) // For each set of 8 pixels, write 0x00 or 0xFF(depend on Vedio_Mode)
(0201) LCD_Send_Byte(0x00, D_DATA, Vedio_Mode);
562 82A8 STD Y+0,R10
563 E021 LDI R18,1
564 2700 CLR R16
565 D028 RCALL KS0108_12864LCD.C:LCD_Send_Byte
566 9563 INC R22
567 3860 CPI R22,0x80
568 F350 BCS 0x0553
569 9543 INC R20
56A 3048 CPI R20,0x8
56B F2C0 BCS 0x0544
56C 9621 ADIW R28,1
56D 940C 070B JMP pop_xgsetF00C
(0202) }
(0203) }
(0204) }
(0205)
(0206) /*----------------------------------------------------------------------------*-
(0207)
(0208) LCD_Read_Busy()
(0209)
(0210) Check out if the LCD is in operation or ready for writing data.
(0211)
(0212) -*----------------------------------------------------------------------------*/
(0213) static void LCD_Read_Busy(void)
(0214) {
(0215) uInt16 LCD_Timeout; // Software timeout
(0216)
(0217) LCD_DATA_PORT = 0xFF;
KS0108_12864LCD.C:LCD_Read_Busy:
_LCD_Read_Busy:
LCD_Timeout --> R16
56F EF8F LDI R24,0xFF
570 BB8B OUT 0x1B,R24
(0218) LCD_DATA_PORT_DIR = INPUT; // Set data PORT direction
571 2422 CLR R2
572 BA2A OUT 0x1A,R2
(0219)
(0220) LCD_INSTR_PORT &= ~LCD_DI; // Set instruction
573 9890 CBI 0x12,0
(0221) LCD_INSTR_PORT |= LCD_RW; // Set read
574 9A91 SBI 0x12,1
(0222)
(0223) LCD_INSTR_PORT |= LCD_EN;
575 9A92 SBI 0x12,2
(0224) asm("nop");
576 0000 NOP
(0225) asm("nop");
577 0000 NOP
(0226)
(0227) LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
578 9892 CBI 0x12,2
(0228) asm("nop");
579 0000 NOP
(0229) asm("nop");
57A 0000 NOP
57B C006 RJMP 0x0582
(0230)
(0231) // See if busy with software timeout
(0232) while((LCD_BUSY & LCD_DATA_PORT_VL) && ++LCD_Timeout)
(0233) {
(0234) LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
57C 9892 CBI 0x12,2
(0235) asm("nop");
57D 0000 NOP
(0236) asm("nop");
57E 0000 NOP
(0237)
(0238) LCD_INSTR_PORT |= LCD_EN;
57F 9A92 SBI 0x12,2
(0239) asm("nop");
580 0000 NOP
(0240) asm("nop");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -