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

📄 hal_lcd.lst

📁 cc2430应用实例
💻 LST
📖 第 1 页 / 共 4 页
字号:
    395          void HalLcdDisplayPercentBar( char *title, uint8 value )
   \                     HalLcdDisplayPercentBar:
    396          {
   \   000000   74F4         MOV     A,#-0xc
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 12
   \   000005                ; Auto size: 17
   \   000005   74EF         MOV     A,#-0x11
   \   000007   12....       LCALL   ?ALLOC_XSTACK8
   \   00000A   E9           MOV     A,R1
   \   00000B   FE           MOV     R6,A
    397          #if (HAL_LCD == TRUE)
    398            uint8 percent;
    399            uint8 leftOver;
    400            uint8 buf[17];
    401            uint32 err;
    402            uint8 x;
    403          
    404            /* Write the title: */
    405            HalLcdWriteString( title, HAL_LCD_LINE_1 );
    406          
    407            if ( value > 100 )
   \   00000C   C3           CLR     C
   \   00000D   9465         SUBB    A,#0x65
   \   00000F   4002         JC      ??HalLcdDisplayPercentBar_0
    408              value = 100;
   \   000011   7E64         MOV     R6,#0x64
    409          
    410            /* convert to blocks */
    411            percent = (byte)(value / 10);
   \                     ??HalLcdDisplayPercentBar_0:
   \   000013   75F00A       MOV     B,#0xa
   \   000016   EE           MOV     A,R6
   \   000017   84           DIV     AB
   \   000018   F5..         MOV     ?V0 + 3,A
    412            leftOver = (byte)(value % 10);
   \   00001A   EE           MOV     A,R6
   \   00001B   75F00A       MOV     B,#0xa
   \   00001E   84           DIV     AB
   \   00001F   AFF0         MOV     R7,B
    413          
    414            /* Make window */
    415            osal_memcpy( buf, "[          ]  ", 15 );
   \   000021                ; Setup parameters for call to function osal_memcpy
   \   000021   75....       MOV     ?V0 + 0,#(`?<Constant "[          ]  ">` & 0xff)
   \   000024   75....       MOV     ?V0 + 1,#((`?<Constant "[          ]  ">` >> 8) & 0xff)
   \   000027   75..00       MOV     ?V0 + 2,#0x0
   \   00002A   78..         MOV     R0,#?V0 + 0
   \   00002C   12....       LCALL   ?PUSH_XSTACK_I_THREE
   \   00002F   7C0F         MOV     R4,#0xf
   \   000031   7D00         MOV     R5,#0x0
   \   000033   7403         MOV     A,#0x3
   \   000035   12....       LCALL   ?XSTACK_DISP0_8
   \   000038   AA82         MOV     R2,DPL
   \   00003A   AB83         MOV     R3,DPH
   \   00003C   90....       MOV     DPTR,#(osal_memcpy & 0xffff)
   \   00003F   74..         MOV     A,#((osal_memcpy >> 16) & 0xff)
   \   000041   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   000044   7403         MOV     A,#0x3
   \   000046   12....       LCALL   ?DEALLOC_XSTACK8
    416          
    417            for ( x = 0; x < percent; x ++ )
   \   000049   800C         SJMP    ??HalLcdDisplayPercentBar_1
    418            {
    419              buf[1+x] = '>';
   \                     ??HalLcdDisplayPercentBar_2:
   \   00004B   85....       MOV     ?V0 + 0,?V0 + 2
   \   00004E   12....       LCALL   ?Subroutine1 & 0xFFFF
   \                     ??CrossCallReturnLabel_3:
   \   000051   A3           INC     DPTR
   \   000052   743E         MOV     A,#0x3e
   \   000054   F0           MOVX    @DPTR,A
    420            }
   \   000055   05..         INC     ?V0 + 2
   \                     ??HalLcdDisplayPercentBar_1:
   \   000057   E5..         MOV     A,?V0 + 2
   \   000059   C3           CLR     C
   \   00005A   95..         SUBB    A,?V0 + 3
   \   00005C   40ED         JC      ??HalLcdDisplayPercentBar_2
    421          
    422            if ( leftOver >= 5 )
   \   00005E   EF           MOV     A,R7
   \   00005F   C3           CLR     C
   \   000060   9405         SUBB    A,#0x5
   \   000062   4016         JC      ??HalLcdDisplayPercentBar_3
    423              buf[1+x] = '+';
   \   000064   85..82       MOV     DPL,?XSP + 0
   \   000067   85..83       MOV     DPH,?XSP + 1
   \   00006A   E582         MOV     A,DPL
   \   00006C   25..         ADD     A,?V0 + 2
   \   00006E   F582         MOV     DPL,A
   \   000070   E583         MOV     A,DPH
   \   000072   3400         ADDC    A,#0x0
   \   000074   F583         MOV     DPH,A
   \   000076   A3           INC     DPTR
   \   000077   742B         MOV     A,#0x2b
   \   000079   F0           MOVX    @DPTR,A
    424          
    425            err = (uint32)value;
    426            _ltoa( err, (uint8*)&buf[13], 10 );
   \                     ??HalLcdDisplayPercentBar_3:
   \   00007A                ; Setup parameters for call to function _ltoa
   \   00007A   740D         MOV     A,#0xd
   \   00007C   12....       LCALL   ?XSTACK_DISP0_8
   \   00007F   8582..       MOV     ?V0 + 0,DPL
   \   000082   8583..       MOV     ?V0 + 1,DPH
   \   000085   78..         MOV     R0,#?V0 + 0
   \   000087   12....       LCALL   ?PUSH_XSTACK_I_TWO
   \   00008A   790A         MOV     R1,#0xa
   \   00008C   EE           MOV     A,R6
   \   00008D   FA           MOV     R2,A
   \   00008E   7B00         MOV     R3,#0x0
   \   000090   7C00         MOV     R4,#0x0
   \   000092   7D00         MOV     R5,#0x0
   \   000094   90....       MOV     DPTR,#(_ltoa & 0xffff)
   \   000097   74..         MOV     A,#((_ltoa >> 16) & 0xff)
   \   000099   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   00009C   7402         MOV     A,#0x2
   \   00009E   12....       LCALL   ?DEALLOC_XSTACK8
    427          
    428            HalLcdWriteString( (char*)buf, HAL_LCD_LINE_2 );
    429          #endif /* HAL_LCD */
    430          }
   \   0000A1   7411         MOV     A,#0x11
   \   0000A3   12....       LCALL   ?DEALLOC_XSTACK8
   \   0000A6   7F04         MOV     R7,#0x4
   \   0000A8   02....       LJMP    ?BANKED_LEAVE_XDATA

   \                                 In segment XDATA_ID, align 1, keep-with-next
   \                     `?<Initializer for <Constant "[          ]  ">>`:
   \   000000   5B202020     DB "[          ]  "
   \            20202020
   \            2020205D
   \            202000  

   \                                 In segment XDATA_I, align 1, keep-with-next
   \                     `?<Constant "[          ]  ">`:
   \   000000                DS 15
   \   00000F                REQUIRE `?<Initializer for <Constant "[          ]  ">>`
   \   00000F                REQUIRE __INIT_XDATA_I
    431          
    432          #if (defined LCD_HW) && (HAL_LCD == TRUE)
    433          /*********************************************************************
    434           * @fn      initLcd
    435           * @brief   Initializes LCD I/O bus and LCD device
    436           * @param   void
    437           * @return  void
    438           */
    439          static void initLcd( void )
    440          {
    441            uint8 buffer[8];
    442          
    443            // Initialize the serial I/O bus
    444            initSmb();
    445          
    446            // Load LCD initialization message
    447            buffer[0] = LCD_ADDR;
    448            buffer[1] = LCD_RS_0;  // Instruction Register
    449            buffer[2] = 0x0C;      // Display control         D =  1:      Display On
    450            //                                                C =  0:      Cursor Off
    451            //                                                B =  0:      Cursor character blink off
    452            buffer[3] = 0x21;      // Function set            H =  1:      Use extended instruction set
    453            buffer[4] = 0xA0;      // Set DDRAM address       ADD = 0x20
    454            buffer[5] = 0x07;      // Display configuration   P =  1:      Column data right to left
    455            //                                                Q =  1:      Row data, bottom to top
    456            buffer[6] = 0x34;      // Function set            DL=  0:      4 bits
    457            //                                                M =  1:      2-line by 16 display
    458            //                                                SL=  0:      MUX1:18
    459            //                                                H =  0:      Use basic instruction set
    460            buffer[7] = 0x01;      // Clearing display
    461          
    462            // Send message to LCD device
    463            smbSend( buffer, 8 );
    464          
    465          }
    466          
    467          /*********************************************************************
    468           * @fn      lcdUpdateLine
    469           * @brief   Updates one line of the LCD display
    470           * @param   line - LCD line numberptr to string going to LCD line 1
    471           * @param   p2 - ptr to string going to LCD line 2
    472           * @return  void
    473           */
    474          static void lcdUpdateLine( uint8 line, uint8 *pLine )
    475          {
    476            uint8 i;
    477            uint8 chr;
    478            uint8 addr;
    479            uint8 *buffer;
    480          
    481            if ( line == HAL_LCD_LINE_1 )
    482              addr = LCD_LINE1_ADDR;
    483            else
    484              addr = LCD_LINE2_ADDR;
    485          
    486            // Get a buffer to work with
    487            buffer = osal_mem_alloc( 2+HAL_LCD_MAX_CHARS );
    488            if ( buffer != NULL )
    489            {
    490              // Build and send control string
    491              buffer[0] = LCD_ADDR;
    492              buffer[1] = LCD_RS_0;
    493              buffer[2] = addr;
    494              smbSend( buffer, 3 );
    495          
    496              // Build and send message string
    497              buffer[0] = LCD_ADDR;
    498              buffer[1] = LCD_RS_1;
    499              // Convert and save message bytes
    500              for( i = 2; i < 2+HAL_LCD_MAX_CHARS; i++ )
    501              {
    502                chr = *pLine++;
    503                if ( chr == '\0' )
    504                {
    505                  chr = lcdConvertChar( ' ' );
    506                  break;
    507                }
    508                else
    509                  buffer[i] = lcdConvertChar( chr );
    510              }
    511          
    512              // Fill remainder of line with blanks
    513              for( ; i < 2+HAL_LCD_MAX_CHARS; i++ )
    514                buffer[i] = chr;
    515          
    516              // Put it on the display
    517              smbSend( buffer, 2+HAL_LCD_MAX_CHARS );
    518          
    519              // Give back buffer memory
    520              osal_mem_free( buffer );
    521            }
    522          }
    523          
    524          /*********************************************************************
    525           * @fn      lcdConvertChar
    526           * @brief   Converts an ASCII character to an LCD character (R sheet)
    527           * @param   aChar - ASCII character
    528           * @return  lChar - LCD character
    529           */
    530          static byte lcdConvertChar( byte aChar )
    531          {
    532            uint8 lChar;
    533          
    534            if ((aChar >= 'a') && (aChar <= 'z'))
    535              // Lower case
    536              lChar = aChar + ('a' - 0xE1);
    537            else if ((aChar >= 'A') && (aChar <= 'Z'))
    538              // Upper case
    539              lChar = aChar + ('A' - 0xC1);
    540            else if (((aChar >= ' ') && (aChar <= '#')) ||
    541                     ((aChar >= '%') && (aChar <= '?')))
    542              // Sonme symbols
    543              lChar = aChar + (' ' - 0xA0);
    544            else
    545            {
    546              switch ( aChar )
    547              {
    548                case '$':
    549                   lChar = 0x82;
    550                   break;
    551                case '

⌨️ 快捷键说明

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