公交非接触IC卡读写器

更新时间:2024-05-29 03:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

兰州工业高等专科学校

毕 业 设 计

题 目:公交非接触IC卡读写器的设计

专 业: 检测技术及应用

班 级: 检测09

姓 名: 李兴龙

学 号: 200902104217

指导老师: 周征

(2011,12,07)

摘 要

非接触式IC卡(俗称感应卡或射频卡)的发展历史仅十余年,至今已成功地应用在经济、行政、通讯等许多场合,特别是公交行业、卫生保健、身份识别、小区管理等,非接触式IC卡有着磁卡和接触式IC卡不可比拟的优点,所以非接触式IC卡一经问世,便立即引起了广泛的关注,并以惊人的速度得到推广和应用。本设计采用PHILIPS公司的Mifare卡作IC卡,设计以射频技术为核心以单片机为控制器的IC卡读写器在公交自动收费系统中的应用。制作的IC卡读写器可以实现制卡、售卡、自动收费等功能,具有安全、实用、方便、快捷、可靠性高的特点,解决了城市公共交通服务行业既频繁又琐碎的收费管理问题,有广泛的应用前景。

采用PHILIPS公司的Mifare卡作IC卡,设计以射频技术为核心,以单片机

为控制器的IC卡读写器在公交自动收费系统中的应用。制作的IC卡读写器可以实现制卡、售卡、自动收费等功能,具有安全、实用、方便、快捷、可靠性高的特点,解决了城市公共交通服务行业既频繁又琐碎的收费管理问题,有广泛的应用前景。

关键词:AT89S51单片机 非接触IC卡 读写器 LCD液晶显示器

目 录

一、 引言 ............................................................................................................................................................ 4

(一)本设计的背景 ................................................................................................................................... 4 (二)本设计的目的和意义 ....................................................................................................................... 5 二、 总体方案设计 ............................................................................................................................................. 5

(一)方案设计 ........................................................................................................................................... 5 (二)方案论证与选 ................................................................................................................................... 6 (三)工作原理 ........................................................................................................................................... 9 三、 系统硬件电路设计 ..................................................................................................................................... 9

(一)单片机及其外围电路设计 ............................................................................................................... 9 (二)键盘电路的设计 ............................................................................................. 错误!未定义书签。 (三)显示电路的设计 ............................................................................................. 错误!未定义书签。 (四)存储器电路的设计 ......................................................................................... 错误!未定义书签。 (五)串行通信接口电路的设计 ............................................................................. 错误!未定义书签。 四、 系统软件程序设计 ................................................................................................................................... 25

(一)单片机内部数据处理程序 ............................................................................................................. 25 (二)键盘处理程序 ................................................................................................................................. 26 (三)LCD液晶显示程序 ........................................................................................................................ 27 (四)串口通信程序 ................................................................................................................................. 28 (五)存储器程序 ..................................................................................................................................... 29 五、设计总结 ..................................................................................................................................................... 30 六、致谢............................................................................................................................................................. 31 附录 .................................................................................................................................................................... 32

附录一 电路图 ........................................................................................................................................... 32 附录二 源程序代码 ................................................................................................................................... 34 参考文献............................................................................................................................................................. 42

一、 引言

(一)本设计的背景

