- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
智能卡_磁卡二轨数据识别实验报告
磁卡二轨数据识别实验报告
学生:房皓 学号班级:计科11级1104班(进修生)
任课教师:李济生
实验目的
1. 理解 ISO7810/7811/7812/7813 国际标准;
2. 掌握磁卡读卡器的接口要求以及与 STM32 单片机的接口方法;
3. 掌握正反向识别磁卡二轨数据的过程和编程方法,以及与微机交换数据的方法。
实验内容
1、采用中断方式读取磁卡数据;
2、用PD5控制指示灯L1的点亮和熄灭,当CP是低电平时点亮L1指示灯,当CP是高电平时熄灭L1指示灯(即刷卡过程中L1点亮,其他时间是熄灭的)
3、每个字符的奇校验,整个字符的异或校验;
4、如果校验正确,L2指示灯点亮,蜂鸣器响一声;否则L2等熄灭,蜂鸣器响三声。
5、将读卡和校验后的数据传送到微机中(微机软件采用超级终端)。
6、卡二轨反向数据的读取,完成正反向都可以刷卡的磁卡读卡器;
7、如果校验正确,L2指示灯点亮,蜂鸣器响一声;否则L2等熄灭,蜂鸣器响三声。
实验连接图
程序流程图
程序关键代码分析
1.当有刷卡过程时产生中断,准备接收数据
Cp = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8);
while(Cp)
{
Cp = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8);
}
EXTI_GenerateSWInterrupt(EXTI_Line0);
2.如果校验正确,L2指示灯点亮,蜂鸣器响一声;否则L2等熄灭,蜂鸣器响三声。
if(Check()==0)
{
int w;
GPIO_ResetBits(GPIOD,GPIO_Pin_6);
for(w=1;w=3;w++)
{
GPIO_SetBits(GPIOD,GPIO_Pin_7);
Delay(65530);
GPIO_ResetBits(GPIOD,GPIO_Pin_7);
Delay(65530);
}
}
else
{
GPIO_SetBits(GPIOD,GPIO_Pin_6);
GPIO_SetBits(GPIOD,GPIO_Pin_7);
Delay(65530);
GPIO_ResetBits(GPIOD,GPIO_Pin_7);
}
3.在数据校验时,要查第1个数据是否0BH,倒数第2个数据是否1FH
int judgeData(void)
{
if(TxBuffer[0] == 11 TxBuffer[9] == 31)
return 1;
else
return 0;
}
4.每个字符的奇校验,即字符中1的个数是奇数个
int CheckOdd(int s)
{
u8 k;
u8 odd;
u8 oddCounter;
odd=1;
oddCounter=0;
for(k=0;k5;++k)
{
oddCounter+=(TxBuffer[s] odd)k;
odd=odd1;
}
TxBuffer[s]=TxBuffer[s] 0xEF;
if(oddCounter%2==1)
{
return 1;
}
else
{
return 0;
}
}
5.所有数据的异或校验是否正确
int CheckORX(void)
{
u8 k;
sum=TxBuffer[0];
for(k=0;k11;++k)
{
sum=sum^TxBuffer[k];
}
TxBuffer[10]=TxBuffer[10]4;
sum=sum4;
if(TxBuffer[10]==sum)
{
return 1;
}
else
{
return 0;
}
}
6.中断服务程序
v
文档评论(0)