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

📄 main.c

📁 在proteus仿真arm处理器
💻 C
📖 第 1 页 / 共 5 页
字号:
/*********************************************************************************************************
** 函数名称: Disp_SystemInfo
** 功能描述: 获取当前系统时间并显示,获取CPU使用情况
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void	Disp_SystemInfo(void)
{
	char str[40];
	gettime(&now);
	getdate(&today);				//获取当前时间
	sprintf(str, "%04d-%02d-%02d %02d:%02d:%02d",
		    today.da_year,
		    today.da_mon,
		    today.da_day,
		    now.ti_hour,
		    now.ti_min,
		    now.ti_sec);			     
	GUI_PutString(115,119,str);		//GUI显示
	sprintf(str, "%02d",OSTaskCtr);	//任务的个数	
	GUI_PutString(137,0,str);				
	sprintf(str, "%02d",OSCPUUsage);//cpu使用率	
	GUI_PutString(223,0,str);				
	sprintf(str, "%04d",OSCtxSwCtr);//任务每秒切换次数		
	GUI_PutString(197,9,str);				
}
/*********************************************************************************************************
** 函数名称: MenuIcoInit()
** 功能描述: 应用程序图标初始化,功能函数连接
** 输 入: 无 
** 输 出: 无       
** 全局变量: mainmenu(结构定义参见ZLG/GUI Menu.h)
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  MenuIcoInit(void)
{   int  i;
    extern uint8 *pic_all[][2];	// 图标资源(pic1--pic8) 
    for(i=0; i<8; i++)
    {   /* 全部初始化为末选中状态 */
        mainmenu[i].state = 0;	
        /* 设置连接的图标数据 */
        mainmenu[i].icodat = (uint8 *) pic_all[i][0];
        mainmenu[i].title =  (uint8 *) pic_all[i][1];
    }
    /* 连接菜单功能函数 */
        mainmenu[0].Function = ( void(*) (void) ) Function_1_ADC;	//功能1
        mainmenu[1].Function = ( void(*) (void) ) Function_2_I2C;	//功能2
        mainmenu[2].Function = ( void(*) (void) ) Function_3_Win;	//功能3
        mainmenu[3].Function = ( void(*) (void) ) Function_4_UART;	//功能4
        mainmenu[4].Function = ( void(*) (void) ) Function_5_SPI;	//功能5
        mainmenu[5].Function = ( void(*) (void) ) Function_6_EINT;	//功能6
        mainmenu[6].Function = ( void(*) (void) ) Function_7_Info;	//功能7
        mainmenu[7].Function = ( void(*) (void) ) Function_8_Help;	//功能8
    /* 不在此处初始化MenuSelect,是为了保证退出某一个功能函数时,保持MenuSelect在进入功能函数之前的位置*/    
    //MenuSelect = 0;		
}
/*********************************************************************************************************
** 函数名称: MenuDisplay()
** 功能描述: 应用程序图标显示
** 输 入: select 菜单的选中序号 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void	MenuDisplay(uint8 select)
{
	mainmenu[select].state = 1;		/* 设置选择的图标,然后显图标 */
	mainmenu[0].x = 23;
	mainmenu[0].y = 19;				//菜单位置
	mainmenu[1].x = 77;
	mainmenu[1].y = 19;				//菜单位置
	mainmenu[2].x = 131;
	mainmenu[2].y = 19;				//菜单位置
	mainmenu[3].x = 185;
	mainmenu[3].y = 19;				//菜单位置
	mainmenu[4].x = 23;
	mainmenu[4].y = 68;				//菜单位置
	mainmenu[5].x = 77;
	mainmenu[5].y = 68;				//菜单位置
	mainmenu[6].x = 131;
	mainmenu[6].y = 68;				//菜单位置
	mainmenu[7].x = 185;
	mainmenu[7].y = 68;				//菜单位置
	GUI_MenuIcoDraw(&mainmenu[0]);	//菜单显示
	GUI_MenuIcoDraw(&mainmenu[1]);
	GUI_MenuIcoDraw(&mainmenu[2]);
	GUI_MenuIcoDraw(&mainmenu[3]);
	GUI_MenuIcoDraw(&mainmenu[4]);
	GUI_MenuIcoDraw(&mainmenu[5]);
	GUI_MenuIcoDraw(&mainmenu[6]);
	GUI_MenuIcoDraw(&mainmenu[7]);
	//显示图标右边的帮助文字
	MenuHelpDisplay(select,1);
}

/*********************************************************************************************************
** 函数名称: MenuHelpDisplay()
** 功能描述: 更新菜单右边的帮助文字显示
** 输 入: select 菜单的选中序号;type = 1显示 type =0 消隐
** 输 出: 无      
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void	MenuHelpDisplay(uint8 select,uint8 type)
{
	extern uint8 *help_all[][4];//Help文字资源
	uint8 *bak;
	uint8 x,y,i;
	uint8 selbak;	
	bak = (uint8 *) help_all[0][0];
	x = 62;
	y = 19;
	if(select<4)	//选择图标在第一排图标之间变换
	{	//只需要改变X的初始值即可
		x += select *54;
	}
	else
	{	//还需要改变Y的初始值
		x += (select-4) *54;
		y += 49;
	}
	selbak = select;
	if(type ==0)	//type为0,表示消隐select对应的图标的帮助文字
		selbak = 8;
	for(i=0;i<4;i++)
	{
		bak = (uint8 *) help_all[selbak][i];
		GUI_PutHZ(x,y+i*8,bak,10,8);
	}
}

/*********************************************************************************************************
** 函数名称: KeyDecode()
** 功能描述: 键值处理
** 输 入: 无 
** 输 出: 无       
** 全局变量: 改变MenuSelect,Flag_AppRunning,影响功能函数的调用
** 调用模块: GUI_MenuIcoDraw,GUI_FillSCR,Display_Init,MenuIcoInit,MenuDisplay,MenuHelpDisplay
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void	KeyDecode(uint8	keycode)
{
	if(Flag_AppRunning == 0)		//应用程序没有运行
	{
	  switch(keycode)
      {
      		case	0x01:								//直接按数字键选中对应的功能函数运行
      		case	0x02:
      		case	0x03:
      		case	0x04:
      		case	0x05:
      		case	0x06:
      		case	0x07:
      		case	0x08:								//直接按数字键选中对应的功能函数运行
      			Flag_AppRunning = 1;					//功能函数允许运行
    			GUI_FillSCR(0x00);						//全屏填充,清屏
    			Display_Init();							//应用程序显示初始化
    			MenuSelect = keycode -1;
    			break;
    		case	0x0c:	//key上
    		case	0x0d:	//key下
    			mainmenu[MenuSelect].state = 0;			//菜单未选中状态
    			GUI_MenuIcoDraw(&mainmenu[MenuSelect]);	//未选中按键前菜单
    			MenuHelpDisplay(MenuSelect,0);			//图标的帮助文字显示的消隐
    			if(MenuSelect<4)						//更新选中图标序号
    				MenuSelect += 4;
    			else
    				MenuSelect -=4;
    			mainmenu[MenuSelect].state = 1;			//按键后新菜单选中状态
    			GUI_MenuIcoDraw(&mainmenu[MenuSelect]);	//按键后新菜单显示
    			MenuHelpDisplay(MenuSelect,1);			//更新图标的帮助文字显示
    			break;
    		case	0x0e:	//key左
    			mainmenu[MenuSelect].state = 0;
    			GUI_MenuIcoDraw(&mainmenu[MenuSelect]);
    			MenuHelpDisplay(MenuSelect,0);
    			if(MenuSelect == 0)						//到达菜单边界
    				MenuSelect = 7;
    			else
    				MenuSelect -= 1;
    			mainmenu[MenuSelect].state = 1;
    			GUI_MenuIcoDraw(&mainmenu[MenuSelect]);
    			MenuHelpDisplay(MenuSelect,1);
    			break;
    		case	0x0f:	//key右
    			mainmenu[MenuSelect].state = 0;
    			GUI_MenuIcoDraw(&mainmenu[MenuSelect]);
    			MenuHelpDisplay(MenuSelect,0);
    			if(MenuSelect == 7)						//到达菜单边界
    				MenuSelect = 0;
    			else
    				MenuSelect += 1;
    			mainmenu[MenuSelect].state = 1;
    			GUI_MenuIcoDraw(&mainmenu[MenuSelect]);
    			MenuHelpDisplay(MenuSelect,1);
    			break;
    		case	0x0a:
    			Flag_AppRunning = 1;					//功能函数允许运行
    			GUI_FillSCR(0x00);						//全屏填充,清屏
    			Display_Init();							//应用程序显示初始化
    			break;
    		default:
    			break;
    	}
    }
    else												//应用程序在运行,仅Quit键有效
    { 
    	if(keycode == 0x0b)								//退出键
    	{
    		F_flag = 0x00;
    		Flag_AppRunning = 0;
    		GUI_FillSCR(0x00);							//全屏填充,清屏
    		Display_Init();								//应用程序显示初始化
    		MenuIcoInit();								//重新显示菜单
			MenuDisplay(MenuSelect);					//选中的菜单序号与运行功能函数之前一样。并不重新初始化为0
    	}
    }
    
}
/**********************************************************************************************************
***********************************************************************************************************                           
*********************************************************************************************************** 
***********************************************8个功能程序*************************************************/
/*********************************************************************************************************
** 函数名称: Function_1_ADC()
** 功能描述: 获取当前ADC通道0电压值并显示
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void	Function_1_ADC(void)
{	
	extern uint8	*title2[11];
	uint32	ADC_Data;
	uint8	i=0;
	char	str[14];
	//Function_1_ADC Disp Init
	if((F_flag&0x01)==0)
	{
		PINSEL1 = PINSEL1 | 0x00400000;
		ADCR = (1 <<0)                   |	// SEL = 1 ,选择通道0
	     	((Fpclk / 1000000 - 1) << 8) | 	// CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
	    	(0 << 16)                    |	// BURST = 0 ,软件控制转换操作
	    	(0 << 17)                    | 	// CLKS = 0 ,使用11clock转换
	    	(1 << 21)                    | 	// PDN = 1 , 正常工作模式(非掉电转换模式)
	    	(0 << 22)                    | 	// TEST1:0 = 00 ,正常工作模式(非测试模式)
	     	(0 << 24)                    | 	// START = 1 ,直接启动ADC转换Q
	    	(0 << 27);						// EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)
		for(i=0;i<=10;i++)
		GUI_PutHZ(20+18*i, 20, (uint8 *)title2[i],16, 16);// GUI显示

⌨️ 快捷键说明

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