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

📄 main.c

📁 基于arm3000列表框控件的设置基于arm3000列表框控件的实现
💻 C
字号:
#include"..\ucos-ii\includes.h"               /* uC/OS interface */
#include "..\ucos-ii\add\osaddition.h"
#include "..\inc\drv.h"
#include "..\inc\drv\OSFile.h"
#include "..\inc\drv\Ustring.h"
#include <string.h>

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



///******************任务定义***************///
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;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PListCtrl pMainListCtrl;//列表框控件指针
char FileExName[]={'B','M','P',0};//文件扩展名
char BmpFile[100][12];//文件名数组

#define ID_MainListBox	101//列表框控件ID

void CreateFileList()
{
	structRECT rect;//定义矩形结构
	char filename[9];
	U32 filepos=0;
	U16 Ufilename[9];
	int i=0;

	SetRect(&rect, 0,18,120,200);	//创建列表框控件
	pMainListCtrl=CreateListCtrl(ID_MainListBox, &rect, 100,FONTSIZE_MIDDLE,CTRL_STYLE_DBFRAME,NULL);//创建列表框
	SetWndCtrlFocus(NULL, ID_MainListBox);//焦点移到列表框控件

	while(ListNextFileName(&filepos, FileExName, filename)){
		strChar2Unicode(Ufilename,filename);//将文件名转换为Unicode
		AddStringListCtrl(pMainListCtrl, Ufilename);//向列表框中添加表项
		strcpy(BmpFile[i],filename);//将文件名存入文件名数组
		strncat(BmpFile[i++],FileExName,3);
	}
	ReDrawOSCtrl();//重画控件
}

U8 onKey(int nkey, int fnkey);

void Main_Task(void *Id)             //Main_Test_Task
{
	POSMSG pMsg=0;//定义消息结构

	ClearScreen();//清屏
	CreateFileList(); //创建文件列表框
	
	//消息循环
	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);//删除消息
	}
}

U8 onKey(int nkey, int fnkey)
{
	PDC pdc;

	switch(nkey){
	case 14://OK
		ClearScreen();

		pdc=CreateDC();//创建绘图设备上下文
		ShowBmp(pdc, BmpFile[pMainListCtrl->CurrentSel], 140, 20);//显示图片
		ReDrawOSCtrl();//重画控件

		DestoryDC(pdc);//删除绘图设备上下文
		return TRUE;
	}
	return FALSE;
}

⌨️ 快捷键说明

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