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

📄 main.c

📁 基于ucos电子画板源程序
💻 C
字号:
#include"..\ucos-ii\includes.h"               /* uC/OS interface */
#include "..\ucos-ii\add\osaddition.h"
#include "..\inc\drv.h"
#include "..\inc\drv\tchscr.h"
#include <string.h>
#include<math.h>
#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 
//const U32 Line_Button_ID=100;
//const U32 Circle_Button_ID=101;
//const U32 Curve_Button_ID=102;
//const U32 Clear_Button_ID=103;
//const U32 Draw_Wnd_ID=104;
#define Line_Button_ID	100
#define Circle_Button_ID	101
#define Curve_Button_ID	102
#define Clear_Button_ID	103
#define Draw_Wnd_ID	104
///******************任务定义***************///
OS_STK Main_Stack[STACKSIZE*8]={0, };   //Main_Test_Task堆栈
void Main_Task(void *Id);             //Main_Test_Task
#define Main_Task_Prio     12

/**************已经定义的OS任务*************
tcp监控任务		11
以太网物理层监控任务	8
触摸屏任务		9
键盘任务		10
lcd刷新任务		59
系统任务		1
*****************************************************/

///*****************事件定义*****************///
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 initOSGUI()	//初始化操作系统的图形界面
{
	initOSMessage();
	initOSList();
	initOSDC();
	initOSCtrl();
	initOSFile();
}
/////////////////////////////////////////////////////
//                  Main function.                //
////////////////////////////////////////////////////

