📄 lcd.lis
字号:
00AC .dbline 119
00AC ; lcd_clear_rw(); // Set LCD to write
00AC C198 cbi 0x18,1
00AE .dbline 120
00AE ; lcd_clear_rs(); // Set LCD to command
00AE C098 cbi 0x18,0
00B0 .dbline 121
00B0 ; lcd_set_e(); // Write data to LCD
00B0 C29A sbi 0x18,2
00B2 .dbline 122
00B2 ; asm("nop");
00B2 0000 nop
00B4 .dbline 123
00B4 ; asm("nop");
00B4 0000 nop
00B6 .dbline 124
00B6 ; lcd_clear_e(); // Disable LCD
00B6 C298 cbi 0x18,2
00B8 .dbline 125
00B8 ; LCD_OP_PORT =(CMD<<4)|temp; // Load low-data to port
00B8 862F mov R24,R22
00BA 8F70 andi R24,#0x0F
00BC 8295 swap R24
00BE 842B or R24,R20
00C0 88BB out 0x18,R24
00C2 .dbline 126
00C2 ; lcd_clear_rw(); // Set LCD to write
00C2 C198 cbi 0x18,1
00C4 .dbline 127
00C4 ; lcd_clear_rs(); // Set LCD to command
00C4 C098 cbi 0x18,0
00C6 .dbline 128
00C6 ; lcd_set_e(); // Write data to LCD
00C6 C29A sbi 0x18,2
00C8 .dbline 129
00C8 ; asm("nop");
00C8 0000 nop
00CA .dbline 130
00CA ; asm("nop");
00CA 0000 nop
00CC .dbline 131
00CC ; lcd_clear_e(); // Disable LCD
00CC C298 cbi 0x18,2
00CE .dbline -2
00CE .dbline 132
00CE ; }
00CE L6:
00CE 0E940000 xcall pop_gset2
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym r temp 20 c
00D4 .dbsym r CMD 22 c
00D4 .dbend
00D4 .dbfunc e LCD_WriteData _LCD_WriteData fV
00D4 ; temp -> R20
00D4 ; Data -> R22
.even
00D4 _LCD_WriteData::
00D4 0E940000 xcall push_gset2
00D8 602F mov R22,R16
00DA .dbline -1
00DA .dbline 137
00DA ; // ***************************************** //
00DA ; // *** Write one byte of data to the LCD *** //
00DA ; // ***************************************** //
00DA ; void LCD_WriteData (unsigned char Data)
00DA ; {
00DA .dbline 139
00DA ; char temp;
00DA ; LCD_Busy(); // Test if LCD Busy
00DA BCDF xcall _LCD_Busy
00DC .dbline 140
00DC ; LCD_DIR_PORT = 0xFF; // LCD port output
00DC 8FEF ldi R24,255
00DE 87BB out 0x17,R24
00E0 .dbline 141
00E0 ; temp=LCD_OP_PORT;
00E0 48B3 in R20,0x18
00E2 .dbline 142
00E2 ; temp=temp&BIT3;
00E2 4870 andi R20,8
00E4 .dbline 143
00E4 ; LCD_OP_PORT =(Data & 0xf0)|temp; // Load high-data to port
00E4 862F mov R24,R22
00E6 807F andi R24,240
00E8 842B or R24,R20
00EA 88BB out 0x18,R24
00EC .dbline 144
00EC ; lcd_clear_rw() ; // Set LCD to write
00EC C198 cbi 0x18,1
00EE .dbline 145
00EE ; lcd_set_rs(); // Set LCD to data
00EE C09A sbi 0x18,0
00F0 .dbline 146
00F0 ; lcd_set_e(); // Write data to LCD
00F0 C29A sbi 0x18,2
00F2 .dbline 147
00F2 ; asm("nop");
00F2 0000 nop
00F4 .dbline 148
00F4 ; asm("nop");
00F4 0000 nop
00F6 .dbline 149
00F6 ; lcd_clear_e(); // Disable LCD
00F6 C298 cbi 0x18,2
00F8 .dbline 150
00F8 ; LCD_OP_PORT = (Data << 4)|temp; // Load low-data to port
00F8 862F mov R24,R22
00FA 8F70 andi R24,#0x0F
00FC 8295 swap R24
00FE 842B or R24,R20
0100 88BB out 0x18,R24
0102 .dbline 151
0102 ; lcd_clear_rw() ; // Set LCD to write
0102 C198 cbi 0x18,1
0104 .dbline 152
0104 ; lcd_set_rs(); // Set LCD to data
0104 C09A sbi 0x18,0
0106 .dbline 153
0106 ; lcd_set_e(); // Write data to LCD
0106 C29A sbi 0x18,2
0108 .dbline 154
0108 ; asm("nop");
0108 0000 nop
010A .dbline 155
010A ; asm("nop");
010A 0000 nop
010C .dbline 156
010C ; lcd_clear_e(); // Disable LCD
010C C298 cbi 0x18,2
010E .dbline -2
010E .dbline 157
010E ; }
010E L7:
010E 0E940000 xcall pop_gset2
0112 .dbline 0 ; func end
0112 0895 ret
0114 .dbsym r temp 20 c
0114 .dbsym r Data 22 c
0114 .dbend
0114 .dbfunc e Init_LCD _Init_LCD fV
.even
0114 _Init_LCD::
0114 .dbline -1
0114 .dbline 162
0114 ; // ********************************* //
0114 ; // *** Initialize the LCD driver *** //
0114 ; // ********************************* //
0114 ; void Init_LCD(void)
0114 ; {
0114 .dbline 163
0114 ; LCD_INIT();
0114 75DF xcall _LCD_INIT
0116 .dbline 164
0116 ; LCD_WriteControl (LCD_FUNCTION_SET);
0116 08E2 ldi R16,40
0118 BDDF xcall _LCD_WriteControl
011A .dbline 165
011A ; LCD_WriteControl (LCD_OFF);
011A 08E0 ldi R16,8
011C BBDF xcall _LCD_WriteControl
011E .dbline 166
011E ; LCD_WriteControl (LCD_CLEAR);
011E 01E0 ldi R16,1
0120 B9DF xcall _LCD_WriteControl
0122 .dbline 167
0122 ; LCD_WriteControl (LCD_MODE_SET);
0122 06E0 ldi R16,6
0124 B7DF xcall _LCD_WriteControl
0126 .dbline 168
0126 ; LCD_WriteControl (LCD_ON);
0126 0CE0 ldi R16,12
0128 B5DF xcall _LCD_WriteControl
012A .dbline 169
012A ; LCD_WriteControl (LCD_HOME);
012A 02E0 ldi R16,2
012C .dbline -2
012C .dbline 170
012C ; }
012C L8:
012C .dbline 0 ; func end
012C B3CF xjmp _LCD_WriteControl
012E .dbend
012E .dbfunc e LCD_Clear _LCD_Clear fV
.even
012E _LCD_Clear::
012E .dbline -1
012E .dbline 175
012E ; // ************************************************ //
012E ; // *** Clear the LCD screen (also homes cursor) *** //
012E ; // ************************************************ //
012E ; void LCD_Clear(void)
012E ; {
012E .dbline 176
012E ; LCD_WriteControl(0x01);
012E 01E0 ldi R16,1
0130 .dbline -2
0130 .dbline 177
0130 ; }
0130 L9:
0130 .dbline 0 ; func end
0130 B1CF xjmp _LCD_WriteControl
0132 .dbend
0132 .dbfunc e LCD_Home _LCD_Home fV
.even
0132 _LCD_Home::
0132 .dbline -1
0132 .dbline 182
0132 ; // *********************************************** //
0132 ; // *** Position the LCD cursor at row 1, col 1 *** //
0132 ; // *********************************************** //
0132 ; void LCD_Home(void)
0132 ; {
0132 .dbline 183
0132 ; LCD_WriteControl(0x02);
0132 02E0 ldi R16,2
0134 .dbline -2
0134 .dbline 184
0134 ; }
0134 L10:
0134 .dbline 0 ; func end
0134 AFCF xjmp _LCD_WriteControl
0136 .dbend
0136 .dbfunc e LCD_DisplayCharacter _LCD_DisplayCharacter fV
0136 ; Char -> R20
.even
0136 _LCD_DisplayCharacter::
0136 0E940000 xcall push_gset1
013A 402F mov R20,R16
013C .dbline -1
013C .dbline 189
013C ; // ****************************************************************** //
013C ; // *** Display a single character, at the current cursor location *** //
013C ; // ****************************************************************** //
013C ; void LCD_DisplayCharacter (char Char)
013C ; {
013C .dbline 190
013C ; LCD_WriteData (Char);
013C 042F mov R16,R20
013E CADF xcall _LCD_WriteData
0140 .dbline -2
0140 .dbline 191
0140 ; }
0140 L11:
0140 0E940000 xcall pop_gset1
0144 .dbline 0 ; func end
0144 0895 ret
0146 .dbsym r Char 20 c
0146 .dbend
0146 .dbfunc e LCD_DisplayString_F _LCD_DisplayString_F fV
0146 ; string -> R20,R21
0146 ; column -> R10
0146 ; row -> R22
.even
0146 _LCD_DisplayString_F::
0146 0E940000 xcall push_gset3
014A A22E mov R10,R18
014C 602F mov R22,R16
014E 4E81 ldd R20,y+6
0150 5F81 ldd R21,y+7
0152 .dbline -1
0152 .dbline 196
0152 ; // ********************************************************************* //
0152 ; // *** Display a string at the specified row and column, using FLASH *** //
0152 ; // ********************************************************************* //
0152 ; void LCD_DisplayString_F (char row, char column ,const unsigned char *string)
0152 ; {
0152 .dbline 197
0152 ; LCD_Cursor (row, column);
0152 2A2D mov R18,R10
0154 062F mov R16,R22
0156 23D0 xcall _LCD_Cursor
0158 06C0 xjmp L14
015A L13:
015A .dbline 199
015A .dbline 200
015A 1A01 movw R2,R20
015C 4F5F subi R20,255 ; offset = 1
015E 5F4F sbci R21,255
0160 F101 movw R30,R2
0162 0491 lpm R16,Z
0164 E8DF xcall _LCD_DisplayCharacter
0166 .dbline 201
0166 L14:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -