📄 write_card.c
字号:
/*******************************************************************************
写卡 函数
*******************************************************************************/
#include <iom8v.h>
#include <macros.h>
#include "lcd1602.h"
void Write_bit(unsigned char Write_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=1;i<Write_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 ; // 序
Read_Card(); // 读卡
}
void Write_Card(unsigned char Write_Value) // 检测写位操作
{
//移位标志 //写位位置
unsigned char i=0 , j = 0 , flag=0 , Write_flag=0 ;
for(j=0;j<Write_Value;j++)
{
flag=0x01 ;
if( IC_Codes_8[12] != 0 ) // 检测个位是否为0,不为0则写该位
{
for(i=0;i<8;i++)
{
if ( (IC_Codes_8[12]&flag) != 0 ) // 检测到不为0的位则进行下面操作
{
Write_flag = 104-i ; // 确定要写的位
Write_bit(Write_flag); // 写位
}
flag=flag<<1;
}
}
else
{
Erase_IC_FLAG=1 ; // 检测个位是否为0,为0则先擦除高字节数据再写位
Erase_Card();
}
}
Write_Card_Value();
}
void Write_Card_Value(void)
{
unsigned char Key = 0 , Write_Value = 0 ;
LCD_write_char(0x01,0); //清屏
delay_nms(2);
LCD_write_string(0,1,"Balance $: . ");
Balance_dis();
LCD_write_char(0x0f,0); // 显示光标
LCD_write_string(0,0,"Subtract $ : 0.");
while(1)
{
Key = Key_Scan() ;
if(Key!=0)
{
if(Key<10)
{
Write_Value = Key ;
display(Key , 15);
}
if(Key==11)
{
LCD_write_char(0x0c,0); // 关闭光标
menu_Init() ;
}
if(Key==12)
{
LCD_write_char(0x0c,0); // 关闭光标
Write_Card(Write_Value);
}
}
if(IC_SW!=0)
{
delay_nms(50); // 检测是否有卡插入
if(IC_SW!=0)
{
menu_Init();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -