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