int main(void)
{
	ARMTargetInit(); //开发板初始化
	OSInit(); //操作系统初始化      
	uHALr_ResetMMU();//复位MMU
	LCD_Init();             //初始化LCD模块
	LCD_printf("LCD initialization is OK\n");//向液晶屏输出数据
	LCD_printf("320 x 240  Text Mode\n");
	initOSGUI();//初始化图形界面
	LoadFont();//调Unicode字库
	LoadConfigSys();//使用config.sys文件配置系统设置
	LCD_printf("Create task on uCOS-II...\n");
	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Main_Task_Prio);// 创建系统任务
	OSAddTask_Init();//创建系统附加任务
	LCD_printf("Starting uCOS-II...\n");
	LCD_printf("Entering graph mode...\n");
	LCD_ChangeMode(DspGraMode);//变LCD显示模式为文本模式
	InitRtc();//初始化系统时钟
	Nand_Rw_Sem=OSSemCreate(1);   //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//
	OSStart();//操作系统任务调度开始
	//不会执行到这里
	return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Main_Task(void *Id)             //Main_Test_Task
{
	POSMSG pMsg;
	structPOINT Touch_Position,*pTouch_Position;
	ButtonCtrl Line_Button,Circle_Button,Curve_Button,Clear_Button;
	PButtonCtrl pLine_Button,pCircle_Button,pCurve_Button,pClearButton;
	Wnd Draw_Wnd;
	PWnd pDraw_Wnd;
	structRECT Line_Button_RECT,Circle_Button_RECT,Curve_Button_RECT,Clear_Button_RECT,Draw_Wnd_RECT;
	structRECT *pLine_Button_RECT,*pCircle_Button_RECT,*pCurve_Button_RECT,*pClear_Button_RECT,*pDraw_Wnd_RECT;
	char Line_Button_Caption_8[]="Line";
	char Circle_Button_Caption_8[]="Circle";
	char Curve_Button_Caption_8[]="Curve";
	char Clear_Button_Caption_8[]="Clear";
	char Draw_Wnd_Caption_8[]="Draw Window";
	U16 Line_Button_Caption_16[20];
	U16 Circle_Button_Caption_16[20];
	U16 Curve_Button_Caption_16[20];
	U16 Clear_Button_Caption_16[20];
	U16 Draw_Wnd_Caption_16[20];
	int Draw_State;// 1,划线;2,画圆;3,画曲线
	int Line_State,Circle_State;// 1,起点;2,终点
	int r;//圆半径
	int x0,y0;//圆心坐标
	int oldrang_x,oldrang_y;
	PDC pdc;
	
	pTouch_Position=&Touch_Position;
	
	pLine_Button=&Line_Button;
	pCircle_Button=&Circle_Button;
	pCurve_Button=&Curve_Button;
	pClearButton=&Clear_Button;
	pDraw_Wnd=&Draw_Wnd;
	
	pLine_Button_RECT=&Line_Button_RECT;
	pCircle_Button_RECT=&Circle_Button_RECT;
	pCurve_Button_RECT=&Curve_Button_RECT;
	pClear_Button_RECT=&Clear_Button_RECT;
	pDraw_Wnd_RECT=&Draw_Wnd_RECT;
	
	strChar2Unicode(Line_Button_Caption_16, Line_Button_Caption_8);
	strChar2Unicode(Circle_Button_Caption_16, Circle_Button_Caption_8);
	strChar2Unicode(Curve_Button_Caption_16, Curve_Button_Caption_8);
	strChar2Unicode(Clear_Button_Caption_16, Clear_Button_Caption_8);
	strChar2Unicode(Draw_Wnd_Caption_16, Draw_Wnd_Caption_8);

	Line_Button_RECT.bottom=70;
	Line_Button_RECT.left=10;
	Line_Button_RECT.right=60;
	Line_Button_RECT.top=30;

	Circle_Button_RECT.bottom=120;
	Circle_Button_RECT.left=10;
	Circle_Button_RECT.right=60;
	Circle_Button_RECT.top=80;

	Curve_Button_RECT.bottom=170;
	Curve_Button_RECT.left=10;
	Curve_Button_RECT.right=60;
	Curve_Button_RECT.top=130;

	Clear_Button_RECT.bottom=220;
	Clear_Button_RECT.left=10;
	Clear_Button_RECT.right=60;
	Clear_Button_RECT.top=180;

	Draw_Wnd_RECT.bottom=230;
	Draw_Wnd_RECT.left=65;
	Draw_Wnd_RECT.right=310;
	Draw_Wnd_RECT.top=10;

	pLine_Button=CreateButton(Line_Button_ID, pLine_Button_RECT, FONTSIZE_SMALL, CTRL_STYLE_3DDOWNFRAME, Line_Button_Caption_16, NULL);
	pCircle_Button=CreateButton(Circle_Button_ID, pCircle_Button_RECT, FONTSIZE_SMALL, CTRL_STYLE_3DDOWNFRAME, Circle_Button_Caption_16, NULL);
	pCurve_Button=CreateButton(Curve_Button_ID, pCurve_Button_RECT, FONTSIZE_SMALL, CTRL_STYLE_3DDOWNFRAME, Curve_Button_Caption_16, NULL);
	pClearButton=CreateButton(Clear_Button_ID, pClear_Button_RECT, FONTSIZE_SMALL, CTRL_STYLE_3DDOWNFRAME, Clear_Button_Caption_16, NULL);
	pDraw_Wnd=CreateWindow(Draw_Wnd_ID, pDraw_Wnd_RECT, FONTSIZE_SMALL,WND_STYLE_MODELESS, Draw_Wnd_Caption_16, NULL);

	ClearScreen();
	
	DrawButton(pLine_Button);
	DrawButton(pCircle_Button);
	DrawButton(pCurve_Button);
	DrawButton(pClearButton);
	DrawWindow(pDraw_Wnd);

	pdc=CreateDC();
	pdc->DrawRect=Draw_Wnd_RECT;
	
	Draw_State=1;
	Line_State=0;
	Circle_State=0;

	
	for(;;)
	{
		pMsg=WaitMessage(0);
	       switch(pMsg->Message)
		{
			case OSM_TOUCH_SCREEN:
				Touch_Position.x=pMsg->WParam&0xffff;
				Touch_Position.y=pMsg->WParam>>16;
				if(IsInRect2(pLine_Button_RECT, pTouch_Position))
				{
					Draw_State=1;
					Line_State=0;
				}
				else if(IsInRect2(pCircle_Button_RECT, pTouch_Position))
				{
					Draw_State=2;
					Circle_State=0;
				}
				else if(IsInRect2(pCurve_Button_RECT, pTouch_Position))
				{
					Draw_State=3;
				}
				else if(IsInRect2(pClear_Button_RECT, pTouch_Position))
				{
					DrawWindow(pDraw_Wnd);
				}
				else if(IsInRect2(pDraw_Wnd_RECT, pTouch_Position))
				{
					switch(Draw_State)
					{
						case 1:
							if(pMsg->LParam==TCHSCR_ACTION_CLICK)
							{
								if(Line_State==0)
								{
									Line_State=1;
									MoveTo(pdc, Touch_Position.x, Touch_Position.y);
								}
								else
								{
									Line_State=0;
									LineTo( pdc, Touch_Position.x,Touch_Position.y);
								}
							}
							break;
						case 2:
							if(pMsg->LParam==TCHSCR_ACTION_CLICK)
							{
								if(Circle_State==0)
								{
									Circle_State=1;
									x0=Touch_Position.x;
									y0=Touch_Position.y;
								}
								else
								{
									Circle_State=0;
									r=sqrt((x0-Touch_Position.x)*(x0-Touch_Position.x)+(y0-Touch_Position.y)*(y0-Touch_Position.y));
									Circle(pdc,x0,y0,r);
								}
							}
							break;
						case 3:
							switch(pMsg->LParam)
							{
								case TCHSCR_ACTION_DOWN:
						
									MoveTo(pdc, Touch_Position.x, Touch_Position.y);
                            					break;
								case TCHSCR_ACTION_MOVE:
	                     					LineTo(pdc, Touch_Position.x, Touch_Position.y);
	                     					break;
							}
							break;		
					}
				}
	                     
           	}

		DeleteMessage(pMsg);
              OSTimeDly(100);
	}
	DestoryDC(pdc);
}

⌨️ 快捷键说明

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