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

📄 main.c

📁 单片机开发环境 windows+ads+hjtag
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -