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

📄 xiugai.lst

📁 此程序为非接触式IC的读写程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 617   6      ///////////////// 十组保护写满,不能工作
 618   6                      if(MissIDStop==1)
 619   6                      {
 620   7                       DisplayErrorCard();
 621   7                       delay10ms(4);
 622   7                       P1_4=1;   //关继电器
 623   7                       send_byte(CMD_RESET);
 624   7                       continue;
 625   7                      }
 626   6                     }
 627   5      ////////////////////////////////////////////////////
 628   5      //////////////读卡部分/////////////////////////////
 629   5      ////////////////////////////////////////////////////
 630   5      
 631   5                      for(i=0;i<=8;i++)
 632   5                      {
 633   6                        USERID[i]=0;
 634   6                      }
 635   5                      USERID[0]=cTransBuffer[8];        //4位卡号
 636   5                      USERID[1]=cTransBuffer[9];
 637   5                      USERID[2]=cTransBuffer[10];
 638   5                      USERID[3]=cTransBuffer[11];
 639   5      
 640   5      
 641   5                      money_value=0;
 642   5                      xian=0x00;
 643   5                      money_value=1000*cTransBuffer[13]+100*cTransBuffer[14]+10*cTransBuffer[15]+cTransBuffer[16
             -];
 644   5                      for(i=1;i<=10;i++)
 645   5                      {
 646   6                           money_value=money_value+1000*cTransBuffer[12];
 647   6                      }
 648   5      
 649   5                      if(money_value<1000)
 650   5                      xian=0x07;
 651   5                      else if(money_value>=1000&&money_value<10000)
 652   5                      xian=0x0f;
 653   5                      else xian=0x1f;
 654   5                      //write7279(ACTCTL,xian);
 655   5                      for(i=16;i>=12;i--)
 656   5                       {
 657   6                        money[16-i]=cTransBuffer[i];          //display money of user
 658   6                        write7279(DECODE0+16-i,money[16-i]);
 659   6                        write7279(SEGON,23);
 660   6                        write7279(ACTCTL,xian);
 661   6                        }
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 12  

 662   5      //************************************
 663   5      //              卡余额不足
 664   5      //************************************
 665   5                      if(money_value<100)
 666   5                      {
 667   6      
 668   6                       delay10ms(10);//新加延时
 669   6                      //memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
 670   6                      //JMY_TRANS(cTransBuffer);
 671   6                      send_byte(CMD_RESET);
 672   6                      P1_4=1;
 673   6                      continue;
 674   6                      }
 675   5                      //把卡清0
 676   5                      for(i=0;i<=8;i++)    //赋值卡号
 677   5                      {
 678   6                       ComWriteBlock2[i+16]=USERID[i];
 679   6                      }
 680   5                      memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
 681   5                      JMY_TRANS(WriteBuffer);
 682   5      
 683   5      
 684   5      /////////////////卡上余额小于5元
 685   5                      if(money_value<500)
 686   5                      write7279(BLINKCTL,0xf8); //设置闪烁
 687   5                      memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
 688   5                      JMY_TRANS(cTransBuffer);
 689   5                      delay10ms(120);  ///
 690   5                      send_byte(CMD_RESET);
 691   5                      //点亮0000
 692   5                      for(i=0;i<4;i++)
 693   5                       {
 694   6                        write7279(DECODE0+i,0);
 695   6                        write7279(SEGON,31);
 696   6                       }
 697   5                       /////////////
 698   5                       c=money_value;      //卡上的余额
 699   5                       for(i=8;i>=4;i--)
 700   5                       {
 701   6                       USERID[i]=c%10;
 702   6                       c=c/10;
 703   6                       }
 704   5                       g=1;                
 705   5      
 706   5                     flag = USED;   //设置标志位是有用户状态
 707   5                     P1_4=0;    //开继电器(电机启动,电表或传感器开始有计数脉冲发送过来)
 708   5                     clock0_initial();        //计数器0中断初始化
 709   5                     delay10ms(60);
 710   5      
 711   5      
 712   5                  }
 713   4      
 714   4      
 715   4              else
 716   4                 {
 717   5                   P1_4=1;   //关继电器
 718   5                   DisplayErrorCard();
 719   5                   delay10ms(5);
 720   5                   send_byte(CMD_RESET);
 721   5                   continue;
 722   5                 }
 723   4              }
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 13  

 724   3      
 725   3      
 726   3              else if(flag == USED)        //判断标志位确定机器状态
 727   3              {     //判断是否上次的用户卡//是的话 结账
 728   4                 if(cTransBuffer[8]==USERID[0]&&cTransBuffer[9]==USERID[1]&&cTransBuffer[10]==USERID[2]&&cTransB
             -uffer[11]==USERID[3])
 729   4                    {
 730   5                      memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
 731   5                      JMY_TRANS(cTransBuffer);
 732   5                      IE=0x00;   //关闭所有中断
 733   5      
 734   5                     //把余额写入USERID中
 735   5                     c=money_value-v;      //卡上的余额
 736   5                     for(i=8;i>=4;i--)
 737   5                     {
 738   6                      USERID[i]=c%10;
 739   6                      c=c/10;
 740   6                     }
 741   5                     //把余额写入卡中
 742   5                     for(i=0;i<=8;i++)
 743   5                     {
 744   6                       ComWriteBlock2[i+16]=USERID[i];
 745   6                     }
 746   5                      memcpy(cTransBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
 747   5                      JMY_TRANS(cTransBuffer);
 748   5      
 749   5                      //delay10ms(200);
 750   5                      send_byte(CMD_RESET);
 751   5                      c=money_value-v;      //卡上的余额
 752   5                      wei=0x00;
 753   5                      if(c<1000) wei=0x07;
 754   5                      else if(c>=1000&&c<10000) wei=0x0F;
 755   5                      else wei=0x1F;
 756   5                     ///显示卡内余额
 757   5                      for(i=0;i<=5;i++)
 758   5                     {
 759   6                      write7279(SEGON,23);
 760   6                      write7279(DECODE0+i,c%10);
 761   6                      write7279(ACTCTL,wei);
 762   6                      c=c/10;
 763   6                     }
 764   5                     if(MissID[10]==0)
 765   5                     {
 766   6                       MissID[10]=0;
 767   6                       Write24c02(0,30); //复位掉电标志位
 768   6                     }
 769   5                     else if(MissID[11]==0)
 770   5                     {
 771   6                       MissID[11]=0;
 772   6                       Write24c02(0,40); //复位掉电标志位
 773   6                     }
 774   5                     else if(MissID[12]==0)
 775   5                     {
 776   6                       MissID[12]=0;
 777   6                       Write24c02(0,50); //复位掉电标志位
 778   6                     }
 779   5                     else if(MissID[13]==0)
 780   5                     {
 781   6                       MissID[13]=0;
 782   6                       Write24c02(0,60); //复位掉电标志位
 783   6                     }
 784   5                     else if(MissID[14]==0)
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 14  

 785   5                     {
 786   6                       MissID[14]=0;
 787   6                       Write24c02(0,70); //复位掉电标志位
 788   6                     }
 789   5                     else if(MissID[15]==0)
 790   5                     {
 791   6                       MissID[15]=0;
 792   6                       Write24c02(0,80); //复位掉电标志位
 793   6                     }
 794   5                     else if(MissID[16]==0)
 795   5                     {
 796   6                       MissID[16]=0;
 797   6                       Write24c02(0,90); //复位掉电标志位
 798   6                     }
 799   5                     else if(MissID[17]==0)
 800   5                     {
 801   6                       MissID[17]=0;
 802   6                       Write24c02(0,100); //复位掉电标志位
 803   6                     }
 804   5                     else if(MissID[18]==0)
 805   5                     {
 806   6                       MissID[18]=0;
 807   6                       Write24c02(0,110); //复位掉电标志位
 808   6                     }
 809   5                     else if(MissID[19]==0)
 810   5                     {
 811   6                       MissID[19]=0;
 812   6                       Write24c02(0,120); //复位掉电标志位
 813   6                     }
 814   5      
 815   5                      delay10ms(100);
 816   5                      send_byte(CMD_RESET);
 817   5                      flag=NO_USER;      //标志位复位为无用户状态
 818   5                      //delay10ms(100);
 819   5                      //延时三分钟再关继电器的定时1中断初始化
 820   5                      clock1_initial();
 821   5                    }
 822   4      
 823   4                  else
 824   4                    {
 825   5                         DisplayErrorCard();
 826   5                         delay10ms(5);
 827   5                         send_byte(CMD_RESET);
 828   5                         continue;
 829   5                    }
 830   4               }
 831   3          }
 832   2         }
 833   1      }
 834          
 835          ///////////////////////////////
 836          ////////////子函数
 837          //////////////////////////////
 838          ///回刷显示子函数
 839          void DisplayCard(void)
 840          {
 841   1          MissIDFlag=MissID[10]||MissID[11]||MissID[12]||MissID[13]||MissID[14]||MissID[15]||MissID[16]||MissID[
             -17]||MissID[18]||MissID[19];
 842   1          MissIDStop=MissID[10]&&MissID[11]&&MissID[12]&&MissID[13]&&MissID[14]&&MissID[15]&&MissID[16]&&MissID[
             -17]&&MissID[18]&&MissID[19];
 843   1          memcpy(WriteBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
 844   1          JMY_TRANS(WriteBuffer);
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 15  

 845   1          //显示余额部分
 846   1          money_value=0;
 847   1          xian=0x00;
 848   1          money_value=1000*MissID[5]+100*MissID[6]+10*MissID[7]+MissID[8];
 849   1          for(i=1;i<=10;i++)
 850   1          {
 851   2              money_value=money_value+1000*MissID[4];
 852   2          }
 853   1          if(money_value<1000)
 854   1          xian=0x07;
 855   1          else if(money_value>=1000&&money_value<10000)
 856   1          xian=0x0f;
 857   1          else xian=0x1f;
 858   1          for(i=8;i>=4;i--)
 859   1          {
 860   2             write7279(DECODE0+8-i,MissID[i]);
 861   2             write7279(SEGON,23);
 862   2             write7279(ACTCTL,xian);
 863   2          }
 864   1      
 865   1       }
 866          ///////////////////////////////////////////
 867          
 868          //定时器1中断服务程序
 869          void clock1_int(void) interrupt 3 using 0
 870          {
 871   1           TH1=0x27;                //延时60ms 计数初值
 872   1           TL1=0xfc;
 873   1           IE=0x88;                 //中断允许
 874   1           TF1=0;
 875   1           time++;
 876   1           if(time>18000)
 877   1           {
 878   2            P1_4=1;   //延时三分钟再关继电器
 879   2           }
 880   1      }
 881          
 882          //计数器0中断服务程序
 883          void clock_int(void) interrupt 1 using 0
 884          {
 885   1           TH0=0xff;               //设置的计数初值(65506),每?个外部脉冲溢出
 886   1           TL0=0xfa;
 887   1           IE=0x82;
 888   1           TF0=0;
 889   1           /*for(i=0;i<=3;i++)
 890   1            {
 891   1            water[i]=Read24c02(i);
 892   1            }*/
 893   1           waterperkwh=water[3]+10*water[2]+100*water[1]+1000*water[0];  //来一个中断时水的增加量
 894   1      
 895   1           //P1_7=0;                             //P1-7口接了继电器
 896   1      
 897   1           water_value=water_value+waterperkwh;
 898   1           b=water_value;
 899   1          //judge xiaoying wei
 900   1          if(b<10000) wei=0x0F;
 901   1          else if(b>=10000&&b<100000) wei=0x1F;
 902   1          else if(b>=100000&&b<1000000) wei=0x3F;
 903   1          else if(b>=1000000&&b<10000000) wei=0x7F;
 904   1          else if(b>=10000000&&b<100000000) wei=0xFF;
 905   1           for(i=0;i<=7;i++)
 906   1           {
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 16  

 907   2           write7279(SEGON,31);
 908   2           write7279(DECODE0+i,b%10);
 909   2           write7279(ACTCTL,wei);
 910   2           b=b/10;
 911   2           }
 912   1           //减钱
 913   1            moneypkh[0]=Read24c02(4);
 914   1            moneypkh[1]=Read24c02(5);
 915   1            moneyperkwh=10*moneypkh[0]+moneypkh[1];
 916   1            money_value=money_value-moneyperkwh;
 917   1            f++;
 918   1            //c=money_value;
 919   1            //wei=0x00;
 920   1            //if(c<1000) wei=0x07;
 921   1            //else if(c>=1000&&c<10000) wei=0x0F;
 922   1            //else wei=0x1F;
 923   1            //把余额写入USERID中
 924   1            c=money_value-v;      //卡上的余额
 925   1            for(i=8;i>=4;i--)
 926   1            {
 927   2             USERID[i]=c%10;
 928   2             c=c/10;
 929   2            }
 930   1      
 931   1      

⌨️ 快捷键说明

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