当前,单片机被广泛地应用于人们生活的各个领域。单片机实际就是一台微型计算机,虽然功能没有普通的计算机那么强大,可是它的体积很小,在很多场合下普通计算机不能完成的工作,单片机却能出色的完成。单片机是一种集成电路芯片,采用超大规模技术把具有数字处理能力(如算术运算,逻辑运算,数据传送,中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。由此来看,单片机有着微处理器所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。单片机在外观上与常见的集成电路块一样,体积很小,多为黑色长条状,条状两侧各有一排金属引脚,可与外电路连接。只需在电路中添加少许元器件,通过编写程序就可以实现多种功能的单片机自动控制。比如说,单片机接上键盘可以进行信号输入;接上显示器可以实现数据显示;接上喇叭可以实现声音输出等等。由于单片机体积小巧、功能强大、应用灵活、价格便宜,所以应用十分广泛。

IC 卡是集成电路卡Integrated CircuitCard 的简称将一个集成电路芯片镶嵌在由聚氯乙烯(PVC)或聚氯乙烯酸酯(PVCA)材料制成的塑料卡片内封装成卡片形状其外形和尺寸遵循ISO7816 系列标准,集成电路芯片一般分为存储卡芯片和微处理卡芯片。目前经常接触到的IC卡有两种:接触式的和非接触式的IC卡。接触式的IC卡通过机械触点从读写器获取能量和交换数据;非接触式IC卡通过线圈射频感应从读写器获取能量和交换数据,所以又称射频卡。目前在社会上常见的是接触式IC卡。它具有存储量大(以兆为单位),保密功能强(有多重密码设置和认证功能),可实现一卡多用。但是,这类卡的读写操作速度较慢,操作也不方便,每次读写时必须把卡正确地插入到读写器的口槽才能完成数据交换,这样,在公交、考勤等需要频繁读写卡的场合就很不方便,而且读写器的触点和卡片上IC卡的触脚暴露在外,容易损坏和搞脏而造成接触不良。 非接触式IC卡是根据射频电磁感应原理产生的。它的读写操作只需将卡片放在读写器附近一定的距离之内就能实现数据交换,无需任何接触,使用中非常方便、快捷,不易损坏。非接触式IC卡由IC芯片、感应天线组成,封装在一个标准的

PVC卡片内,芯片及天线无任何外露部分。是世界上最近几年发展起来的一项新技术,它成功的将射频识别技术和IC卡技术结合起来,结束了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。卡片在一定距离范围(通常为5—10mm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。 (二)本设计的目的和意义

为提高在公交系统的适应能力,包括用户的各类特殊要求,抗干扰,抗恶劣环境等。方便广大乘客,减轻售票员的负担。

二、 总体方案设计

(一)方案设计

总体电路设计应该完成六个部分电路:1、单片机及外围电路,2、键盘电路,3、显示电路,4、存储器电路,5、串口通信电路,6、非接触式IC卡。单片机采用八位机AT89C51,根据内部的特性,完全能满足功能要求;因为需要输入的数字量比较多,所以键盘采用4X4矩阵键盘;显示器使用液晶显示器;存储器采用铁电存储器,操作方便,可靠,掉电可保存数据。下面为电路组成框图,如图1。

非接触式IC卡 键盘 电路 显示 单 存储器电路 电路 片 机 图1 系统组成框图

串口通信电路

(二)方案论证与选 1.键盘模块的选择

键盘的作用有两个,其一输入数据,比如:0、1、2、3、4、5、6、7、8、9这些数字。其二是功能操作,比如:数据的输入输出,功能设置。基于此,有很多种方案实现这一操作。

方案一、采用直接式独立按键操作。这种方案的操作过程,就是直接从单片机I/O口引出通上拉电阻,接一按键,当按键按下时,单片机该端口为“0”,单片机通过对此端口逻辑“0”判断,来完成按键的识别,达到数据的输入,功能的实现。从这一过程可知,完成任务需要单片机很多I/O口,花费了很多CPU资源,此种方案不可取。

方案二、矩阵键盘。矩阵键盘,这里采用4X4矩阵键盘,一共有16组情况,实现的方法也是利用单片机的I/O口,通过上拉电阻相接,4X4正好用到了单片机一个端口。采用这种方案既节约资源又方便,而且能够满足本设计的需要。

综上所述,在本设计中我们采用方案二。 2、显示电路模块的选择

显示电路的主要任务是反应出操作结果和相关商口的信息。根据此,有四种方案可完成这一工作。

方案一:可用七段共阳极LED数码显示,将商口名称、单价等显示出来,可以完成,将多个LED数码管的段选线相应并联在一起,由一个8位I/O口控制,而各位的共阳极或共阴极分别由相应的I/O口线控制,实现各位的分时选通,这就是动态扫描显示方式,采用动太扫描显示方式,每一位LED的选通时间为1-2ms。这个时间不能太短,因为发光二极管从导通到发光有一定的延时,导通时间太短,发光二极管从导通到发光太弱人眼无法看清,但这个时间也不能太长,否则占用CPU时间太长,由于人眼有视觉暂留现象,只要每一位显示时间足够短,就能够造成多位同时显示的假象,每一位显示的时间间隔不能超过20ms,若时间表间隔太长,就会造成闪烁现象,采用动态扫描方式,可降低功率消耗。此系统,所需数码管较多,操作麻烦,并且不直观,当然其发光数码管价格较便宜。在本系统中,此方案不可取。

方案二:用LED数码管矩阵方式显示。这种方案的显示的原理和方案一都

差不多,用16X16点阵排列,将字型分成上下两个半部,上半部16列,每列用一个字节表示(8个点),下半部也是16列,每列也用一个字节表示(8个点),因此,每个字需要32个字节来表示。当然这样就可以显示汉字,但是和单片机相连较为复杂,本系统要许多块这样的16X16点阵,同时这种LED点阵方式显示,造价较高,作为本电路,也是不可取。

方案三:采用带中文字库的LCD液晶显示器来完成显示,128×64这种显示器作为本系统设计,当然最好。便考虑到系统成本的问题,带中文字库的LCD一般都比较贵,采用这种方案,势必会增加设计成本。本设计也不采用这种方案。 方案四、采用两行字符型显示器。这种显示器,用英文显示相关信息,操作方便,价格又适中,作为本设计是最合适不过。

因此,结合上述方案,在本设计中,我们采用两行字符型1602显示器。 3、存储器电路模块的选择

存储器的作用在本设计中主要起到基本商品信息的存储,和最后商品的出入信息的存贮。完成这一项工作方案也是多种多样的。下面将一一介绍。

方案一、用紫外线存储器ROM,这个操作不太方便,同时本系统中的数据是不断变化的,因此这种方案不可取。

方案二、可以用海量存贮器来完成,当然这个是完全可行的,可经进行在系统写,掉电后信息也不会掉失。它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统中编程、擦除等特点。并且可由内部嵌入的算法完成对芯片的操作,因而在各种嵌入式系统中得到了广泛的应用。作为一种非易失性存储器,它在系统中通常用存放程序代码、常量表用一些在系统掉电后需要保存的数据。这种存贮器当然很好,但是,价格较贵,同时和本系统中的单片机也不容易实现接口,因为数据线和地址较复杂。

方案三、采用串行铁叫存贮器。可在系统读写,掉电可保存数据,用I2C总线进行操作,因此需用的单片机端口较少,占用CPU资源较少,同时价格也不贵,唯一不足之处就是存贮器量没有海量存贮器大。

根据上述三种方案,我们兼顾价格,容量和可操作性,选用第三种方案,也就是用串行E2ROM。

4.IC卡的选择

与接触式IC卡相比较,非接触式卡具有以下优点:

⑴可靠性高非接触式IC卡与读写器之间无机械接触,避免了由于接触读写而产生的各种故障。例如:由于粗暴插卡,非卡外物插入,灰尘或油污导致接触不良造成的故障。 此外,非接触式卡表面无裸露芯片,无须担心芯片脱落,静电击穿,弯曲损坏等问题,既便于卡片印刷,又提高了卡片的使用可靠性。⑵操作方便由于非接触通讯,读写器在10CM范围内就可以对卡片操作,所以不必插拨卡,非常方便用户使用。非接触式卡使用时没有方向性,卡片可以在任意方向掠过读写器表面,既可完成操作,这大大提高了每次使用的速度。⑶防冲突非接触式卡中有快速防冲突机制,能防止卡片之间出现数据干扰,因此,读写器可以“同时”处理多张非接触式IC卡。这提高了应用的并行性,,无形中提高系统工作速度。⑷可以适合于多种应用非接触式卡的序列号是唯一的,制造厂家在产品出厂前已将此序列号固化,不可再更改。非接触式卡与读写器之间采用双向验证机制,即读写器验证IC卡的合法性,同时IC卡也验证读写器的合法性。非接触式卡在处理前要与读写器之间进行三次相互认证,而且在通讯过程中所有的数据都加密。此外,卡中各个扇区都有自己的操作密码和访问条件。接触式卡的存储器结构特点使它一卡多用,能运用于不同系统,用户可根据不同的应用设定不同的密码和访问条件。⑸加密性能好非接触式IC卡由IC芯片, 感应天线组成, 并完全密封在一个标准PVC卡片中, 无外露部分。非接触式IC卡的读写过程, 通常由非接触型IC卡与读写器之间通过无线电波来完成读写操作。非接触型IC卡本身是无源体, 当读写器对卡进行读写操作时, 读写器发出的信号由两部分叠加组成:一部分是电源信号,该信号由卡接收后, 与其本身的L/C产生谐振, 产生一个瞬间能量来供给芯片工作。另一部分则是结合数据信号,指挥芯片完成数据、修改、存储等, 并返回给读写器。由非接触式IC卡所形成的读写系统, 无论是硬件结构, 还是操作过程都得到了很大的简化, 同时借助于先进的管理软件,可脱机的操作方式, 都使数据读写过程更为简单。因此,在公交、门禁、校园、企事业等人事管理、娱乐场所等方面有广泛的应用前景。目前我国引进的射频 IC卡主要有PHILIPS公司的Mifare和ATMEL公司的Temic卡。本设计采用Mifare卡来实现城市公交自动售票IC卡读写器。

(三)工作原理

非接触式IC 卡读写器以射频识别技术为核心,读写器内主要使用了1片Mifare卡专用的读写处理芯片--MMM微模块。它是一个小型的最大操作距离达20~30mm的Mifare读/写设备的核心器件,其功能包括调制、解调 频信号、安全管理和防碰撞机制。内部结构分为射频区和接口区:射频区内含调制解调器和电源供电电路,直接与天线连接;接口区有与单片机相连的端口,还具有与射频区相连的收/发器、16字节的数据缓冲器、存放64对传输密钥的ROM、存放3套密钥的只写存储器以及进行三次证实和数据加密的密码机、防碰撞处理的防碰撞模块和控制单元。这是与射频卡实现无线通信的核心模块,也是读写器读写Mifare卡的关键接口芯片。读写器工作时,不断地向外发出一组固定频率的电磁波(13.6MHz),当有卡靠近时,卡片内有一个LG串联谐振电路,其频率与读写器的发射频率相同,这样在电磁波的激励下,LG谐振电路产生共振,从而使电容充电有了电荷。在这个电容另一端,接有一个单向导电的电子泵,将电容内的电荷送到另一个电容内存储。当电容器充电达到2V时,此电容就作为电源为卡片上的其他电路提供工作电压,将卡内数据发射出去或接收读写器发出的数据与保存。

三、 系统硬件电路设计

本系统由六部分组成:单片机、键盘处理电路、显示器电路、存储器电路、非接触式IC卡等。下面将着重讨论前面五部分电路的设计过程。 (一)单片机及其外围电路设计

微处理电路采用AEMEL公司的单片机,价格便宜、功能齐全、可靠性高、使用普遍。AT89C51单片机是ATMEL公司8位单片机系列产品之一,是一种40引脚双列直插式芯片。AT89C51有4K FLASH;128字节RAM;32条I/O引线;2个16位定时器/计数器;一个5向量2级中断结构;一个全双工串行口;一个片内震荡器和时钟电路。此外,AT89C51是用可降到0频率的静态逻辑操作设计的,并支持两种可选的软件节能工作方式。空闲方式停止CPU工作,但允许RAM、定时器/计数器、串行口和中断系统继续工作。掉点方式保持RAM内容,但振荡器停止工作,并禁止所有其他部件的工作直到下一个硬件复位。它含有4KB可反复烧录及擦除内存和128字节的RAM,有32条可编程控制的I/O

线,5个中断源,指令与MCS-51系列完全兼容。选用它作为核心控制新片,可使电路极大地简化,而且程序的编写及固化也相当方便、灵活。本系统设计电路图2所示。

图2 单片机电路图

如图2所示,P0口为LCD的八根数据总线,P2.5、P2.6、P2.7三根线为LCD的读写控制线和使能端。P3.6、P3.7为存贮器的两根总线,主要用于数据的读取与存贮。P1口为矩阵键盘列线与行线的接口,实现4X4键盘,完成相关的工能操作,比如说,数字的输入,功能操作等。XTAL1和XTAL2口接外部晶体振荡器,保证单片机内部各部分有序的工作。P3.0、P3.1口接串行端口,分别作串行数据的接收端和发送端。RST与Vss之间连接一个下拉电阻,与Vcc之间连接一个电容,目的是保证可靠的复位。

AT89C51单片机的介绍——最常用的51芯片

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1.主要特性:

·与MCS-51 兼容

·4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年

·全静态工作:0Hz-24Hz ·三级程序存储器锁定 ·128*8位内部RAM ·32可编程I/O线

·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道

·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路

2.管脚说明:

VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能

P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)

P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。

3.振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

4.芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

(二)键盘电路

键盘接口电路用P2口接成4×4结构,共16个键。其中数字键10个,功能键2个,退格键和回车键各1个,有2个键暂时未用。 功能键有查询和通信两键。

查询键:售卡员可以通过此键查询售卡金额和售卡记录数。

通信键:由于读写器的存储量有限,因此读写器每售卡一段时间,应将读写器中的数据通过RS-232串行接口与PC机通信,以便回放和清空读写器中的数据。数据回放到PC机中后,通过分析处理,形成各种报表,以便公交公司及时掌握售卡情况。

1.矩阵式键盘的结构与工作原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。

矩阵键盘

2、矩阵式键盘的按键识别方法

<1>确定矩阵式键盘上何键被按下介绍一种“行扫描法”。

行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

1、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电

平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

矩阵键盘的实现可采用查询的办法,也可以采用中断的方法。4X4的意思即:4根列线,4根行线,列线通上拉电阻接到电源上,因此无按键按下时,各列线均为高电平。当行线分别输出低电平时,有健按下,相应的列线上会出现低电平。根据此原理,CPU对整个键盘进行扫描。所谓扫描,即CPU不断轮流对行线置低电平,然后检查列线输入状态,确定按键情况。电路如图4所示:

图4矩阵键盘图

键盘接口电路用P2口接成4×4结构,共16个键。其中数字键10个,功能键2个,退格键和回车键各1个,有2个键暂时未用。功能键有查询和通信两键。查询键:售卡员可以通过此键查询售卡金额和售卡记录数。 通信键:由于读写器的存储量有限,因此读写器每售卡一段时间,应将读写器中的数据通过RS-232串行接口与PC机通信,以便回放和清空读写器中的数据。数据回放到PC机中后,通过分析处理,形成各种报表,以便公交公司及

时掌握售卡情况。

下面给出一个具体的例子:

图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有

4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。

1、检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。

2、去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。

3、若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出: P1.7 1 1 1 0 P1.6 1 1 0 1

P1.5 1 0 1 1 P1.4 0 1 1 1

在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。 <2>确定矩阵式键盘上何键被按下介绍一种“高低电平翻转法”。

首先让P1口高四位为1,低四位为0,。若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置。 然后让P1口高四位为0,低四位为1,。若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。 最后将上述两者进行或运算即可确定被按下的键的位置。

键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。

1.键盘的工作原理: 键盘的工作原理: 按键设置在行、列线交点上,行、列线分别连接到按键开关的 两端。行线通过上拉电阻接到+5V 电源上。无按键按下时,行线处 于高电平的状态, 而当有按键按下时, 行线电平与此行线相连的列 线电平决定。

2.行列扫描法原理: 原理: .行列扫描法原理 第一步, 使行线为编程的输入线,列线是输出线,拉低所有的列线, 判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则 所有的行线都为高电平。 第二步, 在第一步判断有键按下后, 延时 10ms 消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用逐 行扫描,每间隔 1ms 的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置, 分别把行值和列值储存在寄存器里。第四步,从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键

值进行编码,按照从第一行第一 个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码,最后显示按键号码。 3.数码管动态扫描原理: .数码管动态扫描原理: 数码管的 7 个段及小数点都是由 LED 块组成的,显示方式分为静 态显示和动态显示两种。数码管在静态显示方式时,其共阳管的位选 信号均为低电平,四个数码管的共用段选线 a、b、c、d、e、f、g、dp 分别与 CPLD 的 8 根 I/O 口线相连,显示数字时只要给相应的段选线送 低电平。数码管在动态显示方式时,在某一时刻只能有一个数码管被 点亮显示数字,其余的处于非选通状态,位选码端口的信号改变时, 段选码端口的信号也要做相应的改变 ,每位显示字符停留显示的时间 一般为 1-5ms,利用人眼睛的视觉惯性,在数码管上就能看到相当稳定 的数字显示。

(三)显示电路

显示部分采用数码显示,利用串行输入BCD码--十进制译码驱动显示器件MC14499来完成与单片机系统的显示接口,以显示读写器工作状态、输入的数据或读出IC卡中所剩余以及出错信息等。此器件主要有1个20位移位寄存器、1个锁存器、1个多路输出器。多路输出器输出的BCD码经段译码器译码后,换成七段码(abcdefg)和小数点DP送到段驱动器输出。 液晶电路

如图4-6: RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。EN端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0~D7为8位双向数据线。

这里采用的是两行字符型1602显示器,下面详细介绍1602及其使用。 1.字符型点阵式LCD液晶显示屏

LCD的应用很广泛,简单如手表上的液晶显示屏,仪表仪器上的液晶显示器或者是电脑笔记本上的液晶显示器,都使用了LCD。在一般的办公设备上也很常见,如传真机,复印机,以及一些娱乐器材玩具等也常常见到LCD的足迹。本设计要介绍的LCD为字符型点阵式LCD模块(Liquid Crystal Display Module)简称LCM,或者是字符型LCD。

字符型液晶显示模块是一类专门用于显示字母,数字,符号等的点阵式液晶显示模块。在显示器件上的电极图型设计,它是由若干个5*7或5*11等点阵符位组成。每一个点阵字符位都可以显示一个字符。点阵字符位之间有一空点距的间隔起到了字符间距和行距的作用。目前市面上常用的有16字*1行,16字*2行,20字*2行和40字*2行等的字符模块组。这些LCM虽然显示字数各不相同,但是都具有相同的输入输出界面。本设计将以WINTECH 16*2字符型液晶显示模块WM-C1602N为例,详细介绍字符液晶显示模块的应用技术。

一般字符LCD模块的控制器为日本日立新华通讯社的HD44780及其替代集成电路,驱动器为HD44100及其替代的集成电路。

2.LCD液晶显示屏的内部结构

液晶显示模块WN-C1602N的内部结构可以分成三部分:①、LCD挖掘器,②、LCD驱动器,③、LCD显示装置。如图5所示:

图5 LCD内部结构图

目前大多数的LCD液晶显示器的控制器都有采用一颗型号为HD44780的集成电路作控制器。HD44780是集控制器,驱动器于一体,专用于字符显示控制驱动集成电路。HD44780是字符型液晶显示控制器的代表电路。

HD44780集成电路的特点:

HD44780不仅作为控制器而且还具有驱动40*16点阵液晶像素的能力,并且HD44780的驱动能力可通过外接驱动器扩展360列驱动。

HD44780的显示缓冲区及用户自定义的字符发生器CGRAM全部内藏在芯片内。

HD44780具有适用于M6800系列MPU的接口,并且接口数据传输可为8位数据和4位数据传输两种方式。

D44780具有简单而功能较强的指令集,可实现字符移动,闪烁等显示功能。由于HD44780的DDRAM容量所限,HD44780可控制的字符高达每行80个字,也就是5*80=400点,HD44780内藏有16路行驱动器和40路列驱动器,所以HD44780本身就具驱动有16*40点阵LCD能力(即单行16个字符或两行8个字符)。如果在外部加一HD44100外扩展多40路/列驱动,则可驱动16*2LCD。

HD44780内藏的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。比如数字“1”的代码是00110001B(31H),又如大写的英文字母“A”的代码是01000001B(41H)。

表1 WM-C1602N的CGRAM字符图形代码对应表

3.LCD的应用

液晶显示模块LCD1602在显示“1”时,则我们只需将ASCII码31H存入DDRAM即可。显示时模块把地址31H中的点阵字符图形显示出来,我们就能看到数字“1”了。DDRAM有80bytes空间,共可显示80个字,地址与实际显示位置的排列顺序跟LCD的型号有关。

1602采用标准的16脚接口,如表2所示。其中VSS为地电源,VDD接5V正电源,VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0-D7为8位双向数据线。

表2 LCD1602引脚说明表

本设计电路如图6所示,有八根数据线与单片机的P0口相连,三根读写控制线,背光调节电位器,可调节背光亮度。

图6 LCD1602电路连接图

(四)存储器

传统存储器有两大类:易失存储器(volatile memory)和非易失存储器(non-volatile memory),易失性存储器像SRAM和DRAM存储器在没有电源的

情况下都不能保存数据,但这种存储器拥有高性能,存取速度快和无限次的写入次数,易用等优点。非易失性存储器像EPROM、E2ROM和FLash能在断电后保存数据不变,但由于所有这些存储器均起源只读存储器(ROM)技术,因此它们都有写入速度慢,写入次数有限和使用时功耗大等缺点。

16K位铁电存储器(FRAM)的性能和16K位E2ROM性能相比较,FRAM第一个最明显的优点是:FRAM可以跟随总线速度写入,无需任何等候时间,而E2ROM需等几毫秒(ms)才能写入一下数据。FRAM第二大优点是几乎无限次的写入。E2ROM的写入次数是每百万次(10的6次方),而新一代的铁电存储器(FRAM)却是一亿亿次(10的6次方)写入寿命。FRAM的第三大优点是超低功能。E2ROM的慢速和高电流写入一个字节令它需要高出FRAM2500倍的能量。

表3 性能比较表

3.铁电存贮器FRAM的应用

FRAM无限次快速擦写和非易性的特点,令它的系统工程师可以把现在在电路上分离的SRAM和E2ROM两种存储器整合到一个FRAM里,为整个系统节省了功耗,降低了成本,减小了体积,同时增加了整个系统的可靠性。 典型应用包括:仪器仪表、工业控制、家用电器、复印机、打印机、机顶盒、网络设备、游戏机、计算机等等。

4.I2C总线知识

该存贮器采用I2C总线方式工作,在软件操作时,就得用I2C总线方式进行读写。I2C总线是由PHILIPS公司发明的一种高性能芯片间串行同步传输总线。与SPI、MicroWire接口不同,它仅仅需要两根信号线(串行数据线SDA和串行时钟线SCL),就实现了完善的双工同步数据传送,能够极其方便地构成多机系

统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址端,从而使硬件系统具有更简单、更灵活的扩展方法。

鉴于I2C总线的众多功能优越性,目前,以PHILIPS公司为主的许多著名半导体制造公司,纷纷研制出了大量的种类繁多的(已经达数百种型号)带有I2C总线硬件接口的单片机、通用外围器件,例如RAM、EEPROM、NVRAM、I/O、ADC、DAC、日历时钟RTC、LED驱动器、LCD驱动器、温度传感器等等。另外,还开发了面向一些特殊应用系统中专用配套的I2C总线芯片,例如无线电、无绳电话、移动手机、电视机、音响系统、家庭影院等系统中的双音多频(DTMF)拨号器、语音合成器、数字调谐器、编码器、解码器、图像处理器、频率合成器、音调控制器、立体声处理器等等,因此,I2C总线技术被越来越广泛地应用到各个领域。本设计电路如图7:

图7 存储器电路图

如图所示,电路用24C64存贮器,A0、A1、A2为地址选择端,主要是用于级连,在总线上挂接多个这样的存贮器时使用,VSS为接地端,VCC为电源正极连接端,WP为写保护控制端,SCL、SDA分别为I2C总线的串行时钟连接端和串行数据连接端,数据的写入与读出就是通过这个端两个端操作的,同时电路中在这两个端口加了两只上接电阻,作用是由于存贮器内部是采用开漏输出的。

读写器中设计了存储器。存储器选用24CXX系列的串行E2PROM。在售卡机中主要存放卡号、售卡员号、售卡金额、售卡日期、售卡总金额和售卡总记录数;在车载机中主要存放乘客IC卡号、司机号和刷卡总数等信息。显示用MC14499驱动4位共阴数码管。正常工作后,每隔一段时间要把读写器拿到公交管理中心将读写器储存的信息回放到PC机中保存处理。读写器中存储器可采用24C64,其存储量为8KB,如有需要也可用容量更大的存储器如24C128或24C256等。

(五)监控电路

监控电路采用DS1232L芯片。它是个看门狗定时器,其功能是:上电和掉电时给89C52产生RESET信号;看门狗对系统进行监控,防止死机。

(六)非接触式IC卡

非接触式IC卡选用Mifare卡。其工作频率为 13.6MHz,存储量为1KB分16区,每区2套密码,每个区的存储区域相互独立,因此每区可用作一种用途(第0区一般不用)以实现一卡多用。由于Mifare卡密码验证机制严密,保存的信息比较可靠安全,可以擦写几万次。

Mifare卡的16个区,每区又分4块,每块16字节。在售卡机中用第1区作用户储值块,其中第0块存放身份号,第1~2块存放价值,第3块存放两套6字节密码和4字节读写访问条件。

(七) 语音播报单元

(八)串行通信接口电路的设计

串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0~20000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。

RS-232C规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线。在本设计中电路连接图如图8所示:

图8 串行通信口连接图

如图所示,MAX232中电平转换芯片。将差分电平,转换成单片机等可识别的TTL电平,电路中RXD、TXD两根线分别和单片机相连P3口的串行通讯口相连,RXD为数据据接收端,单片机通过这个端口读取PC机等送来的信号,TXD为数据发送端口,主要向PC等设备发送信号。图右边还有一9针串行通信口,主要和PC机相连。

四、 系统软件程序设计

本设计程序共分成五个部分:键盘处理程序、LCD显示程序、单片机内部数据处程序、存贮程序、串口和PC机通信程序。 (一)单片机内部数据处理程序

单片机内部数据处理程序,即是系统的主程序。当插上电源后,单片机对系统进行一系列的初始化,包括LCD显示初始化,串口初始化和菜单的初始化,以及判断有无按键按下,并做出相应的处理。主程序流程图如图9:

开 始 初始化LCD 初始化串口 初始化菜单 N 判断是否有按键按下 Y 进入键盘处理程序 结 束 图9 主程序流程图

(二)键盘处理程序

键盘处理程序,主要作用就是通过用户的按键识别,判断当前的系统任务,通过前面的硬件分析,采用4X4矩阵,一共十六组状态。一方面是数字的输入输出,另一方面的一系列的功能操作。经过键盘扫描程序扫描是否有按键按下,如果有再判断是数字键还是功能键,并做出相应的处理;如果没有则返回继续检查有克按键按下。键盘处理程序流程图如图10所示。

开 始 N 检测按键? Y 判断是数字键?还是功能键? 数字功能显示、存储等处理 (三)LCD液晶显示程序

LCD处理程序,完成信息的显示,包括商品号,单价,数量,总计金额等这些资料。LCD根据键盘处理程序中按键的性质(数字键还是功能键)来操作。流程图如图11所示:

确定数字 确定功能 执行并处理 结 束

图10 键盘处理程序流程图

开 始 检测忙信号 写命令 写数据 显示设置8位2行5X7点阵 显示器、光标、闪烁设置 光标移动设置 清显示 结 束

图11 LCD显示流程图

(四)串口通信程序

串口通信程序,完成将完交的数量,以及总金额,卖出与进入的商品告知PC机完成汇总。流程图如图12所示:

开 始 初始化 判断是否是发送或请求命令 发送接收发送数据 (五)存储器程序

存贮器程序,完成对24C64的数据读取与写入,同时要有掉电保存的功能。流程图如图13:

结 束 图12 串口通信流程图

接收数据

开始 初始化 写数据到存储器 判断写入?还是读出? 读存储器数据 结 束

图13 存储器流程图

五、设计总结

本系统的制作,性能和效果都比较好,通过键盘有操作,LCD直观的显示,和串口的通信及信息的存贮都能达到设计的要求,实现了公交系统自动售票功能.本设计的成本较低,操作简单.但是,本设计也存在上些不足,比如LCD字符型液晶显示器不带有中文字库,不能显示中文,这样显示的内容不是很直观.在IC感应方面,还存在感应距离较近的缺点。不过,在本设计的基础上很容易通过改善设备,对系统进行升级,使功能更齐全,设计更完美。通过这次的毕业设计, 我体会到应该掌握丰富的理论知识,理论知识是设计的前提,但同时又决不能局限于理论,要多动手才能将理论与实际工作联系起来。在设计过程中,深深感受到自己在对一些器件的了解上,还存在很大差距,对它们的功能,参数都不是太熟悉。但是通过这次理论与实际的结合之后,认识比以前有不少提高,在系统硬件设计及软件设计方面都有了长足的进步。

六、致谢

本毕业设计,在设计过程中,从理论到实践,从构建系统框图到画系统框图,再到具体的电路设计及相关的硬件和软件设计,从学习认识元器件,到最后完成一个系统,在这个过程中学习了许多新的专业知识,同时也学会了许多社会人文知识,锻炼了自己动手动脑的能力。在此,对我毕业设计提拱指导帮助的所有老师,表示是忠心的感谢,对在设计过程中遇到困难时,得到帮助的朋友、同学,表示诚挚的谢意!

附录

附录一 电路图

附录二 源程序代码 1、主程序代码

IO BIT P1.0 CLK BIT P1.1

RST BIT P1.2 ICSW BIT P1.6 PWR BIT P1.7 PSC1 EQU 0FFH PSC2 EQU 0FFH PSC3 EQU 0FFH ORG 0000H LJMP

MAIN

;*************主程序************** ORG 0030H MAIN:

CLR EA ;关中断

MOV SP,#60H ;设置堆栈 LCALL PWRON ;上电控制 LCALL RESET ;复位

MOV R0,#30H ;设置读数据缓冲区1首地址 LCALL READ ;读主存储器 NOP ;断点①

LCALL COMP ;PSC校验

XRL A,R4 ;断点②,检查PSC校验是否正确 JNZ EXIT ;PSC校验失败退出

MOV R0,#50H ;设置写数据缓冲区首地址 LCALL WRITE ;修改主存储器

MOV R0,#40H ;设置读数据缓冲区2首地址 LCALL READ ;读主存储器 EXIT:NOP ;断点③ LCALL PWROFF ;下电控制 SJMP $

;**********读主存储器子程序************** READ:

MOV R7,#30H ;设置读主存储器命令控制字 MOV R6,20H ;取读主存储器命令地址字

MOV R5,#00H ;设置读主存储器命令数据字(任意) MOV R4,21H ;取要读的字节数

MOV R3,21H ;要读的字节数暂存R3 MOV R2,#00H

LCALL COMMAND ;送命令给卡

READ0:LCALL SHIN ;读数据(输出数据模式) MOV @R0,A ;送数据入数据缓冲区 INC R0

DJNZ R4,READ0 ;未读完继续

CLR C ;计算剩余的主存储器字节数 MOV A,#0FFH SUBB A,R6 SUBB A,R3 INC A

MOV R2,A

READ1:LCALL SHIN ;读入剩余的主存储器字节 DJNZ R2,READ1

SETB CLK ;发送一个附加脉冲 LCALL DELAY_4 μs CLR CLK

LCALL DELAY_4μs

SETB IO ;置位数据线 LCALL DELAY_4 μs RET

;************修改主存储器子程序*********** WRITE:

MOV R4,21H ;取要写的字节数

WRITE0:MOV R7,#38H ;设置修改主存储器命令控制字 MOV R6,20H ;取修改主存储器命令地址字 MOV A,@R0

MOV R5,A ;取修改主存储器命令数据字 LCALL COMMAND ;送修改主存储器命令给卡 LCALL OPERA254 ;处理模式

INC 32H ;地址字指向主存储器下一个单元 INC R0 ;指向下一个数据

DJNZ R4,WRITE0 ;未写完继续 RET

;************PSC校验子程序*************** COMP:

MOV R7,#31H ;设置读加密存储器命令控制字

MOV R6,#00H ;设置读加密存储器命令地址字(00H为错误计数器) MOV R5,#00H ;设置读加密存储器命令数据字(任意) LCALL COMMAND ;送读加密存储器命令 LCALL SHIN ;读错误计数器

MOV 22H,A ;错误计数器值暂存22H单元 LCALL SHIN ;继续读入加密存储器后3个字节 MOV 23H,A LCALL SHIN MOV 24H,A LCALL SHIN MOV 25H,A MOV A,22H

SETB IO ;附加一个脉冲,置数据线为高 LCALL DELAY_4μs SETB CLK

LCALL DELAY_4 μs CLR CLK

JB ACC.0,NEXT0 ;判断错误计数器中是否还有“1” JB ACC.1,NEXT1 ;如有“1”则减去一个“1” JB ACC.0,COMP2

LJMP EXIT ;错误计数器为全“0”退出 NEXT0:MOV R5,#06H MOV R4,#07H AJMP COMP0

NEXT1:MOV R5,#04H MOV R4,#06H AJMP COMP0

NEXT2: MOV R5,#00H MOV R4,#04H

COMP0: MOV R7,#39H ;设置修改加密存储器命令控制字

MOV R6,#00H ;设置修改加密存储器命令地址字(错误计数器) LCALL COMMAND ;送修改加密存储器命令(错误计数器减一个1) LCALL OPERA123 ;处理模式

MOV R7,#33H ;设置PSC校验命令控制字 MOV R6,#01H ;设置PSC校验命令地址字 MOV R5,#PSC1 ;取PSC第1个字节 LCALL COMMAND ;送PSC校验命令给卡 LCALL OPERA123 ;处理模式

MOV R7,#33H ;设置PSC校验命令控制字

MOV R6,#02H ;设置PSC校验命令地址字 MOV R5,#PSC2 ;取PSC第2个字节 LCALL COMMAND ;送PSC校验命令给卡 LCALL OPERA123 ;处理模式

MOV R7,#33H ;设置PSC校验命令控制字 MOV R6,#03H ;设置PSC校验命令地址字 MOV R5,#PSC3 ;取PSC第3个字节 LCALL COMMAND ;送PSC校验命令给卡 LCALL OPERA123 ;处理模式

MOV R7,#39H ;设置修改加密存储器命令控制字

MOV R6,#00H ;设置修改加密存储器命令地址字(错误计数器) MOV R5,R4 ;取修改加密存储器命令数据字(擦除错误计数器) LCALL COMMAND ;送修改加密存储器(擦除错误计数器)命令给卡 LCALL OPERA123 ;处理模式

MOV R7,#31H ;设置读加密存储器命令控制字

MOV R6,#00H ;设置读加密存储器命令地址字(错误计数器) MOV R5,#00H ;设置读加密存储器命令数据字(任意) LCALL COMMAND ;送读加密存储器命令给卡 LCALL SHIN ;读加密存储器的错误计数器 MOV 22H,A

LCALL SHIN ;读加密存储器的后3个字节 MOV 23H,A LCALL SHIN MOV 24H,A LCALL SHIN MOV 25H,A MOV A,22H

SETB IO ;附加一个脉冲,置数据线为高 LCALL DELAY_4μs SETB CLK

LCALL DELAY_4μs CLR CLK EXIT: RET

;************命令子程序*************** ;该子程序送出3字节的SLE4442命令

;入口参数:R7为控制字,R6为地址字,R5为数据字 ;调用时CLK为低,IO为高;返回时CLK为高,IO为高 COMMAND: SETB CLK

LCALL DELAY_12μs CLR IO

LCALL DELAY_4μs CLR CLK

LCALL DELAY_4μs

MOV A,R7 LCALL SHOUT MOV A,R6 LCALL SHOUT MOV A,R5 LCALL SHOUT LCALL DELAY_4μs

CLR IO

LCALL DELAY_4μs SETB CLK

LCALL DELAY_4 μs SETB IO RET

;*************串行输出一个字节子程序*********** SHOUT: PUSH B

MOV B,#08H X42: RRC A MOV IO,C NOP

SETB CLK

LCALL DELAY_4μs CLR CLK

LCALL DELAY_4μs DJNZ B,X42 POP B RET

;*************串行输入一个字节子程序***************** SHIN:

CLR CLK PUSH B

MOV B,#08H

X43: LCALL DELAY_4 μs SETB CLK MOV C,IO RRC A

LCALL DELAY_4 μs CLR CLK DJNZ B,X43 POP B RET

;*********处理模式1子程序************ OPERA123:

MOV R7,#123D

CLR CLK CLR IO

LCALL DELAY_4μs OPERA0:SETB CLK LCALL DELAY_4μs CLR CLK

LCALL DELAY_4μs OPERA0:SETB CLK

LCALL DELAY_4μs CLR CLK LCALL DELAY_4μs

DJNZ R7,OPERA0 SETB IO

LCALL DELAY_4 μs SETB CLK

LCALL DELAY_4 μs CLR CLK RET

;**************处理模式2子程序*********** OPERA254:

MOV R7,#254D CLR CLK CLR IO

LCALL DELAY_4 μs OPERA1:SETB CLK

LCALL DELAY_4 μs CLR CLK

LCALL DELAY_4 μs DJNZ R7,OPERA1 SETB IO

LCALL DELAY_4 μs SETB CLK

LCALL DELAY_4 μs CLR CLK RET

;*************复位子程序*************** RESET:

CLR RST CLR CLK CLR IO

LCALL DELAY_12 μs LCALL DELAY_12 μs SETB RST

LCALL DELAY_12 μs

SETB CLK

LCALL DELAY_12 μs CLR CLK

LCALL DELAY_12 μs CLR RST

LCALL DELAY_12 μs MOV B,#20H RESET0: SETB CLK

LCALL DELAY_12 μs CLR CLK

LCALL DELAY_12 μs DJNZ B,RESET0 SETB IO RET

;**************上电控制子程序*********** PWRON:

CLR RST CLR IO CLR CLK

LCALL RECOG CLR RST CLR CLK

LCALL DELAY_10 ms CLR PWR CLR IO RET

RECOG: JB ICSW,RECOG LCALL DELAY_10 ms JB ICSW,RECOG RET

;***********下电控制子程序************** PWROFF:

CLR RST CLR CLK CLR IO

LCALL DELAY_10 ms SETB PWR RET END

;***********键盘扫描程序**************** KEY: MOV P2,#0FH ;用反转法查键 MOV A,P2 ANL A,#0FH MOV B,A

本文来源:https://www.bwwdw.com/article/k4u7.html

Top