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

📄 read_card.c

📁 环保型IC卡门禁系统的C程序
💻 C
字号:
/*******************************************************************************

                             读卡、显示 函数
							 
*******************************************************************************/

#include <iom8v.h>
#include <macros.h>
#include "lcd1602.h"

unsigned char IC_Codes_8[16]={0} , Wrong_flag = 0 ;

void Read_Card(void)
{                              // 卡内 128 bit 数据  // 卡内 16 字节数据 
  unsigned char i=0 , j=0 , k=0 , IC_Codes_2[128]={0} ;
  
  for(i=0;i<16;i++)
  {
    IC_Codes_8[i] = 0 ;
  }
  
  Reset_0 ;          
  CLK_0 ;               //  IC_Card 卡复位
  delay_nms(10);
  
  Reset_1 ;                    // 要使地址计数器复位"0",先让Resct复位端由
  delay_nus(8) ;               // "0"变成"1",然后跟着一个Clock脉冲从"0"变
  CLK_1 ;                      // 成"1"再降回"0"电平,Resct复位端再至"0",
  delay_nus(44) ;              // 把Clock脉冲包住,随着Reset端变低,地址0单
  CLK_0 ;                      // 元的数据从I/O上输出。对应 Clock端的每个脉
  delay_nus(8) ;               // 冲,其上升沿使地址计数器增加。其下降沿使被
  Reset_0 ;                    // 选通地址单元的数据从I/O上输出。地址计数器
  delay_nus(5) ;               // 增加到127后返回到0
  if ( (PINB&0x02)==0 )
  {
	IC_Codes_2[0] = 0 ;    //读取IC卡I/O口输出的是电平 (地址0上的数据)
  }
  else                     
  {                       //并把电平值记入数组IC_Card_2[128]中
	IC_Codes_2[0] = 1;     
  }
  delay_nus(27) ;
  
  for (i=1;i<128;i++)
  {
	CLK_1 ;
    delay_nus(40) ;
	CLK_0 ;
	delay_nus(20) ;
	if ( (PINB&0x02)==0 )      //读取IC卡I/O口输出的是电平 (地址1~127上的数据)
	{
	  IC_Codes_2[i] = 0 ;
	}
	else 
	{                       //并把电平值记入数组IC_Card_2[128]中
	  IC_Codes_2[i] = 1;
	}
	  
	delay_nus(20) ;
  }
  
  for(i=0;i<16;i++)
  {
    for(j=0;j<8;j++)      // 把IC_Card_2[128]中的128位数据转换成
	{                     // 16个字节并存放在IC_Card_8[16]
      IC_Codes_8[i] |= (IC_Codes_2[k]<<(8-j));
	  k++;
	}
  }
  
  if ( IC_Codes_8[2] == 0 )
  {
  IC_Codes_8[2] = 68 ;
  }
  
  if ( IC_Codes_8[2] == 0xfe )
  {
	if ( IC_Codes_8[3] == 0xfe )
	{
	  if ( IC_Codes_8[4] == 0xfe )
      {
		if ( IC_Codes_8[5] == 0xfe )
		{
		  if ( IC_Codes_8[6] == 0xfe )
	      {
			if ( IC_Codes_8[7] == 0xfe )
			{
			  Wrong_flag = 1 ;
			  
			  Wrong_Card();
			}
	      }
		}
	  }
	}
  }
}

⌨️ 快捷键说明

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