📄 main.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=▭
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 + -