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

📄 lcd16x2.lst

📁 使用iccavr的例子
💻 LST
📖 第 1 页 / 共 4 页
字号:
 0AD2                    .dbfunc s DelayLCDStartup _DelayLCDStartup fI
                         .even
 0AD2                  _DelayLCDStartup::
 0AD2                    .dbline 60{
                       ; 
                       ; /* called from the main 1ms interrupt, must allow at least 40ms before lcd can be initialised */
                       ; void DelayLCDStartup( void )
                       ; {
 0AD2                    .dbline 61
                       ;   if ( LCDCounter && !CHECKBIT( LCDStatus, LCD_BUSY ) ) 
 0AD2  90200127          lds R2,_LCDCounter
 0AD4  2022              tst R2
 0AD5  F049              breq L12
 0AD6  902000E0          lds R2,_LCDStatus
 0AD8  FC22              sbrc R2,2
 0AD9  C005              rjmp L12
 0ADA                    .dbline 62
                       ;     LCDCounter--;           /* count down delay timer */
 0ADA  91800127          lds R24,_LCDCounter
 0ADC  5081              subi R24,1
 0ADD  93800127          sts _LCDCounter,R24
 0ADF                  L12:
 0ADF                    .dbline 64
                       ;     
                       ;   if ( CHECKBIT( LCDStatus, LCD_INITIALISE ) && LCDCounter == 1 )
 0ADF  902000E0          lds R2,_LCDStatus
 0AE1  FE23              sbrs R2,3
 0AE2  C006              rjmp L14
 0AE3  91800127          lds R24,_LCDCounter
 0AE5  3081              cpi R24,1
 0AE6  F411              brne L14
 0AE7                    .dbline 65
                       ;     InitScreen();                   /* initialise lcd */
 0AE7  940E0AEA          call _InitScreen
 0AE9                  L14:
 0AE9                    .dbline 66}
                       ; }
 0AE9                  L11:
 0AE9  9508              ret
 0AEA                    .dbfunc s InitScreen _InitScreen fI
                         .even
 0AEA                  _InitScreen::
 0AEA  9722              sbiw R28,2
 0AEB                    .dbline 69{
                       ; 
                       ; void InitScreen( void )
                       ; {
 0AEB                    .dbline 70
                       ;   sprintf( LCDStr1, "%s", LCDHeader1 ); /* initialise lcd lines */
 0AEB  903000B0          lds R3,_LCDHeader1+1
 0AED  902000AF          lds R2,_LCDHeader1
 0AEF  8228              std y+0,R2
 0AF0  8239              std y+1,R3
 0AF1  EC28              ldi R18,<L17
 0AF2  E030              ldi R19,>L17
 0AF3  E105              ldi R16,<_LCDStr1
 0AF4  E011              ldi R17,>_LCDStr1
 0AF5  940E070B          call _sprintf
 0AF7                    .dbline 71
                       ;   sprintf( LCDStr2, "%s", LCDHeader2 );
 0AF7  903000B2          lds R3,_LCDHeader2+1
 0AF9  902000B1          lds R2,_LCDHeader2
 0AFB  8228              std y+0,R2
 0AFC  8239              std y+1,R3
 0AFD  EC28              ldi R18,<L17
 0AFE  E030              ldi R19,>L17
 0AFF  E004              ldi R16,<_LCDStr2
 0B00  E011              ldi R17,>_LCDStr2
 0B01  940E070B          call _sprintf
 0B03                    .dbline 72
                       ;   LCDLine = LINE1_AND_LINE2;                /* both lines to be updated */                       
 0B03  E083              ldi R24,3
 0B04  93800126          sts _LCDLine,R24
 0B06                    .dbline 73
                       ;   LCDCounter--;
 0B06  91800127          lds R24,_LCDCounter
 0B08  5081              subi R24,1
 0B09  93800127          sts _LCDCounter,R24
 0B0B                    .dbline 74
                       ;   SETBIT( LCDStatus, LCD_UPDATE );
 0B0B  918000E0          lds R24,_LCDStatus
 0B0D  6082              ori R24,2
 0B0E  938000E0          sts _LCDStatus,R24
 0B10                    .dbline 75}
                       ; }
 0B10                  L16:
 0B10  9622              adiw R28,2
 0B11  9508              ret
 0B12                    .dbfunc s RefreshLCD _RefreshLCD fI
                         .even
 0B12                  _RefreshLCD::
 0B12                    .dbline 79{
                       ; 
                       ; /* continously called when not serving interrupts and the micro is doing nothing */
                       ; void RefreshLCD( void )
                       ; {
 0B12                    .dbline 80
                       ;   if ( CHECKBIT( LCDStatus, LCD_OK ) )  
 0B12  902000E0          lds R2,_LCDStatus
 0B14  FE20              sbrs R2,0
 0B15  C006              rjmp L19
 0B16                    .dbline 81
                       ;   { 
 0B16                    .dbline 82
                       ;     if ( CHECKBIT( LCDStatus, LCD_UPDATE ) )
 0B16  FE21              sbrs R2,1
 0B17  C00A              rjmp L20
 0B18                    .dbline 83
                       ;       WriteToScreen();
 0B18  940E0B4C          call _WriteToScreen
 0B1A                    .dbline 84
                       ;   }
 0B1A  940C0B22          jmp L20
 0B1C                  L19:
 0B1C                    .dbline 85
                       ;   else if ( LCDCounter == _20MS )
 0B1C  91800127          lds R24,_LCDCounter
 0B1E  3184              cpi R24,20
 0B1F  F411              brne L23
 0B20                    .dbline 86
                       ;     ConfigureLCD();                 /* configure lcd to 2 lines, 8bit interface */
 0B20  940E0B23          call _ConfigureLCD
 0B22                  L23:
 0B22                  L20:
 0B22                    .dbline 87}
                       ; }
 0B22                  L18:
 0B22  9508              ret
                         .area lit
