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