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

📄 main.c

📁 在ucos环境下实现了一个电子菜单
💻 C
字号:
#include"..\ucos-ii\includes.h"               /* uC/OS interface */
#include "..\ucos-ii\add\osaddition.h"
#include "..\inc\drv.h"

#include <string.h>
#include "..\inc\template.h"
#include"..\inc\experiment.h"



#include "..\inc\OSFile.h"
#include "..\inc\drv\Ustring.h"

#include <math.h>
             

#include "..\inc\exio.h"
unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
int num=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 Dynamic_Display_Task_Stack[STACKSIZE*8]={0, };   //Main_Test_Task堆栈
void Dynamic_Display_Task(void *Id);             //Main_Test_Task
#define Dynamic_Display_Task_Prio     52


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


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void Main_Task(void *Id)             //Main_Test_Task
{
	POSMSG pMsg=0;
    int judge=0;
	int sysnumber=0;
	int i=0;
	int j=0;
	U16 str[20];
        PDC pdc;
	int price[6]={50,50,80,280,180,80};
	char dj_Pict[12]={'1','2','8','_','3','7',' ',' ','B','M','P',0};
	char dj_Pict1[12]={'1','2','8','_','3','5',' ',' ','B','M','P',0};
	char dj_Pict2[12]={'1','2','8','_','3','6',' ',' ','B','M','P',0};
	char bmpnamelogo[12]={'1','4','5','_','5','9',' ',' ','B','M','P',0}; 
	
	

    int state,statea,stateb,statec,stated,statee,statef;
	structPOINT Touch_Position,*pTouch_Position;
	structRECT rect,recta,rectb,rectc,rectd,recte,rectf;
	structRECT *prect,*precta,*prectb,*prectc,*prectd,*precte,*prectf;
	PTextCtrl pTextCtrl;

	state=0;
	statea=0;
	stateb=0;
	statec=0;
	stated=0;
	statee=0;
	statef=0;
	
	recta.left=0;
	recta.top=0;
	recta.right=320;
	recta.bottom=30;

	rectb.left=0;
	rectb.top=32;
	rectb.right=320;
	rectb.bottom=62;

	rectc.left=0;
	rectc.top=64;
	rectc.right=320;
	rectc.bottom=94;

	rectd.left=0;
	rectd.top=96;
	rectd.right=320;
	rectd.bottom=126;

	recte.left=0;
	recte.top=128;
	recte.right=320;
	recte.bottom=158;

	rectf.left=0;
	rectf.top=160;
	rectf.right=320;
	rectf.bottom=190;

	rect.left=80;
	rect.top=200;
	rect.right=300;
	rect.bottom=240;
	
	pTouch_Position=&Touch_Position;
	prect=&rect;	
	precta=&recta;	
   	prectb=&rectb;	
	prectc=&rectc;	
	prectd=&rectd;
	precte=&recte;	
	prectf=&rectf;	

	
     

         pdc = CreateDC();
	ShowBmp(pdc,bmpnamelogo, 1, 1);
	OSTimeDly(2000);


	ClearScreen();


	InitInterface();
	//消息循环
	for(;;){
		pMsg=WaitMessage(0); //等待消息
		switch(pMsg->Message){
		case OSM_KEY:
			if(judge==0)
				{num=0;
			     state=0;
	             statea=0;
	             stateb=0;
	             statec=0;
	             stated=0;
	             statee=0;
	             statef=0;
				
				if(onKey(pMsg->WParam,pMsg->LParam))
				{judge=1;
			     SetRect(&rect, 180,205,260,225);	//设置PID参数轴1P的文本框
	             pTextCtrl=CreateTextCtrl(101, &rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL, NULL);//创建文本框

	             Int2Unicode(sysnumber,str);//将整形数据转换为Unicode数据
	             //SetWndCtrlFocus(NULL, ID_MainTextCtrl);//将焦点移到文本框中
	
	             SetTextCtrlText(pTextCtrl, str,TRUE);//设置文本框内容
	             EXIO_8255A_CTRL=0x80;
				 EXIO_8255A_PORTC=0xff;
	             OSTaskCreate(Dynamic_Display_Task,  (void *)0,  (OS_STK *)&Dynamic_Display_Task_Stack[STACKSIZE*8-1],  Dynamic_Display_Task_Prio);// 1
                      
                }}
			else if(judge==1)
			{
				switch(pMsg->WParam){
					case 0: if(statea==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,5);
							statea=1;
							sysnumber=sysnumber+price[0];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
							
						}
					else
						{
						FillRect( pdc, 20,5,40,25, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20, 5, 40, 25);
						statea=0;
						sysnumber=sysnumber-price[0];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
						}
					break;
					case 1: if(stateb==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,37);
							stateb=1;
							sysnumber=sysnumber+price[1];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
								num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,37,40,57, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20, 37, 40, 57);
						stateb=0;
						sysnumber=sysnumber-price[1];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
						}
					break;
					case 2: if(statec==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,69);
							statec=1;
							sysnumber=sysnumber+price[2];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,69,40,89, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20, 69, 40, 89);
						statec=0;
						sysnumber=sysnumber-price[2];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
						num=sysnumber;
						}
					break;
					case 4:if(stated==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,101);
							stated=1;
							sysnumber=sysnumber+price[3];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
								num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,101,40,121, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20, 101, 40, 121);
						stated=0;
						sysnumber=sysnumber-price[3];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
						}
					break;
					case 5: if(statee==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,133);
							statee=1;
							sysnumber=sysnumber+price[4];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,133,40,153, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20,133, 40, 153);
						statee=0;
						sysnumber=sysnumber-price[4];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
						}
					break;
					case 6: if(statef==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,165);
							statef=1;
							sysnumber=sysnumber+price[5];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
								num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,165,40,185, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20,165, 40,185);
						statef=0;
						sysnumber=sysnumber-price[5];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
						}
					break;
					case 11:ClearScreen();
				    ShowBmp(pdc,dj_Pict1, 60,40);
				    judge=2;
					
                    OSTimeDly(1500);
                    
					ClearScreen();
					ShowBmp(pdc,dj_Pict2, 0,0);
					judge=0;
					sysnumber=0;
					break;
					default:
						break;
						
					}
			}
						
			break;
		case OSM_LISTCTRL2_SELCHANGE:
			onListCtrl2SelChange(pMsg->WParam,pMsg->LParam);
			break;
		case OSM_MENU_SELCHANGE:
			onMenuSelChange(pMsg->WParam,pMsg->LParam);
			break;
		case OSM_TOUCH_SCREEN://OSM_TOUCH_SCREEN:
				Touch_Position.x=pMsg->WParam&0xffff;
				Touch_Position.y=pMsg->WParam>>16;
				
				if(judge==1)
		{
				if(IsInRect2(precta, pTouch_Position))
				{
				  
				    if(statea==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,5);
							statea=1;
							sysnumber=sysnumber+price[0];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
						}
					else
						{
						FillRect( pdc, 20,5,40,25, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20, 5, 40, 25);
						statea=0;
						sysnumber=sysnumber-price[0];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
						num=sysnumber;
						}
					}
				else if(IsInRect2(prectb, pTouch_Position))
				{
				  
				    if(stateb==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,37);
							stateb=1;
							sysnumber=sysnumber+price[1];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
						num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,37,40,57, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20, 37, 40, 57);
						stateb=0;
						sysnumber=sysnumber-price[1];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
					num=sysnumber;
						}
					}
				else if(IsInRect2(prectc, pTouch_Position))
				{
				   
				    if(statec==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,69);
							statec=1;
							sysnumber=sysnumber+price[2];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,69,40,89, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20, 69, 40, 89);
						statec=0;
						sysnumber=sysnumber-price[2];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
						num=sysnumber;
						}
					}
				else if(IsInRect2(prectd, pTouch_Position))
				{
				
				    if(stated==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,101);
							stated=1;
							sysnumber=sysnumber+price[3];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,101,40,121, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20, 101, 40, 121);
						stated=0;
						sysnumber=sysnumber-price[3];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
						num=sysnumber;
						}
					}
				else if(IsInRect2(precte, pTouch_Position))
				{
				   //FillRect( pdc, 20,5,40,25, GRAPH_MODE_NORMAL, COLOR_WHITE);
				    if(statee==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,133);
							statee=1;
							sysnumber=sysnumber+price[4];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,133,40,153, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20,133, 40, 153);
						statee=0;
						sysnumber=sysnumber-price[4];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
					num=sysnumber;
						}
					}
				else if(IsInRect2(prectf, pTouch_Position))
				{
				   
				    if(statef==0)
				    	{
				        	ShowBmp(pdc,dj_Pict, 20,165);
							statef=1;
							sysnumber=sysnumber+price[5];
							Int2Unicode(sysnumber,str);
							SetTextCtrlText(pTextCtrl, str,TRUE);
							num=sysnumber;
				    	}
					else
						{
						FillRect( pdc, 20,165,40,185, GRAPH_MODE_NORMAL, COLOR_WHITE);
						DrawRectFrame(pdc, 20,165, 40,185);
						statef=0;
						sysnumber=sysnumber-price[5];
						Int2Unicode(sysnumber,str);
						SetTextCtrlText(pTextCtrl, str,TRUE);
						num=sysnumber;
						}
					}
				else if(IsInRect2(prect, pTouch_Position))
				{	ClearScreen();
				    ShowBmp(pdc,dj_Pict1, 60,40);
				    judge=2;
					
                    OSTimeDly(1500);
                    
					ClearScreen();
					ShowBmp(pdc,dj_Pict2, 0,0);
					judge=0;
					sysnumber=0;
	
					}
	    	}
				break;
		default:
			OSOnSysMessage(pMsg);
			break;
		}
		DeleteMessage(pMsg);//删除消息,释放资源
		OSTimeDly(200);
	}
	DestoryDC(pdc);
}
void Dynamic_Display_Task(void *Id)
{
	int a,b,c,j;
	for(;;)
		{
		a=num/100;
		b=(num%100)/10;
		c=num%10;
		
		if(a==0)
			{EXIO_8255A_PORTB=0xff;
			}
			else
				{
			EXIO_8255A_PORTA=led[a];
	    	EXIO_8255A_PORTB=0xdd;
		    }
		for(j=0;j<2000;j++)//延时1毫秒
				{
				}
		if(b==0&&a==0)
			{EXIO_8255A_PORTB=0xff;
			}
		else
			{
		EXIO_8255A_PORTA=led[b];
		EXIO_8255A_PORTB=0xbb;//显示十位数据
			}
		for(j=0;j<2000;j++)//延时1毫秒
				{
				}
		EXIO_8255A_PORTA=led[c];
		EXIO_8255A_PORTB=0x77;//显示个位数据
		//for(j=0;j<2000;j++)//延时1毫秒
				//{}
		OSTimeDly(1);		
		}
	
}


⌨️ 快捷键说明

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