#include #include "lcd.h" #include "console.h" #include "mtask.h" #define HALF_LINE_CHAR 16 #define MAX_LINE_CHAR (HALF_LINE_CHAR*2) #define NORMAL 0 #define BLINK 1 static void UpdateTargetPoint( void ) ; static void PutLCD( char DisplayBuffer[] ) ; static char DisplayBuffer[ MAX_LINE_CHAR ] ; //通常表示用 //debug //static char BlinkBuffer[ MAX_LINE_CHAR ] ; //ブリンク表示用 #define BlinkBuffer DisplayBuffer static char CurrentY, CurrentX, TargetPoint ; //カーソル位置 static char DisplayUpDate ; //表示内容が更新されたか static char LastBufferType ; //現在表示中のモード int LcdBlinkTimer ; /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void RollUp( void ) { memcpy( DisplayBuffer, &( DisplayBuffer[ HALF_LINE_CHAR ] ) , HALF_LINE_CHAR ); memcpy( BlinkBuffer, &( BlinkBuffer[ HALF_LINE_CHAR ] ) , HALF_LINE_CHAR ); memset( &( DisplayBuffer[ HALF_LINE_CHAR ] ), ' ', HALF_LINE_CHAR ) ; memset( &( BlinkBuffer[ HALF_LINE_CHAR ] ), ' ', HALF_LINE_CHAR ) ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void ClearConsole( void ) { memset( DisplayBuffer, ' ', MAX_LINE_CHAR ) ; memset( BlinkBuffer, ' ', MAX_LINE_CHAR ) ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void BlinkOffConsole( void ) { memcpy( BlinkBuffer, DisplayBuffer, MAX_LINE_CHAR ) ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ char LocationY( void ) { return( CurrentY ) ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ char LocationX( void ) { return( CurrentX ) ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void InitConsole( void ) { ClearConsole() ; LcdBlinkTimer = 0 ; ScreenInit() ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void Locate( char y, char x ) { CurrentY = y ; CurrentX = x ; TargetPoint = y * HALF_LINE_CHAR + x ; if( TargetPoint >= MAX_LINE_CHAR ) { TargetPoint = 0 ; CurrentY = 0 ; CurrentX = 0 ; } } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void print( char *Buffer ) { for( ; *Buffer != 0 ; Buffer ++ ) { PutCh( *Buffer ) ; } } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void printBlink( char Buffer[] ) { for( ; *Buffer != 0 ; Buffer ++ ) { PutChBlink( *Buffer ) ; } } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void PutCh( char Charactor ) { DisplayBuffer[ ( int )TargetPoint ] = Charactor ; BlinkBuffer[ ( int )TargetPoint ] = Charactor ; UpdateTargetPoint() ; DisplayUpDate = 1 ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void PutChBlink( char Charactor ) { DisplayBuffer[ ( int )TargetPoint ] = Charactor ; BlinkBuffer[ ( int )TargetPoint ] = ' ' ; UpdateTargetPoint() ; DisplayUpDate = 1 ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ static void UpdateTargetPoint( void ) { TargetPoint ++ ; if( TargetPoint >= MAX_LINE_CHAR ) { CurrentY = 0 ; CurrentX = 0 ; TargetPoint = 0 ; return ; } CurrentX ++ ; if( CurrentX >= HALF_LINE_CHAR ) { CurrentY = 1 ; CurrentX -= HALF_LINE_CHAR ; } TargetPoint = CurrentY * HALF_LINE_CHAR + CurrentX ; } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ void PrintLoop( void ) { for(;;) { /* if( DisplayUpDate ) { LcdBlinkTimer = 0 ; LastBufferType = BLINK ; DisplayString( NORMAL ) ; DisplayUpDate = 0 ; } */ LcdBlinkTimer ++ ; if( LcdBlinkTimer > 4000 ) { LcdBlinkTimer = 0 ; } else if( LcdBlinkTimer > 3200 ) { if( LastBufferType == BLINK ) { SwitchTask() ; continue ; } LastBufferType = BLINK ; PutLCD( BlinkBuffer ) ; } else { if( LastBufferType == NORMAL ) { SwitchTask() ; continue ; } LastBufferType = NORMAL ; PutLCD( DisplayBuffer ) ; } } } /****************************************************************************** 機能要約 機能 引数 戻り値 注意 ******************************************************************************/ static void PutLCD( char DisplayBuffer[] ) { int i ; LcdLocate( 0, 0 ) ; SwitchTask() ; SwitchTask() ; for( i = 0 ; i < HALF_LINE_CHAR ; i ++ ) { LcdPutCh( DisplayBuffer[ i ] ) ; SwitchTask() ; } LcdLocate( 1, 0 ) ; SwitchTask() ; SwitchTask() ; for( i = HALF_LINE_CHAR ; i < MAX_LINE_CHAR ; i ++ ) { LcdPutCh( DisplayBuffer[ i ] ) ; SwitchTask() ; } }