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

📄 menu.c

📁 一个流量控制仪器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
					
					//翻页
                                        if(ucSystemMenuTurnTemp2 < 6)
                                        	ucSystemMenuTurnTemp2 += 5;
                                        else
                                        	ucSystemMenuTurnTemp2 -= 5;

					break;
				}
				
				//清除键 (KEY_CLEAR)  清除所有位设置(清0),且清除继承位。
				case KEY_CLEAR:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
				
					
					//清除所有位设置(清0),且清除继承位。
					uc8_SystemMenuTurnTemp[0] = 0;
					uc8_SystemMenuTurnTemp[1] = 0;	
									
																						
					break;
				}
				
				//功能键1  (KEY_F1)  设置继承位(取反)			
				case KEY_F1:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
				
					
					//设置继承位(取反)
					uc8_SystemMenuTurnTemp[1] = fnBitCpl(uc8_SystemMenuTurnTemp[1],7);	
									
																						
					break;
				}
				
				//数字键 (KEY_0)	输入当前位的值 0,并且右移当前位
				//(当继承位有效时,无效)		
				case KEY_0:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
				
					
					//当继承位有效时,无效
					if(fnBitTest(uc8_SystemMenuTurnTemp[1],7) == 0)
					{
						//输入当前位的值 0
                                        	if(ucSystemMenuTurnTemp2 < 6)
                                        		uc8_SystemMenuTurnTemp[0] = fnBitClr(uc8_SystemMenuTurnTemp[0],ucSystemMenuTurnTemp2-1);	
                                        	else
                                        		uc8_SystemMenuTurnTemp[1] = fnBitClr(uc8_SystemMenuTurnTemp[1],ucSystemMenuTurnTemp2-6);
                                        	
						//增量选择输出位 1-10(右移/自动翻页)
						if(ucSystemMenuTurnTemp2 == 10 )
							ucSystemMenuTurnTemp2 = 1;
						else
							ucSystemMenuTurnTemp2 ++ ;                                        	
						
					}
									
																						
					break;
				}	

				//数字键 (KEY_1)	输入当前位的值 1,并且右移当前位
				//(当继承位有效时,无效)		
				case KEY_1:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
				
					
					//当继承位有效时,无效
					if(fnBitTest(uc8_SystemMenuTurnTemp[1],7) == 0)
					{
						//输入当前位的值 0
                                        	if(ucSystemMenuTurnTemp2 < 6)
                                        		uc8_SystemMenuTurnTemp[0] = fnBitSet(uc8_SystemMenuTurnTemp[0],ucSystemMenuTurnTemp2-1);	
                                        	else
                                        		uc8_SystemMenuTurnTemp[1] = fnBitSet(uc8_SystemMenuTurnTemp[1],ucSystemMenuTurnTemp2-6);
                                        	
						//增量选择输出位 1-10(右移/自动翻页)
						if(ucSystemMenuTurnTemp2 == 10 )
							ucSystemMenuTurnTemp2 = 1;
						else
							ucSystemMenuTurnTemp2 ++ ;                                        		
						
					}
									
																						
					break;
				}
											
			}
			
			//菜单显示--子菜单2层			
			pucDBuf = fnDisplayBufSet(Display_01Set);
			
        		pucDBuf[0] = 0x0f;
        		pucDBuf[1] = 0x0f;        		        
        		pucDBuf[2] = 0x0f;      

			
			if(fnBitTest(uc8_SystemMenuTurnTemp[1],7) == 0)
			{
				//当继承位无效时
				
				if(ucSystemMenuTurnTemp2 < 6)
				{
					for(i=0;i<5;i++)
						pucDBuf[i+3] = fnBitTest(uc8_SystemMenuTurnTemp[0],i);
						
					//设置闪烁位
					fnDisplaySetDk(Display_01Set,1<<(5-ucSystemMenuTurnTemp2));       
				}
				else
				{
                                        //加点区别
					for(i=0;i<5;i++)
						pucDBuf[i+3] = fnBitTest(uc8_SystemMenuTurnTemp[1],i) + 0x80;

					//设置闪烁位
					fnDisplaySetDk(Display_01Set,1<<(10-ucSystemMenuTurnTemp2));

				}				
			}
			else
			{
				//当继承位有效时
				for(i=0;i<5;i++)
					pucDBuf[i+3] = 0x0a;      //分隔符号 -
				
					
				if(ucSystemMenuTurnTemp2 < 6)
				{
					//设置闪烁位
					fnDisplaySetDk(Display_01Set,1<<(5-ucSystemMenuTurnTemp2));       
				}
				else
				{
					//设置闪烁位
					fnDisplaySetDk(Display_01Set,1<<(10-ucSystemMenuTurnTemp2));

				}			
			}        
			
        					
      			ucDisplayState = Display_01Set;		//显示菜单
      						
			break;
		}
				

				
        }
}



/*******************************************************************
		一般时间数据辅助输入函数
函数原型: uchar fnAss1_SystemMenuTurnTime(uchar i, char j,char DataI)
功能: 	返回正确的日期时间的增量、减量的值。
返回:   uchar i		1-百小时、2-小时十位、3-小时个位、
									4-分钟十位、5-分钟个位、6-秒十位、7-秒个位
	char j		1-增量+1、-1-减量-1。
********************************************************************/
uchar fnAss1_SystemMenuTurnTime(uchar i, char j,char DataI)
{
	char uc_temp1;
	
	//分钟十位、秒十位的0-5限制 
	if((i==4)|(i==6))
	{
			DataI += j*10;
			
			if(DataI<0)
				DataI += 60;
			else
			if(DataI>59)
				DataI -= 60;		
	}
	else
	if(i==2)	//2-小时十位
	{			
			DataI += j*10;
			
			if(DataI<0)
				DataI += 100;
			else
			if(DataI>99)
				DataI -= 100;				
	}
	else
	{
			uc_temp1 = DataI%10;
			
			uc_temp1 += j;
			
			if(uc_temp1<0)
				uc_temp1 = 9;
			else
			if(uc_temp1>9)
				uc_temp1 = 0;				
				
			DataI = (DataI/10)*10 + uc_temp1;
	}
	
	return ((uchar)DataI );			
			
}



/*******************************************************************
		P5	一般时间设定函数
函数原型: void fnSet_SystemMenuTurnTime();
功能: 	P5	一般时间设定函数
返回:   
********************************************************************/
void fnSet_SystemMenuTurnTime()
{
        uchar *pucDBuf;

        uchar ucTimeTemp2;
	
        //根据子菜单层,处理相应键盘输入,并显示相应内容
        switch(ucSystemMenuTurnTemp1)
        {
		//0.	初始化设定。进入子菜单的相关数据初始化
		case 0:
		{
			//初始化设定的数据
			
			ucSystemMenuTurnNum = Turn_00;	//设置第一个时段为00
			
			ucSystemMenuTurnTemp1 = 1;	//进入第一层子菜单
				
			
			break;	
		}
		
		//1.	时间段选择		『ucSystemMenuTurnNum』[99]-[95]
		case 1:
		{
			//处理键盘消息--子菜单1层
			switch(ucKeyInput)
			{
				//上向键 KEY_UP 选择后一个时间段 增量选择
				case KEY_UP:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
						
					//选择后一个时间段 增量选择
					if(ucSystemMenuTurnNum == (SIZE_OF_TURN_LIST - 1) )
						ucSystemMenuTurnNum = 0;
					else
						ucSystemMenuTurnNum ++ ;
						
					break;
				}
				
				//下向键 KEY_DOWN 选择前一个时间段 减量选择
				case KEY_DOWN:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
						
					//选择前一个时间段 减量选择
					if(ucSystemMenuTurnNum == 0 )
						ucSystemMenuTurnNum = SIZE_OF_TURN_LIST - 1;
					else
						ucSystemMenuTurnNum -- ;
						
					break;
				}	
				
				//确认键 KEY_OK 进入下一级目录  设置目录
				case KEY_OK:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
					
					//判断时间段的计时方向,当为正计时则不允许设置时间。不进入下一级菜单。
					if (TurnList[ucSystemMenuTurnNum].ucTurnTimeSortState == 0)
					{					
					
						//进入下一级子目录
						ucSystemMenuTurnTemp1 = 2;	//进入第二层子菜单		
					
						//读入当前时间段的设置值--4字节时间量
					        	//读入指定地址,大小的时段控制量:	
                					//CAT24WC64P  (N<=8192)(地址:0-8191)
                					//CAT24WC16P  (N<=2048)(地址:0-2047)
        					fnRead_Eeprom(TurnList[ucSystemMenuTurnNum].uiTurnTimeAddress,
                        				4,uc8_SystemMenuTurnTemp);
                        			
					
						//检查数据,如果有问题,则全部设为0,并储存。报警,Beep
						if ( (uc8_SystemMenuTurnTemp[0] > 9) |		//百小时>9
			     				(uc8_SystemMenuTurnTemp[1] > 99) |		//小时>99
			     				(uc8_SystemMenuTurnTemp[2] > 59) |		//分钟>59
			     				(uc8_SystemMenuTurnTemp[3] > 59) )		//秒>59
						{
							//全部设为0
							uc8_SystemMenuTurnTemp[0] = 0;
							uc8_SystemMenuTurnTemp[1] = 0;
							uc8_SystemMenuTurnTemp[2] = 0;
							uc8_SystemMenuTurnTemp[3] = 0;
				
							//并储存
							//写入相应地址的数据--4字节的时间量
								//写入指定地址,4字节大小的数据:	
                						//CAT24WC64P  (N<=8192)(地址:0-8191)
                						//CAT24WC16P  (N<=2048)(地址:0-2047)
        						fnWrite_Eeprom(TurnList[ucSystemMenuTurnNum].uiTurnTimeAddress,
                    		    				4,uc8_SystemMenuTurnTemp);
                        		
                        				//报警,Beep!
                        	
                        			}  
					
						//输出位选择1	
						ucSystemMenuTurnTemp2 = 1;
					}
					
					break;
				}	
				
				//取消键 KEY_ESC  返回上一级目录  退出子菜单
				case KEY_ESC:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
					
					//菜单执行项退出数据清理
					
					//标准退回菜单
					ucSystemMenuState = MenuState_X1;	//进入菜单状态
					
					break;
				}

				
			}
			
			
			//菜单显示--子菜单1层
			pucDBuf = fnDisplayBufSet(Display_01Set);

        		pucDBuf[0] = 0x0f;
        		pucDBuf[1] = 0x0f;
                
        		pucDBuf[2] = 0x0a;      //分隔符号 -			
        		pucDBuf[3] = TurnList[ucSystemMenuTurnNum].ucTurnIndex / 10;        //时段的十位
        		pucDBuf[4] = TurnList[ucSystemMenuTurnNum].ucTurnIndex % 10;        //时段的个位        		        
        		pucDBuf[5] = 0x0a;      //分隔符号 -
        
        		pucDBuf[6] = 0x0f;
        		pucDBuf[7] = 0x0f;
			
        		fnDisplaySetDk(Display_01Set,0);       //设置闪烁 0
        					
      			ucDisplayState = Display_01Set;		//显示菜单
      			
			break;
		}


		//2.	时间设置目录		『ucSystemMenuTurnTemp2』显示位选择(1-7)同数码管位
		case 2:
		{
			//处理键盘消息--子菜单2层
			switch(ucKeyInput)
			{
				//上向键 (KEY_UP) 增量选择数据值(自动循环)
				case KEY_UP:
				{
					//清空键盘处理
					ucKeyInput = KEY_NOKey;
						
					//增量+1

⌨️ 快捷键说明

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