1、完整word)基于51单片机的IC卡读写系统设计 学 号 11780215 天津城建大学 电子系统综合设计 设计说明书 IC卡读写系统设计 起止日期: 2014 年 12 月 29 日 至 2015 年 1 月 23 日 学生姓名 罗智健 班级 信科2班 成绩 指导教师(签字) 计算机与信息工程学院 2014年 1月 23 日 天津城建大学 课程设计任务书 2014 -2015 学年第 一 学期 计算机与信息工程 系 电子信息科学与技术 专业 信科2班
2、 班级 课程设计名称: 电子系统综合设计 设计题目: IC卡读写系统设计 完成期限:自 2014 年 12 月 29日至 2015 年 1 月23日共 4 周 设计依据、要求及主要内容(可另加附页): 一、课程设计的目的 在我们的日常生活中,IC卡无处不在——智能门锁、考勤机、交通卡、银行卡……IC卡应用非常广泛。通过对课程设计任务的完成,使学生掌握IC卡读写的工作原理,并且能够熟悉单片机的开发流程和基本的编程方法,既巩固所学的基础理论知识, 又为学生日后从事开
3、发设计奠定基础。 二、课程设计的内容及要求 选择合适的器件,了解元器件的工作原理,进行IC卡读写系统设计,完成 1、单片机最小系统设计。 2、单片机与IC卡读写器接口电路设计。 3、编写IC卡读写控制程序,并有显示功能。 4、书写设计说明书。 三、参考资料: 1、 何立民. MCS-51单片机应用系统设计 。 [M] 北京航天航空大学出版社 2、 张开如. 自动控制原理. [M]北京大学出版社. 3、 赵新民。 智能仪器设计基础 [M]哈尔滨工业大学出版社 指导教师(签字): 系 主 任(签
4、字): 批准日期: 2015年 12月 18日 目录 第1章 绪论 1 1。1 IC卡的发展和应用使用情况 1 1.2 IC卡应用技术 1 1。3 课题中IC卡的设计目标 1 第2章 IC卡芯片的介绍 3 2。1 SLE4442IC卡 3 2.1。1 芯片特点 3 2.1.2 芯片的引脚配置 3 2。1.3 芯片功能 4 2.1.4 芯片传送协议 5 第3章 硬件电路设计 7 3.1 单片机系统电路 7 3。2 接触式IC卡的接口电路 8 3.2 串行通信电路 11 3.3 键盘电路 11 3。4 显示电路 1
5、2 第4章 软件系统设计 14 4.1 主程序 14 4.2 键盘扫描子程序 15 4。3 显示子程序 17 总结 19 参考文献 20 总程序图 21 附录 22 第1章 绪论 本章介绍了IC卡的发展历史和应用情况,说明了现代IC卡技术的基础知识,最后分析了目前常见的IC卡读写器终端,并提出了本课题中IC卡读写器的设计目标。 1.1 IC卡的发展和应用使用情况 卡片是作为个人身份识别的手段而引进的,而作为交易凭证的卡片则早在19世纪80年代就萌芽于英国了,1950年,美国商人设计了第一张现代的塑料信用卡,1951年美国富兰克林银行作为金融机构率先发行了信用卡
6、到60年代中期,人们在塑料金融交易卡的背面贴上磁条,发展成为能够自动读取信息进行在线处理的磁卡,磁卡因为结构简单,价格低廉,得到迅速推广。 IC卡是近年从欧洲开始出现的,IC卡具有突出的3S特点,即Standard(国际标准化)、Smart(灵巧智能化)、和Security(安全性)。因而发展迅速,在金融、通讯、交通等众多领域中后来居上,即使那些磁卡已经普及应用的范围也将被取而代之。IC卡不仅改变了现有多种卡的使用方法和功能作用,还不断开创出新的应用领域。将IC卡和其他设备组成系统就能提供非常丰富的服务功能,把这些功能与生产或流通领域有机地结合起来,将出现令人意想不到的奇迹,创造出巨大的经济
7、和社会效益。随着信息技术的发展,IC卡作为一种先进的信息存储介质,它的应用己经渗透到各国的经济、社会生活、军事等各个方面,将来更有着广阔的发展空间. 1。2 IC卡应用技术 IC卡比磁卡存储容量大,可靠性和安全性高,在应用上除了覆盖磁卡的全部应用范围以外,还提供了许多磁卡所不具备的应用特性。正是这些特性,使IC卡在脱机业务处理和联网数据一致性等方面表现出前所未有的优势。IC 卡虽然有很强的功能,但仅当IC卡加入到应用系统中,构成发行商、应用系统和持卡人之间的数据传输媒介时,才能有效地发挥其优势。一个好的IC卡应用系统,应具备良好的应用特性和性能价格比,还要有好的安全特性. 1.3 课题中
8、IC卡的设计目标 读写器是IC卡应用系统的终端设备,只有通过读写设备才能和IC卡建立联系,读写IC卡中的数据;读写器一般还要求和信息网络中的上位机进行通讯,把IC卡中的数据融入到上层数据库。设计选择读写器是建立IC卡应用系统的关键. 本文是就设计IC卡读写器展开的,课题的设计目标是一种通用的接触式IC卡读写终端,要求读写器能够单独工作. 预期目标: l 实现用户信息的存储 l 通过键盘显示电路实现人机交互 l 实现卡的插入与退出识别 l 实现伪卡的识别
9、 第2章 IC卡芯片的介绍 2.1 SLE4442IC卡 IC卡是集成电路卡(IntegratedC ircuit Card)的简称,有些国家和地区称之为微芯片卡(Microchip card)或微电路卡(Microcircuit Card)。IC卡的大小和磁卡相同,它把集成电路镶在塑料卡片上,芯片一般是不易挥发性存储器(ROM, EPROM。 EPROM),保护逻辑
10、电路,甚至于CPU。本节介绍IC卡的一些基本知识,使读者对IC卡有一个大概的了解。由于本设计所采用的IC卡为接触型逻辑加密卡(SLE4442),所以本节的内容重点介绍此卡. SLE4442是由德国西门子公司设计的逻辑加密存储卡。它具有2K位的存储容量和完全独立的可编程加密代码存储器.内部电压提升电路保证了芯片能够以单5V电压供电,较大的存储器容量能够满足应用领域的各种要求.是目前国内应用较多的一种IC卡芯片。 2.1。1 芯片特点 l 面向字节寻址; l 采用多存储器结构:主存储器、保护型存储器、加密存储器; l 线连接协议,触点和串行接口满足ISO7816同步传送协议; l 芯片
11、采用NMOS工艺技术,每字节的擦除/写入编程时间为2.5ms; l 复位响应(ATR)符合ISO/IEC7816—3协议; l 存储器采用至少10 000次的擦除/写入周期,数据保持时间至少为10年; l 额外特性:数据仅能在正确输入24位可编程安全码(安全存储器)之后才能改变。 2。1.2 芯片的引脚配置 芯片的引脚与国际标准兼容,下表3-1是引脚的定义和功能说明: 表2—1 SLE4442引脚功能 引脚 卡触点 符号 功能 1 2 3 4 5 6 7 8 C1 C2 C3 C4 C5 C6 C7 C8 VCC RST CLK
12、 NC GND NC I/O NC 操作电压5V 复位 时钟 未用 地 未用 双向数据线(漏极开路) 未用 2。1.3 芯片功能 SLE4442IC卡芯片主要包括三个存储器:256×8位EEPROM型主存储器、32×1位PROM型保护存储器和4×8位EEPROM型加密存储器. 1)主存储器:主存储器为可重复擦除使用的EEPROM型存储器。按字节寻址,擦除写入。在擦除时,一个数据字节的所有8位被全部置“1”。在写入时,在EEPROM单元中的信息则根据输入的数据,按字位方式变换成逻辑“0”(即在EEPROM中,新写入的数据与原来存在的数据进行“逻辑与”)。通常
13、要改变一个数据需要先进行擦除再进行写入两项操作。如果在被寻址的字节中8位没有一个字位需要从0变为1,则可以不进行擦除处理.反之亦然,在被寻址的字节中,如果没有一个字节需要从1变为0,则可以不做写入处理,写入或擦除操作一次至少耗费2.5ms时间. 主存储器的地址是从00H到FFH。但主存储器可分为两个数据区:保护数据区和应用数据区,保护数据区是主存储器前32个字节数据区.其地址是从0(00H)到31(1FH)这部分的数据读出不受限制,但擦除和写入操作均受到保护存储器内部数据状态的限制。当保护存储器中第N位为0时,则对应主存储器中第N个字节就不允许进行擦除和写入操作。故保护数据区一般均作为IC
14、卡的标识数据区,存放一些固定不变的标识参数。应用数据区为主存储器后224个字节.其地址从32(20H)到255(FFH)。这部分的数据读出不受限制,但擦除和写入受控于加密存储器数据校验比较结果的影响。当需要修改应用数据区的内容时,必须首先输入一个3字节长的“校验字”。这个新输入的“校验字”与原来存在在加密存储器中的“参照字"进行一对一的比较。只有当两者完全一致时,芯片的加密控制逻辑才打开芯片的主存储器,允许后面的擦除和写入操作。芯片允许在有限的次数内重试比较操作.如果在连续三次比较失败之后,芯片的错误计数器计数到“0”,并将锁死主存储器,禁止随后的任何比较操作和写入擦除操作.这时整个主存储器变
15、成一个只读存储器.芯片中各存储器的内容不能再改变。 2)保护存储器是一个32×1位的一次性可编程只读存储器(PROM)。它是按字位方式寻址和写入。保护存储器从0~32的每一位对应着主存储器地址从0到31的字节。因此可以理解为每个字节单元的控制熔丝。从出厂到被初始化之前,保护存储器的状态为全“1”。从控制方面来说,保护存储器的内容只能从“1"写成“0"而不能从“0”擦除成“1"。保护存储器每个被写“0"的单元所对应控制的主存储器的字节单元将不再接收任何擦除和写入命令,从而使得该字节单元的数据不可再改变。从使用方面来讲,如果需要防止一些固定的标识参数被改动,可以将这类参数先写入主存储器的保护存储
16、区,然后将对应单元的保护存储器的字位写位“0",从而使这一部分单元中的参数内容永远不可更改。保护存储器本身的读出操作不受限制。但对其写入操作仍然受到加密存储器比较校验操作结果的控制。当输入的“校验字”与芯片内的“参照字”‘一致,则可以执行后续的写入操作.如果比较不成功,则控制逻辑将闭锁保护存储器。 3)加密存储器:加密存储器是一个4×8位的EEPROM型存储器.在这个存储器中,第0字节为“密码输入错误计数器”(EC)。密码输入错误计数器的有效位是低3位。在芯片初始化时,计数器设置成”111".这一字节是可读的。每次比较密码时,先判断计数器中是否还有“1”。如果还有“1",则将其中一个“1”写
17、成“0”,然后进行比较“校验字”操作。如果比较结果一致,密码错误计数器将允许进行擦除操作(芯片不能自动进行擦除操作),同时打开主存储器、保护存储器和加密存储器,并允许进行擦除和写入操作。如果比较结果不一致,则密码错误计数器中为“1"的个数将减少一位。只要计数器的内容不全为0,则芯片的比较“校验字"操作还允许进行.当密码计数器减数为零,则芯片的存储单元将全部锁死。加密存储器的第1,2,3字节为“参照字”存储区。这3个字节的内容作为一个整体披称为可编程加密代码(PSC)。值得注意的是:这3个字节的内容在PSC比较成功前是不可读的,只能进行比较操作。而“写入、擦除”操作也受自身“比较”操作结果的控制
18、只有当“比较”成功,加密存储器各字节内容才可以进行读出、写入和擦除。 2.1。4 芯片传送协议 传送协议是在接口设备IFD与IC卡的集成电路之间的两线连接协议,SLE4442芯片的协议类型为S=10(同步卡协议)。I/O线上数据变化只在CLK信号的下降沿才有效。 传送协议包括4种模式: l 复位和复位响应 l 命令模式 l 输出数据模式 l 处理模式 1)复位和复位响应: 复位响应是根据ISO 7816-3标准来进行的。在操作期间的任何时候都可以复位,只有经过了复位才能对IC卡进行其他操作。开始时地址计数器随一个时钟脉冲而被设置成0.当RST线从H状态置到L状态时,第一个数
19、据位的内容被送到I/O线上.若连续输入32个时钟脉冲,主存储器中的前4个字节地址单元中的内容被读出。在第33个时钟脉冲的下降沿,I/O线被置成H状态而关闭.图3-1为芯片复位即复位响应的时序关系. 在复位响应期间,“启动”和“停止"(见下面)状态被忽略. 图2-1芯片复位及复位响应的时序关系 2)命令模式:复位响应之后,芯片等待着命令.每条命令都以一个“启动状态”开始。整个命令包括三个字节(命令含义后面解释)。随后紧跟着一个附加脉冲并用一个“停止状态”来结束操作。图3-2为命令模式时序关系。 启动状态:在CLK为H状态期间,I/O线的下降沿为启动状态. 停止状态:在CLK为H
20、状态期间,I/O线的上升沿为停止状态。 在接受一个命令之后,有两种可能的模式:输出数据模式(即读数据模式)和处理数据模式。 图2-2命令模式的时序关系 3) 输出数据模式:这种模式是将IC卡芯片中的数据传送给外部接口设备的一种操作。图3—3为输出数据模式的时序关系. 在第一个CLK脉冲的下降沿之后,I/O线上的第一位数据变为有效。随后每增加一个时钟脉冲,芯片内部的一位数据被送到I/O线上。其输出的顺序是从每个字节的最低位开始。当所需要的最后一个数据送出以后,需要再附加一个时钟脉冲来把I/O线置成H状态,以便准备接受新的命令。在输出数据期间,任何“启动状态"和“停止状态”
21、均被屏蔽掉。 图2-3输出数据模式的时序关系 4) 处理数据模式:这种模式是对IC卡芯片做内部处理。图3-4为处理数据模式的时序关系。芯片在第一个时钟脉冲的下降沿将I/O从H状态拉为L状态并开始处理。此后芯片在内部连续计时计数,直到第N个时钟脉冲之后的附加时钟脉冲的下降沿I/O线被再次置高,完成芯片的处理过程。在整个处理过程中I/O线被锁定成低状态。 图2-4处理数据模式的时序关系 第3章 硬件电路设计 所设计的读写器以8051单片机为核心,配以IC卡接口电路、串行通信电路、存储电路、掉电检测电路、键盘显示电路等部分.通过读写器插槽与IC卡芯片通信,由51单片机控
22、制数据传输过程,实现读卡和写卡操作。图4—1为系统的总体框图。 51 单 片 机 IC卡芯片 串行通信电路 掉电检测 键盘 液晶显示 存储模块 图3-1 总体框图 IC卡接口设备的种类很多,功能上由于不同的应用需要,差别也很大,但就其对卡 (以接触式卡为例)的操作功能来说,都应具备以下几个基本功能: l IC卡的插入/退出的识别与控制(接触式卡):IC卡进/出RF区的识别和控制(非接触式卡)。 l 向IC卡提供其所需的稳定的电源与时钟信号。 l 实现与卡的数据交换,并提供相应的控制信号。 l
23、对于加密数据系统,应提供相应的加密解密处理及密钥管理机制。 l 提供相应的外部控制信息及其它设备的信息交换。 很多读写设备除了对卡的基本操作外,还设计了其他一些重要功能: l 必要的控制界面和显示界面. l 提供数据通讯接口与上位机进行数据通讯。 l 网络控制功能,实现远程适时控 3。1 单片机系统电路 AT89C51单片机是该系统的核心器件,其控制着所有的外围电路,并及时响应外部请求.整个系统电路设计如下: (1)按键S17,电容C8,电阻R13构成单片机的人工复位装置;两个30pF的电容,12M的晶振构成单片机的振荡电路. (2)矩阵式键盘由P1口来控制,P1.0,P1.
24、1,P1.2,P1。3接行线,P1.4、P1.5、P1.6、P1。7接列线。单片机对键盘进行行列扫描读取键值. (3)数码管显示电路由P2口控制,单片机对数码管进行动态扫描。P2.0与P2.1口通过一串入并出的74LS164与所有LED的a,b,c,d,e,f,g,sp引线相连,P2口接LED的控制端,单片机通过P3口控制各LED是否点亮. (4)P0口设计为与IC卡卡座的接口,AT89C51单片机通过IC卡座完成单片机与IC卡的连接. 图3。1 AT89C51最小系统 3.2 接触式IC卡的接口电路 IC卡的接口电路是连接IC卡与读写设备的通路,由它实现对IC卡的供电
25、并满足不带电插拔的要求。 IC卡接口设备中的IC卡供电电路应是一个相对独立于其他回路,并提供完善的过流保护措施的稳压电路,这是由于IC卡接口设备是一个独立于IC卡的设备,当有卡插入时,接口设备便开始向IC卡提供其所需的电力。如果插入的是一张电源与地击穿的坏卡,或是一个金属片之类的物质,就会造成供电回路的短路现象,若IC卡接口设备中无过流保护回路,就会干扰整个设备的正常工作。 为了提高IC卡操作的可靠性,必须有上下电控制电路、卡插入检测电路、卡短路检测电路。下图4-2所示是IC卡接口电路。 图3-2 IC卡接口电 R2、VD1、VT1组成卡上下电电路。当8051的P1。6=
26、0时,VT1导通,IC卡的VCC得电;当8051的P1.6=1时,VT1截止,IC卡的VCC失电。如果插入的是一张电源与地击穿的坏卡,或是一个金属片之类的物质,就会造成回路的短路现象.IC卡的VCC同时经VD2送至CPU的P1。5,检测有无卡电源短路现象,以防人为破环。 IC卡的控制与读写是IC卡接口设备中的核心操作部分,各种IC卡的实际操作有较大的不同,(ISO—7816标准只定义了一个最小操作,因而符合这一标准的卡亦不能保证其他操作的一致性),这里先选择其中较具共性的部分介绍,后面会针对SLE4442芯片的具体操作做详细说明. 1)IC卡的插入/退出识别与上电/下电控制技术 IC卡的
27、插入与退出的识别是通过IC卡接口电路来识别的,如果卡己插入到正确位置,且卡是合法卡,则置P1.1为0,VT2导通,图4-6中的LED点亮。若卡是非法卡,卡电源短路,低电平送至P1.5,则P1。0为0,VT3导通,图4—7中的报警电路报警。为了确保IC卡已准确地插到位置,插入的识别过程必须加入消颤处理。IC卡插入识别程序如下所示: RE_ DETECT: SETB IC_SW MOV C,IC_SW ;输出高电平至检测端 JNC RE_ DETECT ;无卡插入,等待 LCALL DELA
28、Y_5MS ;延时5ms MOV C,IC_SW JNC RE_DETECT ;再次判断,若无卡输入等待 RET …… ;有卡插入,进行处理 IC卡的供电控制是一个直接涉及是否能安全可靠地操作IC卡的过程。它必须严格遵循ISO7816-3所规定的操作顺序,否则就有可能对IC卡带来永久的损坏。ISO7816-3标准规定的操作顺序如下: IC卡的激活(上电过程): —— RST处于L状态 —- VCC供电 —- 接口设备处于接收方
29、式 —— Vpp上升为空闲状态 -— CLK由相应稳定的时钟提供 IC卡的去激活过程(下电过程): ——RST为状态L ——CLK为状态L ——Vpp不起作用 ——I/O为状态A —-VCC关闭 由于IC卡技术的进步,现在的IC卡事实上都己使用卡内自带升压电路,因此Vpp控制已逐渐失去具体含义。下面是上下电程序控制过程: POWERON: ;上电控制 LCALL RE_DETECT ;识别是否有卡插入 CLR RST ;使RST=L CLR
30、 CLK ;使CLK二L LCALL DELAY_500us ;延迟0。5ms,使端口逻辑信号稳定 CLR POWER ;给卡供电 SETB D_OUT ;使I/O端口为高电平,准备接受数据 RET POWER_OFF: ;下电控制 CLR RST ;使RST=L CLR CLK ;使CLK=L
31、 CLR D_OUT ;使I/O=L LCALL DELAY_500us ;延时0.5ms,使端口逻辑信号稳定 SETB POWER ;给卡下电 RET 2)IC卡的读写技术 不同类型的IC卡其读写方式或数据协议方式是不同的,ISO7816标准对异步型IC卡的读写协议做了较充分的定义,而对于同步型IC卡,则只定义了其复位响应过程的协议标准,这使得各厂家设计的同步型IC卡的读写方式不尽相同,而且同步型IC卡接口协议是面向操作而进行的,因此,其操作协议方式也各不相同
32、但许多厂家生产的IC卡都以ISO7816同步复位响应协议作为IC卡的数据读协议.大多数符合ISO7816标准的同步型IC卡的地址计数器是与时钟紧密相关的,当卡复位时,地址计数器置0。以后每向卡发一个节拍的时钟,都将使IC卡的地址计数器加“1”,这一时钟频率上限为50kHz或280kHz.复位之后的头32个时钟周期内,是卡的复位响应过程,该过程中,厂家的产品编码以位编码方式逐一在数据线上送出,以后的字段则根据厂家及用户所定义的含义不同而各不相同。若某字段定义为可读的,则可将时钟运行到该字段上,然后再逐时钟读出.数据的读出过程可分为三个基本过程:复位,数据字段的定位和数据读出. 3。2 串行通
33、信电路 由于PC机的串口电压为±12V,而单片机的工作电压为5V,所以需要MAX232接口芯片实现TTL与RS232电平转换,采用简单的3线制通信方式。图4—3为串行通信电路。 图3—3 串行通信电路 3。3 键盘电路 由于需要16个按键,采用并行接口的键盘电路至少需要4+4=8条I/O线,而串行接口的键盘电路只需要3条I/O口线,一条用作键盘行线,一条串行移位输出列扫描信号,另一条用作移位寄存器74LS164的移位时钟脉冲信号线。 16个按键构成了读写系统的键盘电路部分.图4—8为键盘与单片机的接口电路。 图3—4 8051与键盘接口电路 图中,P2。2为行
34、线,接有上拉电阻 R=5V/1 mA=5kΩ。 因而选用5。1KΩ的电阻,上拉电阻保证了没有键输入时,I/O口线上有确定的高电平输入。由P2.3端输出列扫描信号,通过移位寄存器74LS164输出端QA~QH接至键盘作为键盘列线。扫描信号通过74LS164移位,实现逐列置低电平,达到扫描各键的目的。 3。4 显示电路 应用系统中常用的显示器有:发光二极管显示器,简称LED;液晶显示器,简称LCD;荧光显示器。本文采用LCD,所以只对LCD进行介绍. LCD是一种极低功耗显示器,目前,高分辨率的LCD点阵式显示器有显示灵活,显示图型字符美观等优点,在很多系统中应用非常广
35、泛。 显示设计使用现有的液晶显示功能模块SMG12232B—2,该模块能提供122*22的分辨率,带中文字库,更重要的是它可以有并行和串行两种输入方式,接口方便,这样我们可以使用单片机的异步通讯口驱动显示模块,软硬件实现都非常简单,外围电路非常简洁. 图4—9是单片机与显示器的接口电路。 图3-5 显示器与单片机接口电路 第4章 软件系统设计 本章主要介绍接触式IC卡读写器的程序设计。本设计的所有程序用C51语言编写,由主程序和子程序组成。其中子程序包括比较校验数据子程序、插卡子程
36、序、显示中断子程序。 4.1 主程序 主程序主要完成初始化并检测系统的状态,如果是刚上电状态,则恢复掉电瞬间保存的数据。主程序的流程图如图5—1所示。 主程序如下: #include〈 at8051.h〉 //头文件 #define uint unsigned int #define uchar unsigned char #define addrl 0x40 uint data consl; //全局变量定义 uchar data cons2[2]={0,0}; main ( ) { uchar
37、 data *p; //指针定义 if(consl==0) //判断是否刚上电状态 { p=cons2; Read24c02(p,addrl,2); //从24c02中读出掉电时保存的数据 consl=OxOOOF; //修改标志位 } ITO=1; //外部中断0下降沿触发 EXO=1; //外部中断0开中断 EA=1; //CPU
38、开中断 IDL=1; //设置节电工作方式 do{ }while(1); } 开始 初始化 待机 是否有卡插入 N Y
39、密码效验 有无按键 N Y 执行相应功能 显示 图4-1主程序流程图 4。2 键盘扫描子程序 16个按键的键盘电路分别为:数字键0~9及小数点“。”,可以设定用户信息及余额;此外还有5个功能
40、键,分别为: (1) 修改/确认键,用来控制信息的改写及确认; (2) 账号显示键,用来控制用户账号信息的显示; (3) 余额/总数显示键,用来控制余额或总数的显示; (4) 计数开始/停止键,用来控制计数系统的计数; (5) 备用键; (6) 备用键。 此读写系统中,键盘采用编程扫描方式.所谓编程扫描就是CPU对键盘的扫描采取程序控制方式,一旦进入键盘扫描状态则反复地扫描键盘,等待用户从键盘上输入命令或数据.而在执行键入命令或处理键入数据的过程中,CPU不再响应键入要求,直到CPU返回重新扫描键盘为止。键盘扫描子程序流程图如图5-3所示.图中可见,键盘扫描子程序要完成以下的功能
41、 1) 判断键盘上有无键按下。其方法为P2.3口连续16次全输出为“0”电平时,读P2.2口行线电平状态,若行电平全为“1”电平,则键盘无键按下,若不为“1”电平,则有键按下。 2) 取出键抖动及重键的影响。在键盘电路中,按键按下闭合后,将产生一个一个负的矩形脉冲。但由于在按动按键时总有一些抖动,因此在负脉冲的开始和末尾部位总要出现一些毛齿波,毛齿波的长短与开关的机械特性有关,一般为5~10ms。除了抖动之外还有重键,即一个键按下后紧接着由按下另一键,或者两个键同时按下.这些需要采取一定的措施加以消除。本系统采用软件延时的方法来解决。通过延时来等待信号稳定,在信号稳定后查询键码。其过程是
42、在查询到有按键按下后延时一段时间,一般为10ms。再查询一次看是否有键按下.若这次查询不到,则说明前一次查询结果为干扰或抖动,若这次查询到有键按下,则说明信号已经稳定,然后判断闭合按键的键码.当闭合按键地键码确定之后,再去查询按键是否释放,待按键释放后再进行处理,这样既可消除释放抖动的干扰.对于重键则以后一次查询为最后结果。 3) 扫描键盘,得到按下的键的键值.方法是P2。3口连续16次输出“1”电平,然后输出一次“0”电平,同时进行计数为00H,若P2。2口仍为“1”电平,则继续连续输出“1”电平进行移位,并同时计数,直到P2.2口输入的电平为“0”电平,表明此时的键即为按下的键,对应的计
43、数值即为键值,然后调用对应的键处理子程序。键值与键号的对应关系如表5-1所示. 4) 表4—1 键值与键号对应表 键值 00H 01H 02H 03H 04H 05H 键号 0 1 2 3 4 5 键值 06H 07H 08H 09H 0AH 键号 6 7 8 9 . 键值 0BH 0CH 0DH 键号 修改/确认 账号显示 余额/总数 键值 0EH 0FH 10H 键号 开始/停止 备用 备用 开始 调用
44、键盘程序 判断是否按键 数字 功能 返回 图4-2 键盘扫描流程图 4。3 显示子程序 读卡器在运行过程中,对用户的信息进行不断改变,并写入EEPROM中.当用户需要查询IC卡的运行状态时,只需按动显示按钮,即可显示用户的帐号信息、帐号余额、计数值等信息.流程图如图5—4所示。 开始 LCD初始化 清屏 从缓冲区中显示用户信息 显示用户信息 返回 图4-3
45、显示子程序流程图 总结 在了解研究8051单片机的结构特点及其相关的设计实例后,本次设计充分利用其相关的功能,开发设计了IC卡读写器。另外,在软件设计过程中,主要程序代码使用C编写,大大加快了开发进程与后期的可维护性提升.设计主要完成了以下工作: 1.深入了解了8051单片机的性能特点、开发工具和应用领域 2. 使用PROTEL软件绘制完成了系统完整的电路图,实现了基于51单片机的IC卡读写器的设计. 3.以C语言为主,完成了相应的软件设计,达到了预期的效果。 4.最终完成了基于51单片机的IC卡读写器的设
46、计:以51单片机为核心,结合AT24C02作为外部存储器,存放关键信息,液晶SMG12232B-2作为显示系统.实现了IC卡与单片机的通信,有51单片机控制数据传输过程,实现读卡和写卡操作。 参考文献 [1]于宏军,赵东艳.智能卡技术全书.北京:电子工业出版社,1996 [2]王爱英.智能卡技术.北京:清华大学出版社,2000 [3]彭为,黄科,雷道仲.单片机典型系统设计实例精讲. 北京:电子工业出版社,2006.5 [4]段丽斌.智能卡技术应用
47、北京.电子工业出版社,1995 [5]陆永宁。IC卡应用系统。南京:东南大学出版社,2000 [6]沈红卫。单片机应用系统设计实例与分析。北京:北京航空航天大学出版社,2003。1 [7]王卓人,邓晋钧,刘宗祥。IC卡的技术与应用.北京:电子工业出版社,1999 [8]何立民。单片机高级教程。北京:北京航空航天大学出版社,2000.8 [9]李华.MCS-51系列单片机实用接口技术北京:北京航空航天大学出版社,1993。8 [10]吴金戌,沈庆阳,郭庭吉。8051单片机实践与应用。北京:清华大学出版社,2002。9 [11]李光飞,楼然苗,胡佳文,谢象佐。单片机课程设计实例指导。
48、 北京:北京航空航天大学出版社,2004 [11]姜志海,刘连鑫。单片微型计算机原理及应用。北京:机械工业出版社,2007.1 [12]张洪润,刘秀英,张亚凡。单片机应用设计200例。 北京:北京航空航天大学出版社2006。7 总程序图 附录 主程序: #include 〈reg52。h〉 #include ”lcd.h” #include "keyboard.h" #include
49、"SLE4442。H" #define uchar unsigned char #define uint unsigned int #define com_read 0x91 //读卡 #define com_add 0x92 //充值 #define com_dec 0x93 //扣钱 #define change_psw 0x95 //修改密码 #define change_id 0x96 //修改卡号 #define FLAG_RD_OK 0x97 //上传的数据,表示读卡完毕 #define FLAG_WR_OK 0x98 //上传的数据,表示
50、写卡完毕 #define FLAG_RD_ER 0x99 //上传的数据,表示读卡错误 #define FLAG_WR_ER 0xa0 //上传的数据,表示写卡错误 #define FLAG_NO_MONEY 0xa1 //卡上金额不足 #define FLAG_FULL_MONEY 0xa2 //卡上金额过多 #define FLAG_PSW_ER 0xa3 //密码错误 #define FLAG_CARD_LOCK 0xa4 //卡已锁死 #define FLAG_CARD_ER 0xa5 //卡无效 #define addr_money 0x0f //金






