⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.lis

📁 使用iccavr的例子
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                       ;   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 + -