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