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

📄 main.c

📁 这个是一个带有IC卡
💻 C
📖 第 1 页 / 共 4 页
字号:
						Lcdclear();
						wrzw16x16_string(2,1,"没有对应货物",6);						
						Delay_n100MS(30);
					}
								
					
				}			
				else//失效时间小于系统时间的时候,此卡无效
				{
					Lcdclear();
					wrzw16x16_string(0,1,"警告:",3);
					wrzw16x16_string(1,2,"此卡为无效卡!",7);
					wryw16x8_string(0,3,"ERR-ID:",7);
					wryw16x8_2wei(14,3,QIXIAN_ERR);//
					Delay_n100MS(40);
				}	
			}
			if(DataBfr[0]==ADMI_CARD)//管理员卡
				{//////////////////管理员的情况处理////////////////////
				
					uint32 ui32_ID;
					uint32 ui32_SXdate; //失效的日期
					uint32 ui32_XTdate; //系统当前日期
					ui32_ID=
					(((uint32)DataBfr[1])*256*256*256)+(DataBfr[2]*256*256)+(DataBfr[3]*256)+DataBfr[4];
					//得到ID号
					Read_SUM1356_Block(DataBfr,5);		//读块5
										
					ui32_SXdate=((uint32)DataBfr[1])*256*256+DataBfr[2]*256+DataBfr[3];
					
					//得到失效时间
					//把日期转成一个4字节的数存放
					//ReadTimeFromPCF8563(&PCF8563_RdOut_databuf[0]);
					//得到系统的当前的时间
					ui32_XTdate=(((uint32)PCF8563_RdOut_databuf[6])*256*256)+(PCF8563_RdOut_databuf[5]*256)+(PCF8563_RdOut_databuf[3]);
					
					if(ui32_SXdate>ui32_XTdate)//失效时间大于系统时间的时候,此卡有效
					{
						uint8 Check_Pin_Val;
						Check_Pin_Val=0;
						Lcdclear();
						wrzw16x16_string(0,0,"本卡类型:",5);
						wrzw16x16_string(0,1,"管理员",3);
						wryw16x8_string(0,2,"CARD-ID:",8);
						ShowData_UINT32_(0,3,ui32_ID);
						Delay_n100MS(40);
						/////////////进入代码处理/////////////////////////
													
						ClrPinBuf(PIN_TEST_BUF);		
						Modify_pin(((uint32)ui32_ID),PIN_TEST_BUF);
						
						Check_Pin_Val=Check_Pin(0,2,PIN_TEST_BUF);
						
						ClrPinBuf(PIN_TEST_BUF);
									
						
						
						
						
						if(Check_Pin_Val==1)//密码正确的时候
						{
													
							uint8 key_rtn,key_H,key_L;
							uint8 flg_out;							
							key_rtn=0xff;
							flg_out=0;
							Lcdclear();
							wrzw16x16_string(0,0,"请输入要打开的门",8);
							wrzw16x16_string(0,1,"的编号",3);
							wrzw16x16_string(0,2,"零为全部打开",6);
							wryw16x8(0,3,"-");
							wryw16x8(1,3,"-");
							while(flg_out==0)
							{
								key_rtn=ScanKey();
								if(key_rtn<=9)
								//如果键盘扫秒得到的小于等于32则合法
								{
									key_H=key_rtn;
									wryw16x8s(0,3,key_H);									
									key_rtn=0xff;
									Delay_n100MS(8);
									while((key_rtn>9)&&(key_rtn!=KEY_CANCELL))
									{
										key_rtn=ScanKey();
										if(key_rtn<=9)
										{
											key_L=key_rtn;
											wryw16x8s(1,3,key_L);
											if((key_H*10+key_L)<=32)
											{
												if((key_H*10+key_L)==0)
												{
													
													uint8 i;
													i=0;
													for(i=1;i<=LNMAX;i++)
													{
														//PlaySound_2wei(i);
														//Open_Door(i);														
														Delay_n100MS(6);
														//Close_ALL_Door();
														//把过期标记也清除掉
														Delay_n100MS(5);
														
														BaoZhiTimeOutListVAL[i-1].FLG_TimeOut=0;
														BaoZhiTimeOutListVAL[i-1].FLG_record=0;

														(*pTermilogVAL).GeZiList[i-1].Use_Flg=0;//
																																
													}
													
													(*pTermilogVAL).StoreProductNum=0;
													//清除已经已经被占用的柜门的数量
													
														//存入记录
													if((*pui16_Count_AdmiHis)<ADMIHISNUM)//没有满的时候
													{
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).LatticeID=0;
														//打开的柜门号码。0表示打开所有的柜门
														
														//把时间记录下来
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.year=		2000+PCF8563_RdOut_databuf[6];//年
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.month=	PCF8563_RdOut_databuf[5];//月
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.day=		PCF8563_RdOut_databuf[3];//日
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.hour=		PCF8563_RdOut_databuf[2];//时
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.minute=	PCF8563_RdOut_databuf[1];//分
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.second=	PCF8563_RdOut_databuf[0];//秒
						
														(*pui16_Count_AdmiHis)++;																						

														if((*pui16_Count_AdmiHis)==ADMIHISNUM)
														{
															(*pFLG_AdmiHis_OVERFLOW)=1;//这里已经是满了
															(*pui16_Count_AdmiHis)=0;
														}
													}		
																							
												}
												else//这里列出1-32的开门的状况
												{
													//PlaySound_2wei((key_H*10+key_L));
													//Open_Door((key_H*10+key_L));														
													Delay_n100MS(8);
													//Close_ALL_Door();
													Delay_n100MS(5);
													if((*pTermilogVAL).StoreProductNum>0)
													{
														(*pTermilogVAL).StoreProductNum--;
													}
													(*pTermilogVAL).GeZiList[(key_H*10+key_L)-1].Use_Flg=0;///
													//对格子的使用标记清零
													BaoZhiTimeOutListVAL[(key_H*10+key_L)-1].FLG_TimeOut=0;
													//货物已经取出,对超时标记进行记录
													BaoZhiTimeOutListVAL[(key_H*10+key_L)-1].FLG_record=0;
													//对超时记录位进行清零
													//存入记录
													if((*pui16_Count_AdmiHis)<ADMIHISNUM)//没有满的时候
													{
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).LatticeID=(key_H*10+key_L);
													//	read_time_1302(ucTimeReadOutArray);
													//	ChangeBCD_to_Hex_TIME(ucTimeReadOutArray);
														//把时间记录下来
													//把时间记录下来
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.year=		2000+PCF8563_RdOut_databuf[6];//年
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.month=	PCF8563_RdOut_databuf[5];//月
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.day=		PCF8563_RdOut_databuf[3];//日
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.hour=		PCF8563_RdOut_databuf[2];//时
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.minute=	PCF8563_RdOut_databuf[1];//分
														(*(pAdminHisVAL+(*pui16_Count_AdmiHis))).OpenTime.second=	PCF8563_RdOut_databuf[0];//秒
						
														(*pui16_Count_AdmiHis)++;		
														
														if((*pui16_Count_AdmiHis)==ADMIHISNUM)
														{
															(*pFLG_AdmiHis_OVERFLOW)=1;//这里已经是满了
															(*pui16_Count_AdmiHis)=0;
														}
													}//if(ui16_Count_AdmiHis<(DELIHISNUM))//没有满的时候									
												
												}//else//这里列出1-32的开门的状况
											}//if((key_H*10+key_L)<=32)
											flg_out=1;
										}//if(key_rtn<=9)
									}//while((key_rtn>9)&&(key_rtn!=KEY_CANCELL))									
								}//if(key_rtn<=9)
								if(key_rtn==KEY_CANCELL)
								//如果键盘扫秒得到的小于等于32则合法
								{
									flg_out=1;
								}				
								
								
								
							}		
																	
						}
						else  //if(Check_Pin_Val==1)//密码正确的时候
						{
							Lcdclear();
							wrzw16x16_string(1,1,"密码错误!",5);
							Delay_n100MS(30);
						}					
					
					
					}//if(ui32_SXdate>ui32_XTdate)//失效时间大于系统时间的时候,此卡有效
					else//失效时间小于系统时间的时候,此卡无效
					{
						Lcdclear();
						wrzw16x16_string(0,1,"警告:",3);
						wrzw16x16_string(1,2,"此卡为无效卡!",7);
						wryw16x8_string(0,3,"ERR-ID:",7);
						wryw16x8_2wei(14,3,QIXIAN_ERR);//
						Delay_n100MS(40);
					}
					
				}//if(ui32_SXdate>ui32_XTdate)//失效时间大于系统时间的时候,此卡有效
			if(DataBfr[0]==PROD_CARD)//货物标签卡
				{//////////////////货物标签卡的情况处理///////////////
				
					
				 	uint32 ui32_target_Termilog,i;
				 	uint8 FLG_SUM1356_OP_OK;//操作OK的标志
					ui32_target_Termilog=0;
					FLG_SUM1356_OP_OK=1;//假设操作标志为为1时是好的。那么下面的任何一个操作不成功,那么真个操作都不成功
				
					if(	Read_SUM1356_Block(MI_ProCard_Block4,4)==0)		//读块4
					{FLG_SUM1356_OP_OK=0;}
					if(Read_SUM1356_Block(MI_ProCard_Block5,5)==0)		//读块5
					{FLG_SUM1356_OP_OK=0;}
					if(Read_SUM1356_Block(MI_ProCard_Block6,6)==0)		//读块6
					{FLG_SUM1356_OP_OK=0;}
					if(Read_SUM1356_Block(MI_ProCard_Block8,8)==0)		//读块8
					{FLG_SUM1356_OP_OK=0;}
					if(Read_SUM1356_Block(MI_ProCard_Block9,9)==0)		//读块9
					{FLG_SUM1356_OP_OK=0;}
					if(Read_SUM1356_Block(MI_ProCard_Block10,10)==0)		//读块10
					{FLG_SUM1356_OP_OK=0;}
					if(Read_SUM1356_Block(MI_ProCard_Block12,12)==0)		//读块12
					{FLG_SUM1356_OP_OK=0;}
					if(Read_SUM1356_Block(MI_ProCard_Block62,62)==0)		//读块62
					{FLG_SUM1356_OP_OK=0;}
				
				/*	Read_SUM1356_Block(MI_ProCard_Block4,4);	//读块4
					Read_SUM1356_Block(MI_ProCard_Block5,5);		//读块5
					
					Read_SUM1356_Block(MI_ProCard_Block6,6);		//读块6
					
					Read_SUM1356_Block(MI_ProCard_Block8,8);		//读块8
					
					Read_SUM1356_Block(MI_ProCard_Block9,9);		//读块9
					
					Read_SUM1356_Block(MI_ProCard_Block10,10);		//读块10
					
					Read_SUM1356_Block(MI_ProCard_Block12,12);		//读块12
					
					Read_SUM1356_Block(MI_ProCard_Block62,62);		//读块62
				
				*/
					if(FLG_SUM1356_OP_OK==1)	
					{	
						
					for(i=0;i<16;i++)
					{
						DataBfr[i]=MI_ProCard_Block6[i];
					}
						
					
					//if(PiccAuthE2(KEYA,Card_Snr,0,6)!=OK)	continue;					//验证块4
					//if(PiccRead(6,DataBfr)!=OK)	continue;			
						//read BLOCK6//得到目标中专站
					ui32_target_Termilog=(((uint32)DataBfr[4])*256*256*256)+
											DataBfr[5]*256*256+DataBfr[6]*256+DataBfr[7];
					
					if(ui32_target_Termilog!=((*pTermilogVAL).TermilogID))
					{//如果这目标中转站号码不一样则给出提示信息
						Lcdclear();
						wrzw16x16_string(0,0,"不能存入!",5);				
						wrzw16x16_string(0,1,"此货物为非本",6);	
						wrzw16x16_string(0,2,"中转站货物!",6);
						Delay_n100MS(30);
					}
					if((ui32_target_Termilog==(*pTermilogVAL).TermilogID)&&(DataBfr[15]==1))
					{//这个货物需要要当面验货不能存入!
						Lcdclear();
						wrzw16x16_string(0,1,"需要当面验货",6);	
						wrzw16x16_string(0,2,"不能存入!",5);
						Delay_n100MS(30);
					}	
					if((ui32_target_Termilog==(*pTermilogVAL).TermilogID)&&(DataBfr[15]==0))
					{//如果是本站的货物,同时又不需要当面验货
						
						uint8 i_tmp,flg_find,gezi_num;
						i_tmp=0;
						flg_find=0;//如果找到合适大小的柜子
						gezi_num=0;////当前选中要存放的阁子的号码
						
						
						
						for(i=0;i<16;i++)
						{
							DataBfr[i]=MI_ProCard_Block9[i];
						}
											
						//if(PiccAuthE2(KEYA,Card_Snr,0,9)!=OK)	continue;					//验证块4
						//if(PiccRead(9,DataBfr)!=OK)	continue;			
							//read BLOCK9//得到货物的高重等信息
						
						for(i_tmp=0;i_tmp<LNMAX;i_tmp++)
						{
							if	(	Compare_vol((*pTermilogVAL).GeZiList[i_tmp].GeZiRongJi.Height,
												(*pTermilogVAL).GeZiList[i_tmp].GeZiRongJi.Width,
												(*pTermilogVAL).GeZiList[i_tmp].GeZiRongJi.Depth,						
												DataBfr[5],DataBfr[6],DataBfr[7]
												)
									&&((*pTermilogVAL).GeZiList[i_tmp].Use_Flg==0)
								)
							{
								flg_find=1;
								gezi_num=i_tmp;
								break;//跳出循环
							}
						}//寻找大小合适的柜子
						
						if((flg_find==1)&&((*pTermilogVAL).StoreProductNum<=(LNMAX-1)))
						{//当总数没有超出时	
							//所存的总数进行加1
														
							if((*pTermilogVAL).StoreProductNum==(LNMAX-1))
							{//当这个正好是最后一个时记录下来,记的内容为:机器满的报警记录
								if((*pui16_Count_MachHis)<MACHHISNUM)
								{							
									(*(pMachHisVAL+(*pui16_Count_MachHis))).waringtype=WARING_TYPE_FULL;
									
									//把时间记录下来
									(*(pMachHisVAL+(*pui16_Count_MachHis))).time.year=
									2000+PCF8563_RdOut_databuf[6];
									(*(pMachHisVAL+(*pui16_Count_MachHis))).time.month=PCF8563_RdOut_databuf[5];
									(*(pMachHisVAL+(*pui16_Count_MachHis))).time.day=PCF8563_RdOut_databuf[3];
									(*(pMachHisVAL+(*pui16_Count_MachHis))).time.hour=PCF8563_RdOut_databuf[2];
									(*(pMachHisVAL+(*pui16_Count_MachHis))).time.minute=PCF8563_RdOut_databuf[1];
									(*(pMachHisVAL+(*pui16_Count_MachHis))).time.second=PCF8563_RdOut_databuf[0];
									
									(*pui16_Count_MachHis)++;
									
									if((*pui16_Count_MachHis)==MACHHISNUM)
									{
										(*pui16_Count_MachHis)=0;
										(*pFLG_MachHis_OVERFLOW)=1;
									}//
								}
							}//if(TermilogVAL.StoreProductNum==(LNMAX-1))

⌨️ 快捷键说明

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