IC卡控制程序

发布者:zhuanshi最新更新时间:2018-01-09 来源: eefocus关键字:IC卡  控制程序 手机看文章 扫描二维码
随时随地手机看文章

//-----------------------函数声明,变量定义-------------------------------------------- 
//-----------------------函数声明,变量定义-------------------------------------------------------- 
#include  

#include  
#include  
#define uchar unsigned char  
#define uint  unsigned int   
#define    OFF 1 
#define ON    0 
#define True 1 
#define    False 0 
#define RMM_COMM 0x30    //读主存命令字 
#define WMM_COMM 0x38    //写主存命令字 
#define VER_COMM 0x33    //校验密码 
#define RSM_COMM 0x31    //读密码存储区 
#define WSM_COMM 0x39    //写密码存储区 
#define RPM_COMM 0x34    //读保护存储区 
#define WPM_COMM 0x3c    //写保护存储区 
//---------------------------------------------------------------------------- 
//------------------------------------------------------------------------------------ 
//             定义IC卡接口 
sbit IC_RST =P1^0;         // 将p1.0口设定为复位管脚 
sbit IC_CLK =P1^1;        // 用p1.1口模拟时钟口 
sbit IC_IO =P1^2;            // 将p1.2口模拟数据口 
sbit watch_PW =P1^3;        // 将p1.3口作为电源监控,watch_PW=0,设备有损坏 
sbit CT_PW =P1^4;         // 将p1.4口作为电源控制,CT_PW=0接通电源,CT_PW=1断开电源 
sbit IC_INT0 =P3^2;        // P3.2用于检测有无卡插入,检测到低电平,说明有卡插入 
//------------------------------------------------------------------------------------ 
uchar Read_Buffer[16]; 
bit     IC_In_Flag; 
bit        IC_Read_Flag; 
//------------------------------------------------------------------------------------ 
//4442卡底层程序的外部函数声明 
//------------------------------------------------------------------------------------ 
void ReaDMAinMem(uchar addr,uchar idata *pt,uchar count); //读IC卡主存 
void WriteMainMem(uchar addr,uchar idata *pt);        //写IC卡主存 
void ReadProtectMem(uchar idata *pt);                 //读保护存储器 
void ProtectByte(uchar CardAdd,uchar idata *pt);      //保护一字节,注意待保 
//护的字节是已经写入过的,地址只能在保护存储区内 
void SendComm(uchar a,uchar b,uchar c);                      //发送命令 
void ReadMode(uchar idata *pt,uchar count); 
void ProcessMode(void); 
void ResetCard(void); 
void BreakOperate(void); 
void StartComm(void); 
void StopComm(void); 
uchar ReadByte(void); 
void WriteByte(uchar ch); 
void Delay10us(void); 
void Delay5us(void); 
void init(); 
//-------------------------------------------------------------------------------- 
// 函数名称: ResetCard 
// 函数功能: 卡复位子程序 
//------------------------------------------------------------------------------- 
void ResetCard(void) 

    uchar temp; 
    Delay5us();     
    IC_RST = 0;         
    IC_CLK = 0;      
    IC_IO  = 1;     
    Delay5us();       
    IC_RST = 1; 
    Delay5us(); 
    IC_CLK = 1; 
    Delay10us(); 
    Delay10us(); 
    Delay10us(); 
    Delay10us(); 
    IC_CLK = 0; 
    Delay5us(); 
    IC_RST = 0; 
    Delay10us();        
    temp = ReadByte(); 
    temp = ReadByte(); 
    temp = ReadByte(); 
    temp = ReadByte();   
    IC_CLK = 0;          
    Delay5us();         
    IC_IO  = 1;          
    _nop_();            
    IC_CLK = 0;          
    Delay5us(); 
    } 
//------------------------------------------------------------------------------------- 
// 函数名称: BreakOperate 
// 函数功能: 停止操作 
//----------------------------------------------------------------------------------- 
void BreakOperate(void) 

     IC_CLK = 0; 
     IC_RST = 0; 
     IC_IO  = 0; 
     Delay5us(); 
     IC_RST = 1; 
     IC_IO  = 1; 
     Delay5us(); 
     IC_RST = 0; 
     Delay5us(); 
     CT_PW = 1; 

//------------------------------------------------------------------------------------ 
// 函数名称: StartComm() 
// 函数功能: 启动I2C总线子程序 
//----------------------------------------------------------------------------------- 
void StartComm(void) 

    IC_CLK = 0; 
    IC_IO  = 1; 
    Delay5us(); 
    IC_CLK = 1; 
    Delay5us(); 
    IC_IO  = 0; 
    Delay5us(); 

//------------------------------------------------------------------------------- 
// 函数名称: StopComm() 
// 函数功能: 停止I2C总线数据传送子程序 
//----------------------------------------------------------------------------- 
void StopComm(void) 

    IC_CLK = 0; 
    IC_IO  = 0; 
    Delay5us(); 
    IC_CLK = 1;        //CLK: H 
    Delay5us(); 
    IC_IO  = 1;        //IO : H 
    Delay10us(); 

//----------------------------------------------------------------------------------- 
// 函数名称: ReadByte 
// 返回接收的数据 
// 函数功能: 接收一字节子程序 
//----------------------------------------------------------------------------------- 
uchar ReadByte(void) 

    uchar i,ch; 
    ch = 0; 
    for (i = 8; i > 0; i--) 
    { 
        IC_CLK = 0; 
        ch = ch >> 1;           //从低位读起  
        if((uchar)IC_IO) 
            ch |= 0x80; 
        Delay5us(); 
        IC_CLK = 1; 
        Delay5us(); 
    } 
    return ch; 

//---------------------------------------------------------------------------------- 
// 函数名称: WriteByte 
// 入口参数: ch 
// 函数功能: 发送一个字节 
//------------------------------------------------------------------------------------ 
void WriteByte(uchar ch) 

    uchar i; 
    for(i = 8; i > 0; i--) 
    { 
        IC_CLK = 0; 
        IC_IO = (bit)(ch & 0x01);      
        Delay5us(); 
        IC_CLK = 1; 
        Delay10us(); 
        ch = ch >> 1;                 //右移一位 
    } 

//------------------------------------------------------------------------------------- 
// 函数名称: ReadMode 
// 入口参数: pt地址指针,指向接收缓冲区,count要接收的数据个数 
// 函数功能: 接收n位数据子程序 
//---------------------------------------------------------------------------------- 
void ReadMode(uchar idata *pt,uchar count) 

    IC_CLK=0; 
    Delay5us(); 
    do 
    { 
        *pt = ReadByte();    //读入一个字节 
        pt++;                //指针加一 
    }while(--count);         //计数器减一,判断 

//------------------------------------------------------------------------ 
// 延时10us子程序,根据系统时钟需要调整 
//------------------------------------------------------------------------ 
void Delay10us(void) 

    _nop_(); 
    _nop_(); 
    _nop_(); 
    _nop_(); 
    _nop_(); 
    _nop_(); 

//------------------------------------------------------------------------ 
// 延时5us子程序,根据系统时钟需要调整 
//------------------------------------------------------------------------ 
void Delay5us(void) 

    _nop_(); 
    _nop_(); 
    _nop_(); 

//------------------------------------------------------------------------ 
// 初始化子程序//------------------------------------------------------------------------ 
void init() 

    IC_INT0 = 1; 
    IC_Read_Flag = True; 

//--------------------------------------------------------------------------------- 
// 函数名称: ReadMainMem() 
// 入口参数:  addr: IC存储区地址; 
//            pt: 地址指针,指向接收缓冲区; 
//            count: 接收数据的个数 
// 函数功能: 读存储区 
//----------------------------------------------------------------------------------- 
void ReadMainMem(uchar addr,uchar idata *pt,uchar count) 

    SendComm(RMM_COMM,addr,0xff); 
    ReadMode(pt,count); 
    BreakOperate(); 
    IC_Read_Flag = False; 

//----------------------------------------------------------------------------- 
// 函数名称: SendComm() 
// 入口参数:  a: 命令字; 
//            b: 地址; 
//            c: 数据 
// 函数功能: 发送一个完整的命令 
//------------------------------------------------------------------------------- 
void SendComm(uchar a,uchar b,uchar c) 

    StartComm();          //开始发送命令 
    WriteByte(a);          //a: 发命令字 
    WriteByte(b);          //b: 发地址 
    WriteByte(c);          //c: 发数据 
    StopComm();           //结束发送命令 


main() 

    init(); 
    if((IC_INT0 == 0)&&(IC_Read_Flag == 1) == 1)   //有卡插入,并且有读标记 
    { 
        CT_PW = 0;                                    //上电 
        Delay10us(); 
        if(IC_Read_Flag == True) 
        { 
            ResetCard();                // 
            ReadMainMem(0xEF,&Read_Buffer[0],16); 
            BreakOperate(); 
            Delay10us(); 
            ResetCard(); 
        } 
        Delay10us(); 
        CT_PW = 1; 
    } 


关键字:IC卡  控制程序 引用地址:IC卡控制程序

上一篇:汉字液晶12864子程序
下一篇:AT93C46 SPI接口EEPROM读写程序

推荐阅读最新更新时间:2024-03-16 15:52

AT24CXX的mega8控制程序
/**************************************************************************************** AT24CXX的mega8控制程序 程序功能:该程序是用AVR来控制对AT24C256 读写信号等的操作. 硬件连接: 显示部分用12864液晶来显示从24c256中读取的图片 ***************************************************************************
[单片机]
IC卡自动加油机的设计
引言 众所周知 ,“金卡”工程(即电子货币工程)是我国国民经济信息化建设的重点工程之一。相对于磁卡而言,IC卡因具有防磁、防潮、安全、保密、不易磨损等特点,而作为“金卡”工程的首选产品,广泛应用于金融、电讯、交通、服务等多个部门。我们为安徽省某集团公司的加油中心设计了一种新型的IC卡自动加油机,司机凭公司发放的“油量储值IC卡”加油,管理人员通过“油量统计IC卡”对油料的使用情况进行结算管理,取代了传统的人工登记、结算的管理方式,实现了加油与管理的自动化。 1 IC卡简介 IC 卡 是将 一块集成电路芯片镶嵌在塑料基片中,封装为卡片形式,其芯片具有写人数据和存储数据的能力。我们使用的是美国ATMEL公司
[单片机]
<font color='red'>IC卡</font>自动加油机的设计
56-基于51单片机的IC卡智能水表设计
具体实现功能 系统由STC89C52单片机+LCD1602+电磁阀+继电器+流量计+IC卡读写模块模块构成。 具体功能: (1)第一行显示IC卡ID号码,此时未读到IC卡,所以ID显示为0,第二行显示的依次是剩余的水量和IC卡内的余额。若水量余额大于0,电磁阀得电,用户可以用水。 (2)当智能水表检测到IC卡时,第一行显示IC卡ID号码,第二行显示的是剩余的水量和IC卡内的余额。卡片内的余额可以充值到水表里。此时水表内有水量,电磁阀开启,按下用水按钮,模拟流量计旋转,用水信号输入到单片机,单片机将水的余量在屏幕的第二行显示出来,当水的余量小于等于10时,发光二极管点亮,提示余额不足,当水的余量等于0时,继电器断开,切断
[单片机]
56-基于51单片机的<font color='red'>IC卡</font>智能水表设计
基于sle4442的ic卡程序(avr)
//*********************FileName:Main.c*********************// //*********************Author:Steaven2000@163.com**********// //********************Version:1.2*************************// //******************LastUpdate:2004-11-03*****************// #include io8535v.h #include macros.h #define uchar unsigned char #defin
[单片机]
基于MSP430F169的AD、DA控制程序
/*----------------程序说明------ //功能: 1、通过串口RS232发送数据到上位机,同时接收上位机的指令 2、发送AD转换的值到上位机, 3、上位机发送DA转换的数字量 ---------------------------------*/ #include msp430x16x.h //变量定义 反馈字符串 //Br009300380037001200000011ED //unsigned char TX ={0x42,0x72,0x34,0x30,0x39,0x33,0x32,0x30,0x33,0x38,0x32,0x34,0x33,0x37,0x31,0x32,0x30,0x30,0x30,0
[单片机]
一种具有指纹识别功能IC卡读写器的开发
摘要:介绍了指纹识别技术和非接触IC卡技术,给出了以C8051单片机为核心的具有指纹识别功能的IC卡读写器的设计方法,具体阐述了读写器的电路设计和软件开发。 关键词:指纹识别 IC卡 读写器 单片机 随着IC卡技术的空前发展,非接触式IC卡技术具有快速便利、可靠性高、安全性好、抗干扰能力强、寿命长、防伪性好和一卡多用等优点,在门禁管理、身份认证、电子现金消费等方面得到了广泛的应用。生物识别技术是近几年来发展起来的一门新技术,利用人体的生物特征鉴别每个人的真实身份,主要包括虹膜、面孔、指纹、掌纹等,其中以指纹识别技术最为成熟稳定。IC卡技术和指纹识别技术的结合使用,具有优势互补的特点。以IC卡作为个人身份及指纹信息的存储载体,利
[单片机]
基于IC卡的记录式温度表
摘要:基于IC卡的温度表是一种新颖的现场仪表。它利用IC卡作为信息载体进行双向数据传送,可以共享PC机的强大功能;利用PC机,可对仪表的测量数据进行记录、分析、处理、存档、打印、绘制曲线等,具有记录波形的功能。 关键词:IC卡 热电阻传感器 采样时间 1 一种新颖的记录仪表 温度计是常用的热工仪表,常用于工业现场作为过程的温度测量。在工业生产过程中,不仅需要了解当前温度读数,而且还希望能了解过程中的温度变化情况。最近,笔者设计的基于IC卡的记录式温度表,价格与数字式温度表相近;但可以记录、存储数据,并可通过IC卡与PC机接口,是一种新颖的记录式仪表。 该温度表将热电阻传感器测得的温度信号,经过信号调理和A/D转换,在面板
[测试测量]
网络计算机中IC卡读写器子系统设计
摘要:针对网络计算机安全问题,提出了一种完整的智能IC卡读写器子系统设计方案。此方案讨论了基于单片机的IC卡读写器硬件和软件设计、基于PC/SC行业规范的读写器驱动程序设计和IC卡的软硬件选取。 关键词:网络计算机 安全 单片机 智能IC卡 IC卡读写器 PC/SC ISO7816 随着网络的飞速发展和计算机技术的不断进步,计算机应用模式正发生着巨大的变革。网络计算机(NC)的出现标志着计算机体系结构的革新,代表着未来计算机系统的发展方向。由于网络计算机可以采用开放源码操作系统,为发展带有自主知识产权的核心技术创造了有利条件。在开放源代码的操作系统中,Linux是一种较好的选择。它源代码公开,可以根据要求自行剪裁并且稳定,对资
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved