main.c

来自「博创2410的实验代码」· C语言 代码 · 共 164 行

C
164
字号
/***************************************************************************\
	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>

#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 

#define ADCCON_FLAG		(0x1<<15)
#define ADCCON_ENABLE_START_BYREAD	(0x1<<1)
#define rADCCON		(*(volatile unsigned *)0x58000000)
#define rADCDAT0	(*(volatile unsigned *)0x5800000C)
#define PRSCVL (49<<6)
#define ADCCON_ENABLE_START (0x1)
#define STDBM (0x0<<2)
#define PRSCEN (0x1<<14)


///******************任务定义***************///

OS_STK Main_Stack[STACKSIZE]={0, };   //Main_Test_Task堆栈
void Main_Task(void *Id);             //Main_Test_Task
#define Main_Task_Prio     12

OS_STK test_Stack[STACKSIZE]={0, };   //test_Test_Task堆栈
void test_Task(void *Id);             //test_Test_Task
#define test_Task_Prio     15


/**************已经定义的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

***************************************/////////

void init_ADdevice()
{//初始化
		
	rADCCON=(PRSCVL|ADCCON_ENABLE_START|STDBM|PRSCEN);
}

int GetADresult(int channel)
{   		
	rADCCON=ADCCON_ENABLE_START_BYREAD|(channel<<3)|PRSCEN|PRSCVL;	
	hudelay(10);
	while(!(rADCCON&ADCCON_FLAG));//转换结束	
	return (0x3ff&rADCDAT0);//返回采样值	
}

///*****************事件定义*****************///


/////////////////////////////////////////////////////
//                  Main function.                //
////////////////////////////////////////////////////
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-1],  Main_Task_Prio);
//	OSTaskCreate(test_Task,  (void *)0,  (OS_STK *)&test_Stack[STACKSIZE-1],  test_Task_Prio);

	OSAddTask_Init(1);
  
	LCD_printf("Starting uCOS-II...\n");
	LCD_printf("Entering graph mode...\n");
	LCD_ChangeMode(DspGraMode);

	OSStart();              // start the OS //

	// never reached //
	return 0;
}//main


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Main_Task(void *Id)             //Main_Test_Task
{
	int i=0;//保存原来坐标系位置
	PDC pdc;//定义绘图设备上下文结构
	double x[3],y[3],oldx[3],oldy[3];//坐标
	double offset=0;//x坐标偏移量
    init_ADdevice();
	ClearScreen();//清屏
	pdc=CreateDC();//创建绘图设备上下文
	SetDrawOrg(pdc, 0,LCDHEIGHT/2, &i, &i); //设置绘图原点为屏幕中心
	MoveTo(pdc, 0, 0);
	OSTimeDly(3000);//将任务挂起3秒
    for(i=0;i<3;i++)
    {x[i]=0;
    y[i]=oldy[i]=0;
    }
   

   while(1)
	{		for(i=0;i<3;i++)	    		
			{offset=GetADresult(i)*3.3/1023; // 数据 采集,处理	
            offset*=10;
			if(i==0)
			y[0]=offset-200;
			else if(i==1)
			y[1]=offset;
			else if(i==2)
			y[2]=offset+200;
			if(y[i]!=oldy[i])
			{LineTo(pdc, x[i], y[i]);		 									
            Uart_Printf(0,"a%d=%f\t",i,y[i]);							
		    Uart_Printf(0,"\r");		
		    x[i]+=0.5;
            oldy[i]=y[i];
            }
	        if(i==2)
	        MoveTo(pdc,x[0],y[0]);
	        else 
	        MoveTo(pdc,x[i+1],y[i+1]);
	        LCD_Refresh();	        
	        }
	        }
	DestoryDC(pdc);//删除绘图设备上下文
}

⌨️ 快捷键说明

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