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

📄 menu.c

📁 由华邦单片机w78e516bc1来控制RC531设计的一款读写器
💻 C
📖 第 1 页 / 共 2 页
字号:
			case 14:
				InitLCD();					//循环读卡处理
				Curcol=0;
				Curlin=0;
				Input_Count=0;
				i=0;
				cyread=1;
				esctrue=0;
				cancelinput=1;
				while(cyread)
				{
					wait_esc();
					if(esctrue==1)
						return;
					temp=MIF_Halt();
					Disp_Result(CMD_HALT,temp);
					wait_esc();
					if(esctrue==1)
						return;
					delay();
					temp=Request(0x52);
					Disp_Result(CMD_REQUEST,temp);
					wait_esc();
					if(esctrue==1)
						return;
					delay();
					temp=AntiColl();
					Disp_Result(CMD_ANTICOLL,temp);
					wait_esc();
					if(esctrue==1)
						return;
					delay();
					temp=Select_Card();
					Disp_Result(CMD_SELECT,temp);
					wait_esc();
					if(esctrue==1)
						return;
					delay();
					temp=Load_keyE2_CPY(0,0);
					temp=Authentication(UID, 0, 0);			//扇区认证
					Disp_Result(CMD_AUTHENTICATION,temp);		//显示认证结果
					wait_esc();
					if(esctrue==1)
						return;
					delay();
					//for (i=0;i<3;i++)
					temp=MIF_READ(readdata, i);
					Disp_Result(CMD_READ,temp);					//显示读出结果
					wait_esc();
					if(esctrue==1)
						return;
					delay();
					i=i+1;
					if (i==4)
						i=0;
				};
				break;
				
			default:
				break;
		 }
	}
	else if (Menus.Cur_Menu==2)							//处理接收的数据
	{
		switch (Menus.Menu_Pos) 
		{
			case 3:
				cancelinput=1;
				if (Input_Data[0]>15)							//输入扇区号错误
				{
					Show_Str(Curlin,Curcol, err_str);
					return;
				}
				Secnr=Input_Data[0];
				temp=Load_keyE2_CPY(Secnr,0);
				temp=Authentication(UID, Secnr, 0);			//扇区认证
				Disp_Result(CMD_AUTHENTICATION,temp);		//显示认证结果
				break;
			case 5:
				cancelinput=1;
				if (Input_Data[0]>63)							//输入块地址错误
				{
					Show_Str(Curlin,Curcol, err_str);
					return;
				}
				block_adr=Secnr*4+Input_Data[0];
				temp=MIF_READ(readdata, block_adr);
				Disp_Result(CMD_READ,temp);					//显示读出结果
				break;
			case  6:
				if (grade_status==0)							//保存块地址
				{
					block_adr=Secnr*4+Input_Data[0];
					grade_status=1;
					Show_Str(1, 0, data_str);
					Curlin=2;
					Curcol=0;
					Input_Count=0;
				}
				else if (grade_status==1)
				{
					cancelinput=1;
					temp=MIF_Write(Input_Data, block_adr);
					Disp_Result(CMD_WRITE,temp);		//显示写命令结果
				}
				break;	
			case  7:
				if (grade_status==0)				//保存块地址
				{
					Secnr=Input_Data[0];
					grade_status=1;
					Show_Str(1, 0, key_str);
					Curlin=2;
					Curcol=0;
					Input_Count=0;
				}
				else if (grade_status==1)
				{
					cancelinput=1;
					temp=load_key(Input_Data,0, Secnr);
					Disp_Result(CMD_LOADKEY,temp);		//显示写命令结果
				}
				break;	
			case  8:
				if (grade_status==0)						//保存块地址
				{
					block_adr=Secnr*4+Input_Data[0];
					grade_status=1;
					Show_Str(1, 0, data_str);
					Curlin=2;
					Curcol=0;
					Input_Count=0;
				}
				else if (grade_status==1)
				{
					//temp=Input_Count-1;
					cancelinput=1;
					temp=MIF_Initival(Input_Data, block_adr);
					Disp_Result(CMD_INITVAL,temp);				//显示写命令结果
				}
				break;
			case  9:
				if (grade_status==0)						//保存块地址
				{
					block_adr=Secnr*4+Input_Data[0];
					grade_status=1;
					Show_Str(1, 0, data_str);
					Curlin=2;
					Curcol=0;
					Input_Count=0;
				}
				else if (grade_status==1)
				{
					//temp=Input_Count-1;
					cancelinput=1;
					temp=MIF_Increment(Input_Data, block_adr);
					MIF_Transfer(block_adr);
					Disp_Result(CMD_INCREMENT,temp);				//显示写命令结果
				}
				break;
			case  10:
				if (grade_status==0)						//保存块地址
				{
					block_adr=Secnr*4+Input_Data[0];
					grade_status=1;
					Show_Str(1, 0, data_str);
					Curlin=2;
					Curcol=0;
					Input_Count=0;
				}
				else if (grade_status==1)
				{
					//temp=Input_Count-1;
					cancelinput=1;
					temp=MIF_Decrement(Input_Data, block_adr);
					MIF_Transfer(block_adr);
					Disp_Result(CMD_DECREMENT,temp);				//显示写命令结果
				}
				break;
			case  11:
				temp=MIF_Transfer(Secnr*4+Input_Data[0]);
				Disp_Result(CMD_TRANSFER,temp);				//显示写命令结果
				cancelinput=1;
				break;
			case  12:
				temp=MIF_Restore(Secnr*4+Input_Data[0]);
				Disp_Result(CMD_RESTORE,temp);
				cancelinput=1;
				break;
			case 13:
				Curcol=0;
				Curlin=1;
				Show_Str(Curlin, Curcol, regdata_str);
				temp1=(uchar xdata *)(0x8000+Input_Data[0]);
				temp=*temp1;
				Disp_Hex(Curlin, Curcol, temp);
				cancelinput=1;
				break;
		}
	}
}

/*********************************************************/
/*名称:	Pro_Pos                                                					*/
/*功能:	上、下移键处理		                                           			*/ 
/*输入:                                                                                            	*/
/*  		ud: UP、DOWN														*/ 
/*输出:                                                                                            	*/
/*	N/A															*/
/*	 															*/
/*********************************************************/
void Pro_Pos(uchar ud)
{
	uchar  temp,temp1;
	if (Menus.Cur_Menu!=1)					//不是菜单区,返回
			return;
	temp1=Menus.Menu_Pos-Menus.Menu_StPos;	//擦除老的光标指示
	Show_Str(temp1,0, space);
	if (ud==UP)								//上移键处理
	{
		temp=Menus.Menu_Pos;
		if (Menus.Menu_Pos!=0)				//当前菜单位置-1
		{
			Menus.Menu_Pos=Menus.Menu_Pos-1;
		}
		else
		{	
			Menus.Menu_Pos=Menu_Num-1;
			Menus.Menu_StPos=Menus.Menu_Pos-3;
			temp1=Menus.Menu_Pos-Menus.Menu_StPos;
			Disp_Menu();
			Show_Str(temp1, 0, ico);
			return;
		}
		temp=Menus.Menu_StPos;
		if (Menus.Menu_Pos<temp)				//向上滚动菜单
		{
			Menus.Menu_StPos=Menus.Menu_StPos-1;
			Disp_Menu();
		}
	}
	if (ud==DOWN)							//下移键处理
	{
		temp=Menus.Menu_Pos;
		if (Menus.Menu_Pos!=(Menu_Num-1))	//当前菜单位置+1	
		{
			Menus.Menu_Pos=Menus.Menu_Pos+1;
		}
		else 
		{
			Menus.Menu_Pos=0;
			Menus.Menu_StPos=0;
			temp1=Menus.Menu_Pos-Menus.Menu_StPos;
			Disp_Menu();
			Show_Str(temp1, 0, ico);
			return;
		}	
		temp=Menus.Menu_StPos;
		if (Menus.Menu_Pos>(temp+n_Line-1))	//向下滚动菜单
		{
			Menus.Menu_StPos=Menus.Menu_StPos+1;
			Disp_Menu();
		}
					
	}
	temp1=Menus.Menu_Pos-Menus.Menu_StPos;	//绘出当前光标指示
	Show_Str(temp1, 0, ico);
	
}

/*********************************************************/
/*名称:	Pro_Pos                                                					*/
/*功能:	左、右移键处理		                                           			*/ 
/*输入:                                                                                            	*/
/* 		lr:LEFT、RIGHT											*/ 
/*输出:                                                                                            	*/
/*	N/A															*/
/*	 															*/
/*********************************************************/
void Pro_LrPos(char lr)
{	
	uchar num;
	if (Input_Count>0 && Menus.Cur_Menu==2)			
	{	if (Curcol==0 && Curlin>0)
		{
			Curlin=Curlin-1;
			Curcol=16;
		}
		if (lr==LEFT)					//上次输入数字减1
		{
			Input_Count=Input_Count-1;
			Curcol=Curcol-1;
			num=Pre_Num-1;
			if (halfbyte==0)
				Pre_Num=Input_Data[bytecnt] & 0x0f;
			else 
				Pre_Num=(Input_Data[bytecnt] & 0xf0)>>4;
			Pro_Num(num);
		}
		else if (lr==RIGHT)			//上次输入数字加1
		{
			Input_Count=Input_Count-1;
			Curcol=Curcol-1;
			num=Pre_Num+1;
			if (halfbyte==0)
				Pre_Num=Input_Data[bytecnt] & 0x0f;
			else 
				Pre_Num=(Input_Data[bytecnt] & 0xf0)>>4;
			Pro_Num(num);
		}
	}
		
}

/*********************************************************/
/*名称:	Pro_Esc                                               						*/
/*功能:	Esc键处理		                                           				*/ 
/*输入:                                                                                            	*/
/* 																*/ 
/*输出:                                                                                            	*/
/*	N/A															*/
/*	 															*/
/*********************************************************/
void Pro_Esc(void)
{
	uchar idata temp;
			
	if(Menus.Cur_Menu==2)				//返回上级菜单
	{
		if (cyread==1)
		cyread=0;
		cancelinput=0;
		Menus.Cur_Menu=Menus.Cur_Menu-1;
		temp=Menus.Menu_Pos-Menus.Menu_StPos;
		Disp_Menu();
		Show_Str(temp, 0, ico);
	}
	else 								//开机画面
	{
		Menus.Cur_Menu=0;
		InitLCD();
		Show_Str(1, 1, str1);
		Show_Str(2, 1, str2);
	}
	
}




























⌨️ 快捷键说明

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