📄 lcd.lis
字号:
.even
0144 _LCD_DisplayString_F::
0144 0E940000 xcall push_xgset303C
0148 C22E mov R12,R18
014A A02E mov R10,R16
014C 4E81 ldd R20,y+6
014E 5F81 ldd R21,y+7
0150 .dbline -1
0150 .dbline 196
0150 ; }
0150 ; // ********************************************************************* //
0150 ; // *** Display a string at the specified row and column, using FLASH *** //
0150 ; // ********************************************************************* //
0150 ; void LCD_DisplayString_F (char row, char column , unsigned char __flash *string)
0150 ; {
0150 .dbline 197
0150 ; LCD_Cursor (row, column);
0150 2C2D mov R18,R12
0152 0A2D mov R16,R10
0154 21D0 xcall _LCD_Cursor
0156 06C0 xjmp L14
0158 L13:
0158 .dbline 199
0158 ; while (*string)
0158 ; {
0158 .dbline 200
0158 ; LCD_DisplayCharacter (*string++);
0158 1A01 movw R2,R20
015A 4F5F subi R20,255 ; offset = 1
015C 5F4F sbci R21,255
015E F101 movw R30,R2
0160 0491 lpm R16,Z
0162 EADF xcall _LCD_DisplayCharacter
0164 .dbline 201
0164 ; }
0164 L14:
0164 .dbline 198
0164 FA01 movw R30,R20
0166 2490 lpm R2,Z
0168 2220 tst R2
016A B1F7 brne L13
016C X1:
016C .dbline -2
016C L12:
016C .dbline 0 ; func end
016C 0C940000 xjmp pop_xgset303C
0170 .dbsym r string 20 pc
0170 .dbsym r column 12 c
0170 .dbsym r row 10 c
0170 .dbend
0170 .dbfunc e LCD_DisplayString _LCD_DisplayString fV
0170 ; string -> R10,R11
0170 ; column -> R14
0170 ; row -> R12
.even
0170 _LCD_DisplayString::
0170 0E940000 xcall push_xgset00FC
0174 E22E mov R14,R18
0176 C02E mov R12,R16
0178 AE80 ldd R10,y+6
017A BF80 ldd R11,y+7
017C .dbline -1
017C .dbline 207
017C ; }
017C ; // ******************************************************************* //
017C ; // *** Display a string at the specified row and column, using RAM *** //
017C ; // ******************************************************************* //
017C ; void LCD_DisplayString (char row, char column ,unsigned char *string)
017C ; {
017C .dbline 208
017C ; LCD_Cursor (row, column);
017C 2E2D mov R18,R14
017E 0C2D mov R16,R12
0180 0BD0 xcall _LCD_Cursor
0182 04C0 xjmp L18
0184 L17:
0184 .dbline 210
0184 ; while (*string)
0184 ; LCD_DisplayCharacter (*string++);
0184 F501 movw R30,R10
0186 0191 ld R16,Z+
0188 5F01 movw R10,R30
018A D6DF xcall _LCD_DisplayCharacter
018C L18:
018C .dbline 209
018C F501 movw R30,R10
018E 2080 ldd R2,z+0
0190 2220 tst R2
0192 C1F7 brne L17
0194 X2:
0194 .dbline -2
0194 L16:
0194 .dbline 0 ; func end
0194 0C940000 xjmp pop_xgset00FC
0198 .dbsym r string 10 pc
0198 .dbsym r column 14 c
0198 .dbsym r row 12 c
0198 .dbend
0198 .dbfunc e LCD_Cursor _LCD_Cursor fV
0198 ; column -> R20
0198 ; row -> R10
.even
0198 _LCD_Cursor::
0198 0E940000 xcall push_xgsetF00C
019C 422F mov R20,R18
019E A02E mov R10,R16
01A0 .dbline -1
01A0 .dbline 216
01A0 ; }
01A0 ; // *************************************************** //
01A0 ; // *** Position the LCD cursor at "row", "column". *** //
01A0 ; // *************************************************** //
01A0 ; void LCD_Cursor (char row, char column)
01A0 ; {
01A0 .dbline 217
01A0 ; switch (row) {
01A0 6A2D mov R22,R10
01A2 7727 clr R23
01A4 6130 cpi R22,1
01A6 E0E0 ldi R30,0
01A8 7E07 cpc R23,R30
01AA 69F0 breq L24
01AC X3:
01AC 6230 cpi R22,2
01AE E0E0 ldi R30,0
01B0 7E07 cpc R23,R30
01B2 71F0 breq L25
01B4 X4:
01B4 6330 cpi R22,3
01B6 E0E0 ldi R30,0
01B8 7E07 cpc R23,R30
01BA 79F0 breq L26
01BC X5:
01BC 6430 cpi R22,4
01BE E0E0 ldi R30,0
01C0 7E07 cpc R23,R30
01C2 81F0 breq L27
01C4 X6:
01C4 13C0 xjmp L22
01C6 L24:
01C6 .dbline 218
01C6 ; case 1: LCD_WriteControl (0x80 + column - 1); break;
01C6 042F mov R16,R20
01C8 0058 subi R16,128 ; addi 128
01CA 0150 subi R16,1
01CC 61DF xcall _LCD_WriteControl
01CE .dbline 218
01CE 0EC0 xjmp L22
01D0 L25:
01D0 .dbline 219
01D0 ; case 2: LCD_WriteControl (0xc0 + column - 1); break;
01D0 042F mov R16,R20
01D2 0054 subi R16,64 ; addi 192
01D4 0150 subi R16,1
01D6 5CDF xcall _LCD_WriteControl
01D8 .dbline 219
01D8 09C0 xjmp L22
01DA L26:
01DA .dbline 220
01DA ; case 3: LCD_WriteControl (0x94 + column - 1); break;
01DA 042F mov R16,R20
01DC 0C56 subi R16,108 ; addi 148
01DE 0150 subi R16,1
01E0 57DF xcall _LCD_WriteControl
01E2 .dbline 220
01E2 04C0 xjmp L22
01E4 L27:
01E4 .dbline 221
01E4 ; case 4: LCD_WriteControl (0xd4 + column - 1); break;
01E4 042F mov R16,R20
01E6 0C52 subi R16,44 ; addi 212
01E8 0150 subi R16,1
01EA 52DF xcall _LCD_WriteControl
01EC .dbline 221
01EC .dbline 222
01EC ; default: break;
01EC L22:
01EC .dbline -2
01EC L20:
01EC .dbline 0 ; func end
01EC 0C940000 xjmp pop_xgsetF00C
01F0 .dbsym r column 20 c
01F0 .dbsym r row 10 c
01F0 .dbend
01F0 .dbfunc e LCD_Cursor_On _LCD_Cursor_On fV
.even
01F0 _LCD_Cursor_On::
01F0 .dbline -1
01F0 .dbline 229
01F0 ; }
01F0 ; }
01F0 ; // ************************** //
01F0 ; // *** Turn the cursor on *** //
01F0 ; // ************************** //
01F0 ; void LCD_Cursor_On (void)
01F0 ; {
01F0 .dbline 230
01F0 ; LCD_WriteControl (LCD_CURS_ON);
01F0 0DE0 ldi R16,13
01F2 4EDF xcall _LCD_WriteControl
01F4 .dbline -2
01F4 L28:
01F4 .dbline 0 ; func end
01F4 0895 ret
01F6 .dbend
01F6 .dbfunc e LCD_Cursor_Off _LCD_Cursor_Off fV
.even
01F6 _LCD_Cursor_Off::
01F6 .dbline -1
01F6 .dbline 236
01F6 ; }
01F6 ; // *************************** //
01F6 ; // *** Turn the cursor off *** //
01F6 ; // *************************** //
01F6 ; void LCD_Cursor_Off (void)
01F6 ; {
01F6 .dbline 237
01F6 ; LCD_WriteControl (LCD_ON);
01F6 0CE0 ldi R16,12
01F8 4BDF xcall _LCD_WriteControl
01FA .dbline -2
01FA L29:
01FA .dbline 0 ; func end
01FA 0895 ret
01FC .dbend
01FC .dbfunc e LCD_Display_Off _LCD_Display_Off fV
.even
01FC _LCD_Display_Off::
01FC .dbline -1
01FC .dbline 243
01FC ; }
01FC ; // ******************** //
01FC ; // *** Turn Off LCD *** //
01FC ; // ******************** //
01FC ; void LCD_Display_Off (void)
01FC ; {
01FC .dbline 244
01FC ; LCD_WriteControl(LCD_OFF);
01FC 08E0 ldi R16,8
01FE 48DF xcall _LCD_WriteControl
0200 .dbline -2
0200 L30:
0200 .dbline 0 ; func end
0200 0895 ret
0202 .dbend
0202 .dbfunc e LCD_Display_On _LCD_Display_On fV
.even
0202 _LCD_Display_On::
0202 .dbline -1
0202 .dbline 250
0202 ; }
0202 ; // ******************* //
0202 ; // *** Turn On LCD *** //
0202 ; // ******************* //
0202 ; void LCD_Display_On (void)
0202 ; {
0202 .dbline 251
0202 ; LCD_WriteControl(LCD_ON);
0202 0CE0 ldi R16,12
0204 45DF xcall _LCD_WriteControl
0206 .dbline -2
0206 L31:
0206 .dbline 0 ; func end
0206 0895 ret
0208 .dbend
0208 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -