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

📄 xiugai.c

📁 此程序为非接触式IC的读写程序
💻 C
📖 第 1 页 / 共 3 页
字号:
                 {
                 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 + -