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