聚星聚星娱乐怎么注册账号册

我来说两句:
验证码 &&请照此输入(点击图片刷新验证码)
&&&&最多输入10000个字符
其它答案:共3条
因为各局的系统都不一样,你最好还是问专管员,或者申报的事,也可以问12366。
&&&&&&&&&&&&&&&&&&&&
可以问下当时给你们安装系统的航天公司啊,这些问题他们应该很清楚应该如何解决的
&&&&&&&&&&&&&&&&&&&&
我觉得你应该和金税卡公司联系,他们都有服务电话.实在不行你就把年报所有的表都补零保存就可以了.
&&&&&&&&&&&&&&&&&&&&
等待您来回答
101624261023
编辑推荐财税资讯会计中心税务中心财税问答政策法规共享中心产品服务
3秒后窗口关闭网络IC卡读写器|IC卡全扇区读写器|网口读写器|TCP/IP读写器-中国制造交易网
产品名称:网络IC卡读写器|IC卡全扇区读写器|网口读写器|TCP/IP读写器
产品链接:
手机版链接:
价格:450元联系人:王妃弟电话:
较之于同行的特点产品优势:读卡器通讯协议是扩展型的UDP协议,在处理速度快,无需建立连接,资源消耗小的UDP协议上进行了扩展,在服务机无反馈信息时,读卡终端会启动以相同包序列号两次重发机制,确保服务机无漏刷卡数据,保证数据传输的可靠性提供齐全的例子代码及接口协议说明,一般照搬即可使用,极大简化了工程师的开发过程,是组建内网一卡通系统的**读卡器。支持多台服务机管理一台读卡器,由于无需建立数据连接,所以不需要维护连接状态,可以一台服务机同时给多台读卡器发送相同的信息。为了减少给您添麻烦,购买产品前可先索要TCPI/P接口读写器例子代码,看是否正是你所需的产品。如不能正常下载,请联系客服索要更全更新的开发接口例子程序?全新升级,产品可支持跨网关多层网络使用!(可定制带两组开关量输出)技术特性:1.接收读写器信息的电脑只能和读写器在同一局域网内,不可跨越网关。2.使用比TCP更省资源、快捷、易开发的面向无连接的传输层协议,也叫UDP协议,并自带数据包无反馈3次发送机制,基本杜绝电脑漏掉刷卡信息的现象发现阶段。3. 合理、简易的设定参数操作方法:1).需要设置读写器参数,只行须先运设置软件,再把读写器网线接好,重启读写器,设置软件列表中就会出现该读写器参数记录,点选该记录并按软件界面操作就可以设置读写器参数了,包括读写器本身IP地址、子网掩网、读写器对应的远程电脑IP地址。2). 也可以点击[搜寻所有连线的读卡器]来查询读写器。3). 支持批量修改读写器的目标电脑IP地址,可用于快速将网内所有读写器指向任何一台电脑。4. IC-02T型读写器除了可以读写IC卡的所有扇区数据外,还可以接受电脑控制发出各种声响跟显示。5. 支持PING网功能。6. 读卡时返回IC卡扇区的数据信息,也可由客户自由定制,支持13.56MHz的mifare 卡S50、S70卡,感应离距离在0~10cm。7.12V直流供电,**工作负载电流=?本次数据包起始区地址?+?本次数据包的区数?才开始写卡。?免费提供齐全读写IC卡协议,例子代码一般照搬即可使用!联系客服免费索取???
【网络IC卡读写器|IC卡全扇区读写器|网口读写器|TCP/IP读写器】产品信息由【广州荣士电子有限公司】提供,【广州荣士电子有限公司】主营:&&&&&&&&&&,您可以查看更多关于【网络IC卡读写器|IC卡全扇区读写器|网口读写器|TCP/IP读写器】的产品。
联系人:王妃弟电话:
020-地址:中国 广东 广州 广州市天河区 广东省广州市天河区中山大道268号网站:主营:&&&&&&&&&&
广告经营许可证:豫B2-|增值电信业务经营许可证:豫B2-IC 接触式IC卡读写问题!求助
-电子产品世界论坛
IC 接触式IC卡读写问题!求助
IC 接触式IC卡读写问题!求助
一、使用LPC2114通过IO口加上拉电阻(4.7K),与SLE4428卡连接读写数据。无法读去数据程序如下希望朋友们看一下:
#include &config.h&
#define IC_rst&&1&&2
#define IC_clk&&1&&3
#define IC_dat&&1&&4
#define IC_IN&&&1&&11&&//IC插入
uint8 IcRead[3]={0x0E,0x20,0x00};&&&//读卡数据命令
uint8 IcWrite[3]={0x33,0x00,0x00};&&//写卡数据命令
uint8 IcCheck1[3]={0xCD,0xFE,0xFF}; //密码校验低位
uint8 IcCheck2[3]={0xCD,0xFF,0xFF}; //密码校验高位
uint8 IcRcume[3]={0xCD,0xFD,0x08};&&//错误计数器复位
uint8 EnabWrtIc;//IC卡写使能
uint8 IcRcv[10];
void DlayNS(uint32 dly)
for(;dly&0;dly--);
void Clock(void)
regist=IO0DIR;
IO0CLR=IC_
DlayNS(10); //时钟高、低至少9us
IO0SET=IC_
DlayNS(10); //10us
void Uart0Send(uint8 dat)
while((U0LSR&0x40)==0);
void Uart0Int(uint32 BPS)
PINSEL0|=0x05;
U0LCR=0x83;
Fdiv=(Fpclk/16)/BPS;
U0DLM=Fdiv/256;
U0DLL=Fdiv%256;
U0LCR=0x03;
void SendIC(uint8 *buf,uint8 num)
IO0SET=IC_
for(i=0;i&i++)
&&for(j=0;j&8;j++)
&&&if((dat&0x01)!=0)
&&&&IO0CLR=IC_
&&&&DlayNS(90);
&&&&IO0SET=IC_//写1
&&&&DlayNS(25000);
&&&&IO0SET=IC_
&&&&DlayNS(90);
&&&&IO0CLR=IC_
&&&&DlayNS(90);
&&&&IO0CLR=IC_//写0
&&&&IO0DIR=IC_
&&&&DlayNS(25000);
&&&&IO0SET=IC_
&&&&DlayNS(90);
&&&dat&&=1;
IO0CLR=IC_
void RcvIC(uint8 num)
uint8 dat=0x00;
IO0CLR=IC_
for(i=0;i&i++)
&&for(j=0;j&8;j++)
&&&IO0CLR=IC_//clk由1变为0时,开始接收一位数据
&&&DlayNS(25);//延时
&&&IO0SET=IC_
&&&iodat=IO0PIN;
&&&if((iodat&IC_dat)==IC_dat)
&&&&&dat|=(1&&j);
&&&else dat=0&&j;
&&&DlayNS(25);
&&IcRcv[i]=
IO0SET=IC_
IO0DIR|=IC_
uint8 CheckIcMA(void)
&&&//密码校验
&&&IcRead[0]=0xCE;
&&&IcRead[1]=0xFD;
&&&SendIC(&IcRead[0],0x03);//读错误计数器当前值
&&&RcvIC(1);
&&&if(IcRcv[0]!=0)&&&&&&&&&//不等于0开始校验密码
&&&&SendIC(&IcCheck1[0],3);//校验第一字节的密码
&&&&RcvIC(1);
&&&&if(IcRcv[0]==0)
&&&&&SendIC(&IcCheck2[0],3);//校验第二字节的密码
&&&&&RcvIC(1);
&&&&&if(IcRcv[0]==0)
&&&&&&SendIC(&IcRcume[0],3);//复位错误计数器为8
&&&&&&for(i=0;i&103;i++)&&&&//写卡完延续103个脉冲
&&&&&&&Clock();
&&&&&&err=0;
&&&&&else err=1;
&&return(err);
void ICTransact(void)
//密码校验
&&&err=CheckIcMA();
&&&if(err==0) EnabWrtIc=1;
&&&else EnabWrtIc=0;
&&&//写站台代码及到站时间
&&&if(EnabWrtIc==1)
&&&&//LED显示开始给IC卡写到站数据
&&&&//预写卡地址校验
&&&&IcRead[1]=0x08;
&&&&SendIC(&IcRead[0],0x03);
&&&&RcvIC(0x01);
&&&&ICAddr=IcRcv[0];
&&&&IcRead[1]=0x09;
&&&&SendIC(&IcRead[0],0x03);
&&&&RcvIC(0x01);
&&&&ICAddr=IcRcv[0]&&8;
&&&&IcWrite[1]=ICAddr+1;
&&&&IcWrite[0]|=(ICAddr&&8)&0x0C;
&&&&IcWrite[2]=&&&&&&&&&&//获取站台代码
&&&&SendIC(&IcWrite[0],0x03);&&//写站台代码
&&&&for(i=0;i&103;i++)
&&&&&Clock();
&&&&IcWrite[1]=ICAddr+1;
&&&&IcWrite[0]|=(ICAddr&&8)&0x0C;
&&&&IcWrite[2]=&&&&&&&&&&//获取年
&&&&SendIC(&IcWrite[0],0x03);&&//写到站时间年
&&&&for(i=0;i&103;i++)
&&&&&Clock();&&&&&&&&&&&&
&&&&IcWrite[1]=ICAddr+1;
&&&&IcWrite[0]|=(ICAddr&&8)&0x0C;
&&&&IcWrite[2]=&&&&&&&&&&//获取月
&&&&SendIC(&IcWrite[0],0x03);&&//写到站时间月
&&&&&for(i=0;i&103;i++)
&&&&&&Clock();&&&&&&&&&&&&
&&&&IcWrite[1]=ICAddr+1;
&&&&IcWrite[0]|=(ICAddr&&8)&0x0C;
&&&&IcWrite[2]=&&&&&&&&&&//获取日
&&&&SendIC(&IcWrite[0],0x03);&&//写到站时间日
&&&&for(i=0;i&103;i++)
&&&&&Clock();&&&&&&&&&&&&
&&&&IcWrite[1]=ICAddr+1;
&&&&IcWrite[0]|=(ICAddr&&8)&0x0C;
&&&&IcWrite[2]=&&&&&&&&&&//获取时
&&&&SendIC(&IcWrite[0],0x03);&&//写到站时间时
&&&&for(i=0;i&103;i++)
&&&&&Clock();&&&&&&&&&&&&
uint8 ICReast(void)
&&&uint8 err=0;
&&&//从上电到IC卡复位操作必须大于100us
&&&IO0SET=IC_
&&&IO0CLR=IC_
&&&IO0CLR=IC_
&&&DlayNS(430);
&&&IO0SET=IC_
&&&DlayNS(23);
&&&IO0SET=IC_
&&&DlayNS(45);
&&&IO0CLR=IC_
&&&DlayNS(23);
&&&IO0CLR=IC_
&&&RcvIC(0x04); //读卡复位后的4个数据
&&&for(i=0;i&4;i++)
&&&&Uart0Send(IcRcv[i]);
&&&IO0SET=IC_
&&&DlayNS(15);
&&&IO0CLR=IC_
&&&DlayNS(1);
&&&IO0SET=IC_
&&&return(err);
int main(void)
uint8 sta=0;
PINSEL0=0x;
PINSEL1=0x;
Uart0Int(115200);
IO0DIR=IC_rst|IC_clk|IC_
&&&&err=ICReast();
&&&&if(err==1) ICReast();
&&&&else sta=1;
&&&&//读IC卡数据
&&&&while(sta==1)
&&&&&SendIC(&IcRead[0],0x03);//写命令
&&&&&RcvIC(3);
&&&&&for(i=0;i&3;i++)
&&&&&&&&&//读数据
&&&&&Uart0Send(IcRcv[i]);
&&&&&IcRead[1]+=1;
&&&&&if(IcRead[1]&=0xFF)
&&&&&&IcRead[1]=0x00;
sle4428卡资料:/news/n1283c78.aspx
二:使用LPC2114通过I2C接口加上拉电阻(4.7K),与AT24C16卡连接读写数据。无法读去IC卡数据,单可以对AT24C01EEPROM芯片进行读写操作。程序如下希望朋友们看一下:
#include &config.h&
#define power 1&&4;
extern&&void&&__irq&&IRQ_I2C(void);
extern&&uint8&&IRcvStr(uint8 sla, uint8 suba, uint8 *s, uint8 no);
extern&&uint8&&ISendStr(uint8 sla, uint8 suba, uint8 *s, uint8 no);
extern&&uint8&&ISendByte(uint8 sla, uint8 dat);
extern&&uint8&&IRcvByte(uint8 sla, uint8 *dat);
void I2Cint(uint32 fi2c)
//PINSEL0=0x50;
I2SCLH=(Fpclk/fi2c+1)/2;
I2SCLL=(Fpclk/fi2c)/2;
I2CONCLR=0x2C;
I2CONSET=0x40;
VICIntSelect=0x;
VICVectCntl0=0x29;
VICVectAddr0=(uint32)IRQ_I2C;
VICIntEnable=(1&&9);
void Uart0Send(uint8 dat)
while((U0LSR&0x40)==0);
void Uart0Int(uint32 BPS)
//PINSEL0|=0x05;
U0LCR=0x83;
Fdiv=(Fpclk/16)/BPS;
U0DLM=Fdiv/256;
U0DLL=Fdiv%256;
U0LCR=0x03;
void&&DelayNS(uint32&&dly)
{&&uint32&&i;
&&&for(; dly&0; dly--)
&&&&&&for(i=0; i&50000; i++);
int main(void)
uint8 dat=0x11;
uint8 err0,err1;
uint8 dat2[8];
uint8 dat1[8]={0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08};
PINSEL0=0x;
PINSEL1=0x;
IO0DIR=0x1C;
I2Cint(9600);
Uart0Int(115200);
&&err0=ISendStr(0xA0, 0x60, &dat1[0],0x08);
&&if(err0==0)
&&&dat+=0x10;
&&&DelayNS(1);
&&&dat=0x10;
&&&IO0SET=
&&&err1=IRcvStr(0xA0, 0x60, &dat2[0], 0x08);
&&&IO0CLR=
&&&if(err1==0)
&&&&dat+=0x10;
&&&&goto loop1;
&&&&for(i=0;i&8;i++)
&&&&&Uart0Send(dat2[i]);
&&dat=0x01;
&&DelayNS(1);
/****************************************************************************
* 文件名:I2CINT.C
* 功能:硬件I2C软件包,利用中断方式操作。
* 说明:主程序要配置好I2C总线接口(I2C引脚功能和I2C中断,并已使能I2C主模式)
****************************************************************************/
#include&&&config.h&
/* 以下为I2C操作时所需要的变量 */
volatile&&uint8&&I2C_&&&&&&&&&&&// 从机地址(即器件地址)
volatile&&uint8&&I2C_&&&&&&&&&&// 子地址
volatile&&uint8&&*I2C_&&&&&&&&&&// 数据缓冲区指针 (读操作时会被更改)
volatile&&uint8&&I2C_&&&&&&&&&&&// 操作数据个数 (会被更改)
volatile&&uint8&&I2C_&&&&&&&&&&&// 操作结束标志,为1时表示操作结束,为0xFF时表示操作失败 (会被设置)
volatile&&uint8&&I2C_suba_&&&&&&&// 子地址使能控制,读操作时请设置为1,写操作时请设置为2 (会被更改)
void DelayMS(uint32 dly)
for(;dly&0;dly--)
&&for(i=0;i&100;i++);
/****************************************************************************
* 名称:IRQ_I2C()
* 功能:I2C中断,通过判断I2C状态字进行相应的操作。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void&&__irq&&IRQ_I2C(void)
{&&uint8&&
&&&sta = I2STAT;&&&&&&&&&&&&&&&&&&&&// 读出I2C状态字
&&&switch(sta)
&&&{&&case&&0x08:&&&&&&&&&&&&&&&&&&&// 己发送起始条件
&&&&&&&&&&&&if(1==I2C_suba_en) I2DAT = I2C_sla&0xFE;&&&&// 指定子地址读时,先写入地址
&&&&&&&&&&&&&&else I2DAT = I2C_&&&&&&&&&&&&&&&&&&&&&// 否则直接发送从机地址
&&&&&&&&&&&&I2CONCLR = 0x28;&&&&&&&&// SI=0
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&case&&0x10:
&&&&&&&&&&&&I2DAT = I2C_&&&&&&&&// 重启动总线后,发送从地址
&&&&&&&&&&&&I2CONCLR = 0x28;&&&&&&&&// SI=0
&&&&&&&&&&&&
&&&&&&case&&0x18:&&&&&&&&&&&&&&&&&&&// 已发送SLA+W,并已接收应答
&&&&&&&&&&&&if(0==I2C_suba_en)&&&&&&// 无子地址,则直接发送数据
&&&&&&&&&&&&{&&if(I2C_num&0)
&&&&&&&&&&&&&&&{&&I2DAT = *I2C_buf++;
&&&&&&&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&&&&&&&I2C_num--;
&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&else
&&&&&&&&&&&&&&&{&&I2CONSET = 0x10;&&// 无数据发送,结束总线
&&&&&&&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&&&&&&&I2C_end = 1;&&&&&&// 设置总线操作结束标志
&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&&&&&if(1==I2C_suba_en)&&&&&&// 发送子地址
&&&&&&&&&&&&{&&I2DAT = I2C_
&&&&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&}
&&&&&&&&&&&&if(2==I2C_suba_en)
&&&&&&&&&&&&{&&I2DAT = I2C_
&&&&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&&&&I2C_suba_en = 0;&&&&&// 子地址己处理
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&case&&0x28:&&&&&&&&&&&&&&&&&&&// 已发送I2C数据,并接收到应答
&&&&&&&&&&&&if(0==I2C_suba_en)&&&&&&// 无子地址,则直接发送数据
&&&&&&&&&&&&{&&if(I2C_num&0)
&&&&&&&&&&&&&&&{&&I2DAT = *I2C_buf++;
&&&&&&&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&&&&&&&I2C_num--;
&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&else
&&&&&&&&&&&&&&&{&&I2CONSET = 0x10;&&// 无数据发送,结束总线
&&&&&&&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&&&&&&&I2C_end = 1;
&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&&&&&if(1==I2C_suba_en)&&&&&&// 若是指定地址读,则重新启动总线
&&&&&&&&&&&&{&&I2CONSET = 0x20;
&&&&&&&&&&&&&&&I2CONCLR = 0x08;
&&&&&&&&&&&&&&&I2C_suba_en = 0;&&&&&// 子地址己处理
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&case&&0x20:
&&&&&&case&&0x30:
&&&&&&case&&0x38:
&&&&&&&&&&&&I2CONCLR = 0x28;&&&&&&&&// 总线进入不可寻址从模式
&&&&&&&&&&&&I2C_end = 0xFF;&&&&&&&&&// 总线出错,设置标志
&&&&&&&&&&&&
&&&&&&case&&0x40:&&&&&&&&&&&&&&&&&&&// 己发送SLA+R,并已接收到应答
&&&&&&&&&&&&if(1==I2C_num)&&&&&&&&&&// 最后一字节,接收数据后发送非应答信号
&&&&&&&&&&&&{&&I2CONCLR = 0x2C;&&&&&// AA=0,接收到数据后产生非应答
&&&&&&&&&&&&}
&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&// 接收数据并发送应答信号
&&&&&&&&&&&&{&&I2CONSET = 0x04;&&&&&// AA=1,接收到数据后产生应答
&&&&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&case&&0x50:
&&&&&&&&&&&&*I2C_buf++ = I2DAT;&&&&&// 读取数据
&&&&&&&&&&&&I2C_num--;
&&&&&&&&&&&&if(1==I2C_num)
&&&&&&&&&&&&{&&I2CONCLR = 0x2C;&&&&&// AA=0,接收到数据后产生非应答
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&{&&I2CONSET = 0x04;&&&&&// AA=1,接收到数据后产生应答
&&&&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&case&&0x58:
&&&&&&&&&&&&*I2C_buf++ = I2DAT;&&&&&// 读取最后一字节数据
&&&&&&&&&&&&I2CONSET = 0x10;&&&&&&&&// 结束总线
&&&&&&&&&&&&I2CONCLR = 0x28;
&&&&&&&&&&&&I2C_end = 1;
&&&&&&&&&&&&
&&&&&&case&&0x48:
&&&&&&&&&&&&I2CONCLR = 0x28;&&&&&&&&// 总线进入不可寻址从模式
&&&&&&&&&&&&I2C_end = 0xFF;
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&default:
&&&&&&&&&&&&
&&&VICVectAddr = 0x00;&&&&&&&&&&&&&&// 中断处理结束
/****************************************************************************
* 名称:ISendByte()
* 功能:向无子地址器件发送一字节数据。
* 入口参数:sla&&&&&&&&器件地址
*&&&&&&&&&&dat&&&&&&&&要发送的数据
* 出口参数:返回值为0时表示出错,为1时表示操作正确。
* 说明:使用前要初始化好I2C引脚功能和I2C中断,并已使能I2C主模式
****************************************************************************/
uint8&&ISendByte(uint8 sla, uint8 dat)
{&&/* 参数设置 */
&&&I2C_sla =&&&&&&&&// 写操作的器件地址
&&&I2C_buf = &&&&&&&&&// 待发送的数据
&&&I2C_num = 1;&&&&&&&&&&&&// 发送1字节数据
&&&I2C_suba_en = 0;&&&&&&&&// 无子地址
&&&I2C_end = 0;
&&&I2CONCLR = 0x2C;
&&&I2CONSET = 0x60;&&&&&&&&&&&&&// 设置为主机,并启动总线
&&&while(0==I2C_end);
&&&if(1==I2C_end) return(1);
&&&&&else return(0);
/****************************************************************************
* 名称:ISendStr()
* 功能:向有子地址器件发送多字节数据。
* 入口参数:sla&&&&&&&&器件从机地址
*&&&&&&&&&&suba&&&&&&&&器件子地址
*&&&&&&&&&&s&&&&&&&&数据发送缓冲区指针
*&&&&&&&&&&no&&&&&&&&发送数据个数
* 出口参数:返回值为0时表示出错,为1时表示操作正确。
* 说明:使用前要初始化好I2C引脚功能和I2C中断,并已使能I2C主模式
****************************************************************************/
uint8&&ISendStr(uint8 sla, uint8 suba, uint8 *s, uint8 no)
{&&/* 参数设置 */
&&&I2C_sla =&&&&&&&&// 写操作的器件地址
&&&I2C_suba =&&&&&&&&// 子地址
&&&I2C_buf =&&&&&&&&&&&&
&&&I2C_num =&&&&
&&&I2C_suba_en = 2;&&&&&&&&// 有子地址写
&&&I2C_end = 0;
&&&I2CONCLR = 0x2C;
&&&I2CONSET = 0x60;&&&&&&&&&&&&&// 设置为主机,并启动总线
&&&while(0==I2C_end);
&&&if(1==I2C_end) return(1);
&&&&&else return(0);
/****************************************************************************
* 名称:IRcvByte()
* 功能:向无子地址器件读取一字节数据。
* 入口参数:sla&&&&&&&&器件地址
*&&&&&&&&&&dat&&&&&&&&接收数据的变量指针
* 出口参数:返回值为0时表示操作出错,为1时表示操作正确。
* 说明:使用前要初始化好I2C引脚功能和I2C中断,并已使能I2C主模式
****************************************************************************/
uint8&&IRcvByte(uint8 sla, uint8 *dat)
{&&/* 参数设置 */
&&&I2C_sla = sla+1;&&&&&&&&// 读操作的器件地址
&&&I2C_buf =
&&&I2C_num = 1;
&&&I2C_suba_en = 0;&&&&&&&&// 无子地址
&&&I2C_end = 0;
&&&I2CONCLR = 0x2C;
&&&I2CONSET = 0x60;&&&&&&&&&&&&&// 设置为主机,并启动总线
&&&while(0==I2C_end);
&&&if(1==I2C_end) return(1);
&&&&&else return(0);
/****************************************************************************
* 名称:IRcvStr()
* 功能:向有子地址器件读取多字节数据。
* 入口参数:sla&&&&&&&&器件地址
*&&&&&&&&&&suba&&&&&&&&器件子地址
*&&&&&&&&&&s&&&&&&&&数据接收缓冲区指针
*&&&&&&&&&&&&&&no&&&&&&&&&读取数据个数
* 出口参数:返回值为0时表示操作出错,为1时表示操作正确。
* 说明:使用前要初始化好I2C引脚功能和I2C中断,并已使能I2C主模式
****************************************************************************/
uint8&&IRcvStr(uint8 sla, uint8 suba, uint8 *s, uint8 no)
{&&if(0==no) return(0);
&&&/* 参数设置 */
&&&I2C_sla = sla+1;&&&&&&&&// 读操作的器件地址
&&&I2C_suba =&&&&&&&&
&&&I2C_buf =
&&&I2C_num =
&&&I2C_suba_en = 1;&&&&&&&&// 有子地址读
&&&I2C_end = 0;
&&&I2CONCLR = 0x2C;
&&&I2CONSET = 0x60;&&&&&&&&&&&&&// 设置为主机,并启动总线
&&&while(0==I2C_end);
&&&if(1==I2C_end) return(1);
&&&&&else return(0);
AT24C01A/02/04/08/16/32/64卡资料1.&&&&
  这几个型号的IC卡为ATMEL存储卡,是一种不具备加密功能的EEPROM卡,AT24C为系列号,数字部分为K位容量,分别为1K、2K、4K、8k、16K、32K、64K位。它的使用方法与EEPROM完全相同,存储结构简单,只有读写两种操作功能,主要用于存放一些保密性要求不高的数据。
●容量别为1k/2k/4k/8k/16k/64k bit;
●循环擦写:1,000,000次;
●数据保存期:100年;
●温度范围:-250C-700C;
●结构单一,无分区,只有读、写操作
AT24C系列的工作频率为lMHz(5V),lMHz(2.7V),400KHz(1.8V);工作电压为5V士l0%,根据要求最低可至1.8V;Icc电流读最大为lmA,写最大为3mA:写/擦除次数为l00万次;数据保持lO0年;工作温度为O-70℃,根据要求可超过指定工作温度;通讯协议符合ISO/IEC 7816-3同步协议,双向串行接口。
&&&&存储结构:
&&&&AT24C系列型号的后两位数字为该型号的最大K位数(1K=1024),8位为1字节,最大字节存储容量的算法为K位数×l024÷8。如:AT24C01A的最大存储容量的1×,其字节地址空间为O—127(16进制为0x00—0x7F)。
用I2C协议给AT24C16卡,读写时总是接收到非ACK应答!
对AT24C16卡读写的程序,可以使用。是那个卡座接触不良的原因!
4428 io 最低 电压?4428 io&&h 的最低 电压 和 2114 h 的最到电压 好象不符合。
电压的问题卡的高电平最小值》3.3v
IO口上拉接的是5v电源我给数据线、时钟线、复位线IO口接的上拉电阻电源是5v,IC卡电源也是5v。也没调试通过。现在时间比较急,项目做完了再好好调试一下。
谢谢朋友们了!
TO:冯广周&&AT24C16有分区还是没有分区啊,怎么有人说有而有的说没有呢?怎么回事?郁闷!!
好历史悠久的问题。楼主作何解答呢?
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有打印IC卡封面并将数据写入IC卡 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 20时,
依赖CP_Print_Dll.dll和WinScard.dll
代码片段(2)
Printer.cs&~&10KB&&&&
using System.Collections.G
using System.T
using System.Windows.F
using System.Runtime.InteropS
namespace ysc
class Printer
public void print()
IntPtr PrinterDev = new IntPtr();
//用于接收返回的设备名称列表
byte[] names = new byte[100];
//获取系统已安装的接口所支持证照打印机设备列表
int result = Gy_GetPrinterList(names);
string ret=DtoX(result);
if (!"9000".Equals(ret))
throw new Exception("Gy_GetPrinterList命令执行失败");
string printerNameList=(Encoding.Default.GetString(names));
//获取打印机设备列表中的第一个
string[] list=printerNameList.Split(";".ToCharArray());
if(list.Length&1)
throw new Exception("没有找到可用的证照打印机设备");
string printerName=list[0];
//连接打印设备
result = Gy_OpenPrinter(Encoding.Default.GetBytes(printerName.ToCharArray(), 0, printerName.Length), ref
PrinterDev);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("设备不存在");
if ("9002".Equals(ret))
throw new Exception("设备已被占用,连接失败");
if (!"9000".Equals(ret))
throw new Exception("打开打印机 " + printerName + "失败");
//获取打印方向
int Orientation=0;
result = Gy_GetPrinterOrientation(PrinterDev, ref Orientation);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("获取打印方向 失败");
//MessageBox.Show("Orientation:"+Orientation);
//获取打印机序列号
byte[] sn = new byte[100];
result = Gy_GetPrinterSn(PrinterDev, sn);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("获取打印机序列号 失败");
string printerSN = Encoding.Default.GetString(sn);
//进卡到读写器位置
result = Gy_FeedCard(PrinterDev, 0, 0, 1, 0);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("进卡到读写器位置 失败");
//进卡到打印区域
result = Gy_TOPrintModule(PrinterDev, 0);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("进卡到打印区域 失败");
//打印预处理
result = Gy_PrintPretreatment(PrinterDev);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("打印预处理 失败");
string title="杨尚川";
//打印文本
result = Gy_PrintText(PrinterDev,200, 70, Encoding.Default.GetBytes("宋体".ToCharArray(), 0, "宋体".Length), 9, 0, 0xFF000000,Encoding.Default.GetBytes(title.ToCharArray(), 0, title.Length) ,true,30);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("打印文本 失败");
//打印图像
string path="z:\\default.jpg";
result = Gy_PrintImage(PrinterDev, 180, 130, 266, 214, Encoding.Default.GetBytes(path.ToCharArray(), 0, path.Length));
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("打印图像 失败");
//开始打印
result = Gy_StartPrinting(PrinterDev);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("开始打印 失败");
//断开与打印设备的连接
result = Gy_ClosePrinter(PrinterDev);
ret = DtoX(result);
if ("9001".Equals(ret))
throw new Exception("错误的设备句柄");
if (!"9000".Equals(ret))
throw new Exception("断开与打印设备的连接 失败");
//十进制转十六进制
public string DtoX(int d)
string x="";
x=chang(d);
int temp=d;
while(n&=16)
      
      
string[]m=new string[s];
      
      
m[i++]=chang(d%16);//判断是否大于10,如果大于10,则转换为A~F的格式
      
}while(c&=16);
x=chang(d);
for(int j=m.Length-1;j&=0;j--)
      
//判断是否为10~15之间的数,如果是则进行转换
public string chang(int d)
string x="";
      
      
      
      
      
      
      
      
      
      
      
      
      
x=d.ToString();
      
//获取系统已安装的接口所支持证照打印机设备列表
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_GetPrinterList([Out] byte[] PrinterNameList);
//连接打印设备
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_OpenPrinter([In] byte[] PrinterName, ref
IntPtr PrinterDev);
//断开与打印设备的连接
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_ClosePrinter([In] IntPtr PrinterDev);
//获取打印机序列号
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_GetPrinterSn([In] IntPtr PrinterDev, [Out] byte[] PrinterSn);
//进卡到读写器位置
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_FeedCard([In] IntPtr PrinterDev, [In]
int offset, [In]
int IC_WR, [In]
int IC_Print, [In]
int SeatNum);
//进卡到打印区域
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_TOPrintModule([In] IntPtr PrinterDev, [In]
int offset);
//打印文本
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_PrintText(IntPtr PrinterDev, int X,int Y,byte[]
Font,float FontSize,int FontAttribute,uint ColorRef,byte[] Text,bool TransBkColor,int charSet);
//打印图像
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_PrintImage(IntPtr PrinterDev, int X,int Y,int Height,int Width,byte[] ImageFilePath);
//打印照片
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_PrintPhoto(IntPtr PrinterDev, int X,int Y,int Height,int Width,byte[] ImageFilePath, uint m_TransColour, int optype);
//卡片翻转
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_Overturn(IntPtr PrinterDev);
//打印预处理
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_PrintPretreatment(IntPtr PrinterDev);
//开始打印
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_StartPrinting(IntPtr PrinterDev);
//设置打印方向
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_SetPrinterOrientation(IntPtr PrinterDev,int Orientation);
//获取打印方向
[DllImport("CP_Print_Dll.dll", CharSet = CharSet.Unicode)]
private static extern int Gy_GetPrinterOrientation(IntPtr PrinterDev,ref int Orientation);
Writer.cs&~&8KB&&&&
using System.Collections.G
using System.T
using System.Runtime.InteropS
namespace ysc
class Writer
int ContextHandle = 0, CardHandle = 0, ActiveProtocol = 0, ReaderCount = -1;
string ReaderList = string.E //读卡机名称列表
SCARD_IO_REQUEST SendPci, RecvP
byte[] _ReaderList = new byte[100];
public void write(EmpInfo empInfo)
//建立上下文
if (SCardEstablishContext(0, 0, 0, ref ContextHandle) == 0)
//列出可用的 Smart Card 讀卡機
if (SCardListReaders(ContextHandle, null, _ReaderList, ref ReaderCount) == 0)
ReaderList = Encoding.Default.GetString(_ReaderList);
ReaderList = "ACS ACR128U PICC Interface 0";
//建立 Smart Card 連線
if (SCardConnect(ContextHandle, Encoding.Default.GetBytes(ReaderList.ToCharArray(), 0, ReaderList.Length), 1, 2, ref CardHandle, ref ActiveProtocol) == 0)
EmpInfo emp = new EmpInfo();
emp.CardID = "";
emp.empGenderCode = "男";
emp.empName = "杨尚川";
emp.idCardNum = "124839";
emp.postName = "高级系统架构师";
WriteICCard(emp);
SCardReleaseContext(ContextHandle);
public bool WriteICCard(EmpInfo empInfo)
object lockThis = new object();
lock (lockThis)
byte[] data = empInfo.ToBytes();
int len = data.L
int n = len / 16;
int mod = len % 16;
for (int i = 0; i & i++)
byte[] temp = new byte[16];
int t = 0;
for (int j = i * 16; j & i * 16 + 16; j++)
temp[t] = data[j];
bool suc = this.WriteBlock(this.blocks[i], temp);
if (mod & 0)
byte[] temp = new byte[16];
int t = 0;
for (int j = n * 16; j & n * 16 + j++)
temp[t] = data[j];
for (int i = i & 16; i++)
temp[mod] = 0;
bool suc = this.WriteBlock(this.blocks[n], temp);
private string[] blocks ={
"01","02",
"04","05","06",
"08","09","10",
"12","13","14",
"16","17","18",
"20","21","22",
"24","25","26",
"28","29","30",
"32","33","34",
"36","37","38",
"40","41","42",
"44","45","46",
"48","49","50",
"52","53","54",
"56","57","58",
"60","61","62"};
public bool WriteBlock(string block, byte[] data)
object lockThis = new object();
lock (lockThis)
byte[] SelectRecvBytes = new byte[2]; //应回 90 00
int SelectRecvLength = 2;
byte[] ProfileRecvBytes = new byte[2]; //应回 90 00
int ProfileRecvLength = 2;
SendPci.dwProtocol = RecvPci.dwProtocol = ActiveP
SendPci.cbPciLength = RecvPci.cbPciLength = 8;
byte[] SelectAPDU = new byte[10];
SelectAPDU[0] = 0xFF;
SelectAPDU[1] = 0x86;
SelectAPDU[2] = 0x00;
SelectAPDU[3] = 0x00;
SelectAPDU[4] = 0x05;
SelectAPDU[5] = 0x01;
SelectAPDU[6] = 0x00;
SelectAPDU[7] = StrToHexByte(block)[0];
SelectAPDU[8] = 0x60;
SelectAPDU[9] = 0x20;
if (SCardTransmit(CardHandle, ref SendPci, SelectAPDU, SelectAPDU.Length,
ref RecvPci, ref SelectRecvBytes, ref SelectRecvLength) != 0)
//构造命令
byte[] WriteProfileAPDU = new byte[21];
WriteProfileAPDU[0] = 0xFF;
WriteProfileAPDU[1] = 0xD6;
WriteProfileAPDU[2] = 0x00;
WriteProfileAPDU[3] = StrToHexByte(block)[0];
WriteProfileAPDU[4] = 0x0F;
for (int i = 0; i & 16; i++)
WriteProfileAPDU[i + 5] = data[i];
if (SCardTransmit(CardHandle, ref SendPci, WriteProfileAPDU, WriteProfileAPDU.Length,
ref RecvPci, ref ProfileRecvBytes, ref ProfileRecvLength) == 0)
// 字符串转16进制字节数组
private byte[] StrToHexByte(string hexString)
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0)
hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i & returnBytes.L i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnB
// 字节数组转16进制字符串
public string ByteToHexStr(byte[] bytes)
string returnStr = "";
if (bytes != null)
for (int i = 0; i & bytes.L i++)
returnStr += bytes[i].ToString("X2") + " ";
if (returnStr.Length & 3)
returnStr = returnStr.Substring(0, returnStr.Length - 1);
return returnS
public struct SCARD_IO_REQUEST
public int dwP
public int cbPciL
[DllImport("WinScard.dll")]
public static extern int SCardEstablishContext(uint dwScope, int nNotUsed1,
int nNotUsed2, ref int phContext);
[DllImport("WinScard.dll")]
public static extern int SCardReleaseContext(int phContext);
[DllImport("WinScard.dll")]
public static extern int SCardConnect(int hContext, byte[] cReaderName,
uint dwShareMode, uint dwPrefProtocol, ref int phCard, ref int ActiveProtocol);
[DllImport("WinScard.dll")]
public static extern int SCardDisconnect(int hCard, int Disposition);
[DllImport("WinScard.dll")]
public static extern int SCardListReaderGroups(int hContext, ref string cGroups, ref int nStringSize);
[DllImport("WinScard.dll")]
public static extern int SCardListReaders(int hContext, string cGroups,
byte[] cReaderLists, ref int nReaderCount);
[DllImport("WinScard.dll")]
public static extern int SCardFreeMemory(int hContext, string cResourceToFree);
[DllImport("WinScard.dll")]
public static extern int SCardGetAttrib(int hContext, uint dwAttrId,
ref byte[] bytRecvAttr, ref int nRecLen);
[DllImport("WinScard.dll")]
public static extern int SCardTransmit(int hCard, ref SCARD_IO_REQUEST pioSendPci, byte[] pbSendBuffer, int cbSendLength, ref SCARD_IO_REQUEST pioRecvPci, ref byte[] pbRecvBuffer, ref int pcbRecvLength);
开源中国-程序员在线工具:
开源从代码分享开始
杨尚川的其它代码}

我要回帖

更多关于 聚星注册地址 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信