📄 erase_card.c
字号:
/*******************************************************************************
擦除高字节 函数
*******************************************************************************/
#include <iom8v.h>
#include <macros.h>
#include "lcd1602.h"
unsigned char Erase_IC_FLAG=0 ; // 擦除高位标志
void Erase_bit(unsigned char Erase_flag) // 擦除位函数
{
unsigned char i=0 ;
Reset_0 ;
CLK_0 ; // IC_Card 卡复位
delay_nms(10);
Reset_1 ; // 把
delay_nus(8) ;
CLK_1 ; // 地
delay_nus(44) ;
CLK_0 ; // 址
delay_nus(8) ;
Reset_0 ; // 加
delay_nus(10) ;
delay_nus(27) ; // 到
for (i=0;i<Erase_flag;i++) // 要
{
CLK_1 ; // 擦
delay_nus(40) ;
CLK_0 ; // 的
delay_nus(25) ;
delay_nus(20) ; // 位
}
Reset_1 ; // 擦
delay_nus(50) ;
Reset_0 ; // 除
delay_nus(10) ;
CLK_1 ; // 字
delay_nus(15000) ;
CLK_0 ; // 节
delay_nus(50) ;
Reset_1 ; //
delay_nus(50) ;
Reset_0 ; // 时
delay_nus(100) ;
CLK_1 ; //
delay_nus(50000) ;
CLK_0 ; // 序
Read_Card();
}
void Erase_Card(void) // 检测擦除位操作
{
//移位标志 // 擦除位置标志
unsigned char i=0 , flag=0 , Erase_flag=0 ;
flag=0x01 ;
if( IC_Codes_8[11] != 0 )
{ // 检测该位是否为0,不为0则擦除该位
for(i=0;i<8;i++)
{
if ( (IC_Codes_8[12]&flag) != 0 ) // 检测到不为0的位则进行下面操作
{
Erase_flag = 95-i ; // 确定要擦除的位
Erase_bit(Erase_flag); // 擦除位
}
flag=flag<<1;
}
}
else // 检测个位是否为0,为0则先擦除高字节数据再写位
{
flag=0x01 ;
if( IC_Codes_8[10] != 0 )
{ // 检测该位是否为0,不为0则擦除该位
for(i=0;i<8;i++)
{
if ( (IC_Codes_8[10]&flag) != 0 ) // 检测到不为0的位则进行下面操作
{
Erase_flag = 87-i ; // 确定要擦除的位
Erase_bit(Erase_flag); // 擦除位
}
flag=flag<<1;
}
}
else // 检测个位是否为0,为0则先擦除高字节数据再写位
{
flag=0x01 ;
if( IC_Codes_8[9] != 0 )
{ // 检测该位是否为0,不为0则擦除该位
for(i=0;i<8;i++)
{
if ( (IC_Codes_8[9]&flag) != 0 ) // 检测到不为0的位则进行下面操作
{
Erase_flag = 79-i ; // 确定要擦除的位
Erase_bit(Erase_flag); // 擦除位
}
flag=flag<<1;
}
}
else // 若无数据可擦写,则显示0
{
Erase_IC_FLAG=0;
Write_Card_Value();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -