main.c
来自「博创2410的实验代码」· C语言 代码 · 共 423 行
C
423 行
/***************************************************************************\
Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
by threewter 2004.5.12
\***************************************************************************/
/***************************************************************************\
#说明: C main 函数,ucos-ii初始化等定义
---------------------------------- Bug --------------------------------------
---------------------------------- TODO list --------------------------------------
----------------------------------修正--------------------------------------
2004-5-12 创建
\***************************************************************************/
#include"../ucos-ii/includes.h" /* uC/OS interface */
#include "../ucos-ii/add/osaddition.h"
#include "../inc/drivers.h"
#include "../inc/sys/lib.h"
#include "../src/gui/gui.h"
#include <string.h>
#include <stdio.h>
#include"../inc/drv/AD.h"
#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting
/**************已经定义的OS任务*************
#define SYS_Task_Prio 1
#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
***************************************/////////
#define ID_ChannelTextCtrl 101
#define ID_ValueTextCtrl 102
#define Draw_Wnd_ID 104
PTextCtrl pChannelTextCtrl,pValueTextCtrl;
float r0,r1,r2;
int WarnningData[3]={33,33,33};
int edit[2]={0,0};
///******************任务定义***************///
OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈
void Main_Task(void *Id); //Main_Test_Task
#define Main_Task_Prio 12
OS_STK Display_Task_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈
void Display_Task(void *Id); //Main_Test_Task
#define Display_Task_Prio 20
OS_STK AD0_Task_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈
void AD0_Task(void *Id); //Main_Test_Task
#define AD0_Task_Prio 21
OS_STK AD1_Task_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈
void AD1_Task(void *Id); //Main_Test_Task
#define AD1_Task_Prio 22
OS_STK AD2_Task_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈
void AD2_Task(void *Id); //Main_Test_Task
#define AD2_Task_Prio 23
int sysnumber;
int main(void)
{
ARMTargetInit(); // do target (uHAL based ARM system) initialisation //
OSInit(); // needed by uC/OS-II //
OSInitUart();
initOSFile();
#if USE_MINIGUI==0
initOSMessage();
initOSList();
initOSDC();
initOSCtrl();
LoadFont();
#endif
loadsystemParam();
// 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);// 创建系统任务
OSTaskCreate(Display_Task,(void *)0, (OS_STK *)&Display_Task_Stack[STACKSIZE-1], Display_Task_Prio);// 20
OSTaskCreate(AD0_Task,(void *)0, (OS_STK *)&AD0_Task_Stack[STACKSIZE-1], AD0_Task_Prio);
OSTaskCreate(AD1_Task,(void *)0, (OS_STK *)&AD1_Task_Stack[STACKSIZE-1], AD1_Task_Prio);
OSTaskCreate(AD2_Task,(void *)0, (OS_STK *)&AD2_Task_Stack[STACKSIZE-1], AD2_Task_Prio);
OSAddTask_Init(1);//创建系统附加任务
LCD_printf("Starting uCOS-II...\n");
LCD_printf("Entering graph mode...\n");
LCD_ChangeMode(DspGraMode);
OSStart();//操作系统任务调度开始
//不会执行到这里
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
U8 onKey(int nkey, int fnkey)
{
U16 str[20];
static BOOLEAN input=FALSE;
static int EditNumber=1;
if(EditNumber==1)
{
switch(nkey)
{
case 13://OK('\r')
if(!input)
{
SetWndCtrlFocus(NULL, ID_ChannelTextCtrl);
pChannelTextCtrl->text[0]=0; //清空文本框
SetTextCtrlEdit(pChannelTextCtrl, TRUE);
DrawTextCtrl(pChannelTextCtrl);
input=TRUE;
edit[0]=1;
}
else
{
sysnumber=Unicode2Int(pChannelTextCtrl->text);//将文本框中的内容由Unicode 变为整形
SetTextCtrlEdit(pChannelTextCtrl, FALSE);
DrawTextCtrl(pChannelTextCtrl);
input=FALSE;
edit[0]=0;
EditNumber=2;
}
return TRUE;
case 46://Cancel('-')
SetTextCtrlEdit(pChannelTextCtrl, FALSE);
input=FALSE;
edit[0]=0;
EditNumber=2;
return TRUE;
}
}
else if(EditNumber==2)
{
switch(nkey)
{
case 13://OK('\r')
if(!input)
{
SetWndCtrlFocus(NULL, ID_ValueTextCtrl);
pValueTextCtrl->text[0]=0; //清空文本框
SetTextCtrlEdit(pValueTextCtrl, TRUE);
DrawTextCtrl(pValueTextCtrl);
input=TRUE;
edit[1]=1;
}
else
{
SetTextCtrlEdit(pValueTextCtrl, FALSE);
DrawTextCtrl(pValueTextCtrl);
input=FALSE;
edit[1]=0;
EditNumber=1;
WarnningData[sysnumber]=Unicode2Int(pValueTextCtrl->text);
}
return TRUE;
case 46://Cancel('-')
SetTextCtrlEdit(pValueTextCtrl, FALSE);
DrawTextCtrl(pValueTextCtrl);
input=FALSE;
edit[1]=0;
EditNumber=1;
return TRUE;
}
}
return FALSE;
}
void Main_Task(void *Id) //Main_Test_Task
{
POSMSG pMsg=0;
init_ADdevice();
for(;;)
{
POS_Ctrl pCtrl;
pMsg=WaitMessage(0);
if(pMsg->pOSCtrl)
{
if(pMsg->pOSCtrl->CtrlMsgCallBk)
(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);
}
else
{
switch(pMsg->Message)
{
case OSM_KEY:
pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL));
if(pCtrl->CtrlType==CTRLTYPE_WINDOW)
{
if((((PWnd)pCtrl)->style&WND_STYLE_MODE)==WND_STYLE_MODE)
{
//焦点是有模式窗口,消息直接传递过去
OSOnSysMessage(pMsg);
break;
}
}
if(onKey(pMsg->WParam,pMsg->LParam) )
break;
default:
OSOnSysMessage(pMsg);
break;
}
}
DeleteMessage(pMsg);
OSTimeDly(200);
}
}
void Display_Task(void * Id) //Main_Test_Task
{
PDC pdc;
structRECT ChannelTextCtrl_Rect,ValueTextCtrl_Rect,Draw_Wnd_Rect;
char Channel_Caption_8[10]="Channel:";
char Value_Caption_8[10]="Value:";
char Draw_Wnd_Caption_8[]="Draw Window";
char vol_8[]="Vol";
char chn_8[]="Chn";
char chn0_8[]="0";
char chn1_8[]="1";
char chn2_8[]="2";
char vol_10_8[]="10";
char vol_20_8[]="20";
char vol_30_8[]="30";
U16 Channel_Caption_16[10];
U16 Value_Caption_16[10];
U16 Draw_Wnd_Caption_16[20];
U16 vol_16[5];
U16 chn_16[5];
U16 chn0_16[2];
U16 chn1_16[2];
U16 chn2_16[2];
U16 vol_10_16[3];
U16 vol_20_16[3];
U16 vol_30_16[3];
Wnd Draw_Wnd;
PWnd pDraw_Wnd;
int warnning[3]={1,1,1};
BOOLEAN IsEdit=0;
pdc=CreateDC();
pDraw_Wnd=&Draw_Wnd;
strChar2Unicode(Draw_Wnd_Caption_16, Draw_Wnd_Caption_8);
strChar2Unicode(Channel_Caption_16, Channel_Caption_8);
strChar2Unicode(Value_Caption_16, Value_Caption_8);
strChar2Unicode(chn_16, chn_8);
strChar2Unicode(vol_16, vol_8);
strChar2Unicode(chn0_16, chn0_8);
strChar2Unicode(chn1_16, chn1_8);
strChar2Unicode(chn2_16, chn2_8);
strChar2Unicode(vol_10_16,vol_10_8);
strChar2Unicode(vol_20_16,vol_20_8);
strChar2Unicode(vol_30_16,vol_30_8);
SetRect(&ChannelTextCtrl_Rect, 20,100,100,140);
SetRect(&ValueTextCtrl_Rect, 20,260,100,300);
SetRect(&Draw_Wnd_Rect, 139, 9, 593, 423);
pChannelTextCtrl=CreateTextCtrl(ID_ChannelTextCtrl, &ChannelTextCtrl_Rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);
pValueTextCtrl=CreateTextCtrl(ID_ValueTextCtrl, &ValueTextCtrl_Rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);
pDraw_Wnd=CreateWindow(Draw_Wnd_ID, &Draw_Wnd_Rect, FONTSIZE_SMALL,WND_STYLE_MODELESS, Draw_Wnd_Caption_16, NULL);
ClearScreen();
TextOut(pdc, 110, 10, vol_16, TRUE, FONTSIZE_MIDDLE);
TextOut(pdc, 560, 430, chn_16, TRUE,FONTSIZE_MIDDLE);
TextOut(pdc, 200, 430, chn0_16, TRUE, FONTSIZE_MIDDLE);
TextOut(pdc, 350, 430, chn1_16, TRUE, FONTSIZE_MIDDLE);
TextOut(pdc, 500, 430, chn2_16, TRUE, FONTSIZE_MIDDLE);
TextOut(pdc, 120, (int)(415-1*400/3.3), vol_10_16, TRUE, FONTSIZE_MIDDLE);
TextOut(pdc, 120, (int)(415-2*400/3.3), vol_20_16, TRUE, FONTSIZE_MIDDLE);
TextOut(pdc, 120, (int)(415-3*400/3.3), vol_30_16, TRUE, FONTSIZE_MIDDLE);
DrawTextCtrl(pChannelTextCtrl);
DrawTextCtrl(pValueTextCtrl);
for(;;)
{
TextOut(pdc, 20, 75, Channel_Caption_16, TRUE, FONTSIZE_MIDDLE);
TextOut(pdc, 20, 235, Value_Caption_16, TRUE, FONTSIZE_MIDDLE);
if(edit[0]==1)
{
if(IsEdit==1)
{
FillRect(pdc, 20, 75, 110, 95, GRAPH_MODE_NORMAL, COLOR_WHITE);
IsEdit=0;
}
else
{
IsEdit=1;
}
}
if(edit[1]==1)
{
if(IsEdit==1)
{
FillRect(pdc, 20, 235, 110, 255, GRAPH_MODE_NORMAL, COLOR_WHITE);
IsEdit=0;
}
else
{
IsEdit=1;
}
}
DrawWindow(pDraw_Wnd);
MoveTo(pdc, 140, 20);
LineTo(pdc, 150,10);
LineTo(pdc, 160, 20);
MoveTo(pdc,150 , 10);
LineTo(pdc, 150, 420);
LineTo(pdc, 590, 420);
MoveTo(pdc, 580, 410);
LineTo(pdc, 590, 420);
LineTo(pdc, 580, 430);
MoveTo(pdc, 150, (int)(420-1*400/3.3));
LineTo(pdc, 590, (int)(420-1*400/3.3));
MoveTo(pdc, 150, (int)(420-2*400/3.3));
LineTo(pdc, 590, (int)(420-2*400/3.3));
MoveTo(pdc, 150, (int)(420-3*400/3.3));
LineTo(pdc, 590, (int)(420-3*400/3.3));
if(r0<=WarnningData[0])
{
FillRect(pdc, 190, (int)(420-r0*40/3.3), 220, 420,GRAPH_MODE_NORMAL, COLOR_BLACK);
}
else
{
if(warnning[0]==1)
{
FillRect(pdc, 190, (int)(420-r0*40/3.3), 220, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
warnning[0]=0;
}
else
{
warnning[0]=1;
FillRect(pdc, 190, (int)(420-WarnningData[0]*40/3.3), 220, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
}
}
if(r1<=WarnningData[1])
{
FillRect(pdc, 340, (int)(420-r1*40/3.3), 370, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
}
else
{
if(warnning[1]==1)
{
FillRect(pdc, 340, (int)(420-r1*40/3.3), 370, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
warnning[1]=0;
}
else
{
warnning[1]=1;
FillRect(pdc, 340, (int)(420-WarnningData[1]*40/3.3), 370, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
}
}
if(r2<=WarnningData[2])
{
FillRect(pdc, 490, (int)(420-r2*40/3.3), 520, 420,GRAPH_MODE_NORMAL, COLOR_BLACK);
}
else
{
if(warnning[2]==1)
{
FillRect(pdc, 490, (int)(420-r2*40/3.3), 520, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
warnning[2]=0;
}
else
{
warnning[2]=1;
FillRect(pdc, 490, (int)(420-WarnningData[2]*40/3.3), 520, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
}
}
OSTimeDly(500);
}
}
void AD0_Task(void * Id) //Main_Test_Task
{
int i;
for(;;)
{
for(i=0;i<=1;i++)
{
r0=GetADresult(0)*33/1023;
}
//Uart_Printf(0,"a0=%f\t",r0);
OSTimeDly(100);
}
}
void AD1_Task(void * Id) //Main_Test_Task
{
int i;
for(;;)
{
for(i=0;i<=1;i++)
{
r1=GetADresult(1)*33/1023;
}
//Uart_Printf(0,"a1=%f\t",r1);
OSTimeDly(100);
}
}
void AD2_Task(void * Id) //Main_Test_Task
{
int i;
for(;;)
{
for(i=0;i<=1;i++)
{
r2=GetADresult(2)*33/1023;
}
//Uart_Printf(0,"a2=%f\t",r2);
OSTimeDly(100);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?