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

📄 main.lst

📁 这是一个读取ID卡的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAIN                                                                  08/05/2005 21:41:52 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe main.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_6=P1^6;
  13          sbit P1_7=P1^7;
  14          sbit P3_4=P3^4;
  15          sbit P3_3=P3^3;
  16          sbit T_CLK = P1^4; /*实时时钟时钟线引脚 */
  17          sbit T_IO = P1^3; /*实时时钟数据线引脚 */
  18          sbit T_RST = P1^2; /*实时时钟复位线引脚 */
  19          sbit ACC0 = ACC^0;
  20          sbit ACC7 = ACC^7;
  21          #define      uchar              unsigned char  
  22          #define      WriteIO(addr,value)     XBYTE[addr]=value
  23          #define          STORAGE_LEN  65536
  24          
  25          uchar b[7]={0x10,0x10,0x10,0x10,0x10,0x10,0x10};
  26          uchar CmdBuff[10];
  27          uchar CmdPointer = 0;
  28          uchar RcvCmd = 0;
  29          unsigned int g_UartFlag = 0x4FFF;
  30          
  31          //sbit P1_0 = P1^0;
  32          sbit P3_5 = P3^5;
  33          unsigned char count = 0;
  34          unsigned long HeadL = 0;
  35          unsigned char finding = 0, findhead = 0,finded = 0;
  36          unsigned int  cardid[11]={0,0,0,0,0,0,0,0,0,0,0};
  37          unsigned int data1 = 0;
  38          unsigned char pointer = 0;
  39          unsigned char counter = 0;
  40          
  41          unsigned int show = 0,showtimecounter = 0;
  42          unsigned char showflag = 1;
  43          uchar h0,h1,m0,m1;
  44          unsigned long g_ReadAddr = STORAGE_LEN - 8,g_WriteAddr = 0;
  45          
  46          
  47          
  48          void Uart_Send(unsigned char data1)     
  49          {       
  50   1              SBUF = data1;
  51   1              while(!TI);     
  52   1              TI = 0;
  53   1      }       
  54          
  55          /********************************************
C51 COMPILER V7.06   MAIN                                                                  08/05/2005 21:41:52 PAGE 2   

  56          * flash 读
  57          *********************************************/
  58          uchar Flash_Byte_Read( unsigned int byteaddr )
  59          {
  60   1              uchar value;
  61   1              P1_7 = 0;
  62   1              value = XBYTE[byteaddr];
  63   1              P1_7 = 1;
  64   1              return value;
  65   1      }
  66          
  67          /********************************************
  68          * flash 擦除
  69          *********************************************/
  70          void Flash_Sec_Erase( unsigned int secaddr )
  71          {
  72   1              uchar temp1, temp2;
  73   1              
  74   1              EA = 0;
  75   1              P1_7 = 0;
  76   1              WriteIO( 0x5555 , 0xAA );
  77   1              WriteIO( 0x2AAA , 0x55 );
  78   1              WriteIO( 0x5555 , 0x80 );
  79   1              WriteIO( 0x5555 , 0xAA );
  80   1              WriteIO( 0x2AAA , 0x55 );
  81   1              WriteIO( secaddr ,0x30 );
  82   1              P1_7 = 1;
  83   1              EA = 1;
  84   1              
  85   1              do
  86   1              {
  87   2                      temp1 = Flash_Byte_Read( secaddr );
  88   2                      temp2 = Flash_Byte_Read( secaddr );
  89   2              }
  90   1              while( (temp1 & 0x40) != (temp2 & 0x40) );
  91   1              /*
  92   1              for( temp2 = 0 ; temp2 < 100 ; temp2 ++ )
  93   1              {
  94   1                      _nop_( );
  95   1              }
  96   1              */
  97   1      }
  98          
  99          
 100          /********************************************
 101          * flash 写
 102          *********************************************/
 103          void Flash_Byte_Program( unsigned int byteaddr , uchar value )
 104          {
 105   1              uchar temp1;
 106   1              uchar temp2;
 107   1      
 108   1              EA = 0;
 109   1              P1_7 = 0;
 110   1              WriteIO( 0x5555 , 0xAA );
 111   1              WriteIO( 0x2AAA , 0x55 );
 112   1              WriteIO( 0x5555 , 0xA0 );
 113   1              WriteIO( byteaddr , value );
 114   1              P1_7 = 1;
 115   1              EA = 1;
 116   1              //*
 117   1              do
C51 COMPILER V7.06   MAIN                                                                  08/05/2005 21:41:52 PAGE 3   

 118   1              {
 119   2                      temp1 = Flash_Byte_Read( byteaddr );
 120   2                      temp2 = Flash_Byte_Read( byteaddr );
 121   2              }
 122   1              while( (temp1 & 0x40) != (temp2 & 0x40) );
 123   1              //*/    
 124   1              
 125   1      /*
 126   1              
 127   1              do
 128   1              {
 129   1                      temp1 = Flash_Byte_Read( byteaddr );
 130   1              }while( !(temp1 & 0x80) );
 131   1      //*/    
 132   1      /*      
 133   1              for( temp2 = 0 ; temp2 < 5 ; temp2 ++ )
 134   1              {
 135   1                      _nop_( );
 136   1              }
 137   1      */      
 138   1      //*/
 139   1      }
 140          
 141          
 142          
 143          /********************************************
 144          * 读取一条记录
 145          *********************************************/
 146          void Get_Record( unsigned int startaddr , unsigned char *record )
 147          {
 148   1              uchar i = 0;
 149   1      
 150   1              startaddr += 8192; //0-8K用于和程序空间是重复的。
 151   1      
 152   1              for( i = 0 ; i < 8 ; i ++ )
 153   1              {
 154   2                      record[i] = Flash_Byte_Read( startaddr + i );
 155   2              }
 156   1      }
 157          
 158          /********************************************
 159          * 写入一条记录
 160          *********************************************/
 161          void Put_Record( unsigned int startaddr , unsigned char *record )
 162          {
 163   1              uchar i = 0;
 164   1      
 165   1              startaddr += 8192; //0-8K用于和程序空间是重复的。
 166   1      
 167   1              if( !(startaddr & 0xFFF) )
 168   1              {//一个新的sector
 169   2                      Flash_Sec_Erase( startaddr );
 170   2              }
 171   1      
 172   1              for( i = 0 ; i < 8 ; i ++ )
 173   1              {
 174   2      /*
 175   2                      if( (startaddr+i) & 0xFFF )
 176   2                      {//一个新的sector
 177   2                              Flash_Sec_Erase( (startaddr+i)>>12 );
 178   2                      }
 179   2      */
C51 COMPILER V7.06   MAIN                                                                  08/05/2005 21:41:52 PAGE 4   

 180   2                      Flash_Byte_Program( startaddr + i , record[i] );
 181   2              }
 182   1      }
 183          
 184          /********************************************
 185          * 组成一条记录
 186          *********************************************/
 187          void Build_Record( unsigned int *Id , unsigned char *Time , unsigned char *record )
 188          {
 189   1              uchar i = 0 , j = 0;
 190   1              unsigned int * pointer = NULL;
 191   1      
 192   1              //组织ID号
 193   1              for( i = 0 ; i < 10 ; i ++ )
 194   1              {
 195   2                      if( i & 0x01 )
 196   2                      {
 197   3                              record[j] |= Id[i] & 0x0F;
 198   3                              j ++;
 199   3                      }
 200   2                      else
 201   2                      {
 202   3                              record[j] = Id[i] << 4 ;
 203   3                      }
 204   2      
 205   2              }
 206   1      
 207   1              //组织时间
 208   1              //秒 分 时 日 月 星期 年
 209   1              record[5] = (   (Time[6]>>4)*10 + (Time[6]&0x0F) ) << 4;
 210   1              record[5] |= (  (Time[4]>>4)*10 + (Time[4]&0x0F) )&0x0F;
 211   1              pointer = (unsigned int * )&record[6];
 212   1              *(pointer) = 0;
 213   1              *(pointer) |= ( (Time[3]>>4)*10 + (Time[3]&0x0F) ) << 11;
 214   1              *(pointer) |= ( (Time[2]>>4)*10 + (Time[2]&0x0F) ) << 6;
 215   1              *(pointer) |=   (Time[1]>>4)*10 + (Time[1]&0x0F);
 216   1      }
 217          
 218          
 219          /********************************************
 220          * 发送一条记录
 221          *********************************************/
 222          void Send_Record( uchar* record , uchar retvalue)
 223          {
 224   1              uchar i = 0;
 225   1              uchar verify = 0xff ;
 226   1              Uart_Send( 0x5A );
 227   1              Uart_Send( 0xA5 );
 228   1              Uart_Send( retvalue );
 229   1              for( i = 0 ; i < 8 ; i ++ )
 230   1              {
 231   2                      Uart_Send( (uchar)record[i] );
 232   2                      verify ^= record[i];
 233   2              }
 234   1              Uart_Send( verify );
 235   1      }
 236          
 237          
 238          changdata(uchar c)
 239          {    
 240   1              uchar d;
 241   1              switch(c)
C51 COMPILER V7.06   MAIN                                                                  08/05/2005 21:41:52 PAGE 5   

 242   1                      {
 243   2                              case 0: d=0Xfc;break;
 244   2                              case 1: d=0X60;break;
 245   2                              case 2: d=0Xda;break;
 246   2                              case 3: d=0Xf2;break;
 247   2                              case 4: d=0X66;break;
 248   2                              case 5: d=0Xb6;break;

⌨️ 快捷键说明

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