📄 main.c
字号:
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 + -