📄 main.c
字号:
while( (ret = LCD_CreateViewPort()) == ERROR_NO_VIEWPORT_AVAILABLE ) {
OSTimeDly( OS_DLY_100MS );
}
viewPortIndex = ret;
LCD_ActiveViewPort( viewPortIndex );
LCD_SetViewPortSize( 0, 0, 159, 30 );
LCD_SetFont( Fnt_GB11x12 );
LCD_DeactiveViewPort( viewPortIndex );
for (;;) {
OSSemPend(RTCTickSem, 0, &err); //once per second
battStatus = PWR_GetBatteryStatus();
if( battStatus == BATT_DEAD) {
battDeadCount++;
}
else {
battDeadCount = 0;
}
if( Key_PowerOff()
||(PWR_IdleTimeOut() == TRUE)
|| (battDeadCount >= 10 ) ) {
PWR_SystemOff();
}
/*
if( (Key_GetCode() == (KEY_ON_OFF | KEY_LONG))
||(PWR_IdleTimeOut() == TRUE)
|| (battDeadCount >= 10 ) ) {
PWR_SystemOff();
}
*/
time = RTCGetTime();
sprintf( (char*)str, "%04d年%02d月%02d日", time.tm_year, time.tm_mon, time.tm_mday );
LCD_ActiveViewPort( viewPortIndex );
LCD_SetPixelPos( 1, 0 );
LCD_PutStr( str );
sprintf( (char*)str, " %02d:%02d:%02d", time.tm_hour, time.tm_min, time.tm_sec );
LCD_SetPixelPos( 0, 13 );
LCD_PutStr( str );
LCDS_1BitBmp( 120, 5, 32, 16, (INT8U*)Bmp_Battery[battStatus] );
LCD_DeactiveViewPort( viewPortIndex );
}
}
enum tagSDTestState {
SDTest_CardError=0,
SDTest_ReadFile,
SDTest_ReadFinished,
SDTest_WriteFile,
SDTest_WriteError
};
void SDTestTask(void *pdata)
{
INT8U viewPortIndex;
static INT16S ret;
HANDLE hFile;
INT8U state;
INT16U ch;
INT8U str[30];
INT8U key=KEY_NONE;
pdata = pdata;
while( (ret = LCD_CreateViewPort()) == ERROR_NO_VIEWPORT_AVAILABLE ) {
OSTimeDly( OS_DLY_100MS );
}
viewPortIndex = ret;
LCD_ActiveViewPort( viewPortIndex );
LCD_SetViewPortSize( 0, 30, 159, 159 );
LCD_ClrVP();
LCD_SetFont( Fnt_GB11x12 );
LCD_SetPixelPos( 50, 0 );
LCD_PutStr( (INT8U*)"SD卡测试" );
LCD_Button( 100, 109, 50, 20, (INT8U*)"返回", LCD_INVERT_COPY);
LCD_DeactiveViewPort( viewPortIndex );
LCD_ActiveViewPort( viewPortIndex );
LCD_SetPixelPos( 10, 50 );
LCD_PutStr( (INT8U*)"正在检测SD卡。。。" );
LCD_DeactiveViewPort( viewPortIndex );
if( SD_Initialize() == ERROR_NONE ) {
ret = OSAddFileDriver( SDMMCCommand );
ret = OSChangeDir( (INT8S*)"Science" );
if( ret == PATH_NOT_FIND ) {
ret = OSMakeDir( (INT8S*)"Science" );
if( ret == ERROR_NONE ) {
ret = OSChangeDir( (INT8S*)"Science" );
}
}
state = SDTest_ReadFile;
LCD_ActiveViewPort( viewPortIndex );
LCD_Button( 10, 109, 50, 20, (INT8U*)"写文件", LCD_INVERT_COPY);
LCD_DeactiveViewPort( viewPortIndex );
}
else {
LCD_ActiveViewPort( viewPortIndex );
LCD_SetPixelPos( 10, 50 );
LCD_PutStr( (INT8U*)"SD卡初始化失败! " );
LCD_DeactiveViewPort( viewPortIndex );
state = SDTest_CardError;
}
while (1) {
if( state == SDTest_ReadFile ) {
ret = OSFileClose( hFile );
hFile = OSFileOpen( (INT8S*)"ReadTest.txt", (INT8S*)"r" );
LCD_ActiveViewPort( viewPortIndex );
LCD_SetViewPortSize( 1, 45, 159, 139 );
LCD_ClrVP();
LCD_DeactiveViewPort( viewPortIndex );
if( hFile != Not_Open_FILE ) {
while( OSFileGetCh( (INT8S*)str, hFile ) == ERROR_NONE ) {
if( str[0] > 0xA0 ) {
if( ch == 0 ) {
ch = str[0];
continue;
}
else {
ch <<= 8;
ch += str[0];
}
}
else {
ch = str[0];
}
LCD_ActiveViewPort( viewPortIndex );
LCD_PutCh( ch );
LCD_DeactiveViewPort( viewPortIndex );
ch = 0;
}
}
else {
LCD_ActiveViewPort( viewPortIndex );
LCD_SetPixelPos( 10, 50 );
LCD_PutStr( (INT8U*)"打开文件(ReadTest.txt)失败!" );
LCD_DeactiveViewPort( viewPortIndex );
}
ret = OSFileClose( hFile );
state = SDTest_ReadFinished;
}
OSTimeDly( OS_DLY_100MS );
key = Key_GetCode();
switch( key ) {
case KEY_F1:
if( state == SDTest_CardError ) {
break;
}
LCD_ActiveViewPort( viewPortIndex );
LCD_SetViewPortSize( 0, 30, 159, 159 );
if( state == SDTest_WriteFile || state == SDTest_WriteError ) {
state = SDTest_ReadFile;
LCD_Button( 10, 109, 50, 20, (INT8U*)"写文件", LCD_INVERT_COPY);
}
else {
state = SDTest_WriteFile;
LCD_Button( 10, 109, 50, 20, (INT8U*)"读文件", LCD_INVERT_COPY);
}
LCD_SetViewPortSize( 1, 45, 159, 139 );
LCD_ClrVP();
LCD_DeactiveViewPort( viewPortIndex );
if( state == SDTest_WriteFile ) {
ret = OSFileClose( hFile );
hFile = OSFileOpen( (INT8S*)"WriteTst.txt", (INT8S*)"w" );
if( hFile == Not_Open_FILE ) {
LCD_ActiveViewPort( viewPortIndex );
LCD_SetPixelPos( 10, 50 );
LCD_PutStr( (INT8U*)"创建文件(WriteTst.txt)失败!" );
LCD_DeactiveViewPort( viewPortIndex );
state = SDTest_WriteError;
}
}
continue;
case KEY_F2:
if( state != SDTest_CardError ) {
OSFileCloseAll( );
OSRemoveFileDriver(0);
}
LCD_DeleteViewPort( viewPortIndex );
OSTaskResume( START_TASK_PRIO );
OSTaskDel( OS_PRIO_SELF );
break;
case KEY_NONE:
continue;
case KEY_SEND:
sprintf( (char*)str, "Send " );
break;
case KEY_ON_OFF:
sprintf( (char*)str, "ON/OFF" );
break;
case KEY_ENTER:
sprintf( (char*)str, "Enter" );
break;
case KEY_UP:
sprintf( (char*)str, "Up" );
break;
case KEY_DOWN:
sprintf( (char*)str, "Down" );
break;
case KEY_LEFT:
sprintf( (char*)str, "Left" );
break;
case KEY_RIGHT:
sprintf( (char*)str, "Right" );
break;
default:
sprintf( (char*)str, "%c ", key );
break;
}
if( state == SDTest_WriteFile ) {
OSFileWrite( str, StrLen(str), hFile );
OSFileWrite( "\r\n", 2, hFile );
LCD_ActiveViewPort( viewPortIndex );
LCD_PutStr( str );
LCD_DeactiveViewPort( viewPortIndex );
}
}
}
void LCDTask(void *pdata)
{
INT8U viewPortIndex;
INT16S ret;
pdata = pdata;
while( (ret = LCD_CreateViewPort()) == ERROR_NO_VIEWPORT_AVAILABLE ) {
OSTimeDly( OS_DLY_100MS );
}
viewPortIndex = ret;
LCD_ActiveViewPort( viewPortIndex );
LCD_SetViewPortSize( 0, 30, 159, 159 );
LCD_ClrVP();
LCD_SetFont( Fnt_GB11x12 );
LCD_SetPixelPos( 50, 0 );
LCD_PutStr( (INT8U*)"显示测试" );
LCD_Button( 100, 109, 50, 20, (INT8U*)"返回", LCD_INVERT_COPY);
LCD_SetOutputStyle( LCD_COPY );
LCD_SetFont( Fnt_GB11x12);
LCD_SetPixelPos( 20, 20);
LCD_PutStr( (INT8U*)"帅" );
LCD_SetFont( Fnt_GB15x16);
LCD_SetPixelPos( 20, 40);
LCD_PutStr( (INT8U*)"帅" );
LCD_SetFont( Fnt_GB24x24 );
LCD_SetPixelPos( 20, 60);
LCD_PutStr( (INT8U*)"帅" );
LCD_SetFont( Fnt_GB32x32);
LCD_SetPixelPos( 20, 90);
LCD_PutStr( (INT8U*)"帅" );
LCD_SetOutputStyle( LCD_INVERT_COPY );
LCD_SetFont( Fnt_GB11x12);
LCD_SetPixelPos( 40, 20);
LCD_PutStr( (INT8U*)"帅" );
LCD_SetFont( Fnt_GB15x16);
LCD_SetPixelPos( 40, 40);
LCD_PutStr( (INT8U*)"帅" );
LCD_SetFont( Fnt_GB24x24 );
LCD_SetPixelPos( 50, 60);
LCD_PutStr( (INT8U*)"帅" );
LCD_SetFont( Fnt_GB32x32);
LCD_SetPixelPos( 60, 90);
LCD_PutStr( (INT8U*)"帅" );
LCD_SetOutputStyle( LCD_COPY );
LCD_SetFont( Fnt_GB32x32 );
LCD_SetPixelPos( 120, 20 );
LCD_PutStr( (INT8U*)"丑" );
LCD_SetFont( Fnt_GB24x24 );
LCD_SetPixelPos( 120, 60);
LCD_PutStr( (INT8U*)"丑" );
LCD_SetOutputStyle( LCD_INVERT_COPY );
LCD_SetFont( Fnt_GB32x32 );
LCD_SetPixelPos( 80, 20 );
LCD_PutStr( (INT8U*)"丑" );
LCD_SetFont( Fnt_GB24x24 );
LCD_SetPixelPos( 90, 60);
LCD_PutStr( (INT8U*)"丑" );
LCD_DeactiveViewPort( viewPortIndex );
while (1) {
switch( Key_GetCode() ) {
case KEY_F2:
LCD_DeleteViewPort( viewPortIndex );
OSTaskResume( START_TASK_PRIO );
OSTaskDel( OS_PRIO_SELF );
break;
}
OSTimeDly( OS_DLY_100MS );
}
}
void KeyTask(void *pdata)
{
INT16U key=KEY_NONE;
INT8U str[30];
INT8U viewPortIndex;
INT16S ret;
INT8U keyType;
pdata = pdata;
while( (ret = LCD_CreateViewPort()) == ERROR_NO_VIEWPORT_AVAILABLE ) {
OSTimeDly( OS_DLY_100MS );
}
viewPortIndex = ret;
LCD_ActiveViewPort( viewPortIndex );
LCD_SetViewPortSize( 0, 30, 159, 159 );
LCD_ClrVP();
LCD_SetFont( Fnt_GB11x12 );
LCD_SetPixelPos( 50, 0 );
LCD_PutStr( (INT8U*)"按键测试" );
LCD_Button( 100, 109, 50, 20, (INT8U*)"返回", LCD_INVERT_COPY);
LCD_Button( 10, 109, 50, 20, (INT8U*)"数字", LCD_INVERT_COPY);
LCD_SetViewPortSize( 1, 45, 159, 135 );
LCD_DeactiveViewPort( viewPortIndex );
keyType = KEYSET_NUMBER;
Key_SetKeySet( KEYSET_NUMBER );
while (1) {
OSTimeDly( OS_DLY_100MS );
key = Key_GetCode();
if( key == KEY_NONE ) continue;
if( key < 0xA0A0 ) {
switch( key & 0xFF ) {
case KEY_F1:
LCD_ActiveViewPort( viewPortIndex );
LCD_SetViewPortSize( 0, 30, 159, 159 );
keyType++;
if( keyType > KEYSET_CHINESE ) {
keyType = KEYSET_NUMBER;
}
if( keyType == KEYSET_NUMBER ) {
LCD_Button( 10, 109, 50, 20, (INT8U*)"数字", LCD_INVERT_COPY);
LCD_SetViewPortSize( 1, 45, 159, 135 );
}
else if( keyType == KEYSET_LETTER ) {
LCD_Button( 10, 109, 50, 20, (INT8U*)"字母", LCD_INVERT_COPY);
LCD_SetViewPortSize( 1, 45, 159, 135 );
}
else {
LCD_Button( 10, 109, 50, 20, (INT8U*)"中文", LCD_INVERT_COPY);
LCD_SetViewPortSize( 1, 45, 159, 100 );
}
LCD_ClrVP();
LCD_DeactiveViewPort( viewPortIndex );
Key_SetKeySet( keyType );
continue;
case KEY_F2:
Key_SetKeySet( KEYSET_NUMBER );
LCD_DeleteViewPort( viewPortIndex );
OSTaskResume( START_TASK_PRIO );
OSTaskDel( OS_PRIO_SELF );
break;
case KEY_SEND:
sprintf( (char*)str, "Send " );
break;
case KEY_ON_OFF:
sprintf( (char*)str, "ON/OFF" );
break;
case KEY_ENTER:
sprintf( (char*)str, "Enter" );
break;
case KEY_UP:
sprintf( (char*)str, "Up" );
break;
case KEY_DOWN:
sprintf( (char*)str, "Down" );
break;
case KEY_LEFT:
sprintf( (char*)str, "Left" );
break;
case KEY_RIGHT:
sprintf( (char*)str, "Right" );
break;
default:
sprintf( (char*)str, "%c", key );
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -