首页资源分类应用技术射频与通信技术 > 《基于单片机的公交非接触IC卡的应用设计》

《基于单片机的公交非接触IC卡的应用设计》

已有 445025个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:公交IC卡

    分    享:

    文档简介

    《基于单片机的公交非接触IC卡的应用设计》

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

    文档预览

    基于单片机的公交非接触IC卡的应用设计 学生: 指导教师: 内容摘要: 非接触式IC卡(俗称感应卡或射频卡)的发展历史仅十余年,至今已成功地应用在经济、行政、通讯等许多场合,特别是公交行业、卫生保健、身份识别、小区管理等,非接触式IC卡有着磁卡和接触式IC卡不可比拟的优点,所以非接触式IC卡一经问世,便立即引起了广泛的关注,并以惊人的速度得到推广和应用。本设计采用PHILIPS公司的Mifare卡作IC卡,设计以射频技术为核心以单片机为控制器的IC卡读写器在公交自动收费系统中的应用。制作的IC卡读写器可以实现制卡、售卡、自动收费等功能,具有安全、实用、方便、快捷、可靠性高的特点,解决了城市公共交通服务行业既频繁又琐碎的收费管理问题,有广泛的应用前景。 关键词:单片机 非接触式IC卡 读写器 Based on single-chip bus non-contact IC card application design Abstract: Non-contact IC card (commonly known as proximity cards or RF card) The development history of more than ten years alone, has been successfully applied in the economic, administrative, communications and many other occasions, especially the bus industry, health care, identification, community management, non-contact IC card has a magnetic card and contactless IC card unparalleled advantages, so non-contact IC card by the advent of one immediately attracted wide attention, and at an alarming rate to be the promotion and application. In this paper, PHILIPS's Mifare cards for IC cards, the design of radio frequency technology as the core for a single-chip controller IC card reader automatically charges in the bus system. The production of IC card reader system can be achieved cards, Card Vending, automatic toll collection and other functions, a safe, practical, convenient, fast, high reliability and features, to resolve the city's public transport servicesector is also frequently trivial charges management issues, has wide application prospect. Key words:Single-chip non-contact IC card card-reader 目 录 (一)本设计的背景 1 (二)本设计的目的和意义 1 二、 总体方案设计 2 (一)工作原理 2 (二)方案的设计 2 (三)方案的论证与选择 3 三、 系统硬件电路设计 5 (一)单片机电路设计 5 (二)键盘电路的设计 6 (三)显示电路的设计 7 (四)存储器电路的设计 10 (五)串行通信接口电路的设计 13 四、 系统软件程序设计 13 (一)单片机内部数据处理程序 14 (二)键盘处理程序 14 (三)LCD液晶显示程序 14 (四)串口通信程序 14 (五)存储器程序 14 五、结束语 14 六、致谢 15 附录一 设计总电路图 16 附录三 部分设计源代码 22 一、 前言 (一)本设计的背景 随着时代的进步,在我们的日常生活和工作中,科技含量越来越高。具有电脑相同结构,但功能精简的小电脑,即单片机(single chip microcomputer)的运用越来越多,家用电器和办公设备的智能化、遥控化、已成为世界潮流,而这些高性能无一不是靠单片机来实现的。近几年,随着微电子技术的迅猛发展,单片机的发展速度十分惊人。它的应用也必将导致传统控制技术发生重大变革。因此,学习单片机的原理,掌握单片机的应用技术,具有重要的意义。 IC 卡是集成电路卡Integrated CircuitCard 的简称,将一个集成电路芯片镶嵌在由聚氯乙烯(PVC)或聚氯乙烯酸酯(PVCA)材料制成的塑料卡片内封装成卡片形状,其外形和尺寸遵循ISO7816 系列标准,集成电路芯片一般分为存储卡芯片和微处理卡芯片。目前经常接触到的IC卡有两种:接触式的和非接触式的IC卡。接触式的IC卡通过机械触点从读写器获取能量和交换数据;非接触式IC卡通过线圈射频感应从读写器获取能量和交换数据,所以又称射频卡。目前在社会上常见的是接触式IC卡。它具有存储量大(以兆为单位),保密功能强(有多重密码设置和认证功能),可实现一卡多用。但是,这类卡的读写操作速度较慢,操作也不方便,每次读写时必须把卡正确地插入到读写器的口槽才能完成数据交换,这样,在公交、考勤等需要频繁读写卡的场合就很不方便,而且读写器的触点和卡片上IC卡的触脚暴露在外,容易损坏和搞脏而造成接触不良。 非接触式IC卡是根据射频电磁感应原理产生的。它的读写操作只需将卡片放在读写器附近一定的距离之内就能实现数据交换,无需任何接触,使用中非常方便、快捷,不易损坏。非接触式IC卡由IC芯片、感应天线组成,封装在一个标准的PVC卡片内,芯片及天线无任何外露部分。是世界上最近几年发展起来的一项新技术,它成功的将射频识别技术和IC卡技术结合起来,结束了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。卡片在一定距离范围(通常为5—10mm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。 (二)本设计的目的和意义 为提高IC卡在公交系统的适应能力,包括用户的各类特殊要求,抗干扰,抗恶劣环境等。方便广大乘客,减轻售票员的负担,本设计具有安全、实用、方便、快捷、可靠性高的特点,解决了城市公共交通服务行业既频繁又琐碎的收费管理问题,有广泛的应用前景。 二、 总体方案设计 (一)工作原理 非接触式IC 卡读写器以射频识别技术为核心,读写器内主要使用了1片Mifare卡专用的读写处理芯片--MMM微模块。它是一个小型的最大操作距离达20~30mm的Mifare读/写设备的核心器件,其功能包括调制、解调、产生射频信号、安全管理和防碰撞机制。内部结构分为射频区和接口区:射频区内含调制解调器和电源供电电路,直接与天线连接;接口区有与单片机相连的端口,还具有与射频区相连的收/发器、16字节的数据缓冲器、存放64对传输密钥的ROM、存放3套密钥的只写存储器以及进行三次证实和数据加密的密码机、防碰撞处理的防碰撞模块和控制单元。这是与射频卡实现无线通信的核心模块,也是读写器读写Mifare卡的关键接口芯片。读写器工作时,不断地向外发出一组固定频率的电磁波(13.6MHz),当有卡靠近时,卡片内有一个LG串联谐振电路,其频率与读写器的发射频率相同,这样在电磁波的激励下,LG谐振电路产生共振,从而使电容充电有了电荷。在这个电容另一端,接有一个单向导电的电子泵,将电容内的电荷送到另一个电容内存储。当电容器充电达到2V时,此电容就作为电源为卡片上的其他电路提供工作电压,将卡内数据发射出去或接收读写器发出的数据与保存。 (二)方案的设计 总体电路设计应该完成六个部分电路:1、单片机及外围电路,2、键盘电路,3、显示电路,4、存储器电路,5、串口通信电路,6、非接触式IC卡。单片机采用八位机AT89C51,根据内部的特性,完全能满足功能要求;因为需要输入的数字量比较多,所以键盘采用4X4矩阵键盘;显示器使用液晶显示器;存储器采用铁电存储器,操作方便,可靠,掉电可保存数据。下面为电路组成框图,如图1: 图1 系统组成框图 (三)方案的论证与选择 1.IC卡的选择 与接触式IC卡相比较,非接触式卡具有以下优点: ⑴可靠性高非接触式IC卡与读写器之间无机械接触,避免了由于接触读写而产生的各种故障。例如:由于粗暴插卡,非卡外物插入,灰尘或油污导致接触不良造成的故障。 此外,非接触式卡表面无裸露芯片,无须担心芯片脱落,静电击穿,弯曲损坏等问题,既便于卡片印刷,又提高了卡片的使用可靠性。 ⑵操作方便由于非接触通讯,读写器在10CM范围内就可以对卡片操作,所以不必插拨卡,非常方便用户使用。非接触式卡使用时没有方向性,卡片可以在任意方向掠过读写器表面,既可完成操作,这大大提高了每次使用的速度。 ⑶防冲突非接触式卡中有快速防冲突机制,能防止卡片之间出现数据干扰,因此,读写器可以“同时”处理多张非接触式IC卡。这提高了应用的并行性,无形中提高系统工作速度。 ⑷可以适合于多种应用非接触式卡的序列号是唯一的,制造厂家在产品出厂前已将此序列号固化,不可再更改。非接触式卡与读写器之间采用双向验证机制,即读写器验证IC卡的合法性,同时IC卡也验证读写器的合法性。非接触式卡在处理前要与读写器之间进行三次相互认证,而且在通讯过程中所有的数据都加密。此外,卡中各个扇区都有自己的操作密码和访问条件。接触式卡的存储器结构特点使它一卡多用,能运用于不同系统,用户可根据不同的应用设定不同的密码和访问条件。 ⑸加密性能好非接触式IC卡由IC芯片, 感应天线组成,并完全密封在一个标准PVC卡片中,无外露部分。非接触式IC卡的读写过程,通常由非接触型IC卡与读写器之间通过无线电波来完成读写操作。非接触型IC卡本身是无源体,当读写器对卡进行读写操作时,读写器发出的信号由两部分叠加组成:一部分是电源信号,该信号由卡接收后, 与其本身的L/C产生谐振, 产生一个瞬间能量来供给芯片工作。另一部分则是结合数据信号,指挥芯片完成数据、修改、存储等, 并返回给读写器。由非接触式IC卡所形成的读写系统,无论是硬件结构,还是操作过程都得到了很大的简化,同时借助于先进的管理软件,可脱机的操作方式,都使数据读写过程更为简单。因此,在公交、门禁、校园、企事业等人事管理、娱乐场所等方面有广泛的应用前景。目前我国引进的射频 IC卡主要有PHILIPS公司的Mifare和ATMEL公司的Temic卡。本设计采用Mifare卡来实现城市公交自动售票IC卡读写器。 2.键盘模块的选择 键盘的作用有两个,其一是输入数据,比如:0、1、2、3、4、5、6、7、8、9这些数字。其二是功能操作,比如:数据的输入输出,功能设置。基于此,有很多种方案可以实现这一功能。 方案一、用一块74LS138译码输出8路扫描信号,3路扫描返回信号线接I/O口输入。这种设计方案电路设计非常的简单,但是软件的编写要考虑软件去抖等,会比较复杂而且占用大量的CPU资源,此种方案不可取。 方案二、矩阵键盘。矩阵键盘,这里采用4X4矩阵键盘,一共有16组情况,实现的方法也是利用单片机的I/O口,通过上拉电阻相接,4X4正好用到了单片机一个端口。采用这种方案既节约资源又方便,而且能够满足本设计的需要。 综上所述,在本设计中我们采用方案二。 3.显示电路模块的选择 显示电路的主要任务是反应出操作结果和IC卡内的数据信息。根据此,有四种方案可完成这一工作。 方案一:可用七段共阳极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显示器。 4.存储器电路模块的选择 存储器的作用在本设计中主要起到公交车票金额或乘车次数的存储,完成这一项工作方案也是多种多样的。下面将一一介绍。 方案一、用紫外线存储器ROM,这个操作不太方便,同时本系统中的数据是不断变化的,因此这种方案不可取。 方案二、可以用海量存储器来完成,当然这个是完全可行的,可以进行在系统中写,掉电后信息也不会掉失。它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统中编程、擦除等特点。并且可由内部嵌入的算法完成对芯片的操作,因而在各种嵌入式系统中得到了广泛的应用。作为一种非易失性存储器,它在系统中通常用存放程序代码、常量表用一些在系统掉电后需要保存的数据。这种存储器当然很好,但是,价格较贵,同时和本系统中的单片机也不容易实现接口,因为数据线和地址较复杂。 方案三、采用串行铁叫存储器。可在系统读写,掉电可保存数据,用I2C总线进行操作,因此需用的单片机端口较少,占用CPU资源较少,同时价格也不贵,唯一不足之处就是存储器量没有海量存储器大。 根据上述三种方案,兼顾价格,容量和可操作性,选用第三种方案,也就是用串行E2ROM。 三、 系统硬件电路设计 本系统由六部分组成:单片机、键盘处理电路、显示器电路、存储器电路、非接触式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之间连接一个电容,目的是保证可靠的复位。 (二)键盘电路的设计 这里采用的是矩阵键盘。矩阵键盘的实现可采用查询的办法,也可以采用中断的方法。4X4的意思即:4根列线,4根行线,列线通上拉电阻接到电源上,因此无按键按下时,各列线均为高电平。当行线分别输出低电平时,有健按下,相应的列线上会出现低电平。根据此原理,CPU对整个键盘进行扫描。所谓扫描,即CPU不断轮流对行线置低电平,然后检查列线输入状态,确定按键情况。电路如图3所示: 图3矩阵键盘图 键盘接口电路用P2口接成4×4结构,共16个键。其中数字键10个,功能键2个,退格键和回车键各1个,有2个键暂时未用。功能键有查询和通信两键。查询键:售卡员可以通过此键查询售卡金额和售卡记录数。 通信键:由于读写器的存储量有限,因此读写器每售卡一段时间,应将读写器中的数据通过RS-232串行接口与PC机通信,以便回放和清空读写器中的数据。数据回放到PC机中后,通过分析处理,形成各种报表,以便公交公司及时掌握售卡情况。 (三)显示电路的设计 这里采用的是两行字符型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的内部结构可以分成三部分:(1).LCD挖掘器,(2).LCD驱动器,(3).LCD显示装置。如图4所示: 图4 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引脚说明表 本设计电路如图5所示,有八根数据线与单片机的P0口相连,三根读写控制线,背光调节电位器,可调节背光亮度。 图5 LCD1602电路连接图 (四)存储器电路的设计 本设计采用串行铁电存贮器FRAM,采用I2C总线工作方式。FRAM铁电存储器的核心技术是美国Ramtron公司研制的铁电晶体材料。这一特殊材料使得铁电存储产品同时拥有随机存储器(RAM)和非易失性存储器(EPROM、E2ROM、FLash)的特性。读写器中设计了存储器。存储器选用24CXX系列的串行E2PROM。在售卡机中主要存放卡号、售卡员号、售卡金额、售卡日期、售卡总金额和售卡总记录数;在车载机中主要存放乘客IC卡号、司机号和刷卡总数等信息。显示用MC14499驱动4位共阴数码管。正常工作后,每隔一段时间要把读写器拿到公交管理中心将读写器储存的信息回放到PC机中保存处理。读写器中存储器可采用24C64,其存储量为8KB,如有需要也可用容量更大的存储器如24C128或24C256等。 1.铁电晶体材料的工作原理 当我们把电场加载到铁电晶体材料上,晶阵中的中心原子会沿着电场方向运动,达到稳定状态,一个状态存储逻辑中的0,另一个状态存储逻辑中的1。中心原子在常温下没有电场的作用时停留在此状态达一百年以上,铁电存储器不需要定时刷新,断电情况下能保存数据不变。由于在整个物理过程中没有任何原子碰撞,铁电存储器(FRAM)拥有高速读写,超低功耗和无限次写入等特性。 2.存储器的基础知识 传统存储器有两大类:易失存储器(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总线技术被越来越广泛地应用到各个领域。本设计电路如图6: 图6 存储器电路图 如图所示,电路用24C64存贮器,A0、A1、A2为地址选择端,主要是用于级连,在总线上挂接多个这样的存贮器时使用,VSS为接地端,VCC为电源正极连接端,WP为写保护控制端,SCL、SDA分别为I2C总线的串行时钟连接端和串行数据连接端,数据的写入与读出就是通过这个端两个端操作的,同时电路中在这两个端口加了两只上接电阻,作用是由于存贮器内部是采用开漏输出的。 (五)串行通信接口电路的设计 串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0~20000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。 RS-232C规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线。在本设计中电路连接图如图7所示: 图7 串行通信口连接图 如图所示,MAX232中电平转换芯片。将差分电平,转换成单片机等可识别的TTL电平,电路中RXD、TXD两根线分别和单片机相连P3口的串行通讯口相连,RXD为数据据接收端,单片机通过这个端口读取PC机等送来的信号,TXD为数据发送端口,主要向PC等设备发送信号。图右边还有一9针串行通信口,主要和PC机相连。 四、 系统软件程序设计 本设计程序共分成五个部分:键盘处理程序、LCD显示程序、单片机内部数据处程序、存储程序、串口和PC机通信程序。 (一)单片机内部数据处理程序 单片机内部数据处理程序,即是系统的主程序。当插上电源后,单片机对系统进行一系列的初始化,包括LCD显示初始化,串口初始化和菜单的初始化,以及判断有无按键按下,并做出相应的处理。主程序流程图如图8所示:(见附录二) (二)键盘处理程序 键盘处理程序,主要作用就是通过用户的按键识别,判断当前的系统任务,通过前面的硬件分析,采用4X4矩阵,一共十六组状态。一方面是数字的输入输出,另一方面的一系列的功能操作。经过键盘扫描程序扫描是否有按键按下,如果有再判断是数字键还是功能键,并做出相应的处理;如果没有则返回继续检查有克按键按下。键盘处理程序流程图如图9所示:(见附录二) (三)LCD液晶显示程序 LCD处理程序,完成信息的显示,包括IC卡内车票余额、该次刷卡消费金额等这些资料。LCD根据键盘处理程序中按键的性质(数字键还是功能键)来操作。流程图如图10所示:(见附录二) (四)串口通信程序 串口通信程序,将读写器储存的信息回放到PC机中保存处理。流程图如图11所示:(见附录二) (五)存储器程序 存储器程序,完成对24C64的数据读取与写入,同时要有掉电保存的功能。流程图如图12:(见附录二) 五、结束语 通过本设计,较系统地掌握有关单片机控制的设计思想和设计方法,主要对51系列单片机的结构、功能、及内部资源,LCD显示器等的了解,并对其进行测试和加以应用的知识得到学习。实现了公交系统自动售票功能.本设计的成本较低,操作简单.但是,本设计也存在上些不足,比如LCD字符型液晶显示器不带有中文字库,不能显示中文,这样显示的内容不是很直观.在IC感应方面,还存在感应距离较近的缺点。不过,在本设计的基础上很容易通过改善设备,对系统进行升级,使功能更齐全,设计更完美。通过这次的毕业设计, 我体会到应该掌握丰富的理论知识,理论知识是设计的前提,但同时又决不能局限于理论,要多动手才能将理论与实际工作联系起来。在设计过程中,深深感受到自己在对一些器件的了解上,还存在很大差距,对它们的功能,参数都不是太熟悉。但是通过这次理论与实际的结合之后,认识比以前有不少提高,在系统硬件设计及软件设计方面都有了长足的进步。 六、致谢 本毕业设计,在设计过程中,从理论到实践,从构建系统框图到画系统框图,再到具体的电路设计及相关的硬件和软件设计,从学习认识元器件,到最后完成一个系统,在这个过程中学习了许多新的专业知识,同时也学会了许多社会人文知识,锻炼了自己动手动脑的能力。在此,对我毕业设计提拱指导帮助的所有老师,表示是衷心的感谢,对在设计过程中遇到困难时,得到帮助的朋友、同学,表示诚挚的谢意! 附录: 附录一 设计总电路图 附录二 程序设计流程图 图8 主程序流程图 图9 键盘处理程序流程图 图10 LCD显示流程图 图11 串口通信流程图 图12 存储器流程图 附录三 部分设计源代码 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 MOV P2,#0F0H MOV A,P2 ANL A,#0F0H ORL A,B CJNE A,#0FFH,KEY1 RET ;无键按下 KEY1: MOV B,A ;有键按下,存键码 MOV DPTR,#TABLE MOV R3,#0FFH ;存顺序码单元初始化 KEY2: INC R3 MOV A,R3 MOVC A,@A+DPTR CJNE A,B,KEY3 ;判键码,求顺序码 MOV A,R3 ;若找到键码,存顺序码 RET KEY3: CJNE A,#0FFH,KEY2 ;判是否查完 RET ;已查完,键码未找到,以无按键处理 TABLE: DB 77H,7BH,0BBH ;按键特征码表 DB 0DBH,7DH,0BDH DB 0DDH,7EH,0BEH DB 0DEH,0B7H,0D7H DB 0EEH,0EDH,0EBH DB 0E7H,0C7H,0FFH ;***********显示程序**************** DISP: CLR P1.0 ;清CLK CLR P1.2 ;清EN MOV R2,#04 ;置传送位数 MOV A,#00 LCALL W14499 ;调送数显示 MOV A,@R1 ;读要显示的数 MOV R2,#08 ;置传送位数 LCALL W14499 INC R1 MOV A,@R1 MOV R2,#08 ;置传送位数 LCALL W14499 SETB P1.2 ;置EN位 RET W14499: SETB P1.0 ;清CLK RLC A ;准备逐位送数显示 MOV P1.1,C ;将数移入DA CLR P1.0 ;清CLK DJNZ R2,W14499 RET 参考文献 [1] 余永权.ATMEL89系列单片机应用技术.北京航空航天大学出版社 [2] 何立民.单片机应用程序设计技术.北京航空航天大学出版社 [3] 沈宇超,沈树群. 射频识别技术及其发展现状. 电子技术应用 [4] 宁改娣.危建国.C51程序设计.科学出版社 [5] 谭浩强.C语言程序设计(第二版).清华大学出版社 [6] 周航慈. 单片机程序设计技术. 北京:北京航空航天大学出版社 [7] EDN电子设计技术网. [8] 沙占友,等. 单片机外围电路设计[M] . 电子工业出版社

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高员外,我们会尽快处理。