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

📄 maintest_20050712_6.lst

📁 这是一个读取ID卡的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAINTEST_20050712_6
OBJECT MODULE PLACED IN maintest_20050712_6.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe maintest_20050712_6.c DB OE SMALL ROM(LARGE)

stmt level    source

   1          #include <intrins.h>
   2          #include <ctype.h>
   3          #include <absacc.h>
   4          #include <reg52.h>
   5          #include <stdio.h>
   6          #include <stdlib.h>
   7          #include <string.h>
   8          
   9          
  10          sbit P1_0=P1^0;
  11          sbit P1_1=P1^1;
  12          sbit P1_7=P1^7;
  13          sbit T_CLK = P1^4; /*实时时钟时钟线引脚 */
  14          sbit T_IO = P1^3; /*实时时钟数据线引脚 */
  15          sbit T_RST = P1^2; /*实时时钟复位线引脚 */
  16          sbit ACC0 = ACC^0;
  17          sbit ACC7 = ACC^7;
  18          #define      uchar              unsigned char  
  19          #define      WriteIO(addr,value)     XBYTE[addr]=value
  20          
  21          uchar b[7]={0x10,0x10,0x10,0x10,0x10,0x10,0x10};
  22          uchar CmdBuff[10];
  23          uchar CmdPointer = 0;
  24          uchar RcvCmd = 0;
  25          
  26          //sbit P1_0 = P1^0;
  27          sbit P3_5 = P3^5;
  28          unsigned char count = 0;
  29          unsigned long HeadL = 0;
  30          unsigned char finding = 0, findhead = 0,finded = 0;
  31          unsigned int  cardid[11]={0,0,0,0,0,0,0,0,0,0,0};
  32          unsigned int olddata1,olddata;
  33          unsigned int data1 = 0;
  34          unsigned char pointer = 0;
  35          unsigned char counter = 0;
  36          
  37          unsigned int show = 0,showtimecounter = 0;
  38          unsigned char showflag = 1;
  39          uchar h0,h1,m0,m1;
  40          
  41          
  42          changdata(uchar c)
  43          {    
  44   1              uchar d;
  45   1              switch(c)
  46   1                      {
  47   2                              case 0: d=0Xfc;break;
  48   2                              case 1: d=0X60;break;
  49   2                              case 2: d=0Xda;break;
  50   2                              case 3: d=0Xf2;break;
  51   2                              case 4: d=0X66;break;
  52   2                              case 5: d=0Xb6;break;
  53   2                              case 6: d=0Xbe;break;
  54   2                              case 7: d=0Xe0;break;
  55   2                              case 8: d=0Xfe;break;
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 2   

  56   2                              case 9: d=0Xf6;break;
  57   2                      }
  58   1                      return(d);
  59   1                      
  60   1      }
  61          
  62          
  63          
  64          writetime1(uchar ucTime[],uchar flag)
  65          { 
  66   1              
  67   1      
  68   1               h0=changdata(ucTime[1]>>4);
  69   1               h1=changdata(ucTime[1]&0xF);
  70   1               m0=changdata(ucTime[0]>>4);
  71   1               m1=changdata(ucTime[0]&0xF);
  72   1      
  73   1      
  74   1               if(flag==1)
  75   1                      h1=h1+flag;
  76   1      }
  77          
  78                  
  79          writetime2( )           
  80          {
  81   1      //       WriteIO(0X6000,0X00); 
  82   1                      //P1_7=0;
  83   1              show++;
  84   1              P1_7=1;
  85   1              if(show == 1)
  86   1              {
  87   2                      WriteIO(0X6000,0X00);
  88   2                      
  89   2                      P1_0=0;
  90   2                      P1_1=0;
  91   2                      //WriteIO(0X6000,0X00);
  92   2              WriteIO(0X6000,h0);
  93   2              //for(counter=0;counter<10000;counter++);
  94   2          }
  95   1          else if(show == 2)
  96   1          {
  97   2              WriteIO(0X6000,0X00);
  98   2              
  99   2                      P1_0=1;
 100   2                      P1_1=0;
 101   2                      //WriteIO(0X6000,0X00);
 102   2                      WriteIO(0Xdb00,h1);
 103   2                      //for(counter=0;counter<10000;counter++);
 104   2              }
 105   1              else if(show == 3)
 106   1          {
 107   2                      WriteIO(0X6000,0X00);
 108   2                      
 109   2                      P1_0=0;
 110   2                      P1_1=1;
 111   2                      //WriteIO(0X6000,0X00);
 112   2                      WriteIO(0X6000,m0);
 113   2                      //for(counter=0;counter<10000;counter++);
 114   2              }
 115   1              else
 116   1              {
 117   2                      WriteIO(0X6000,0X00);
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 3   

 118   2                      
 119   2                      P1_0=1;
 120   2                      P1_1=1;
 121   2                      //WriteIO(0X6000,0X00);
 122   2                      WriteIO(0Xda00,m1);
 123   2                      show = 0;
 124   2                      //for(counter=0;counter<10000;counter++);
 125   2           }
 126   1             
 127   1              //WriteIO(0X6000,0X00);
 128   1              P1_7=0;
 129   1                      
 130   1       }
 131          
 132          
 133          /******************************************************************** 
 134          *
 135          * 名称: v_RTInputByte
 136          * 说明: 
 137          * 功能: 往DS1302写入1Byte数据
 138          * 调用:
 139          * 输入: ucDa 写入的数据 
 140          * 返回值: 无
 141          ***********************************************************************/
 142          void v_RTInputByte(uchar ucDa) 
 143          { 
 144   1              uchar i;
 145   1              ACC = ucDa;
 146   1              for(i=8; i>0; i--)
 147   1              {
 148   2                      T_IO = ACC0; /*相当于汇编中的 RRC */ 
 149   2                      T_CLK = 1;
 150   2                      T_CLK = 0;
 151   2                      ACC = ACC >> 1; 
 152   2              } 
 153   1      }
 154          /******************************************************************** 
 155          *
 156          * 名称: uchar uc_RTOutputByte
 157          * 说明: 
 158          * 功能: 从DS1302读取1Byte数据
 159          * 调用: 
 160          * 输入: 
 161          * 返回值: ACC
 162          ***********************************************************************/
 163          uchar uc_RTOutputByte(void) 
 164          { 
 165   1              uchar i;
 166   1              for(i=8; i>0; i--)
 167   1              {
 168   2                      ACC = ACC >>1; /*相当于汇编中的 RRC */
 169   2                      ACC7 = T_IO;
 170   2                      T_CLK = 1;
 171   2                      T_CLK = 0;
 172   2              } 
 173   1              return(ACC); 
 174   1      }
 175          /******************************************************************** 
 176          *
 177          * 名称: v_W1302
 178          * 说明: 先写地址,后写命令/数据
 179          * 功能: 往DS1302写入数据
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 4   

 180          * 调用: v_RTInputByte() 
 181          * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
 182          * 返回值: 无
 183          ***********************************************************************/
 184          void v_W1302(uchar ucAddr, uchar ucDa)
 185          {
 186   1              T_RST = 0;
 187   1              T_CLK = 0;
 188   1              T_RST = 1;
 189   1              v_RTInputByte(ucAddr); /* 地址,命令 */
 190   1              v_RTInputByte(ucDa); /* 写1Byte数据*/
 191   1              T_CLK = 1;
 192   1              T_RST =0;
 193   1      } 
 194          /******************************************************************** 
 195          *
 196          * 名称: uc_R1302
 197          * 说明: 先写地址,后读命令/数据
 198          * 功能: 读取DS1302某地址的数据
 199          * 调用: v_RTInputByte() , uc_RTOutputByte()
 200          * 输入: ucAddr: DS1302地址
 201          * 返回值: ucDa :读取的数据
 202          ***********************************************************************/
 203          uchar uc_R1302(uchar ucAddr)
 204          {
 205   1              uchar ucDa;
 206   1              T_RST = 0;
 207   1              T_CLK = 0;
 208   1              T_RST = 1;
 209   1              v_RTInputByte(ucAddr); /* 地址,命令 */
 210   1              ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
 211   1              T_CLK = 1;
 212   1              T_RST =0;
 213   1              return(ucDa);
 214   1      }
 215          
 216          /******************************************************************** 
 217          *
 218          * 名称: v_BurstW1302T
 219          * 说明: 先写地址,后写数据(时钟多字节方式)
 220          * 功能: 往DS1302写入时钟数据(多字节方式)
 221          * 调用: v_RTInputByte() 
 222          * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 223          * 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
 224          * 返回值: 无
 225          ***********************************************************************/
 226          /*
 227          void v_BurstW1302T(uchar *pSecDa)
 228          {
 229                  uchar i;
 230                  v_W1302(0x8e,0x00); // 控制命令,WP=0,写操作?
 231                  T_RST = 0;
 232                  T_CLK = 0;
 233                  T_RST = 1;
 234                  v_RTInputByte(0xbe); // 0xbe:时钟多字节写命令 
 235                  for (i=8;i>0;i--) //8Byte = 7Byte 时钟数据 + 1Byte 控制
 236                  {
 237                          v_RTInputByte(*pSecDa);// 写1Byte数据
 238                          pSecDa++;
 239                  }
 240                  T_CLK = 1;
 241                  T_RST =0;
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 5   

 242          } 
 243          */
 244          /******************************************************************** 
 245          *
 246          * 名称: v_BurstR1302T
 247          * 说明: 先写地址,后读命令/数据(时钟多字节方式)
 248          * 功能: 读取DS1302时钟数据
 249          * 调用: v_RTInputByte() , uc_RTOutputByte()
 250          * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 
 251          * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
 252          * 返回值: ucDa :读取的数据
 253          ***********************************************************************/
 254          /*
 255          void v_BurstR1302T(uchar *pSecDa)
 256          {
 257                  uchar i;
 258                  T_RST = 0;
 259                  T_CLK = 0;
 260                  T_RST = 1;
 261                  v_RTInputByte(0xbf); // 0xbf:时钟多字节读命令 
 262                  for (i=8; i>0; i--) 
 263                  {
 264                          *pSecDa = uc_RTOutputByte(); // 读1Byte数据 
 265                          pSecDa++;
 266                  }
 267                  T_CLK = 1;
 268                  T_RST =0;
 269          }
 270          */
 271          /******************************************************************** 
 272          *
 273          * 名称: v_BurstW1302R
 274          * 说明: 先写地址,后写数据(寄存器多字节方式)
 275          * 功能: 往DS1302寄存器数写入数据(多字节方式)
 276          * 调用: v_RTInputByte() 
 277          * 输入: pReDa: 寄存器数据地址
 278          * 返回值: 无
 279          ***********************************************************************/
 280          /*
 281          void v_BurstW1302R(uchar *pReDa)
 282          {
 283                  uchar i;
 284                  v_W1302(0x8e,0x00); // 控制命令,WP=0,写操作?
 285                  T_RST = 0;
 286                  T_CLK = 0;
 287                  T_RST = 1;
 288                  v_RTInputByte(0xfe); // 0xbe:时钟多字节写命令 
 289                  for (i=31;i>0;i--) //31Byte 寄存器数据 
 290                  {
 291                          v_RTInputByte(*pReDa); // 写1Byte数据
 292                          pReDa++;
 293                  }
 294                  T_CLK = 1;
 295                  T_RST =0;
 296          } 
 297          */
 298          /******************************************************************** 
 299          *
 300          * 名称: uc_BurstR1302R
 301          * 说明: 先写地址,后读命令/数据(寄存器多字节方式)
 302          * 功能: 读取DS1302寄存器数据
 303          * 调用: v_RTInputByte() , uc_RTOutputByte()
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 6   

 304          * 输入: pReDa: 寄存器数据地址
 305          * 返回值: 无
 306          ***********************************************************************/
 307          /*
 308          void v_BurstR1302R(uchar *pReDa)
 309          {
 310                  uchar i;
 311                  T_RST = 0;
 312                  T_CLK = 0;
 313                  T_RST = 1;
 314                  v_RTInputByte(0xff); // 0xbf:时钟多字节读命令 
 315                  for (i=31; i>0; i--) //31Byte 寄存器数据 
 316                  {
 317                          *pReDa = uc_RTOutputByte(); // 读1Byte数据 

⌨️ 快捷键说明

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