📄 lcd.lis
字号:
008C 8FEF ldi R24,255
008E 87BB out 0x17,R24
0090 .dbline 116
0090 ; temp=LCD_OP_PORT;
0090 48B3 in R20,0x18
0092 .dbline 117
0092 ; temp=temp&BIT3;
0092 4870 andi R20,8
0094 .dbline 118
0094 ; LCD_OP_PORT =(CMD & 0xf0)|temp; // Load high-data to port
0094 862F mov R24,R22
0096 807F andi R24,240
0098 842B or R24,R20
009A 88BB out 0x18,R24
009C .dbline 119
009C ; lcd_clear_rw(); // Set LCD to write
009C C198 cbi 0x18,1
009E .dbline 120
009E ; lcd_clear_rs(); // Set LCD to command
009E C098 cbi 0x18,0
00A0 .dbline 121
00A0 ; lcd_set_e(); // Write data to LCD
00A0 C29A sbi 0x18,2
00A2 .dbline 122
00A2 ; asm("nop");
00A2 0000 nop
00A4 .dbline 123
00A4 ; asm("nop");
00A4 0000 nop
00A6 .dbline 124
00A6 ; lcd_clear_e(); // Disable LCD
00A6 C298 cbi 0x18,2
00A8 .dbline 125
00A8 ; LCD_OP_PORT =(CMD<<4)|temp; // Load low-data to port
00A8 862F mov R24,R22
00AA 8F70 andi R24,#0x0F
00AC 8295 swap R24
00AE 842B or R24,R20
00B0 88BB out 0x18,R24
00B2 .dbline 126
00B2 ; lcd_clear_rw(); // Set LCD to write
00B2 C198 cbi 0x18,1
00B4 .dbline 127
00B4 ; lcd_clear_rs(); // Set LCD to command
00B4 C098 cbi 0x18,0
00B6 .dbline 128
00B6 ; lcd_set_e(); // Write data to LCD
00B6 C29A sbi 0x18,2
00B8 .dbline 129
00B8 ; asm("nop");
00B8 0000 nop
00BA .dbline 130
00BA ; asm("nop");
00BA 0000 nop
00BC .dbline 131
00BC ; lcd_clear_e(); // Disable LCD
00BC C298 cbi 0x18,2
00BE .dbline -2
00BE L6:
00BE 00D0 rcall pop_gset2
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 .dbsym r temp 20 c
00C2 .dbsym r CMD 22 c
00C2 .dbend
00C2 .dbfunc e LCD_WriteData _LCD_WriteData fV
00C2 ; temp -> R20
00C2 ; Data -> R22
.even
00C2 _LCD_WriteData::
00C2 00D0 rcall push_gset2
00C4 602F mov R22,R16
00C6 .dbline -1
00C6 .dbline 137
00C6 ; }
00C6 ; // ***************************************** //
00C6 ; // *** Write one byte of data to the LCD *** //
00C6 ; // ***************************************** //
00C6 ; void LCD_WriteData (unsigned char Data)
00C6 ; {
00C6 .dbline 139
00C6 ; char temp;
00C6 ; LCD_Busy(); // Test if LCD Busy
00C6 C3DF rcall _LCD_Busy
00C8 .dbline 140
00C8 ; LCD_DIR_PORT = 0xFF; // LCD port output
00C8 8FEF ldi R24,255
00CA 87BB out 0x17,R24
00CC .dbline 141
00CC ; temp=LCD_OP_PORT;
00CC 48B3 in R20,0x18
00CE .dbline 142
00CE ; temp=temp&BIT3;
00CE 4870 andi R20,8
00D0 .dbline 143
00D0 ; LCD_OP_PORT =(Data & 0xf0)|temp; // Load high-data to port
00D0 862F mov R24,R22
00D2 807F andi R24,240
00D4 842B or R24,R20
00D6 88BB out 0x18,R24
00D8 .dbline 144
00D8 ; lcd_clear_rw() ; // Set LCD to write
00D8 C198 cbi 0x18,1
00DA .dbline 145
00DA ; lcd_set_rs(); // Set LCD to data
00DA C09A sbi 0x18,0
00DC .dbline 146
00DC ; lcd_set_e(); // Write data to LCD
00DC C29A sbi 0x18,2
00DE .dbline 147
00DE ; asm("nop");
00DE 0000 nop
00E0 .dbline 148
00E0 ; asm("nop");
00E0 0000 nop
00E2 .dbline 149
00E2 ; lcd_clear_e(); // Disable LCD
00E2 C298 cbi 0x18,2
00E4 .dbline 150
00E4 ; LCD_OP_PORT = (Data << 4)|temp; // Load low-data to port
00E4 862F mov R24,R22
00E6 8F70 andi R24,#0x0F
00E8 8295 swap R24
00EA 842B or R24,R20
00EC 88BB out 0x18,R24
00EE .dbline 151
00EE ; lcd_clear_rw() ; // Set LCD to write
00EE C198 cbi 0x18,1
00F0 .dbline 152
00F0 ; lcd_set_rs(); // Set LCD to data
00F0 C09A sbi 0x18,0
00F2 .dbline 153
00F2 ; lcd_set_e(); // Write data to LCD
00F2 C29A sbi 0x18,2
00F4 .dbline 154
00F4 ; asm("nop");
00F4 0000 nop
00F6 .dbline 155
00F6 ; asm("nop");
00F6 0000 nop
00F8 .dbline 156
00F8 ; lcd_clear_e(); // Disable LCD
00F8 C298 cbi 0x18,2
00FA .dbline -2
00FA L7:
00FA 00D0 rcall pop_gset2
00FC .dbline 0 ; func end
00FC 0895 ret
00FE .dbsym r temp 20 c
00FE .dbsym r Data 22 c
00FE .dbend
00FE .dbfunc e Init_LCD _Init_LCD fV
.even
00FE _Init_LCD::
00FE .dbline -1
00FE .dbline 162
00FE ; }
00FE ; // ********************************* //
00FE ; // *** Initialize the LCD driver *** //
00FE ; // ********************************* //
00FE ; void Init_LCD(void)
00FE ; {
00FE .dbline 163
00FE ; LCD_INIT();
00FE 80DF rcall _LCD_INIT
0100 .dbline 164
0100 ; LCD_WriteControl (LCD_FUNCTION_SET);
0100 08E2 ldi R16,40
0102 C1DF rcall _LCD_WriteControl
0104 .dbline 165
0104 ; LCD_WriteControl (LCD_OFF);
0104 08E0 ldi R16,8
0106 BFDF rcall _LCD_WriteControl
0108 .dbline 166
0108 ; LCD_WriteControl (LCD_CLEAR);
0108 01E0 ldi R16,1
010A BDDF rcall _LCD_WriteControl
010C .dbline 167
010C ; LCD_WriteControl (LCD_MODE_SET);
010C 06E0 ldi R16,6
010E BBDF rcall _LCD_WriteControl
0110 .dbline 168
0110 ; LCD_WriteControl (LCD_ON);
0110 0CE0 ldi R16,12
0112 B9DF rcall _LCD_WriteControl
0114 .dbline 169
0114 ; LCD_WriteControl (LCD_HOME);
0114 02E0 ldi R16,2
0116 B7DF rcall _LCD_WriteControl
0118 .dbline -2
0118 L8:
0118 .dbline 0 ; func end
0118 0895 ret
011A .dbend
011A .dbfunc e LCD_Clear _LCD_Clear fV
.even
011A _LCD_Clear::
011A .dbline -1
011A .dbline 177
011A ; //LCD_WriteControl (0x90);
011A ;
011A ; }
011A ; // ************************************************ //
011A ; // *** Clear the LCD screen (also homes cursor) *** //
011A ; // ************************************************ //
011A ; void LCD_Clear(void)
011A ; {
011A .dbline 178
011A ; LCD_WriteControl(0x01);
011A 01E0 ldi R16,1
011C B4DF rcall _LCD_WriteControl
011E .dbline -2
011E L9:
011E .dbline 0 ; func end
011E 0895 ret
0120 .dbend
0120 .dbfunc e LCD_Home _LCD_Home fV
.even
0120 _LCD_Home::
0120 .dbline -1
0120 .dbline 184
0120 ; }
0120 ; // *********************************************** //
0120 ; // *** Position the LCD cursor at row 1, col 1 *** //
0120 ; // *********************************************** //
0120 ; void LCD_Home(void)
0120 ; {
0120 .dbline 185
0120 ; LCD_WriteControl(0x02);
0120 02E0 ldi R16,2
0122 B1DF rcall _LCD_WriteControl
0124 .dbline -2
0124 L10:
0124 .dbline 0 ; func end
0124 0895 ret
0126 .dbend
0126 .dbfunc e LCD_DisplayCharacter _LCD_DisplayCharacter fV
0126 ; Char -> R20
.even
0126 _LCD_DisplayCharacter::
0126 00D0 rcall push_gset1
0128 402F mov R20,R16
012A .dbline -1
012A .dbline 191
012A ; }
012A ; // ****************************************************************** //
012A ; // *** Display a single character, at the current cursor location *** //
012A ; // ****************************************************************** //
012A ; void LCD_DisplayCharacter (char Char)
012A ; {
012A .dbline 192
012A ; LCD_WriteData (Char);
012A 042F mov R16,R20
012C CADF rcall _LCD_WriteData
012E .dbline -2
012E L11:
012E 00D0 rcall pop_gset1
0130 .dbline 0 ; func end
0130 0895 ret
0132 .dbsym r Char 20 c
0132 .dbend
0132 .dbfunc e LCD_DisplayString_F _LCD_DisplayString_F fV
0132 ; string -> R20,R21
0132 ; column -> R10
0132 ; row -> R22
.even
0132 _LCD_DisplayString_F::
0132 00D0 rcall push_gset3
0134 A22E mov R10,R18
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -