📄 lcd.lis
字号:
; SETBIT( LCDStatus, LCD_UPDATE );
012C 80910000 lds R24,_LCDStatus
0130 8260 ori R24,2
0132 80930000 sts _LCDStatus,R24
0136 .dbline 75}
; }
0136 L16:
0136 2296 adiw R28,2
0138 0895 ret
013A .dbfunc s RefreshLCD _RefreshLCD fI
.even
013A _RefreshLCD::
013A .dbline 79{
;
; /* continously called when not serving interrupts and the micro is doing nothing */
; void RefreshLCD( void )
; {
013A .dbline 80
; if ( CHECKBIT( LCDStatus, LCD_OK ) )
013A 20900000 lds R2,_LCDStatus
013E 20FE sbrs R2,0
0140 06C0 rjmp L19
0142 .dbline 81
; {
0142 .dbline 82
; if ( CHECKBIT( LCDStatus, LCD_UPDATE ) )
0142 21FE sbrs R2,1
0144 0AC0 rjmp L20
0146 .dbline 83
; WriteToScreen();
0146 0E94D700 call _WriteToScreen
014A .dbline 84
; }
014A 0C94AD00 jmp L20
014E L19:
014E .dbline 85
; else if ( LCDCounter == _20MS )
014E 80914600 lds R24,_LCDCounter
0152 8431 cpi R24,20
0154 11F4 brne L23
0156 .dbline 86
; ConfigureLCD(); /* configure lcd to 2 lines, 8bit interface */
0156 0E94AE00 call _ConfigureLCD
015A L23:
015A L20:
015A .dbline 87}
; }
015A L18:
015A 0895 ret
.area lit
0000 L26:
0000 380C .byte 56,12
0002 01 .byte 1
.area text
015C .dbfile C:\Documents\Software\AVR\lcd16x2\code\lcd.c
015C .dbfunc s ConfigureLCD _ConfigureLCD fI
015C .dbsym s initialise_table L26 Ac[3:3]
; i -> R20
.even
015C _ConfigureLCD::
015C 0E940000 call push_gset1
0160 .dbline 91{
;
; /* sets the lcd to 2-line 16-character mode with 8-bit interface and auto incrementation */
; void ConfigureLCD( void )
; {
0160 .dbline 95
; static const unsigned char initialise_table[] = {FUNCTION_SET, DISPLAY_ON, DISPLAY_CLEAR};
; unsigned char i;
;
; for ( i=0; i<3; i++ )
0160 4427 clr R20
0162 0C94C500 jmp L30
0166 L27:
0166 .dbline 96
0166 .dbline 97
0166 0E949201 call _CheckIfBusy
016A .dbline 98
016A 2227 clr R18
016C 3327 clr R19
016E 80E0 ldi R24,<L26
0170 90E0 ldi R25,>L26
0172 242E mov R2,R20
0174 3324 clr R3
0176 280E add R2,R24
0178 391E adc R3,R25
017A E22D mov R30,R2
017C F32D mov R31,R3
017E C895 lpm
0180 002D mov R16,R0
0182 1127 clr R17
0184 0E948201 call _WriteToDevice
0188 .dbline 99
0188 L28:
0188 .dbline 95
0188 4F5F subi R20,255 ; addi 1
018A L30:
018A .dbline 95
018A 4330 cpi R20,3
018C 60F3 brlo L27
018E .dbline 101
; {
; CheckIfBusy();
; WriteToDevice( initialise_table[i], INSTRUCTION );
; }
;
; LCDCounter--;
018E 80914600 lds R24,_LCDCounter
0192 8150 subi R24,1
0194 80934600 sts _LCDCounter,R24
0198 .dbline 102
; SETBIT( LCDStatus, LCD_OK );
0198 80910000 lds R24,_LCDStatus
019C 8160 ori R24,1
019E 80930000 sts _LCDStatus,R24
01A2 .dbline 103
; SETBIT( LCDStatus, LCD_INITIALISE );
01A2 8860 ori R24,8
01A4 80930000 sts _LCDStatus,R24
01A8 .dbline 104}
; }
01A8 L25:
01A8 0E940000 call pop_gset1
01AC 0895 ret
01AE .dbsym r i 20 c
.area bss
0000 .dbfile C:\Documents\Software\AVR\lcd16x2\code\lcd.c
0000 L32:
0000 .blkb 1
.area text
01AE .dbfile C:\Documents\Software\AVR\lcd16x2\code\lcd.c
01AE .dbfunc s WriteToScreen _WriteToScreen fI
01AE .dbsym s i L32 c
.even
01AE _WriteToScreen::
01AE .dbline 107{
;
; void WriteToScreen( void )
; {
01AE .dbline 110
; static unsigned char i;
;
; if ( !CHECKBIT( LCDStatus, LCD_BUSY ) )
01AE 20900000 lds R2,_LCDStatus
01B2 22FC sbrc R2,2
01B4 46C0 rjmp L33
01B6 .dbline 111
; {
01B6 .dbline 112
; if ( LCDLine == LINE2 ) /* set which line is to be updated */
01B6 80914500 lds R24,_LCDLine
01BA 8230 cpi R24,2
01BC 41F4 brne L35
01BE .dbline 113
; WriteToDevice( SECOND_LINE, INSTRUCTION );
01BE 2227 clr R18
01C0 3327 clr R19
01C2 00EC ldi R16,192
01C4 10E0 ldi R17,0
01C6 0E948201 call _WriteToDevice
01CA 0C94ED00 jmp L36
01CE L35:
01CE .dbline 115
; else
; WriteToDevice( FIRST_LINE, INSTRUCTION );
01CE 2227 clr R18
01D0 3327 clr R19
01D2 00E8 ldi R16,128
01D4 10E0 ldi R17,0
01D6 0E948201 call _WriteToDevice
01DA L36:
01DA .dbline 117
;
; for ( i=0; i<16; i++ ) /* replace all characters after the null which space characters */
01DA 2224 clr R2
01DC 20920000 sts L32,R2
01E0 0C941501 jmp L40
01E4 L37:
01E4 .dbline 118
; if ( LCDStr1[i] == CHARACTER_NULL )
01E4 80E0 ldi R24,<_LCDStr1
01E6 90E0 ldi R25,>_LCDStr1
01E8 E0910000 lds R30,L32
01EC FF27 clr R31
01EE E80F add R30,R24
01F0 F91F adc R31,R25
01F2 2080 ldd R2,z+0
01F4 2220 tst R2
01F6 A1F4 brne L41
01F8 .dbline 119
; for ( ; i<16; i++ )
01F8 0C940C01 jmp L46
01FC L43:
01FC .dbline 120
01FC 80E0 ldi R24,<_LCDStr1
01FE 90E0 ldi R25,>_LCDStr1
0200 E0910000 lds R30,L32
0204 FF27 clr R31
0206 E80F add R30,R24
0208 F91F adc R31,R25
020A 80E2 ldi R24,32
020C 8083 std z+0,R24
020E L44:
020E .dbline 119
020E 80910000 lds R24,L32
0212 8F5F subi R24,255 ; addi 1
0214 80930000 sts L32,R24
0218 L46:
0218 .dbline 119
0218 80910000 lds R24,L32
021C 8031 cpi R24,16
021E 70F3 brlo L43
0220 L41:
0220 L38:
0220 .dbline 117
0220 80910000 lds R24,L32
0224 8F5F subi R24,255 ; addi 1
0226 80930000 sts L32,R24
022A L40:
022A .dbline 117
022A 80910000 lds R24,L32
022E 8031 cpi R24,16
0230 C8F2 brlo L37
0232 .dbline 121
; LCDStr1[i] = CHARACTER_SPACE;
; i = 0;
0232 2224 clr R2
0234 20920000 sts L32,R2
0238 .dbline 122
; SETBIT( LCDStatus, LCD_BUSY );
0238 80910000 lds R24,_LCDStatus
023C 8460 ori R24,4
023E 80930000 sts _LCDStatus,R24
0242 .dbline 123
; }
0242 L33:
0242 .dbline 125
;
; CheckIfBusy();
0242 0E949201 call _CheckIfBusy
0246 .dbline 126
; WriteToDevice( LCDStr1[i++], DATA ); /* write character to screen */
0246 21E0 ldi R18,1
0248 30E0 ldi R19,0
024A 20900000 lds R2,L32
024E 3324 clr R3
0250 822D mov R24,R2
0252 932D mov R25,R3
0254 0196 adiw R24,1
0256 80930000 sts L32,R24
025A 80E0 ldi R24,<_LCDStr1
025C 90E0 ldi R25,>_LCDStr1
025E E22D mov R30,R2
0260 F32D mov R31,R3
0262 E80F add R30,R24
0264 F91F adc R31,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -