📄 ks0108_12864lcd_m16.lst
字号:
__text_start:
__start:
3E4 E5CF LDI R28,0x5F
3E5 E0D4 LDI R29,4
3E6 BFCD OUT 0x3D,R28
3E7 BFDE OUT 0x3E,R29
3E8 51CE SUBI R28,0x1E
3E9 40D0 SBCI R29,0
3EA EA0A LDI R16,0xAA
3EB 8308 STD Y+0,R16
3EC 2400 CLR R0
3ED E6E0 LDI R30,0x60
3EE E0F0 LDI R31,0
3EF E010 LDI R17,0
3F0 36E0 CPI R30,0x60
3F1 07F1 CPC R31,R17
3F2 F011 BEQ 0x03F5
3F3 9201 ST R0,Z+
3F4 CFFB RJMP 0x03F0
3F5 8300 STD Z+0,R16
3F6 ECE8 LDI R30,0xC8
3F7 E0F7 LDI R31,7
3F8 E6A0 LDI R26,0x60
3F9 E0B0 LDI R27,0
3FA E017 LDI R17,7
3FB E000 LDI R16,0
3FC BF0B OUT 0x3B,R16
3FD 3CE8 CPI R30,0xC8
3FE 07F1 CPC R31,R17
3FF F021 BEQ 0x0404
400 95C8 LPM
401 9631 ADIW R30,1
402 920D ST R0,X+
403 CFF9 RJMP 0x03FD
404 940E 0407 CALL _main
_exit:
406 CFFF RJMP _exit
FILE: F:\Temp\KS0108_12864LCD\Source\Main.C
(0001) /*----------------------------------------------------------------------------*-
(0002)
(0003) Source Name : Main.C (v1.00)
(0004)
(0005) ----------------------------------------------------------------------------
(0006) COPYRIGHT
(0007) ---------
(0008)
(0009) Created Date : 2008.03.01
(0010) Created By : HOCHIEN
(0011) Modified By :
(0012) Modified Date :
(0013) Version : 2.0
(0014) Description : Main project source files.
(0015) See "Main.H" for more details about this project.
(0016)
(0017) * * * This program is from : www.ICEworksop.com * * *
(0018)
(0019) -*----------------------------------------------------------------------------*/
(0020)
(0021) #include "Main.H"
(0022) #include "Init_SYS.H"
(0023)
(0024) #include "KS0108_12864LCD.H"
(0025)
(0026) /* -------------------------------------------------------------------------- */
(0027) /* .......................................................................... */
(0028)
(0029) void main(void)
(0030) {
(0031)
(0032) // ==== Initialization - BEGIN ============================================
(0033)
(0034) // Global system initialization
(0035) Init_System();
_main:
407 940E 041A CALL _Init_System
(0036)
(0037) // Prepare for the KS0108 128 * 64 pixels Liquid Crystal Display(LCD)
(0038) KS0108_12864LCD_Init();
409 940E 042A CALL _KS0108_12864LCD_Init
40B C002 RJMP 0x040E
(0039)
(0040) // ==== Initialization - END ==============================================
(0041)
(0042) while(1) // Super Loop "Endless loop"
(0043) {
(0044) KS0108_12864LCD_Update();
40C 940E 0470 CALL _KS0108_12864LCD_Update
40E CFFD RJMP 0x040C
40F 9508 RET
FILE: F:\Temp\KS0108_12864LCD\Source\Init_SYS.C
(0001) /*----------------------------------------------------------------------------*-
(0002)
(0003) Source Name : Init_SYS.C (v1.00)
(0004)
(0005) ----------------------------------------------------------------------------
(0006) COPYRIGHT
(0007) ---------
(0008)
(0009) Created Date : 2008.03.01
(0010) Created By : HOCHIEN
(0011) Modified By :
(0012) Modified Date :
(0013) Version : 2.0
(0014) Description : Global system initialization source files.
(0015)
(0016) * * * This program is from : www.ICEworksop.com * * *
(0017)
(0018) -*----------------------------------------------------------------------------*/
(0019)
(0020) #include "Main.H"
(0021) #include "Init_SYS.H"
(0022)
(0023) // ------ Private function prototypes ----------------------------------------
(0024)
(0025) static void Port_Init(void);
(0026)
(0027) /*----------------------------------------------------------------------------*-
(0028)
(0029) Port_Init()
(0030)
(0031) Globally set up all the port pins to a certain state.
(0032)
(0033) -*----------------------------------------------------------------------------*/
(0034) static void Port_Init(void)
(0035) {
(0036) PORTA = 0x00;
_Port_Init:
Init_SYS.C:Port_Init:
410 2422 CLR R2
411 BA2B OUT 0x1B,R2
(0037) DDRA = 0x00;
412 BA2A OUT 0x1A,R2
(0038) PORTB = 0x00;
413 BA28 OUT 0x18,R2
(0039) DDRB = 0x00;
414 BA27 OUT 0x17,R2
(0040) PORTC = 0x00;
415 BA25 OUT 0x15,R2
(0041) DDRC = 0x00;
416 BA24 OUT 0x14,R2
(0042) PORTD = 0x00;
417 BA22 OUT 0x12,R2
(0043) DDRD = 0x00;
418 BA21 OUT 0x11,R2
419 9508 RET
(0044) }
(0045)
(0046) /*----------------------------------------------------------------------------*-
(0047)
(0048) Init_System()
(0049)
(0050) System initialization function.
(0051) Call this routine to initialize all peripherals
(0052)
(0053) -*----------------------------------------------------------------------------*/
(0054) void Init_System(void)
(0055) {
(0056) OSCCAL = 0xA7; // Calibrate internal RC 1MHz
_Init_System:
41A EA87 LDI R24,0xA7
41B BF81 OUT 0x31,R24
(0057)
(0058) // Stop errant interrupts until set up
(0059) CLI(); // Disable all interrupts
41C 94F8 BCLR 7
(0060)
(0061) Port_Init(); // Set port
41D DFF2 RCALL _Port_Init
(0062)
(0063) MCUCR = 0x00;
41E 2422 CLR R2
41F BE25 OUT 0x35,R2
(0064) GICR = 0x00;
420 BE2B OUT 0x3B,R2
(0065) TIMSK = 0x00; // Timer interrupt sources
421 BE29 OUT 0x39,R2
(0066) SEI(); // Re-enable interrupts
422 9478 BSET 7
423 9508 RET
FILE: F:\Temp\KS0108_12864LCD\Source\KS0108_12864LCD.C
(0001) /*----------------------------------------------------------------------------*-
(0002)
(0003) Source Name : KS0108_12864LCD.C (v1.00)
(0004)
(0005) ----------------------------------------------------------------------------
(0006) COPYRIGHT
(0007) ---------
(0008)
(0009) Created date : 2008.03.01
(0010) Created By : HOCHIEN
(0011) Modified by :
(0012) Modified Date :
(0013) Version : 2.0
(0014) Description : Simple KS0108 based 128 * 64 pixels LCD
(0015) demonstration program.
(0016)
(0017) LCD LIBRARY CODE
(0018)
(0019) Designed for SuperLoop operation,
(0020) in this case for a 64 * 128 pixels matrix LCD display.
(0021)
(0022) * * * This program is from : www.ICEworksop.com * * *
(0023)
(0024) -*----------------------------------------------------------------------------*/
(0025)
(0026) #include "Main.H"
(0027) #include "Port.H"
(0028)
(0029) #include "KS0108_12864LCD.H"
(0030)
(0031) // ------ Public variable declarations ---------------------------------------
(0032)
(0033) // See 'FONT6x8.C' for details
(0034) extern flash uInt8 FONT6x8[][6];
(0035)
(0036) // See 'Chinese_Text.C' for details
(0037) extern flash uInt8 CN_WELCOME[][32];
(0038) extern flash uInt8 CN_EMBEDDED[][32];
(0039)
(0040) // See 'Image_Test.C' for details
(0041) extern flash uInt8 Image_Test[];
(0042)
(0043) // ------ Private constants --------------------------------------------------
(0044)
(0045) #define DISPLAY_ON 0x3F // 0011 1111
(0046) #define DISPLAY_OFF 0x3E // 0011 1110
(0047) #define DISPLAY_STARTLINE 0xC0 // 1100 0000
(0048) #define DISPLAY_PAGE_SET 0xB8 // 1011 1000
(0049) #define DISPLAY_COLUMN_SET 0x40 // 0100 0000
(0050) #define LCD_BUSY 0x80
(0051)
(0052) #define INVERSE (1)
(0053) #define NORMAL (0)
(0054) #define D_DATA (1)
(0055) #define COMMAND (0)
(0056)
(0057) static flash uInt8 WELCOME[] = "Hello, EmbeddedWorld!";
(0058) static flash uInt8 WEBSITE[] = "*www.ICEworkshop.com*";
(0059)
(0060) // ------ Private function prototypes ----------------------------------------
(0061)
(0062) static void Delay_1ms(void);
(0063) static void Clear_Screen(uInt8);
(0064) static void LCD_Send_Byte(uInt8, uInt8, uInt8);
(0065) static void LCD_Set_XY(uInt8, uInt8);
(0066) static void LCD_Disp_a_Char(uInt8, uInt8, uInt8, uInt8);
(0067) static void LCD_Disp_String(uInt8, uInt8, flash uInt8 *, uInt8);
(0068) static void LCD_Disp_Chinese_String (uInt8, uInt8, uInt8, uInt8, uInt8, uInt8,
(0069) flash uInt8 (*)[32], uInt8);
(0070) static void LCD_Disp_an_Image(uInt8, uInt8, flash uInt8 *, uInt8, uInt8, uInt8);
(0071) static void LCD_Draw_a_Dot(uInt8, uInt8, uInt8);
(0072)
(0073) /*----------------------------------------------------------------------------*-
(0074)
(0075) Delay_1ms()
(0076)
(0077) Software delay * approx * 1 millisecond @ 1MHz system clock.
(0078)
(0079) -*----------------------------------------------------------------------------*/
(0080) #pragma ctask Delay_1ms
(0081) static void Delay_1ms(void)
(0082) {
(0083) uInt8 i;
(0084) for (i=0;i<143;i++);
_Delay_1ms:
i --> R16
KS0108_12864LCD.C:Delay_1ms:
424 2700 CLR R16
425 C001 RJMP 0x0427
426 9503 INC R16
427 380F CPI R16,0x8F
428 F3E8 BCS 0x0426
429 9508 RET
_KS0108_12864LCD_Init:
42A 9721 SBIW R28,1
(0085) }
(0086)
(0087) /*----------------------------------------------------------------------------*-
(0088)
(0089) KS0108_12864LCD_Init()
(0090)
(0091) Set up LCD controller KS0108 before use it.
(0092)
(0093) -*----------------------------------------------------------------------------*/
(0094) void KS0108_12864LCD_Init(void)
(0095) {
(0096) // Set up the ports, see 'Port.H' for port pins details
(0097) LCD_DATA_PORT_DIR = OUTPUT; // LED data PORT is an output
42B EF8F LDI R24,0xFF
42C BB8A OUT 0x1A,R24
(0098) LCD_INSTR_PORT_DIR = OUTPUT; // LED instruction PORT is an output
42D BB81 OUT 0x11,R24
(0099) LCD_DATA_PORT = 0x00;
42E 2422 CLR R2
42F BA2B OUT 0x1B,R2
(0100)
(0101) // Toggle reset
(0102) LCD_INSTR_PORT |= LCD_RST;
430 9A93 SBI 0x12,3
(0103) Delay_1ms();
431 DFF2 RCALL _Delay_1ms
(0104)
(0105) LCD_INSTR_PORT &= ~LCD_RST;
432 9893 CBI 0x12,3
(0106) Delay_1ms();
433 DFF0 RCALL _Delay_1ms
(0107)
(0108) LCD_INSTR_PORT |= LCD_RST;
434 9A93 SBI 0x12,3
(0109) Delay_1ms();
435 DFEE RCALL _Delay_1ms
(0110)
(0111) // Setup column select and initialize display
(0112) LCD_INSTR_PORT |= LCD_CS1;
436 9A94 SBI 0x12,4
(0113) LCD_INSTR_PORT &= ~LCD_CS2;
437 9895 CBI 0x12,5
(0114)
(0115) LCD_Send_Byte(DISPLAY_OFF, COMMAND, NORMAL); // Display OFF
438 2422 CLR R2
439 8228 STD Y+0,R2
43A 2722 CLR R18
43B E30E LDI R16,0x3E
43C D151 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0116) LCD_Send_Byte(DISPLAY_STARTLINE, COMMAND, NORMAL);
43D 2422 CLR R2
43E 8228 STD Y+0,R2
43F 2722 CLR R18
440 EC00 LDI R16,0xC0
441 D14C RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0117) LCD_Send_Byte(DISPLAY_PAGE_SET, COMMAND, NORMAL);
442 2422 CLR R2
443 8228 STD Y+0,R2
444 2722 CLR R18
445 EB08 LDI R16,0xB8
446 D147 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0118) LCD_Send_Byte(DISPLAY_COLUMN_SET, COMMAND, NORMAL);
447 2422 CLR R2
448 8228 STD Y+0,R2
449 2722 CLR R18
44A E400 LDI R16,0x40
44B D142 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0119) LCD_Send_Byte(DISPLAY_ON, COMMAND, NORMAL); // Display ON
44C 2422 CLR R2
44D 8228 STD Y+0,R2
44E 2722 CLR R18
44F E30F LDI R16,0x3F
450 D13D RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0120)
(0121) LCD_INSTR_PORT &= ~LCD_CS1;
451 9894 CBI 0x12,4
(0122) LCD_INSTR_PORT |= LCD_CS2;
452 9A95 SBI 0x12,5
(0123)
(0124) LCD_Send_Byte(DISPLAY_OFF, COMMAND, NORMAL); // Display OFF
453 2422 CLR R2
454 8228 STD Y+0,R2
455 2722 CLR R18
456 E30E LDI R16,0x3E
457 D136 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0125) LCD_Send_Byte(DISPLAY_STARTLINE, COMMAND, NORMAL);
458 2422 CLR R2
459 8228 STD Y+0,R2
45A 2722 CLR R18
45B EC00 LDI R16,0xC0
45C D131 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0126) LCD_Send_Byte(DISPLAY_PAGE_SET, COMMAND, NORMAL);
45D 2422 CLR R2
45E 8228 STD Y+0,R2
45F 2722 CLR R18
460 EB08 LDI R16,0xB8
461 D12C RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0127) LCD_Send_Byte(DISPLAY_COLUMN_SET, COMMAND, NORMAL);
462 2422 CLR R2
463 8228 STD Y+0,R2
464 2722 CLR R18
465 E400 LDI R16,0x40
466 D127 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0128) LCD_Send_Byte(DISPLAY_ON, COMMAND, NORMAL); // Display ON
467 2422 CLR R2
468 8228 STD Y+0,R2
469 2722 CLR R18
46A E30F LDI R16,0x3F
46B D122 RCALL KS0108_12864LCD.C:LCD_Send_Byte
(0129)
(0130) Clear_Screen(NORMAL);
46C 2700 CLR R16
46D D0D0 RCALL KS0108_12864LCD.C:Clear_Screen
46E 9621 ADIW R28,1
46F 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -