📄 main.c
字号:
/****************************************************************************
******** 石家庄智讯科技有限公司 ********
******** ********
******** ShijiaZhuang Intelligence&Communication Scientific CO.,LTD. ********
****************************************************************************/
/****************************************************************************
******** 系统配置 *******
*****************************************************************************/
#define IN_MAIN
#include "config.h"
#include "disp.h"
uint8 password[]={0xff,0xff,0xff};
uint8 zhang[]={"持卡人: 张 巍 "};
uint8 kahao[]={"卡号:20060603001"};
uint8 riqi[]= {"发卡日期:2006-06"};
uint8 gongsi[]= {"单位: 智讯公司 "};
uint8 mao[]={"持卡人: 毛力峰 "};
uint8 kahao1[]={"卡号:20060603002"};
uint8 daima[]={0x00,0x00,0x01};
uint8 daima1[]={0x00,0x00,0x02};
/****************************************************************************
******** 子程序 *******
*****************************************************************************/
void IRQ_EXE(void)//非向量中断入口,勿删
{
while(1);//用户替换自己的程序
}
void ic_delay()
{
uint8 i;
for(i=100;i>0;i--);
}
void delayms(uint32 x)
{
uint32 j;
for(;x>0;x--)
for(j=50000;j>0;j--);
}
void init_iccard()
{
PINSEL0=0;
PINSEL1=0;
IO0DIR=IO0DIR|ic_clk;
IO0DIR=IO0DIR|ic_dat;
IO0DIR=IO0DIR|ic_rst;
}
void ic_start()
{
IO0SET=ic_dat;
ic_delay();
IO0SET=ic_clk;
ic_delay();
IO0CLR=ic_dat;
ic_delay();
IO0CLR=ic_clk;
}
void ic_end()
{
IO0CLR=ic_dat;
ic_delay();
IO0SET=ic_clk;
ic_delay();
IO0SET=ic_dat;
ic_delay();
IO0CLR=ic_clk;
IO0CLR=ic_dat;
}
void ic_sclk()
{
ic_delay();
IO0SET=ic_clk;
ic_delay();
IO0CLR=ic_clk;
ic_delay();
}
void ic_wrbyte(uint8 dat)
{
uint8 i,j;
i=dat;
for(j=8;j>0;j--)
{
if(i&0x01)IO0SET=ic_dat;
else IO0CLR=ic_dat;
ic_sclk();
i>>=1;
}
}
uint8 ic_rdbyte()
{
uint8 i,dat;
dat=0;
IO0CLR=ic_clk;
ic_delay();
IO0DIR=IO0DIR&(~ic_dat);
for(i=8;i>0;i--)
{
if(IO0PIN&ic_dat)
{
dat>>=1;
dat=dat|0x80;
}
else dat>>=1;
ic_sclk();
ic_delay();
}
IO0DIR=IO0DIR|ic_dat;
return(dat);
}
void ic_wrdata(uint8 com,uint8 addr,uint8 dat)
{
ic_start();
ic_wrbyte(com);
ic_wrbyte(addr);
ic_wrbyte(dat);
ic_end();
}
void ic_process()
{
uint8 i;
ic_sclk();
for(i=255;i>0;i--)ic_sclk();
}
uint8 ic_verify(uint8 *p)
{
uint8 temp[4];
uint8 dat;
ic_wrdata(ic_rdsm,0,0);//读密码区
temp[0]=ic_rdbyte();
temp[1]=ic_rdbyte();
temp[2]=ic_rdbyte();
temp[3]=ic_rdbyte();
if(temp[0]&0x07)//比较EC
{
if((temp[0]&0x07)==0x07)dat=0x06;
if((temp[0]&0x07)==0x06)dat=0x04;
if((temp[0]&0x07)==0x04)dat=0x00;
ic_wrdata(ic_wrsm,0,dat);//写入EC
ic_process();
ic_wrdata(ic_cmps,0x01,*p);//校验密码
ic_process();
p++;
ic_wrdata(ic_cmps,0x02,*p);//校验密码
ic_process();
p++;
ic_wrdata(ic_cmps,0x03,*p);//校验密码
ic_process();
ic_wrdata(ic_wrsm,0,0xff);//刷新EC
ic_process();
ic_wrdata(ic_rdsm,0,0);//读密码区
temp[0]=ic_rdbyte();
temp[1]=ic_rdbyte();
temp[2]=ic_rdbyte();
temp[3]=ic_rdbyte();
if(temp[0]==0x07)return(0x01);
else return(0);
}
else return(0);
}
void ic_reset()
{
IO0CLR=ic_rst;
ic_delay();
IO0CLR=ic_clk;
ic_delay();
IO0SET=ic_rst;
ic_delay();
IO0SET=ic_clk;
ic_delay();
IO0CLR=ic_clk;
ic_delay();
IO0CLR=ic_rst;
ic_delay();
}
void ic_write()
{
uint8 i;
for(i=0;i<3;i++)
{
ic_wrdata(ic_wrmm,0x20+i,daima[i]);
ic_process();
}
for(i=0;i<16;i++)
{
ic_wrdata(ic_wrmm,0x30+i,zhang[i]);
ic_process();
}
for(i=0;i<16;i++)
{
ic_wrdata(ic_wrmm,0x40+i,kahao[i]);
ic_process();
}
for(i=0;i<16;i++)
{
ic_wrdata(ic_wrmm,0x50+i,riqi[i]);
ic_process();
}
for(i=0;i<16;i++)
{
ic_wrdata(ic_wrmm,0x60+i,gongsi[i]);
ic_process();
}
}
void ic_write1()
{
uint8 i;
for(i=0;i<3;i++)
{
ic_wrdata(ic_wrmm,0x20+i,daima1[i]);
ic_process();
}
for(i=0;i<16;i++)
{
ic_wrdata(ic_wrmm,0x30+i,mao[i]);
ic_process();
}
for(i=0;i<16;i++)
{
ic_wrdata(ic_wrmm,0x40+i,kahao1[i]);
ic_process();
}
for(i=0;i<16;i++)
{
ic_wrdata(ic_wrmm,0x50+i,riqi[i]);
ic_process();
}
for(i=0;i<16;i++)
{
ic_wrdata(ic_wrmm,0x60+i,gongsi[i]);
ic_process();
}
}
void disp_code()
{
uint8 i,k;
uint32 j,dat;
dat=0;
ic_reset();
delayms(200);
i=ic_rdbyte();
j=(uint32)i;
dat+=j;
i=ic_rdbyte();
j=(uint32)i;
j<<=8;
dat+=j;
i=ic_rdbyte();
j=(uint32)i;
j<<=16;
dat+=j;
i=ic_rdbyte();
j=(uint32)i;
j<<=24;
dat+=j;
disp_uint32(dat);
delayms(100);
/***注意:此处以下为密码确认和修改程序,在不使用密码的情况应尽量屏蔽****/
/***注意:密码校验3次失败后,IC卡自动销毁,不要随意修改密码和程序*****/
/* i=ic_verify(&password[0]);
disp_uint32(i);
delayms(300);
ic_write();
ic_wrdata(ic_rdmm,0x00,0);
for(k=255;k>0;k--)
{
i=ic_rdbyte();
disp_uint32(i);
delayms(300);
}
dat=0;
ic_wrdata(ic_rdmm,0,0);
for(k=255;k>0;k--)
{
i=ic_rdbyte();
disp_uint32(i);
delayms(200);
}
dat=0;
ic_wrdata(ic_rdsm,0,0);
i=ic_rdbyte();
j=(uint32)i;
dat+=j;
i=ic_rdbyte();
j=(uint32)i;
j<<=8;
dat+=j;
i=ic_rdbyte();
j=(uint32)i;
j<<=16;
dat+=j;
i=ic_rdbyte();
ic_sclk();
j=(uint32)i;
j<<=24;
dat+=j;
disp_uint32(dat);*/
}
/*****************************************************************************
******* 主程序 ********
*****************************************************************************/
void Main(void)
{
TargetInit();//系统初始化程序,勿删!
delayms(100);
init_iccard();
init_7289();
delayms(100);
sendcmd_key(reset_7289);
sendcmd_key(test_7289);
delayms(500);
sendcmd_key(reset_7289);
while(1)disp_code();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -