📄 xiugai.c
字号:
{
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=MissID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
MissID[12]=0;
Write24c02(0,50); //复位掉电标志位
DisplayCard();
delay10ms(1000);
send_byte(CMD_RESET);
break;
}
}
///////////////////第4
if(MissID[13]==1)
{
for(i=0;i<=8;i++)
{
MissID[i]=Read24c02(i+51);
}
if(MissID[0]==cTransBuffer[8]&&MissID[1]==cTransBuffer[9]&&MissID[2]==cTransBuffer[10]&&MissID[3]==cTransBuffer[11])
{
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=MissID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
MissID[13]=0;
Write24c02(0,60); //复位掉电标志位
DisplayCard();
delay10ms(1000);
send_byte(CMD_RESET);
break;
}
}
///////////////////第5
if(MissID[14]==1)
{
for(i=0;i<=8;i++)
{
MissID[i]=Read24c02(i+61);
}
if(MissID[0]==cTransBuffer[8]&&MissID[1]==cTransBuffer[9]&&MissID[2]==cTransBuffer[10]&&MissID[3]==cTransBuffer[11])
{
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=MissID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
MissID[14]=0;
Write24c02(0,70); //复位掉电标志位
DisplayCard();
delay10ms(1000);
send_byte(CMD_RESET);
break;
}
}
///////////////////第6
if(MissID[15]==1)
{
for(i=0;i<=8;i++)
{
MissID[i]=Read24c02(i+71);
}
if(MissID[0]==cTransBuffer[8]&&MissID[1]==cTransBuffer[9]&&MissID[2]==cTransBuffer[10]&&MissID[3]==cTransBuffer[11])
{
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=MissID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
MissID[15]=0;
Write24c02(0,80); //复位掉电标志位
DisplayCard();
delay10ms(1000);
send_byte(CMD_RESET);
break;
}
}
///////////////////第7
if(MissID[16]==1)
{
for(i=0;i<=8;i++)
{
MissID[i]=Read24c02(i+81);
}
if(MissID[0]==cTransBuffer[8]&&MissID[1]==cTransBuffer[9]&&MissID[2]==cTransBuffer[10]&&MissID[3]==cTransBuffer[11])
{
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=MissID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
MissID[16]=0;
Write24c02(0,90); //复位掉电标志位
DisplayCard();
delay10ms(1000);
send_byte(CMD_RESET);
break;
}
}
///////////////////第8
if(MissID[17]==1)
{
for(i=0;i<=8;i++)
{
MissID[i]=Read24c02(i+91);
}
if(MissID[0]==cTransBuffer[8]&&MissID[1]==cTransBuffer[9]&&MissID[2]==cTransBuffer[10]&&MissID[3]==cTransBuffer[11])
{
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=MissID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
MissID[17]=0;
Write24c02(0,100); //复位掉电标志位
DisplayCard();
delay10ms(1000);
send_byte(CMD_RESET);
break;
}
}
///////////////////第9
if(MissID[18]==1)
{
for(i=0;i<=8;i++)
{
MissID[i]=Read24c02(i+101);
}
if(MissID[0]==cTransBuffer[8]&&MissID[1]==cTransBuffer[9]&&MissID[2]==cTransBuffer[10]&&MissID[3]==cTransBuffer[11])
{
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=MissID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
MissID[18]=0;
Write24c02(0,110); //复位掉电标志位
DisplayCard();
delay10ms(1000);
send_byte(CMD_RESET);
break;
}
}
///////////////////第10
if(MissID[19]==1)
{
for(i=0;i<=8;i++)
{
MissID[i]=Read24c02(i+111);
}
if(MissID[0]==cTransBuffer[8]&&MissID[1]==cTransBuffer[9]&&MissID[2]==cTransBuffer[10]&&MissID[3]==cTransBuffer[11])
{
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=MissID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
MissID[19]=0;
Write24c02(0,120); //复位掉电标志位
DisplayCard();
delay10ms(1000);
send_byte(CMD_RESET);
break;
}
}
///////////////// 十组保护写满,不能工作
if(MissIDStop==1)
{
DisplayErrorCard();
delay10ms(4);
P1_4=1; //关继电器
send_byte(CMD_RESET);
continue;
}
}
////////////////////////////////////////////////////
//////////////读卡部分/////////////////////////////
////////////////////////////////////////////////////
for(i=0;i<=8;i++)
{
USERID[i]=0;
}
USERID[0]=cTransBuffer[8]; //4位卡号
USERID[1]=cTransBuffer[9];
USERID[2]=cTransBuffer[10];
USERID[3]=cTransBuffer[11];
money_value=0;
xian=0x00;
money_value=1000*cTransBuffer[13]+100*cTransBuffer[14]+10*cTransBuffer[15]+cTransBuffer[16];
for(i=1;i<=10;i++)
{
money_value=money_value+1000*cTransBuffer[12];
}
if(money_value<1000)
xian=0x07;
else if(money_value>=1000&&money_value<10000)
xian=0x0f;
else xian=0x1f;
//write7279(ACTCTL,xian);
for(i=16;i>=12;i--)
{
money[16-i]=cTransBuffer[i]; //display money of user
write7279(DECODE0+16-i,money[16-i]);
write7279(SEGON,23);
write7279(ACTCTL,xian);
}
//************************************
// 卡余额不足
//************************************
if(money_value<100)
{
delay10ms(10);//新加延时
//memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
//JMY_TRANS(cTransBuffer);
send_byte(CMD_RESET);
P1_4=1;
continue;
}
//把卡清0
for(i=0;i<=8;i++) //赋值卡号
{
ComWriteBlock2[i+16]=USERID[i];
}
memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(WriteBuffer);
/////////////////卡上余额小于5元
if(money_value<500)
write7279(BLINKCTL,0xf8); //设置闪烁
memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
JMY_TRANS(cTransBuffer);
delay10ms(120); ///
send_byte(CMD_RESET);
//点亮0000
for(i=0;i<4;i++)
{
write7279(DECODE0+i,0);
write7279(SEGON,31);
}
/////////////
c=money_value; //卡上的余额
for(i=8;i>=4;i--)
{
USERID[i]=c%10;
c=c/10;
}
g=1;
flag = USED; //设置标志位是有用户状态
P1_4=0; //开继电器(电机启动,电表或传感器开始有计数脉冲发送过来)
clock0_initial(); //计数器0中断初始化
delay10ms(60);
}
else
{
P1_4=1; //关继电器
DisplayErrorCard();
delay10ms(5);
send_byte(CMD_RESET);
continue;
}
}
else if(flag == USED) //判断标志位确定机器状态
{ //判断是否上次的用户卡//是的话 结账
if(cTransBuffer[8]==USERID[0]&&cTransBuffer[9]==USERID[1]&&cTransBuffer[10]==USERID[2]&&cTransBuffer[11]==USERID[3])
{
memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
JMY_TRANS(cTransBuffer);
IE=0x00; //关闭所有中断
//把余额写入USERID中
c=money_value-v; //卡上的余额
for(i=8;i>=4;i--)
{
USERID[i]=c%10;
c=c/10;
}
//把余额写入卡中
for(i=0;i<=8;i++)
{
ComWriteBlock2[i+16]=USERID[i];
}
memcpy(cTransBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
JMY_TRANS(cTransBuffer);
//delay10ms(200);
send_byte(CMD_RESET);
c=money_value-v; //卡上的余额
wei=0x00;
if(c<1000) wei=0x07;
else if(c>=1000&&c<10000) wei=0x0F;
else wei=0x1F;
///显示卡内余额
for(i=0;i<=5;i++)
{
write7279(SEGON,23);
write7279(DECODE0+i,c%10);
write7279(ACTCTL,wei);
c=c/10;
}
if(MissID[10]==0)
{
MissID[10]=0;
Write24c02(0,30); //复位掉电标志位
}
else if(MissID[11]==0)
{
MissID[11]=0;
Write24c02(0,40); //复位掉电标志位
}
else if(MissID[12]==0)
{
MissID[12]=0;
Write24c02(0,50); //复位掉电标志位
}
else if(MissID[13]==0)
{
MissID[13]=0;
Write24c02(0,60); //复位掉电标志位
}
else if(MissID[14]==0)
{
MissID[14]=0;
Write24c02(0,70); //复位掉电标志位
}
else if(MissID[15]==0)
{
MissID[15]=0;
Write24c02(0,80); //复位掉电标志位
}
else if(MissID[16]==0)
{
MissID[16]=0;
Write24c02(0,90); //复位掉电标志位
}
else if(MissID[17]==0)
{
MissID[17]=0;
Write24c02(0,100); //复位掉电标志位
}
else if(MissID[18]==0)
{
MissID[18]=0;
Write24c02(0,110); //复位掉电标志位
}
else if(MissID[19]==0)
{
MissID[19]=0;
Write24c02(0,120); //复位掉电标志位
}
delay10ms(100);
send_byte(CMD_RESET);
flag=NO_USER; //标志位复位为无用户状态
//delay10ms(100);
//延时三分钟再关继电器的定时1中断初始化
clock1_initial();
}
else
{
DisplayErrorCard();
delay10ms(5);
send_byte(CMD_RESET);
continue;
}
}
}
}
}
///////////////////////////////
////////////子函数
//////////////////////////////
///回刷显示子函数
void DisplayCard(void)
{
MissIDFlag=MissID[10]||MissID[11]||MissID[12]||MissID[13]||MissID[14]||MissID[15]||MissID[16]||MissID[17]||MissID[18]||MissID[19];
MissIDStop=MissID[10]&&MissID[11]&&MissID[12]&&MissID[13]&&MissID[14]&&MissID[15]&&MissID[16]&&MissID[17]&&MissID[18]&&MissID[19];
memcpy(WriteBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
JMY_TRANS(WriteBuffer);
//显示余额部分
money_value=0;
xian=0x00;
money_value=1000*MissID[5]+100*MissID[6]+10*MissID[7]+MissID[8];
for(i=1;i<=10;i++)
{
money_value=money_value+1000*MissID[4];
}
if(money_value<1000)
xian=0x07;
else if(money_value>=1000&&money_value<10000)
xian=0x0f;
else xian=0x1f;
for(i=8;i>=4;i--)
{
write7279(DECODE0+8-i,MissID[i]);
write7279(SEGON,23);
write7279(ACTCTL,xian);
}
}
///////////////////////////////////////////
//定时器1中断服务程序
void clock1_int(void) interrupt 3 using 0
{
TH1=0x27; //延时60ms 计数初值
TL1=0xfc;
IE=0x88; //中断允许
TF1=0;
time++;
if(time>18000)
{
P1_4=1; //延时三分钟再关继电器
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -