导航:首页 > 操作系统 > 单片机读卡器

单片机读卡器

发布时间:2022-03-05 11:57:01

⑴ 求51单片机写读卡器的源码

这类程序很多的,给你一个作为参考吧:
#include〈reg51.h〉
#include<absacc.h>
#define ucharunsigned char
#define uint unsignedint
/*IC卡信号输入/输出*/
sbit scl=P1^7;
sbit sda=P1^6;
/*I/O口定义*/
sbit ICOUT=P3^2; /*拔卡信号*/
sbit ICIN=P3^3; /*插卡信号,与上同接卡座微动开关*/
sbit COMM=P3^4; /*正在通信指示*/
sbit BELL=P3^5; /*蜂鸣器控制*/
sbit PWR=P1^4; /*IC卡座电源控制*/
/*波特率选择*/
sbit BAUD=P1^2; /*0:2400;1:4800*/

/*24c01~24c16读/写驱动程序*/
sbit a0=ACC^0; /*定义ACC的位,利用ACC操作速度最快*/
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;
/*读/写数据缓冲区,24c01最多为128B*/
uchar buf[16]; /*这里定义有效读入数据最多为16B,用户根据需要定*/
uchar flag; /*全局标志字节*/
/*标志定义*/
sbitIC-WR=flag^0; /*IC卡在读/写状态标志*/
sbit ONCOMM=flag^1; /*系统与上位机在通信状态标志*/
sbit RST=flag^2; /*系统热复位标志*/
void start-ic(void)

sda=1;
scl=1;
delay(2);
sda=0;
delay(6); /*scl为高状态下,sda的下降沿跳变启动*/
scl=0;
delay(6);

voidstop-ic(void)

sda=0;
scl=1;
delay(6);
sda=1; /*在scl=1,sda的0到1跳变结束*/
delay(6);
scl=0;
sda=0;

voidack-ic(void)

sda=0;
delay(3);
scl=1;
delay(3);
scl=0;
sda=1;

/*读写节函数,无应答信号*/
unsignedchar rd24(void)

sda=1;
scl=1;a7=sda;scl=0;
scl=1;a6=sda;scl=0;
scl=1;a5=sda;scl=0;
scl=1;a4=sda;scl=0;
scl=1;a3=sda;scl=0;
scl=1;a2=sda;scl=0;
scl=1;a1=sda;scl=0;
scl=1;a0=sda;scl=0;
sda=1;scl=1;sci=0;
return(ACC);

/*写字节函数*/
Voidwd24(unsigned char dd)

ACC=dd;
sda=a7;scl=1;scl=0;
sda=a6;scl=1;scl=0;
sda=a5;scl=1;scl=0;
sda=a4;scl=1;scl=0;
sda=a3;scl=1;scl=0;
sda=a2;scl=1;scl=0;
sda=a1;scl=1;scl=0;
sda=a0;scl=1;scl=0;
sda=1;scl=1;
while(sda= =1);
SCL=0;

/*随机地址读字节函数,address为欲读单元地址*/

unchar x;
start-oc();
wd24(0a0);
wd24(address);
start-ic();
wd24(0a1);
x=rd24();
stop-ic();
return(x);

/*从指定地址开始顺序读块地址数据,数据存入全局缓冲区buf中,n为数据字节数*/
Ucharread-bytes(uchar address,uchar n)

uchar a,y;
for(y=0;y<n;y++)

A=read-buter(address+y);
Buf[y]=a;


/**/
/*字节写入模式写函数,其中阿对address为单元地址,dd为数据*/
voidwrire-byte(uchar address,uchar dd)

Start-ic();
Wd24(0a0);
Wd24(address);
Wd24(dd);
Stop-ic();

/*串行通信子程序*/
/*波特率2400,8位数据位,1位停止位,无校验位*/
/*先用握手字节y,然后发送x个数据*/
/*待发送数据在trdata缓冲区中*/
Void comm(ucharx,uchar y)

uchar i,a;
uint j;
while(1)
{l1: while(RI==0);
RI=0;
a=SBUF;
if(a!=y)goto l1;
for(i=0;i<x;i++)
{ SBUF=trdata[i];
While(T1= =0);
TI=0;

For(j=0;j<12500;j++);


/*主程序初始化函数*/
voidinit(void)

RST=0; /*系统热复位标志清除,只有拔卡才能置位*/
PWR=1; /*关闭IC卡电源*/
IC-WR=0; /*清有卡标志*/
ONCOMM=0; /*清正在通信标志*/
EX0=1; /*准许INT0中断*/
TMOD=0X20;
SCON=0X50; /*串行口工作方式*/
TH1=0Xf3;TL1=0Xf3;
If(BAUD= =0)

PCON=0X80; /*波特率设置为2400*/

else

PCON=0X00; /*波特率设置为4800*/

TR1=1;
EA=1; /*开放中断*/

/*将缓冲区数据16B发往上位机*/
/*波特率2400,8位数据位,1位停止位,无校验位*/
/*待发送数据在buf缓冲中*/
voidtransfer(void)

uchar I;
uint j;
for(i=0;i<16;i++)
{ SBUF=buf[i];
WHILE(TI= =0);
TI=0;
for(j=0;j<1000;j++);


/*接收16B存入缓冲区*/
/*波特率2400,8位数据位,1位停止位,无校验位*/
/*缓冲区为buf*/
voidreceive(void)

uchar i,a;
for(i=0;i<16;i++)
{ while(RI==0);
RI=0;
a=SBUF;
buf[i]=a;


/*将缓冲区中的n字节写入IC卡address开始的区域*/
Voidreceive(void)

uchar x,y;
for(y=0;y<n;y++)

Writ-byte(address+y,buf[y]);
delay(10); /*写之间的延时时间间隔,以保证写入*/


/*拔卡中断程序,主要完成IC卡下电及读/写器软复位*/
voidint-0(void)interrupt 0 using 1

while(! ICOUT); /* 延时去抖*/
delay(10);
if(! ICOUT) /*确实拔卡则进行以下处理*/

If(IC-WR|ONCOMM)

PWR=1; /*关闭IC卡电源*/
BELL=0; /*否则,蜂鸣一声返回*/
delay(10);
BELL=1;
RST=1; /*设置热复位标志,以便热复位*/



/*延时函数,延时ms数由N决定,但不同的系统需要调整相应参数*/
voiddelay(uchar n)

uchar i,j,k;
for(k=0;k<n;k++)
for(i=0;i〈100;i++〉
for(j=0;j<255;j++);

Void main(void)

uchar a;
fuwei: init(); /*系统初始化*/
while(! ICIN); /*等待IC卡插入*/
delay(10); /*软件去抖并等待IC卡稳定*/
while(! ICIN); /*确认IC卡插入*/
IC-wr=1; /*设置读/写标志(有卡,以便避免带电插拔)*/
/*开始读IC卡16B并存入缓冲区*/
PWR=0; /*IC卡上电,以便读卡*/
read-bytes(0,16);
PWR=1; /*关IC卡电源*/
/*等待与上位机建立通信联系*/
ONCOMM=1; /*设置正在通信标志*/
While(RI= =0);
RI=0;
a=SBUF;
switch(a)

case 0xaa: SBUF=0xaa;
while(! TI); /*向上位机回送AA*/
TI=0;
transfer(); /*将缓冲区数据发往上位机*/
break;
case 0xbb: SBUF=0xbb;
while(! TI); /*向上位机回送BB*/
TI=0;
/*上位机在发送前必须适当延时,以等待下位机准备好*/
receive(); /*接收数据存放在缓冲区*/
PWR=0; /*IC卡上电*/
write-ic(0,16); /*将数据写入IC卡,并回读比较*/
PWR=1; /*IC卡下电*/
Break;
Default: SBUF=0Xcc; /*如果握手信号不是AA,BB,则*/
While(! TI); /*向上位机回送CC*/
TI=0;

ONCOMM=0; /*清正在通信标志*/
while(! RST);
goto fuwei; /*等待拔卡中断,以软
复位*/

⑵ 如何实现IC卡读卡器与单片机间的通信,我想通过外围单片机和读卡器上的IC卡通信,求有经验的大神给个思路

看看读卡器有什么接口,例如485或232的都可以连。
再看看读卡器的资料,是什么通信协议。就可以通信了 。

⑶ SD卡读卡器的原理是什么,只是实现了接口的转换还是说含有单片机的程序在里面

这个没有什么悬念,就是个桥接芯片的作用。
SD卡本身和USB设备没有关系,要电脑能够通过USB接口 读取SD卡,读卡器里面主要就是一个桥接芯片,将SD通信标准转换为USB通信标准,电脑就可以正确识别并读取SD卡。
其实无论是SD卡读卡器还是USB接口移动硬盘之类,都是通过桥接芯片来实现的。

桥接芯片,就是一个定制功能的单片机。

⑷ 如何用单片机做一个id卡读卡器 并把读到的数据保存下来 要源码

这个和你的单片机类型、ID卡类型有关,程序也不一样。一般的没有加密的卡或简单加密的卡I2C的接口或SPI的口,只要按照卡的数据手册调调就可以的。要是不懂单片机那几就花钱找人做了。

⑸ 如何用单片机做一个id卡读卡器 并把读到的数据保存下来 手里有一个别人用11f02做的id卡读卡器

你说的ID卡读卡器是 EM_ID卡的读卡器吧 用STC11F02这个的话 应该是用分立元器件搭建的电路,这个要做好的话比较麻烦。如果不考虑成本什么的 只是想做个ID卡读卡器 看下U2270B芯片手册吧 加上点简单的外围电路就能读取ID卡卡号了 保存数据 就加个FLASH就好 或者EEPROM看数据量

⑹ 如何用单片机制作射频读卡器

当然先去了解射频读卡器芯片的所有资料,
再去做.
不过,
还是去买一个现成的方案吧.
芯片+电路图+
测试程序
都有,
在此基础上再自己做.
不贵几百元.
我以前一个项目
就这么做
的.
西门子的卡.

⑺ 读卡器要怎么与单片机进行连接可以使用串口将卡号传给单片机吗

为什么不直接读卡号,然后串口发给单片机呢。你这样不是要两个串口吗,虽然有双串口的单片机但是徒然增加难度了。

⑻ 怎么利用单片机做读卡器

这个不简单,我在网上也找过,不过没有最终实现。比较复杂,牵扯到协议的问题,读SD卡,很多人建议用89S51单片机的ISP接口,我也只知道这么多,你再研究研究。

⑼ 读卡器用什么主控芯片

其实也是U盘的主控,只是说区别在它跟存储单元分开而已.你可以用一个叫chipgenius的软件,插上读卡器,就可以认出用什么的主控了~

⑽ 有前辈会用51单片机设计SD卡读卡器吗

51单片机读写SD卡比较简单,网上有很多例子
但用其做插在电脑上的读卡器则比较麻烦,牵涉到USB协议,硬件和软件都很复杂

阅读全文

与单片机读卡器相关的资料

热点内容
u盘加密了手机读取不了 浏览:947
oracle11g启动命令 浏览:931
怎么把视频传到自己的文件夹 浏览:700
福州电动车在哪个app上摇号 浏览:818
礼书PDF 浏览:667
什么app看本子 浏览:394
如何学好编译语言 浏览:591
平面编程和切削 浏览:704
phpemoji表情符号 浏览:778
IBM云平台shor算法 浏览:577
程序员当乙方 浏览:519
php商城设计与实现的 浏览:305
php自动打印 浏览:469
哪个app多年轻人 浏览:902
租的服务器如何重装 浏览:937
干眼症程序员 浏览:239
乐动达人安卓版有什么游戏 浏览:484
c523压缩比 浏览:544
命令语气的人什么心态 浏览:435
程序员喜欢留指甲吗 浏览:516