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

📄 ic_card.c

📁 ic卡水表c语言代码
💻 C
字号:
//****************************************************************************
//  MSP430-41X Demo -SLE4442 IC Card operation  
//
//
//               MSP430F413
//            -----------------
//        /|\|              XIN|-  
//         | |                 | 
//         --|RST          XOUT|-
//           |                 |    ________
//           |                 |   |        |
//           |             P1.0|-->| INT    |
//           |             P6.4|  .| VCC    |
//           |             P1.2| . | CLK    |
//           |             P6.5| . | DATA   |   
//           |             P2.0| . | RST    |     
//           |             GND |-->| GND    | 
//           |                 |   | _______|
//  Donghai CHeng
//  Lierda, Inc
//  NOVEMBER 2004
//  Built with IAR Embedded Workbench Version: 2.21B
//******************************************************************************

 #include "msp430x41x.h"
 #include "IC_Card.h"
 #define BELL_OUT         P6OUT
 #define BELL_DIR         P6DIR
 #define BELL_BIT         0x08                    //p6.3  控制蜂鸣器
 

 unsigned char Data_Buffer[10];                      //数据缓存

 unsigned char User_Key[3]={0xff,0xff,0xff};       //密码缓存
 unsigned char ErrCounter_Key[4];                  //Secure区数据,ErrCounter_Key[0]错误数;后三个字节存放密码
 void Beep_Alarm(unsigned int cycle,unsigned int high_last,unsigned int low_last);
 
 void main (void)
 {
    unsigned char right_flag;
    WDTCTL = WDTPW + WDTHOLD;
    SCFQCTL=31;                                            //MCLK=32*ACLK=1024KHz,DCO+=0
    SCFI0=0;
    FLL_CTL0 |= XCAP18PF; 
    _EINT();
    ICCard_IO_Init();                                         //初始化IC卡 
    for (;;)                              
      { 
        LPM3;                                                 //进LPM3模式 
        _NOP();	
        IC_DETECT_IE &=~ IC_DETECT_BIT;                       //关闭IC中断
        ICCard_ATR( &Data_Buffer[0] );
        ICCard_Read_MainMem( &Data_Buffer[0], 0x30, 10 );       //连续读取主存储"0x30"单元连续10个单元数据存入Data_Buffer【0】开始连续“10”个单元
        right_flag=ICCard_PSC( &User_Key[0]);                 //密码校验
        if(right_flag==1)
            {
                //ICCard_Read_ProtMem(&Data_Buffer[0]);               //读保护区数据(共4字节)
                //ICCard_Read_SecuMem(&ErrCounter_Key[0]);          //读密码区 (4字节)ErrCounter_Key[0]错误数;后三个字节存放密码                     
                // ICCard_Update_KEY(&User_Key[0]);                 //更新密码区(3字节)
                //ICCard_Update_MainMem_OneByte(0x30,0x88);         //更新主存储区“0x30”单元为“0x88”
                ICCard_Update_MainMem( &Data_Buffer[0], 0x20, 10 );   //将Data_Buffer【0】开始连续“10”个数据写入主存储区"0x20"起连续10个字节
                Beep_Alarm(1,0x5000,0x3000);
            } 
        else
            {
              Beep_Alarm(5,0x3000,0x5000);
            }       
        _NOP();  
     IC_DETECT_IE |= IC_DETECT_BIT;                                   //重新使能IC中断 
     }
}

/******************中断处理子程序**************************/
#pragma vector=PORT1_VECTOR
__interrupt void P1_int (void)
   {
	if( (P1IFG & IC_DETECT_BIT)!=0 )
	   {      
	       if((P1IN&IC_DETECT_BIT)==0)
	        {
	          P1IFG =0;
	         _NOP(); 
		 LPM3_EXIT;					// 退出LPM3模式
	        }
	   }
   }

void Beep_Alarm(unsigned int cycle,unsigned int high_last,unsigned int low_last)
{
	unsigned int i,j;
	BELL_DIR |= BELL_BIT;
	for(i=0;i<cycle;i++)
	{
	   BELL_OUT |= BELL_BIT;
	   for(j=0;j<high_last;j++);
	   BELL_OUT &= ~BELL_BIT;
	   for(j=0;j<low_last;j++);
        }
        BELL_OUT &= ~BELL_BIT;
        _NOP();
}

⌨️ 快捷键说明

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