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

📄 xiugai.lst

📁 此程序为非接触式IC的读写程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE XIUGAI
OBJECT MODULE PLACED IN D:\1.2\XIUGAI.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\1.2\XIUGAI.C DB SB OE

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #include <string.h>
   4          #define uchar unsigned char
   5          #define ulong unsigned long
   6          #define uint unsigned int
   7          #define WriteDeviceAddress 0xae    //define 21C02 Read address in IIC
   8          #define ReadDviceAddress 0xaf       //define 21C02 Write address in IIC
   9          #define READ_JMY5xx     0xA1       //define IC Card Read address in IIC
  10          #define WRITE_JMY5xx    0xA0       //define IC Card Write address in IIC
  11          #define SUCCESS 0
  12          #define NO_USER 0                  //机器初始为无用户处于等待状态
  13          #define USED    1                  //有卡且为用户卡,机器的有用户状态
  14          
  15          
  16          //***HD7279A指令******
  17          #define CMD_RESET 0xa4
  18          #define DECODE0 0x80
  19          #define DECODE1 0xc8
  20          #define CMD_READ 0x15
  21          #define RTL_CYCLE 0xa3
  22          #define RTR_CYCLE 0xa2
  23          #define RTL_UNCYL 0xa1
  24          #define RTR_UNCYL 0xa0
  25          #define ACTCTL 0x98
  26          #define SEGON 0xe0
  27          #define SEGOFF 0xc0
  28          #define BLINKCTL 0x88
  29          
  30          
  31          
  32          
  33          //*变量及I/O口定义*
  34          
  35          sbit cs=P1^2;
  36          sbit clk=P1^1;
  37          sbit dat=P1^0;
  38          sbit key=P3^3;
  39          sbit SCL=P1^5;
  40          sbit SDA=P1^6;
  41          sbit P1_4=P1^4;               //控制继电器
  42          sbit P3_2=P3^2;               //RF模块自动寻卡时候的选通信号
  43          
  44          bit flag = NO_USER;           //机器初始状态标志位(无用户)
  45          uchar code ComReadBlock2[]={0x0a,0x21,0x00,0x02,0xff,0xff,0xff,0xff,0xff,0xff}; //Read Block2;
  46          uchar idata ComWriteBlock2[25] = {0x1a,0x22,0x00,0x02,0xff,0xff, 0xff, 0xff, 0xff,0xff,
  47                                                           0,2,0,5,4,6};
  48          
  49          uchar code FengM[]  = {0x03, 0x14, 0x2F} ;
  50          uchar idata money[5];
  51          uchar idata water[4];
  52          uchar idata USERID[9];                          //存储当前用户4位卡号及5位卡内余额
  53          uchar idata moneypkh[2];
  54          uchar idata Key[6];
  55          
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 2   

  56          uchar idata WriteBuffer[30];
  57          uchar idata MissID[20];//掉电的卡号 //注意:MISSID[9]和MISSID[19]分别为掉电标志位
  58          bit MissIDFlag;        //设立一个总的掉电标志位,有掉电则为真,无掉电为假
  59          bit MissIDStop; //当五组掉电写满时,机器不能运行
  60          
  61          uchar i,k,xian,wei;
  62          uint g;
  63          uint j;
  64          ulong water_value;
  65          uint waterperkwh;
  66          uint moneyperkwh;
  67          ulong b;
  68          ulong time;                                       //三分钟延时的计数标志
  69          ulong v;
  70          ulong f;        //掉电写ram的时间标志
  71          signed long money_value;                           //卡上的余额
  72          signed long c;                                     //
  73          
  74          
  75          void long_delay(void);                             //长延时
  76          void short_delay(void);                            //短暂延时
  77          void delay10ms(uchar);                             //延时十秒
  78          void write7279(uchar,uchar);                       //写入到HD7279
  79          void send_byte(uchar);                             //发送一个字节
  80          void DisplayErrorCard(void);                       //display error card
  81          void Write24c02(uchar ch,uchar address);           //write data into 24c02
  82          uchar Read24c02(uchar address);                     //read data from 24c02
  83          uchar receive_byte(void);                          //接收一个字节
  84          uchar JMY_TRANS(uchar idata *cTransceiveData);     //
  85          void DisplayCard(void);
  86          
  87          //初始化计数器0**中断初始化
  88          void clock0_initial() reentrant using 0  //初始化计数器0
  89          {
  90   1           TR0=0;
  91   1           TMOD=0x05;              //设置计数器0工作在计数状态,模式1
  92   1           TCON=0x00;
  93   1           TH0=0xff;               //设置的计数初值(65506),每30个外部脉冲溢出
  94   1           TL0=0xfa;
  95   1           IE=0x82;                //打开计数器0中断允许,开启中断
  96   1           TR0=1;                  //启动计数器0
  97   1           water_value=0;          //每次用户使完后在下一个用户进入中断钱,水值清0
  98   1           PT0=1;                  //定时/计数器0高优先级
  99   1      }
 100          
 101          //初始化定时器1
 102          void clock1_initial() reentrant using 0  //初始化定时器1
 103          {
 104   1           TMOD=0x01;               //设置定时器1工作在定时状态,模式1
 105   1           TCON=0x00;
 106   1           TH1=0x27;                //延时60ms
 107   1           TL1=0xfc;
 108   1           IE=0x88;                 //中断允许
 109   1           TR1=1;                   //启动定时器1
 110   1           time=0;
 111   1      }
 112          
 113          
 114          //*****主函数
 115          void main()
 116          {
 117   1           uchar idata cTransBuffer[30];
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 3   

 118   1           //uchar idata WriteBuffer[30];
 119   1           //uchar idata MissID[20];//掉电的卡号 //注意:MISSID[9]和MISSID[19]分别为掉电标志位
 120   1           //bit MissIDFlag;        //设立一个总的掉电标志位,有掉电则为真,无掉电为假
 121   1           //bit MissIDStop; //当五组掉电写满时,机器不能运行
 122   1           time=0;
 123   1           f=0;
 124   1           g=0;
 125   1           send_byte(CMD_RESET);
 126   1           water_value=0;
 127   1           P1_4=1;   //关继电器
 128   1           v=10*Read24c02(4)+Read24c02(5);   //xx度电需要扣的钱数
 129   1           for(i=0;i<=5;i++)
 130   1           {
 131   2             Key[i]=Read24c02(i+6);     //读用户卡密码
 132   2           }
 133   1           for(i=0;i<=3;i++)
 134   1            {
 135   2            water[i]=Read24c02(i);      //读水
 136   2            }
 137   1            //读掉电标志位
 138   1            MissID[10]=Read24c02(30);
 139   1            MissID[11]=Read24c02(40);
 140   1            MissID[12]=Read24c02(50);
 141   1            MissID[13]=Read24c02(60);
 142   1            MissID[14]=Read24c02(70);
 143   1            MissID[15]=Read24c02(80);
 144   1            MissID[16]=Read24c02(90);
 145   1            MissID[17]=Read24c02(100);
 146   1            MissID[18]=Read24c02(110);
 147   1            MissID[19]=Read24c02(120);
 148   1            ///
 149   1           MissIDFlag=MissID[10]||MissID[11]||MissID[12]||MissID[13]||MissID[14]||MissID[15]||MissID[16]||MissID
             -[17]||MissID[18]||MissID[19];
 150   1           MissIDStop=MissID[10]&&MissID[11]&&MissID[12]&&MissID[13]&&MissID[14]&&MissID[15]&&MissID[16]&&MissID
             -[17]&&MissID[18]&&MissID[19];
 151   1      ////////////////////////////////////////////
 152   1         while(1)
 153   1         {
 154   2      /////第一组
 155   2          if(MissID[10]==0)
 156   2          {
 157   3           if(f==2||g==1)
 158   3           {
 159   4            f=0;
 160   4            g=0;
 161   4            for(i=0;i<=8;i++)
 162   4      
 163   4            {
 164   5             Write24c02(USERID[i],i+21);
 165   5            }
 166   4            Write24c02(1,30); //掉电标志位有掉电则为1
 167   4           }
 168   3          }
 169   2      /////第二组
 170   2          else if(MissID[11]==0)
 171   2          {
 172   3           if(f==2||g==1)
 173   3           {
 174   4            f=0;
 175   4            g=0;
 176   4            for(i=0;i<=8;i++)
 177   4            {
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 4   

 178   5             Write24c02(USERID[i],i+31);
 179   5            }
 180   4            Write24c02(1,40); //掉电标志位有掉电则为1
 181   4           }
 182   3          }
 183   2      /////第三组
 184   2          else if(MissID[12]==0)
 185   2          {
 186   3           if(f==2||g==1)
 187   3           {
 188   4            f=0;
 189   4            g=0;
 190   4            for(i=0;i<=8;i++)
 191   4            {
 192   5             Write24c02(USERID[i],i+41);
 193   5            }
 194   4            Write24c02(1,50); //掉电标志位有掉电则为1
 195   4           }
 196   3          }
 197   2      //////第四组
 198   2          else if(MissID[13]==0)
 199   2          {
 200   3           if(f==2||g==1)
 201   3           {
 202   4            f=0;
 203   4            g=0;
 204   4            for(i=0;i<=8;i++)
 205   4            {
 206   5             Write24c02(USERID[i],i+51);
 207   5            }
 208   4            Write24c02(1,60); //掉电标志位有掉电则为1
 209   4           }
 210   3          }
 211   2      /////第五组
 212   2          else if(MissID[14]==0)
 213   2          {
 214   3           if(f==2||g==1)
 215   3           {
 216   4            f=0;
 217   4            g=0;
 218   4            for(i=0;i<=8;i++)
 219   4            {
 220   5             Write24c02(USERID[i],i+61);
 221   5            }
 222   4            Write24c02(1,70); //掉电标志位有掉电则为1
 223   4           }
 224   3          }
 225   2      /////第6
 226   2          else if(MissID[15]==0)
 227   2          {
 228   3           if(f==2||g==1)
 229   3           {
 230   4            f=0;
 231   4            g=0;
 232   4            for(i=0;i<=8;i++)
 233   4            {
 234   5             Write24c02(USERID[i],i+71);
 235   5            }
 236   4            Write24c02(1,80); //掉电标志位有掉电则为1
 237   4           }
 238   3          }
 239   2      /////第7
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 5   

 240   2          else if(MissID[16]==0)
 241   2          {
 242   3           if(f==2||g==1)
 243   3           {
 244   4            f=0;
 245   4            g=0;
 246   4            for(i=0;i<=8;i++)
 247   4            {
 248   5             Write24c02(USERID[i],i+81);
 249   5            }
 250   4            Write24c02(1,90); //掉电标志位有掉电则为1
 251   4           }
 252   3          }
 253   2      /////第8
 254   2          else if(MissID[17]==0)
 255   2          {
 256   3           if(f==2||g==1)
 257   3           {
 258   4            f=0;
 259   4            g=0;
 260   4            for(i=0;i<=8;i++)
 261   4            {
 262   5             Write24c02(USERID[i],i+91);
 263   5            }
 264   4            Write24c02(1,100); //掉电标志位有掉电则为1
 265   4           }
 266   3          }
 267   2      /////第9
 268   2          else if(MissID[18]==0)
 269   2          {
 270   3           if(f==2||g==1)
 271   3           {
 272   4            f=0;
 273   4            g=0;
 274   4            for(i=0;i<=8;i++)
 275   4            {
 276   5             Write24c02(USERID[i],i+101);
 277   5            }
 278   4            Write24c02(1,110); //掉电标志位有掉电则为1
 279   4           }
 280   3          }
 281   2      /////第10
 282   2          else if(MissID[19]==0)
 283   2          {
 284   3           if(f==2||g==1)
 285   3           {
 286   4            f=0;
 287   4            g=0;
 288   4            for(i=0;i<=8;i++)
 289   4            {
 290   5             Write24c02(USERID[i],i+111);
 291   5            }
 292   4            Write24c02(1,120); //掉电标志位有掉电则为1
 293   4           }
 294   3          }
 295   2      ///////////////////////////////////////////////
 296   2      
 297   2          if(flag==NO_USER&&time>18000)
 298   2          {
 299   3          ET1=0;            //关闭定时器1中断
 300   3          time=0;
 301   3          memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
C51 COMPILER V7.50   XIUGAI                                                                11/27/2006 17:18:35 PAGE 6   

 302   3          JMY_TRANS(cTransBuffer);
 303   3          P1_4=1;   //关继电器
 304   3          }
 305   2          if(flag==USED)
 306   2          {
 307   3              if(money_value<0)
 308   3              {

⌨️ 快捷键说明

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