--- 0000                 L26:
--- 0000 380C              .byte 56,12
--- 0001 01                .byte 1
                         .area text
--- 00AE                   .dbfile C:\Documents\Software\AVR\lcd16x2\code\lcd.c
--- 00AE                   .dbfunc s ConfigureLCD _ConfigureLCD fI
--- 00AE                   .dbsym s initialise_table L26 Ac[3:3]
                       ;              i -> R20
                         .even
 0B23                  _ConfigureLCD::
 0B23  940E06D2          call push_gset1
 0B25                    .dbline 91{
                       ; 
                       ; /* sets the lcd to 2-line 16-character mode with 8-bit interface and auto incrementation */
                       ; void ConfigureLCD( void )
                       ; {
 0B25                    .dbline 95
                       ;   static const unsigned char initialise_table[] = {FUNCTION_SET, DISPLAY_ON, DISPLAY_CLEAR};
                       ;   unsigned char i;
                       ;   
                       ;   for ( i=0; i<3; i++ )
 0B25  2744              clr R20
 0B26  940C0B3A          jmp L30
 0B28                  L27:
 0B28                    .dbline 96
 0B28                    .dbline 97
 0B28  940E0C07          call _CheckIfBusy
 0B2A                    .dbline 98
 0B2A  2722              clr R18
 0B2B  2733              clr R19
 0B2C  E783              ldi R24,<L26
 0B2D  E091              ldi R25,>L26
 0B2E  2E24              mov R2,R20
 0B2F  2433              clr R3
 0B30  0E28              add R2,R24
 0B31  1E39              adc R3,R25
 0B32  2DE2              mov R30,R2
 0B33  2DF3              mov R31,R3
 0B34  95C8              lpm
 0B35  2D00              mov R16,R0
 0B36  2711              clr R17
 0B37  940E0BF7          call _WriteToDevice
 0B39                    .dbline 99
 0B39                  L28:
 0B39                    .dbline 95
 0B39  5F4F              subi R20,255    ; addi 1
 0B3A                  L30:
 0B3A                    .dbline 95
 0B3A  3043              cpi R20,3
 0B3B  F360              brlo L27
 0B3C                    .dbline 101
                       ;   {
                       ;     CheckIfBusy();
                       ;     WriteToDevice( initialise_table[i], INSTRUCTION );  
                       ;   }
                       ;   
                       ;   LCDCounter--;
 0B3C  91800127          lds R24,_LCDCounter
 0B3E  5081              subi R24,1
 0B3F  93800127          sts _LCDCounter,R24
 0B41                    .dbline 102
                       ;   SETBIT( LCDStatus, LCD_OK );
 0B41  918000E0          lds R24,_LCDStatus
 0B43  6081              ori R24,1
 0B44  938000E0          sts _LCDStatus,R24
 0B46                    .dbline 103
                       ;   SETBIT( LCDStatus, LCD_INITIALISE );
 0B46  6088              ori R24,8
 0B47  938000E0          sts _LCDStatus,R24
 0B49                    .dbline 104}
                       ; }
 0B49                  L25:
 0B49  940E06D5          call pop_gset1
 0B4B  9508              ret
 0B4C                    .dbsym r i 20 c
                         .area bss
--- 0000                   .dbfile C:\Documents\Software\AVR\lcd16x2\code\lcd.c
--- 0000                 L32:
--- 0000                   .blkb 1
                         .area text
--- 00D7                   .dbfile C:\Documents\Software\AVR\lcd16x2\code\lcd.c
--- 00D7                   .dbfunc s WriteToScreen _WriteToScreen fI
--- 00D7                   .dbsym s i L32 c
                         .even
 0B4C                  _WriteToScreen::
 0B4C                    .dbline 107{
                       ; 
                       ; void WriteToScreen( void )
                       ; {
 0B4C                    .dbline 110
                       ;   static unsigned char i;
                       ;   
                       ;   if ( !CHECKBIT( LCDStatus, LCD_BUSY ) )           
 0B4C  902000E0          lds R2,_LCDStatus
 0B4E  FC22              sbrc R2,2
 0B4F  C046              rjmp L33
 0B50                    .dbline 111
                       ;   {
 0B50                    .dbline 112
                       ;     if ( LCDLine == LINE2 )             /* set which line is to be updated */
 0B50  91800126          lds R24,_LCDLine
 0B52  3082              cpi R24,2
 0B53  F441              brne L35
 0B54                    .dbline 113
                       ;       WriteToDevice( SECOND_LINE, INSTRUCTION );
 0B54  2722              clr R18
 0B55  2733              clr R19
 0B56  EC00              ldi R16,192
 0B57  E010              ldi R17,0
 0B58  940E0BF7          call _WriteToDevice
 0B5A  940C0B62          jmp L36
 0B5C                  L35:
 0B5C                    .dbline 115
                       ;     else
                       ;       WriteToDevice( FIRST_LINE, INSTRUCTION );
 0B5C  2722              clr R18
 0B5D  2733              clr R19
 0B5E  E800              ldi R16,128
 0B5F  E010              ldi R17,0
 0B60  940E0BF7          call _WriteToDevice
 0B62                  L36:
 0B62                    .dbline 117
                       ;     
                       ;     for ( i=0; i<16; i++ )              /* replace all characters after the null which space characters */
 0B62  2422              clr R2
 0B63  922000E1          sts L32,R2
 0B65  940C0B8A          jmp L40
 0B67                  L37:
 0B67                    .dbline 118
                       ;       if ( LCDStr1[i] == CHARACTER_NULL )
 0B67  E185              ldi R24,<_LCDStr1
 0B68  E091              ldi R25,>_LCDStr1
 0B69  91E000E1          lds R30,L32
 0B6B  27FF              clr R31
 0B6C  0FE8              add R30,R24
 0B6D  1FF9              adc R31,R25
 0B6E  8020              ldd R2,z+0
 0B6F  2022              tst R2
 0B70  F4A1              brne L41
 0B71                    .dbline 119
                       ;         for ( ; i<16; i++ )
 0B71  940C0B81          jmp L46
 0B73                  L43:
 0B73                    .dbline 120
 0B73  E185              ldi R24,<_LCDStr1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -