hal_lcd.s51
来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,520 行 · 第 1/5 页
S51
1,520 行
// 224 #ifdef LCD_SD
// 225 byte x;
// 226 byte bln;
// 227 byte sln;
// 228 char *buf;
// 229
// 230 if ( Lcd_Line1 == NULL )
// 231 {
// 232 // Set up system start-up message
// 233 Lcd_Line1 = osal_mem_alloc( MAX_LCD_CHARS+1 );
// 234 HalLcdWriteString( "Figure8 Wireless", HAL_LCD_LINE_1 );
// 235 }
// 236
// 237 sln = (byte)osal_strlen( str );
// 238
// 239 // Check boundries
// 240 if ( sln > MAX_LCD_CHARS )
// 241 sln = MAX_LCD_CHARS;
// 242
// 243 if ( option == HAL_LCD_LINE_1 ) {
// 244 // Line 1 gets saved for later
// 245 osal_memcpy( Lcd_Line1, str, sln );
// 246 Lcd_Line1[sln] = '\0';
// 247 }
// 248 else {
// 249 // Line 2 triggers action
// 250 x = (byte)osal_strlen( (char*)Lcd_Line1 );
// 251 bln = x + 1 + sln + 1;
// 252 buf = osal_mem_alloc( bln );
// 253 if ( buf != NULL ) {
// 254 // Concatenate strings
// 255 osal_memcpy( buf, Lcd_Line1, x );
// 256 buf[x++] = ' ';
// 257 osal_memcpy( &buf[x], str, sln );
// 258 buf[x+sln] = '\0';
// 259 // Send it out
// 260 #ifdef ZTOOL_PORT
// 261 debug_str( (byte*)buf );
// 262 #endif
// 263 osal_mem_free( buf );
// 264 }
// 265 }
// 266 #endif // LCD_SD
// 267
// 268 #ifdef LCD_HW
// 269 lcdUpdateLine( option, (byte*)str );
// 270 #endif
// 271
// 272 #endif /* HAL_LCD */
// 273
// 274 }
LJMP ?BRET
CFI EndBlock cfiBlock1
// 275
// 276 /**************************************************************************************************
// 277 * @fn HalLcdWriteValue
// 278 *
// 279 * @brief Write a value to the LCD
// 280 *
// 281 * @param value - value that will be displayed
// 282 * radix - 8, 10, 16
// 283 * option - display options
// 284 *
// 285 * @return None
// 286 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 287 void HalLcdWriteValue ( uint32 value, const uint8 radix, uint8 option)
HalLcdWriteValue:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function HalLcdWriteValue
// 288 {
FUNCALL HalLcdWriteValue, _ltoa
LOCFRAME XSTACK, 41, STACK
ARGFRAME XSTACK, 41, STACK
MOV A,#-0xe
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 14)
; Saved register size: 14
; Auto size: 25
MOV A,#-0x19
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 39)
// 289 #if (HAL_LCD == TRUE)
// 290 uint8 buf[LCD_MAX_BUF];
// 291
// 292 _ltoa( value, &buf[0], radix );
; Setup parameters for call to function _ltoa
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV ?V0 + 4,DPL
MOV ?V0 + 5,DPH
MOV R0,#?V0 + 4
LCALL ?PUSH_XSTACK_I_TWO
CFI EndBlock cfiBlock2
REQUIRE ?Subroutine3
; // Fall through to label ?Subroutine3
// 293 HalLcdWriteString( (char*)buf, option );
// 294 #endif /* HAL_LCD */
// 295 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine3:
CFI Block cfiBlock3 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 41)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
MOV DPTR,#(_ltoa & 0xffff)
MOV A,#((_ltoa >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 39)
MOV A,#0x19
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 14)
MOV R7,#0x6
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock3
// 296
// 297 /**************************************************************************************************
// 298 * @fn HalLcdWriteScreen
// 299 *
// 300 * @brief Write a value to the LCD
// 301 *
// 302 * @param line1 - string that will be displayed on line 1
// 303 * line2 - string that will be displayed on line 2
// 304 *
// 305 * @return None
// 306 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 307 void HalLcdWriteScreen( char *line1, char *line2 )
HalLcdWriteScreen:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function HalLcdWriteScreen
// 308 {
; Saved register size: 0
; Auto size: 0
// 309 #if (HAL_LCD == TRUE)
// 310 HalLcdWriteString( line1, HAL_LCD_LINE_1 );
// 311 HalLcdWriteString( line2, HAL_LCD_LINE_2 );
// 312 #endif /* HAL_LCD */
// 313 }
LJMP ?BRET
CFI EndBlock cfiBlock4
// 314
// 315 /**************************************************************************************************
// 316 * @fn HalLcdWriteStringValue
// 317 *
// 318 * @brief Write a string followed by a value to the LCD
// 319 *
// 320 * @param title -
// 321 * value -
// 322 * format -
// 323 * line -
// 324 *
// 325 * @return None
// 326 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 327 void HalLcdWriteStringValue( char *title, uint16 value, uint8 format, uint8 line )
HalLcdWriteStringValue:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function HalLcdWriteStringValue
// 328 {
FUNCALL HalLcdWriteStringValue, osal_strlen
LOCFRAME XSTACK, 39, STACK
ARGFRAME XSTACK, 39, STACK
FUNCALL HalLcdWriteStringValue, osal_memcpy
LOCFRAME XSTACK, 42, STACK
ARGFRAME XSTACK, 42, STACK
FUNCALL HalLcdWriteStringValue, _ltoa
LOCFRAME XSTACK, 41, STACK
ARGFRAME XSTACK, 41, STACK
MOV A,#-0xe
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 14)
; Saved register size: 14
; Auto size: 25
MOV A,#-0x19
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 39)
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A
MOV ?V0 + 3,R1
// 329 #if (HAL_LCD == TRUE)
// 330 uint8 tmpLen;
// 331 uint8 buf[LCD_MAX_BUF];
// 332 uint32 err;
// 333
// 334 tmpLen = (uint8)osal_strlen( (char*)title );
; Setup parameters for call to function osal_strlen
MOV DPTR,#(osal_strlen & 0xffff)
MOV A,#((osal_strlen >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R2
MOV ?V0 + 4,A
// 335 osal_memcpy( buf, title, tmpLen );
; Setup parameters for call to function osal_memcpy
MOV ?V0 + 2,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 42)
MOV A,R2
MOV R4,A
MOV R5,#0x0
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(osal_memcpy & 0xffff)
MOV A,#((osal_memcpy >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 39)
// 336 buf[tmpLen] = ' ';
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,DPL
ADD A,?V0 + 4
MOV DPL,A
MOV A,DPH
ADDC A,#0x0
MOV DPH,A
MOV A,#0x20
MOVX @DPTR,A
// 337 err = (uint32)(value);
// 338 _ltoa( err, &buf[tmpLen+1], format );
; Setup parameters for call to function _ltoa
INC DPTR
MOV ?V0 + 0,DPL
MOV ?V0 + 1,DPH
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 41)
MOV R1,?V0 + 3
MOV ?V0 + 0,R6
MOV ?V0 + 1,R7
MOV R2,?V0 + 0
MOV R3,?V0 + 1
MOV R4,#0x0
MOV R5,#0x0
LJMP ?Subroutine3 & 0xFFFF
CFI EndBlock cfiBlock5
// 339 HalLcdWriteString( (char*)buf, line );
// 340 #endif /* HAL_LCD */
// 341 }
// 342
// 343 /**************************************************************************************************
// 344 * @fn HalLcdWriteStringValue
// 345 *
// 346 * @brief Write a string followed by a value to the LCD
// 347 *
// 348 * @param title -
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?