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

📄 main.c

📁 S3C44B0X全套培训资料及源代码 e008s3c44b0x
💻 C
字号:
#include"..\ucos-ii\includes.h"               /* uC/OS interface */#include "..\inc\drv.h"#include "..\ucos-ii\add\osaddition.h"#include "..\inc\OSFile.h"#include "..\inc\drv\Ustring.h"#include "..\inc\resource.h"#include "..\inc\SetTimeArea.h"#include <string.h>///******************任务定义***************///OS_STK Main_Stack[STACKSIZE*8]={0, };   //Main_Test_Task堆栈void Main_Task(void *Id);             //Main_Test_Task#define Main_Task_Prio     12OS_STK Led_Flash_Stack[STACKSIZE]= {0, }; //LED闪烁任务堆栈void Led_Flash_Task(void *Id);            //LED闪烁任务#define Led_Flash_Prio           60/**************已经定义的OS任务*************#define Touch_Screen_Task_Prio		9#define Main_Task_Prio     12#define Key_Scan_Task_Prio      58#define Lcd_Fresh_prio           59#define Led_Flash_Prio           60***************************************////////////*****************事件定义*****************///OS_EVENT *Nand_Rw_Sem;                   //Nand_Flash读写控制权旗语//and you can use it as folloeing://    Nand_Rw_Sem=OSSemCreate(1);        //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件////    OSSemPend(Nand_Rw_Sem,0,&err);//    OSSemPost(Nand_Rw_Sem);OS_EVENT *Uart_Rw_Sem;                   //Uart读写控制权旗语//and you can use it as folloeing://    Uart_Rw_Sem=OSSemCreate(1);        //创建Uart读写控制权旗语,初值为1满足互斥条件////    OSSemPend(Uart_Rw_Sem,0,&err);//    OSSemPost(Uart_Rw_Sem);//////////////////////////////////////////////////////////void Led_Flash_Task(void *Id)//指示RTOS处于正常工作中{  unsigned char led_state;  Uart_Printf(0,"\n10");  for (;;)  {    Led_Display(led_state);    led_state=~led_state;    OSTimeDly(250);  }}//Led_Flash_Taskvoid initOSGUI()	//初始化操作系统的图形界面{	initOSMessage();	initOSList();	initOSDC();	initOSCtrl();	initOSFile();}///////////////////////////////////////////////////////                  Main function.                //////////////////////////////////////////////////////int Main(int argc, char **argv){	ARMTargetInit();        // do target (uHAL based ARM system) initialisation //	OSInit();               // needed by uC/OS-II //	uHALr_ResetMMU();	LCD_Init();             //初始化LCD模块	LCD_printf("LCD initialization is OK\n");	LCD_printf("320 x 240  Text Mode\n");	LoadFont();	LoadConfigSys();	  // create the tasks in uC/OS and assign increasing //  // priorities to them so that Task3 at the end of  //  // the pipeline has the highest priority.          //	LCD_printf("Create task on uCOS-II...\n");	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Main_Task_Prio);// 1	OSTaskCreate(Led_Flash_Task,  (void *)0,  (OS_STK *)&Led_Flash_Stack[STACKSIZE-1],  Led_Flash_Prio  );// 10	OSAddTask_Init();  	LCD_printf("Starting uCOS-II...\n");	LCD_printf("Entering graph mode...\n");	LCD_ChangeMode(DspGraMode);	initOSGUI();	InitRtc();		Nand_Rw_Sem=OSSemCreate(1);   //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//		ARMTargetStart();       //Start the (uHAL based ARM system) system running //	OSStart();              // start the game //	// never reached //	return 0;}//main//////////////////////////////////////////////////////////////////////////////////////////////////////////////////U8 onKey(int nkey, int fnkey);OS_STK Rtc_Disp_Stack[STACKSIZE]={0, };   //Rtc_Disp_Task堆栈void Rtc_Disp_Task(void *Id);             //Rtc_Disp_Task#define Rtc_Disp_Task_Prio      14OS_EVENT *Rtc_Updata_Sem;//时钟更新控制权U32 mainstatus;PListCtrl pMainListCtrl;PTextCtrl pStatusTextCtrl;PTextCtrl ptimeTextCtrl;extern U16* MainFn[];extern U16* MainTip[];void onListselChange(U32 ctrlID, int ListSel){	switch(ctrlID){	case ID_MainListBox:		if(mainstatus!=MAIN_SHOWBMP)			SetTextCtrlText(pStatusTextCtrl, MainTip[ListSel],TRUE);		break;	}}void Main_Task(void *Id)             //Main_Test_Task{	POSMSG pMsg=0;	structRECT rect;	ClearScreen();	Rtc_Updata_Sem=OSSemCreate(1);	OSTaskCreate(Rtc_Disp_Task,  (void *)0,  (OS_STK *)&Rtc_Disp_Stack[STACKSIZE-1],  Rtc_Disp_Task_Prio);	//5	mainstatus=MAIN_MENU;	SetRect(&rect, 0,18,120,209);	//创建控制菜单	pMainListCtrl=CreateListCtrl(ID_MainListBox, &rect, 10,FONTSIZE_MIDDLE,CTRL_STYLE_DBFRAME,NULL);	ReLoadListCtrl(pMainListCtrl,&MainFn[0],MAIN_FUNCTION_NUM);	SetWndCtrlFocus(NULL, ID_MainListBox);	SetRect(&rect, 0,220,264,239);	//创建状态文本框	pStatusTextCtrl=CreateTextCtrl(ID_MainStatus, &rect, FONTSIZE_SMALL, CTRL_STYLE_3DUPFRAME,NULL,NULL);	SetTextCtrlText(pStatusTextCtrl, MainTip[0],FALSE);		SetRect(&rect, 265,220,319,239);	//创建时间显示文本框	ptimeTextCtrl=CreateTextCtrl(ID_MainTimeStatus, &rect, FONTSIZE_SMALL, CTRL_STYLE_3DUPFRAME,NULL,NULL);	ReDrawOSCtrl();		//消息循环	for(;;){		POS_Ctrl pCtrl;		pMsg=WaitMessage(0);		if(pMsg->pOSCtrl){			if(pMsg->pOSCtrl->CtrlMsgCallBk)				(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);		}		else{			switch(pMsg->Message){			case OSM_LISTCTRL_SELCHANGE:				onListselChange(pMsg->WParam,pMsg->LParam);				break;			case OSM_KEY:				if(onKey(pMsg->WParam,pMsg->LParam) )					break;			default:				OSOnSysMessage(pMsg);				break;			}		}		DeleteMessage(pMsg);	}}U8 OnKeyUp(){	switch(mainstatus){	case MAIN_SETTIME:		SetTimeUp();		return TRUE;	}	return FALSE;}U8 OnKeyDown(){	switch(mainstatus){	case MAIN_SETTIME:		SetTimeDown();		return TRUE;	}	return FALSE;}void OnDrawBmp();//选中绘图菜单void OnUsb_Download();void OnSetTime();void *MainFunction[]={(void*)OnDrawBmp,(void*)OnSetTime,(void*)OnUsb_Download};char FileExName[]={'B','M','P',0};char BmpFile[100][12];void OnSetTime(){	SetTimeSetFocus();	CreateSetTimeArea(TRUE);	mainstatus=MAIN_SETTIME;}void OnUsb_Download(){	U32 key;	char bmpfile[]={'U','S','B','-','B',' ',' ',' ','B','M','P'};	PDC pdc;	pdc=CreateDC();		ShowBmp(pdc,bmpfile, 150, 20);	OSTimeDly(500);	mainstatus=MAIN_USBDOWNLOAD;	EnterUsbConnect();	for(;;){		key=GetNoTaskKey();		if(((key+1)&0xffff)==16){			DestoryDC(pdc);			ExitUsbConnect();			ClearScreen();			ReDrawOSCtrl();	//绘制所有的操作系统的控件			mainstatus=MAIN_MENU;			return;		}	}	DestoryDC(pdc);	}	void OnDrawBmp()//选中绘图菜单{	structRECT rect;	char filename[9];	U32 filepos=0;	U16 Ufilename[9];	int i=0;	ListCtrlReMoveAll(pMainListCtrl);	mainstatus=MAIN_SHOWBMP;	while(ListNextFileName(&filepos, FileExName, filename)){		strChar2Unicode(Ufilename,filename);		AddStringListCtrl(pMainListCtrl, Ufilename);		strcpy(BmpFile[i],filename);		strncat(BmpFile[i++],FileExName,3);	}	ReDrawOSCtrl();}void ShowListBmp(){	PDC pdc;	ClearScreen();	pdc=CreateDC();	ShowBmp(pdc, BmpFile[pMainListCtrl->CurrentSel], 150, 20);	ReDrawOSCtrl();	DestoryDC(pdc);}U8 OnOk(){	switch(mainstatus){	case MAIN_MENU:	//主菜单状态		if(pMainListCtrl->CurrentSel>=0 && pMainListCtrl->CurrentSel<4)			( (void (*)(void)) (MainFunction[pMainListCtrl->CurrentSel]) )();		return TRUE;	case MAIN_SETTIME:		SetTimeOK();		return TRUE;	case MAIN_SHOWBMP:		ShowListBmp();		return TRUE;	}	return FALSE;}U8 OnCancel(){	PDC pdc;	pdc=CreateDC();	switch(mainstatus){	case MAIN_SHOWBMP:		//绘制图形状态		FillRect(pdc,150, 0, 319, 150, GRAPH_MODE_NORMAL, COLOR_WHITE);		ReLoadListCtrl(pMainListCtrl,MainFn,MAIN_FUNCTION_NUM);		mainstatus=MAIN_MENU;		SetTextCtrlText(pStatusTextCtrl, MainTip[0],TRUE);		ReDrawOSCtrl();		break;	case MAIN_SETTIME:		SetTimeCancel();		break;	}	DestoryDC(pdc);	return TRUE;}U8 onKey(int nkey, int fnkey){	switch(nkey){	case 3:	//F1=move up		return OnKeyUp();	case 7:	//F2=move down		return OnKeyDown();	case 11:	//F3=OK		return OnOk();	case 15:	//F4=cancel		return OnCancel();	}	return FALSE;}////////////////////////////////////////////////////////////////void Rtc_Disp_Task(void *Id) //时钟显示更新任务{	U16 strtime[10];	INT8U err;		for(;;){		if(Rtc_IsTimeChange(RTC_SECOND_CHANGE)){//不需要更新显示			Rtc_Format("%H:%I:%S",strtime);			SetTextCtrlText(ptimeTextCtrl, strtime,TRUE);		}		OSTimeDly(250);	}}

⌨️ 快捷键说明

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