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