欢迎访问博鱼(中国)官方网站-BOYU SPORTS!

预约上门| 联系博鱼(中国)

全国24服务热线

400-123-4567
行业新闻 公司新闻
博鱼中国官网基于MSP430单片机的智能门锁控制系统设计毕业设计
时间:2024-02-01 17:39:38        点击量:【 】次

  博鱼中国官网基于MSP430单片机的智能门锁控制系统设计毕业设计基于MSP430单片机的智能门锁控制系统设计毕业设计 毕业设计 基于MSP430单片机的智能门锁控制系统的设计 摘要:随着科技的进步,以单片机为核心的自动门锁控制系统已经开始进入了人们的生活。本论文着重阐述了以msp430单片机为核心,通过并行接口直接控制LCD液晶显示器模块及键盘扫描,并与接触式IC卡读写技术相结合的系统。为保证门锁使用的安全性,系统自动比较IC卡密码和用户输入密码,若输入的密码与系统读出的IC卡密码相同,门锁自动开启;若连续输入三次错误的密码,系统自动停止此卡的使用,并及时将报警信号通过RS-485串行通信总线传往主控台。本设计的优点是硬件电...

  毕业设计 基于MSP430单片机的智能门锁控制系统的设计 摘要:随着科技的进步,以单片机为核心的自动门锁控制系统已经开始进入了人们的生活。本

  着重阐述了以msp430单片机为核心,通过并行接口直接控制LCD液晶显示器模块及键盘扫描,并与接触式IC卡读写技术相结合的系统。为保证门锁使用的安全性,系统自动比较IC卡密码和用户输入密码,若输入的密码与系统读出的IC卡密码相同,门锁自动开启;若连续输入三次错误的密码,系统自动停止此卡的使用,并及时将报警信号通过RS-485串行通信总线传往主控台。本设计的优点是硬件电路简单,软件功能完善,控制系统可靠,具有一定的实用价值。该系统拓展后,可用于其他智能家电的控制,具有好的应用前景。 关键词:MSP430单片机,接触式IC卡,LCD显示器,电子门锁 The hardware design and realization of IC card electronic door locks controlling system Abstract:With the progress of technology, the automatic door locks control system which takes the the Single Micro Chip Computer as the core is stepping into peoples lives. This paper focuses on the system which takes the series Single Micro Chip Computer msp430 as the core, which controls Liquid Crystal Display modules and keyboard scanning through the control chip directly, and contacts the IC card read-write technology. In order to guarantee the security of the door locks use, the system design offers an comparision between the IC card password and the password which the user input. If inputed password and the IC card password read out on the system read-out are same, the door lock will be opened automaticly. If you input wrong password three times continuously, the system will automatically stop the use of the card, and the alarm will be transmited to the key station promptly through the RS-485 serial telecommunications bus st-bus. The advantage of this design is simple in the hardware circuits, software functional improvements, the control system′s reliablily, and has certain practical. After this system is developed, it can be used in other intelligent electrical appliances control and has a good application prospect. Key words : MSP430 Single Chip Micro Computer, IC cards, Liquid Crystal Display, Electronic door locks 一 系统分析 (一) 系统研究的可行性 任何系统在开发之前,都要进行可行性分析来确定项目开发是否有必要和可行。必须分析几种主要可能解法的利弊,从而判断原定的系统规模和目标是否能现实,系统完成后所能带来的效益是否大到值得投资开发。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。 首先需要进一步分析和澄清问题定义,在问题定义阶段初步确定规模和目标,如果是正确的就进一步加以肯定,如果有错误就应该及时改正,如果对目标系统有任何约束和限制,也必须把它们清楚地列举出来。在澄清了问题定义后,导出系统的逻辑模型,然后从系统逻辑模型出发,探讨出系统实现

  ,并仔细分析它的可行性。 就本系统而言,在设计其逻辑模型时,要先判断该系统在开发之后是否能在市场上得到广泛的应用,赢得经济效益。现今越来越多的酒店、宾馆都开始使用智能电子门代替传统的门,这样既方便了客人的使用,也使宾馆的客房管理更安全,即使卡丢失,通过总台输入相应的客户信息也能将门打开。本设计成本也很低。随着科技的进步,当今很多产品越来越智能化也是发展的必然趋势,此产品及时地配合上了科学的发展,还会有一定的拓展空间,比如现在很多高校都用校园一,很大程度地方便了学生的日常生活。再有,现在世界上和很多科学家正在努力开发数字化家庭这个项目,本设计正是步入这个目标的初级阶段。它省去了携带钥匙,只能一把钥匙开一把锁的不便。人们在使用传统的门时,如果丢失了钥匙只能将门撬开,智能门锁系统就避免了这个弊端,它将每个门锁密码统一存在总台控制中,即使IC卡丢失,也可通过总台将门打开。 (二) 需求分析 确定设计任务和设计目标,并提炼出设计规格说明书,作为正式设计指导和验收的

  。系统的需求分析一般分功能性需求和非功能性需求两方面。功能性需求是指系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗等因素。本设计适应着科技的发展,有相当一部分的科技人员正在研究开发这个项目,因此本系统具有技术可行性。本系统中还包括了后台对电子门的控制,现在有专门从事这种后台操作的工作人员,统一对电子门锁系统进行管理和技术维护,因此本系统还具有一定的管理可行性。 (三) 系统整体设计方案 描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分以及系统的硬件、软件选型等。一个好的体系结构是设计成功的关键,根据上面的可行性和需求分析,我制定了系统基本功能的设计方案,识别卡之后: (1)系统自动读取IC卡程序,用一个中断程序,只可对IC卡执行继续工作,对其他类型的卡不可识别。 (2)系统接着自动读取IC卡密码博鱼官网,若此卡已经过期,则自动中断,不可识别。 (3)识别卡后,若IC卡有效,则液晶屏幕显示汉字:请输入密码。 (4)从键盘输入密码,读入密码,并在屏幕上以*显示。 (5)单片机比较两个密码。若不同,则中断程序,并将程序跳到(4),最多循环三次,若仍不相同,则系统收回对IC卡的使用权;若相同,则门自动开锁。 图1.1 (四) 所需功能模块 通过系统的需求分析和可行性研究得出系统所要实现的功能,并得出实现这些功能需要用到以下几个功能模块,包括:IC卡模块、存储器模块、LCD液晶显示、键盘模块、电子门锁开启及报警模块。其中的电子门锁开启及报警模块与一个发光二级管和一个报警笛相连,当系统通知电子门锁开启及报警模块可以将电子门打开时,门锁自动打开,在本设计中用绿灯亮来表示电子门打开;当系统运行三次比较密码程序后,若两个密码仍不相同,则系统就通过电子门锁开启及报警模块通知警笛报警。其他的功能模块在以下的论文中会做详细的介绍,这些功能模块都是以MSP430单片机中的MSP430F149为核心实现的。 二 系统组成结构及硬件设计 (一) 系统组成 智能门锁控制系统的思想是由用户向系统提供身份信息和个人密码作为开锁请求,经系统与既有的电子帐户核对后,确定是否执行开锁步骤。同时,系统还提供对电子帐户的管理功能,如查询,修改 添加 和删除功能。对这一设计思想进行抽象,就可以建立起对整个系统的逻辑层次。 1 收集层 收集层是智能门锁控制系统与用户互动的桥梁,完成对用户各种请求信息的收集,是整个系统中十分重要的部分。要收集的信息包括用户卡信息 用户个人密码 用户查询要求等。该层次的具体组件包括硬件上的读卡器 键盘和管理软件程序界面。 2 处理层 处理层是完成对已收集到的信息的处理,主要负责对用户信息的验证,控制门锁开关和对电子帐户的各种管理工作。这一层完全由上层管理软件构成,是整个智能门锁控制系统的核心,是实现智能化的关键。 3 通信层 有了收集到的信息和经过处理的信息,还必须让信息在整个系统中流动,这就要靠通信层。通信层的最主要部分是连接信息收集层和信息处理层的单元。通信层的主体采用RS232串行通信口线的信息传输媒介,负责单片机和上位机的通信。 4 执行层 处理层对通信层传过来的信息进行判断处理,确定其合法性以后,把控制权交给执行层。执行层主要负责将弱电信号转化为强电信号,开锁 信号灯显示 报警显示等。它是整个系统的最终执行者。 (二) 系统结构 从宏观上看整个系统的构造如图 2.1 图2.1系统宏观结构 1 锁体 所提部分采用电磁锁这种所利用关门时人对锁体内部弹簧做功的势能存储起来作为开锁的动力,当锁体内的一块电磁铁通电时,就触发弹簧把锁打开,既可以用电信号控制开锁,所需的控制电流大约为1.5安。 1 单片机系统 单片机系统是信息收集层的核心部分,其结构如图2.2 图2.2单片机系统 它承担读取用户卡片和密码信息,与上位微机串行口通信的全部任务。 主控芯片选用MSP430单片机;通信部分采用SP3220与微机串口进行通信;芯片和锁体之间采用继电器,使芯片引脚提供的MA级电流可以驱动A级电流的电磁锁。 通过单片机对卡片读写器与键盘的控制,可以读取用户卡片信息和密码,并由单片机和上位微机通信识别用户合法性,确定是否开锁。整个单片机系统得工作电源采用外接电源。 2 微机系统 微机系统全部由软件组成,其构造如图2.3. 微机系统主要处在信息处理层。主要信息处理程序分为两部分,分别完成对开锁请求的合法性和验证,以及实现用户对用户表和登陆日志这两个数据库的查询类请求。与单片机的交互通信由串行通信程序集中处理,用于接受开锁请求和发送验证结果。 图2.3 微机系统结构 (三) 硬件设计方案 根据控制系统的的工作原理和工作过程,整个系统硬件分为三大部分:用户卡读取器 键盘 单片机核心。 1 用户读取器 采用太阳卡,该卡为光电卡,采用光电传感器把卡上的信息转化为计算机可以处理的信号。光电传感器是以光敏元件作为转化元件的传感器,在此使用光敏三极管。使用光敏元件的特性,设计读取电路单元见 图2.4 图2.4读取电路 当控制端为高电平+5V时电平读取端始终为高电平;当控制端为低电平0V时,读取端的电平取决于光敏元件的状态;当光敏元件受到光照而导通时,由于电阻的下拉作用,读取端为低电平,反之为高电平。这样就可以把光电卡上的通孔所记录的信息转化为电信号。 2 键盘硬件电路设计与实现 本系统采用薄膜式键盘,12个按键,34阵列,有10个数字键(0-9),2个功能键“确定”与“取消”,供程序处理输入完毕和输入错误后重新输入得情况。 键盘读取方式为翻转式读取,程序代码简单可靠。 3 单片机电路设计与实现 单片机式整个门锁控制系统得总控制者和总操作者,负责读取用户卡得信息和用户密码,同时负责与上位机通信:发送用户卡片信息和用户密码,并接受上位机命令,控制门锁开启。 (1) 电源模块 以保证单片机系统得正常工作。 图2.5电源模块 (2) 复位电路 图2.6复位电路 (3) 与微机串行接口 由于单片机与上位机通信时接口电平不同,因此需要进行接口转换,这里采用SP3220芯片来完成接口电平的转换。SP3220具有功耗低,封装小等特点,此芯片具有以下特点: · 宽电压供电。供电电压为3.0V——5.5V · 上传速率可以达到235K b/s · 低功耗的电流为1µA · 增强性ESD

  通信电缆的连接方式如图 图2.7串口模块 (4) 单片机与门锁接口电路设计与实现 单片机接收到上位微机发来的用户合法信息后,置MSP430得P6 口为高电平进行开锁操作。芯片提供的电流很小(mA级),而开锁需要得电流大于1.5A,需要进行信号放大。采用2级放大电路,第一极由三极管组成,第二极由继电器组成。 MSP430芯片上的P6引脚信号进入三极管的基极B,使电流从集电极流向发射极,进入继电器的触发端,让继电器内部的开关闭合,接通大功率电源与电磁锁,完成开锁。 三 MSP430系列单片机 单片机(微MCU)技术已经渗透到生产和生活的各个方面,从不同家电 通讯设备 到工业自动化产品,处处可见单片机的身影,单片机技术和正改变人类的生活。 在单片机技术领域,89C51系列为中国应用最广泛的品种,而MSP430单片机是在1996年问世的,在1998年被杭州利尔达公司引进到中国(IT公司产品)。MSP430单片机可被称为当今的绿色16位单片机,由于该系列单片机是一种超低功耗的混合信号,所以支持MSP430单片机的一节电池可以工作10年,比较适合于电池应用或者手持设备 (一) MSP430单片机简介 1 在结构上MSP430系列单片机集成了一部计算机的各个基本组成部分。虽然其工作原理与普通微机并无差异,但MSP430系列单片机在结构上更加突出了体积小、功能强、面向控制的特点,具有很高的性能价格比。 2 MSP430系列单片机由CPU、存储器和外围模块组成,这些部件通过内部地址总线、数据总线和控制总线相连构成单片微机系统。 3 MSP430的内核CPU结构是按照精简指令集的宗旨来设计的。具有丰富的寄存器资源、强大的处理控制能力和灵活的操作方式。 4 MSP430的存储器结构采用了统一编址方式,可以使得对外围模块寄存器的操作象普通的RAM单元一样方便、灵活。MSP430存储器的信息类型丰富并具有很强的系统外围模块扩展能力。 (二) MSP430系列单片机特点 1 低电压,超低功耗 MSP430系列单片机在1.8-3.6V电压,1MHZ的时钟条件在运行,耗电电流(0.1-400µA之间)因工作模式不同而不同;具有16个中断源并可以任意嵌套,使用灵活方便;用中断请求将CPU唤醒只需要6µS,可编程出实时性特别高的源代码;可将CPU至于省电模式,以中断方式唤醒程序。 2 强大的处理能力 MSP430系列单片机为16位RISC结构,具有丰富的寻址方式(7种源操作数寻址,4种目的操作数寻址),简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可以参加多种运算;还可以高校的查表处理方法;有较高的处理速度,在8MHZ晶体驱动下,指令周期为125µS。这些特点保证可以编制出高效率的程序。 3 高性能模拟技术及丰富的片内外设 MSP430系列都集成了丰富的片内外设,它们是以下一些模块的不同组合: 看门狗(WDT) 定时器A(TIMER_A) 定时器(TIMER_B) 比较器 串口0,1(USART0,1) 硬件乘法器 液晶驱动器 10/12位ADC 14位ADC 端口0 端口1-6 基本定时器 4 系统工作稳定 上电复位后首先有DCOCLK启动CPU,以保证程序从正确的位置开始执行,以保证晶体振荡器有足够起振及稳定时间。然后软件可设置适当的寄存器的控制位来确定最后的系统时钟频率。如果晶体振荡器用作CPU时钟MCLK时发生故障,DCO会自动启动,以保证系统正常工作;如果程序跑飞,可用看门狗将其复位。 5 方便高效的开发环境 目前MSP430系列有四种类型器件:OTP,FLASH,EPROM,ROM。这些器件的开发手段不同。对于OTP和ROM型器件是用相对应的EPROM型器件作为开发片,或使用仿真器开发成功之后再烧写或掩膜芯片;我而对于FLASH型则有十分方便的开发测试环境,因为器件片内有JTAG调试接口,还有可以电擦写的FLASH存储器,因此采用先下载程序到FLASH内,再在器件内通过软件控制程序运行,由JTAG接口读取片内信息供设计者调试使用的方法进行开发。这种方式只需要一台PC和一个JTAG调试器,而不需要仿真器和编程器。开发语言有汇编语言和C语言。 6 工业级产品 MSP430系列均为工业级,运行环境温度为-40-+85℃ (三) MSP4301XX系列引脚图 图3.1 MSP430F14X系列单片机引脚图 引脚表 引脚 I/O 说明 P1.0/TACLK 12 I/O 通用I/O引脚/TIMER_A,TACLK时钟信号输入 P1.1/TA0 13 I/O 通用I/O引脚/TIMER_A P1.2/TA1 14 I/O 通用I/O引脚/ TIMER_A P1.3/TA2 15 I/O 通用I/O引脚/ TIMER_A P1.4/SMCLK 16 I/O 通用I/O引脚/SMCLK信号输出 P1.5/TA0 17 I/O 通用I/O引脚/ TIMER_A,比较:OUT0 P1.6/TA1 18 I/O 通用I/O引脚/ TIMER_A,比较:OUT1 P1.7/TA2 19 I/O 通用I/O引脚/ TIMER_A,比较:OUT2 P2.0/ACLK 20 I/O 通用I/O引脚/ACLK输出端 P2.1/TAINCLK 21 I/O 通用I/O引脚/TIMER_A,INCLK时钟信号 P2.2/CAOUT/TA0 22 I/O 通用I/O引脚/ TIMER_A P2.3/CA0/TA1 23 I/O 通用I/O引脚/ TIMER_A P2.4/CA1/TA2 24 I/O 通用I/O引脚/ TIMER_A P2.5/Rosc 25 I/O 通用I/O引脚/外接一电阻用来确定DCO频率 P2.6/ADC12CLK 26 I/O 通用I/O引脚/12位A/D转换器转换时钟 P2.7/TA0 27 I/O 通用I/O引脚/ TIMER_A P3.0/STE0 28 I/O 通用I/O引脚/从机传输使能-USART0/SPI模式 P3.1/SIMO0 29 I/O 通用I/O引脚/USART0/SPI从输入或主输出 P3.2/SOMI0 30 I/O 通用I/O引脚/ USART0/SPI从输出或主输入 P3.3/UCLK0 31 I/O 通用I/O引脚/外部时钟输入() P3.4/UTXD0 32 I/O 通用I/O引脚/发送数据输出USART0/UART P3.5/URXD0 33 I/O 通用I/O引脚/接收数据输入USART0/UART P3.6/UTXD1 34 I/O 通用I/O引脚/发送数据输出USART1/UART P3.7/URXD1 35 I/O 通用I/O引脚/接收数据输入USART1/UART P4.0//TB0 36 I/O 通用I/O引脚/捕获I/P,PWM输出口定时器B_7CCR0 P4.1/TB1 37 I/O 通用I/O引脚/捕获I/P,PWM输出口定时器B_7CCR1 P4.2/TB2 38 I/O 通用I/O引脚/捕获I/P,PWM输出口定时器B_7CCR2 P4.3/TB3 39 I/O 通用I/O引脚/捕获I/P,PWM输出口定时器B_7CCR3 P4.4/TB4 40 I/O 通用I/O引脚/捕获I/P,PWM输出口定时器B_7CCR4 P4.5/TB5 41 I/O 通用I/O引脚/捕获I/P,PWM输出口定时器B_7CCR5 P4.6/TB6 42 I/O 通用I/O引脚/捕获I/P,PWM输出口定时器B_7CCR6 P4.7/TBCLK 43 I/O 通用I/O引脚/定时器B_3输入时钟TBCLK P5.0/STE1 44 I/O 通用I/O引脚/从机发送使能---USART1/SPI P5.1/SIMO1 45 I/O 通用I/O引脚/USART1的从输入,主输出或SPI方式 P5.2/SOMI1 46 I/O 通用I/O引脚/ USART1的从输出,主输入或SPI方式 P5.3/UCLK1 47 I/O 通用I/O引脚/外部时钟输入 P5.4/MCLK 48 I/O 通用I/O引脚/主系统时钟MCLK输出 P5.5/SMCLK 49 I/O 通用I/O引脚/ 子系统时钟SMCLK输出 P5.6/ACLK 50 I/O 通用I/O引脚/辅助时钟ACLK输出 P5.7/TBOUTH 51 I/O 通用I/O引脚/切换所有的PWM数字输出口为高阻抗 P6.0/AO 59 I/O 通用I/O引脚/12位A/D转换器模拟输入通道0 P6.1/A1 60 I/O 通用I/O引脚/12位A/D转换器模拟输入通道1 P6.2/A2 61 I/O 通用I/O引脚/12位A/D转换器模拟输入通道2 P6.3/A3 2 I/O 通用I/O引脚/12位A/D转换器模拟输入通道3 P6.4/A4 3 I/O 通用I/O引脚/12位A/D转换器模拟输入通道4 P6.5/A5 4 I/O 通用I/O引脚/12位A/D转换器模拟输入通道5 P6.6/A6 5 I/O 通用I/O引脚/12位A/D转换器模拟输入通道6 P6.7/A7 6 I/O 通用I/O引脚/12位A/D转换器模拟输入通道7 RST/NMI 58 I 复位输入/不可屏蔽中断输入口,或自动加载程序启动 TCK 57 I 测试时钟 TMS 56 I 测试方法选择,器件编程与测试的输入口 TDI 55 I 测试数据输入口,器件的保护熔丝被连接到TDI TD0/TDI 54 I/O 测试数据输出口/编程数据输入口 Veref+ 10 I/P 送到模拟转换器ADC12的外部基准电压 VREF+ 67 O 模数转换器ADC12内部基准电压的正输出端 VREF-/ VEref- 11 O 模数转换器ADC12内部基准电压和外部加的基准电压负端 XIN 8 I 晶体振荡器XT1的输入口 XOUT/TCLK 9 I/O 晶体振荡器XT1的输出口或测试时钟输入口 XT2IN 53 I 晶体振荡器XT2的输入口,只能接标准晶体 XT2OUT 52 O 晶体振荡器XT2输出口 AVCC 64 模拟电源的的正输入端,送到ADC12的模拟部分 AVSS 62 模拟电源的的负输入端,送到ADC12的模拟部分 DVCC 1 数字电源的正输入端 DVSS 63 数字电源的负输入端 (四) 主要功能部件 1 CPU: MSP430系列单片机的CPU和通用微处理器基本相同,只是在设计上采用了面向控制的结构和指令系统。MSP430的内核CPU结构是按照精简指令集和高透明的宗旨而设计的,使用的指令有硬件执行的内核指令和基于现有硬件结构的仿真指令。这样可以提高指令执行速度和效率,增强了MSP430的实时处理能力。 2 存储器: 存储程序、数据以及外围模块的运行控制信息。有程序存储器和数据存储器。对程序存储器访问总是以字形式取得代码,而对数据可以用字或字节方式访问。其中MSP430各系列单片机的程序存储器有ROM、OTP、EPROM和FLASH型。 3 外围模块: 经过MAB、MDB、中断服务及请求线不同系列产品包含外围模块的种类及数目可能不同。它们分别是以下一些外围模块的组合:时钟模块、看门狗、定时器A、定时器B、比较器A、串口0、1、硬件乘法器博鱼·体育(中国)入口、液晶驱动器、模数转换、数模转换、端口、基本定时器、DMA等。 (五) MSP430系列单片机结构 1 16位CPU通过总线连接到存储器和外围模块。 2 直接嵌入仿真处理,具有JTAG接口。 3 能够降低功耗,降低噪声对存储器存取的影响。 4 16位数据宽度,数据处理更为有效博鱼·体育(中国)入口。 图3.2单片机模块结构 (六) 低功耗 · 使用内部时钟发生器(DCO)无需外接任何元件 · 选择外接晶体或陶瓷谐振器,可以获得最低频率和功耗 · 采用外部时钟信号源 · 瞬间响应特性如下: 图3.3低功耗说明 为了充分利用CPU低功耗性能,可以让CPU工作于突发状态。在通常情况下,根据需要使用软件将CPU设定到某一种低功耗工作模式下,在需要时使用中断将CPU从休眠状态中唤醒,完成工作之后又可以进入相应的休眠状态。 低功耗的主要原因: 1 MSP430系列单片机的电源电压采用的是1.8-3.6V,因而可以使其在1MHZ的时钟条件下运行,芯片电流会在200-400µA左右,时钟关断模式最低功耗只有0.1µA 2 采用不同点工作模式,芯片的功耗也会有显著的不同。在系统有一种活动模式和五种低功耗模式(LPM0-LPM1).在等待方式下,耗电为0.7µA,在节电方式下最低可达0.1µA 3 独特的时钟系统设计。在MSP430系列中有2个不同的系统时钟结构:基本时钟系统和锁频环(FLL和FLL+)时钟系统或DCO数字振荡器时钟系统。有的是用一个晶体振荡器(32768HZ)有的是用2个晶体振荡器。由系统时钟系统产生CPU和个功能所需的时钟。并且这些时钟可以在指令控制下打开和关闭,从而实现对总体功耗的控制。 四 IC卡模块的设计与实现 (一) IC卡概述 IC卡的英文全名是Integrated Circuit Card(集成电路卡),它是继磁卡之后出现的又一种新型信息工具。IC卡将具有存储、加密及数据处理能力的集成电路芯片镶嵌于塑料卡片中。IC卡在有些国家和地区也称智能卡(smart card)、智慧卡(intelligent card)、微电路卡(microcircuit card)或微芯片卡(Micro chip card)等。它是将一个微电子芯片嵌入符合ISO 7816标准的卡基中,做成卡片形式,已经十分广泛地应用于包括金融、交通、社保等很多领域。IC卡的核心部分是一块集成电路芯片,故它又可称为“芯片卡”。 (二) IC卡的分类 从IC卡的外形分为有触点卡和无触点卡(又称射频卡)两类。前者由读写设备的接头与卡片上的集成电路接触点相接触,进行信息的读写;后者按调制方式可分为频率调制、幅度调制、电容耦合等几种,与读写设备无电接触,通过射频技术进行读写,成功地解决了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破,主要用于公交、轮渡、地铁的自动收费系统,也应用在门禁管理、身份证明和电子钱包。接触IC卡与非接触IC过卡上的模块与系统发生联系,模块本身具有记录、计算等功能,保密性、功能强于磁条卡。例如:常用的电话IC卡、公交非接触IC卡。 (三) 接触式IC卡 1 说明 接触式IC卡模块分为推拉式和压入弹出式两种,它们的电路结构完全相同,仅在卡座的机械结构上有所不同,模块的电源从接口总线引入。接触式IC常分为存储器卡、逻辑加密卡、CPU卡、超级智能卡四类。存储器卡是含有E2PROM及其控制电路,但无加密逻辑;逻辑加密卡是由加密逻辑电路和E2PROM组成;CPU卡的卡内不仅有E2PROM等存储器,还带有CPU及其操作系统和加密算法;超级智能卡不仅带有CPU和存储器,还带有液晶屏和微型键盘。IC卡的大小和磁条卡相同,在其左上方嵌有一片或若干片集成电路芯片,芯片一般是不易挥发性存储器(ROM,EPROM,E2PROM),保护逻辑电路,甚至于CPU(中央处理单元)。 2 接触式IC卡引脚图 图4.1 IC卡电源部分原理图 IC卡的电源受POWER引脚的控制。只有当POWER为高电平时,+5V才能加到IC 卡VCC引脚上。IC卡电源部分原理图见上图。 3 接触式IC卡的应用 世界上推广IC卡成功的地区是欧洲,尤其是法国IC金融卡、IC电话卡和德国的健康卡、电话卡使用最为广泛。目前全球拥有各类IC卡7亿张以上,特别在金融、运输、医疗、教育、娱乐、企业管理等领域得到普遍的应用,并且每年以40%的速度增长。 (四) 非接触式IC卡性能简介(M1) 近年来随着射频IC卡技术在各领域的应用日趋成熟和广泛,采用射频卡为密码载体的射频卡读卡模块,因独具操作方便、安全性能高、使用人员无须了解复杂的射频技术、通过标准输出接口就可以将读卡模块嵌入到其应用系统中、从而轻松实现各种应用开发,因此,射频读卡模块已在安防、进出控制、身份识别、产品防伪等领域中占有了举足轻重的地位。 1 工作原理 读写器电路向IC卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为电路提供工作电压,将卡内数据发射出去或接取读写器的数据。 2 主要指标 · 容量为8K位EEPROM · 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 · 每个扇区有独立的一组密码及访问控制 · 每张卡有唯一序列号,为32位 · 具有防冲突机制,支持多卡操作 · 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路 · 数据保存期为10年,可改写10万次,读无限次 · 工作温度:-20℃~50℃ · 工作频率:13.56MHZ · 通信速率:106KBPS · 读写距离:10mm以内(与读写器有关) 3 存储结构 M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,存贮结构如下图所示: 块0 数据块 0 扇区0 块1 数据块 1 块2 数据块 2 块3 密码A 存取控制 密码B 控制块 3 块0 数据块 4 扇区1 块1 数据块 5 块2 数据块 6 块3 密码A 存取控制 密码B 控制块 7 ∶ ∶ ∶ 0 数据块 60 扇区15 1 数据块 61 2 数据块 62 3 密码A 存取控制 密码B 控制块 63 图4.2 IC卡存储结构 (1) 第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。 (2) 每个扇区的块0、块1博鱼网页版官网登录-入口、块2为数据块,可用于存贮数据。 数据块可作两种应用: · 用作一般的数据保存,可以进行读、写操作。 · 用作数据值,可以进行初始化值、加值、减值、读值操作。 (3) 每个扇区的块3为控制块,包括了密码A、存取控制、密码B。具体结构如下: 密码A(6字节) 存取控制(4字节) 密码B(6字节) (4) 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的3个控制位定义如下: 块0: C10 C20 C30 块1: C11 C21 C31 块2: C12 C22 C32 块3: C13 C23 C33 三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制位在存取控制字节中的位置,以块0为例: 对块0的控制: bit 7 6 5 4 3 2 1 0 字节6 C20_b C10_b 字节7 C10 C30_b 字节8 C30 C20 字节9 ( 注: C10_b表示C10取反 ) 存取控制(4字节,其中字节9为备用字节)结构如下所示: bit 7 6 5 4 3 2 1 0 字节6 C23_b C22_b C21_b C20_b C13_b C12_b C11_b C10_b 字节7 C13 C12 C11 C10 C33_b C32_b C31_b C30_b 字节8 C33 C32 C31 C30 C23 C22 C21 C20 字节9 ( 注: _b表示取反 ) (5) 数据块(块0、块1、块2)的存取控制如下: 控制位(X=0.1.2) 访 问 条 件 (对数据块 0、1、2) C1X C2X C3X Read Write Increment Decrement, transfer, Restore 0 0 0 KeyAB KeyAB KeyAB KeyAB 0 1 0 KeyAB Never Never Never 1 0 0 KeyAB KeyB Never Never 1 1 0 KeyAB KeyB KeyB KeyAB 0 0 1 KeyAB Never Never KeyAB 0 1 1 KeyB KeyB Never Never 1 0 1 KeyB Never Never Never 1 1 1 Never Never Never Never (KeyAB 表示密码A或密码B,Never表示任何条件下不能实现) 例如:当块0的存取控制位C10 C20 C30= 0 0 1时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。 (6) 控制块 3的存取的是与数据块(块0、1、2)不同,它的存取控制如下: 密码A 存取控制 密码B C13 C23 C33 Read Write Read Write Read Write 0 0 0 Never KeyAB KeyAB Never KeyAB KeyAB 0 1 0 Never Never KeyAB Never KeyAB Never 1 0 0 Never KeyB KeyAB Never Never KeyB 1 1 0 Never Never KeyAB Never Never Never 0 0 1 Never KeyAB KeyAB KeyAB KeyAB KeyAB 0 1 1 Never KeyB KeyAB KeyB Never KeyB 1 0 1 Never Never KeyAB KeyB Never Never 1 1 1 Never Never KeyAB Never Never Never 例如:当块3的存取控制位C13 C23 C33= 0 0 1时,表示: 密码A:不可读,验证KEYA或KEYB正确后,可写(更改)。 存取控制:验证KEYA或KEYB正确后,可读、可写。 密码B:验证KEYA或KEYB正确后,可读、可写。 新卡片中的控制字(FF 07 80 69)密码A可用,密码B不可用; 4 卡片 卡片的电气部分只由一个天线和ASIC组成。 天线:卡片的天线是只有几组绕线的线卡片中。 ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个8K位EEPROM组成。 5 对数据块的操作 读 (Read):读一个块; 写 (Write):写一个块; 加(Increment):对数值块进行加值; 减(Decrement):对数值块进行减值; 存储(Restore):将块中的内容存到数据寄存器中; 传输(Transfer):将数据寄存器中的内容写入块中; 中止(Halt):将卡置于暂停工作状态; (五) 读卡器模块 本设计采用北京完美科技公司生产的WM-01T 读卡模块。读卡模块处于等待状态,有卡靠近时读出卡号后立即送到串口,单片机可以一定时间(如200毫秒)检测一次串口,如有数据来读出卡号。 1 性能特点 1)可读取EM只读感应体(币型、钥匙型、卡片型) 2)读卡距离60~90mm,读卡速度≤0.5秒 3)标准IC引脚,特别方便嵌入到目标线脚集成电路大小,管脚兼容。长、宽:53mm X 17mm 3 模块结构结构 4 引脚说明 脚号 名 称 说 明 脚号 名 称 说 明 1 GND 电源地 40 ANT1 天线 天线 RXD 串口输入 表一 射频模块引脚说明 注:蜂鸣器输出应接一个三极管(8550PNP)放大电路再与蜂鸣器负极相连,LED状态STAT端先接一个电阻再接LED负级,LED另一端接电源正级。 5 天线制作 天线线圈:射频模块所匹配的天线线圈的参数必须准确,否则读钥性能达不到设计要求。制作天线时必须用仪器测量其参数。这里提供一套与射频模块匹配的天线参数(见表二)。该线圈对钥匙型感应体的识别距离为45毫米,对卡片型感应体为90毫米。 形状 矩形或园形 电感值 约1.43mH 材料 漆包线mm 注:天线尺寸减小将缩短读卡距离。 表二 射频模块天线 模块技术参数 工作频率 125 Khz 读卡距离

  0; i--); } while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1 BCSCTL2 = 0X00; //将寄存器的内容清零 BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1 BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1 } 2 端口初始化 void Init_Port(void) { //将所有的管脚在初始化的时候设置为输入方式 P3DIR = 0; //将所有的管脚设置为一般I/O口 P3SEL = 0; return; } 3 串口初始化 void Init_UART1(void) { //将寄存器的内容清零 U1CTL = 0X00; //数据位为8bit U1CTL += CHAR; //将寄存器的内容清零 U1TCTL = 0X00; //波特率发生器选择SMCLK U1TCTL += SSEL1; //波特率为57600 UBR0_1 = 0X8B; UBR1_1 = 0X00; //调整寄存器 UMCTL_1 = 0X00; //使能UART1的TXD和RXD ME2 = UTXE1 + URXE1; //使能UART1的RX中断 IE2 = URXIE1; //使能UART1的TX中断 IE2 = UTXIE1; //设置P3.6为UART1的TXD P3SEL = BIT6; //设置P3.7为UART1的RXD P3SEL = BIT7; //P3.6为输出管脚 P3DIR = BIT6; return; } (二) 串口中断服务程序 串口通信采用中断机制,发送数据和接收数据都采用中断方式。当接收数据时,设置一个标志来通知主程序有数据到来,当主程序有数据要发送时,设置一个中断标志进入中断发送数据。串口通信模块的程序流程图如图5.1示: 图5.1串口通信模块的程序流程图 对于发送中断,程序处于扥带状态,如果检测到有发送的标志,则从缓存区里取出数据发送:对于接收中断,等待数据到来,如果有数据到来则设置标志来通知主程序。下面为程序: interrupt [UART1RX_VECTOR] void UART1_RX_ISR(void) { UART1_RX_BUF[nRX1_Len_temp] = RXBUF1; //接收来自的数据 nRX1_Len_temp += 1; if(UART1_RX_BUF[nRX1_Len_temp - 1] == 13) { nRX1_Len = nRX1_Len_temp; nRev_UART1 = 1; nRX1_Len_temp = 0; } } /////////////////////////////////////// // 处理来自串口 1 的发送中断 interrupt [UART1TX_VECTOR] void UART1_TX_ISR(void) { if(nTX1_Len != 0) { nTX1_Flag = 0; // 表示缓冲区里的数据没有发送完 TXBUF1 = UART1_TX_BUF[nSend_TX1]; nSend_TX1 += 1; if(nSend_TX1

  = nTX1_Len) { nSend_TX1 = 0; nTX1_Len = 0; nTX1_Flag = 1; } } } 上面收发程序都处于等待状态,一旦外面有数据到来,则触发接收,进入接收中断服务程序。中断程序从“RXBUF1”寄存器读取数据,将得到的数据放到“UART1_RX_BUF[]”全局缓存区里,在接收到数据后设置一个标志”nRev_UART1”来通知主程序。如果有数据需要发送的时候,主程序设置一个发送标志,并且触发发送中断,进入发送中断服务程序。在发送中断程序里,从“UART11_TX_BUF[]”全局缓存区里取出数据发送给“TXBF1”寄存器进行发送,发送完数据后,发送中断程序等待下一次中断到来。 六.LCD模块设计与实现 (一) LCD的结构设计 LCD显示器的原文是Liquid Crystal Display,中文多称液晶显示器。 LCD的好处有:与CRT显示器相比,LCD的优点主要包括零辐射、低功耗、散热小、体积小、图像还原精确、字符显示锐利等。LCD有几个基本特点:(1)高亮度:亮度值愈高,画面自然更亮丽,不会朦胧。亮度的单位为cd/m2,也就是每平方公尺分之烛光。低阶的LCD亮度值,有低到150cd/m2,而高阶的显示器,则可高达250cd/m2。(2)高对比:对比愈高,色彩更鲜艳饱和,且会显得立体。相反的博鱼官网,对比低,颜色显的贫瘠,影像也会变得平板。对比值的差别颇大,有低到100:1,也有高到600:1,甚至更高。(3)宽广的可视范围:可视范围简单的说,指的是在屏幕前画面可以看的清楚的范围。可视范围愈大,自然可以看的愈轻松;愈小,只要观看者稍一变动观看位置,画面可能就会看不清楚了。可视范围的算法是从画面中间,至上、下、左、右四个方向画面清楚的角度范围。数值愈大,范围自然愈广,但四个方向的范围不一定对称。当上下、左右对称时,可以将两边的角度值相加,标示为水平:160°;垂直:160°;也可能分开标示为左/右:±80°;上/下:±80°。某些LCD机种的单一角度,甚至只有40°~50°。(4)快速讯号反应时间:讯号反应是指系统接收键盘或鼠标的指示后,经CPU计算处理,反应至显示器的时间。讯号反应对动画和鼠标移动非常重要,此现象一般而言,只发生在LCD液晶显示器上,CRT传统显像管显示器则无此问题。讯号反应时间愈快,作业处理愈方便。观察的方法之一是将鼠标快速移动(亦即鼠标不断下指示给系统,系统则不断将讯号反应给显示器),在一般低阶的LCD显示器上,光标在快速移动时,过程中会消失不见,直到鼠标定位,不再移动后一小段时间,才会再度出现;而在一般速度动作时,移动过程亦会清楚的看到鼠标移动痕迹。而VE500的超快讯号反应时间快达16ms(毫秒),则让光标移动无时差,移动过程清楚易见,不带来作业困扰。 (二) LCD的工作原理 LCD的工作原理就是利用液晶的物理特性:通电时排列变得有序,使光线容易通过;不通电时排列混乱,阻止光线通过,说简单点就是让液晶如闸门般地阻隔或让光线穿透。 (三) 点阵式LCD的特点 点阵式LCD显示电路是在系统板上外挂的正式液晶显示模块,模块的数据线、状态、控制线都通过插孔引出,可直接与系统相连。OCMJ的中文模块系列液晶显示器内含GB 2312 16*16点阵国标一级简体汉字和ASCⅡ8*8(半高)及8*16(全高)点阵英文字库。用户输入区位码或ASCⅡMA码即可实现文本显示,也可用作一般的点阵图形显示器之用。它提供位点阵和字节点阵两种图形显示功能,用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。完全兼容一般的点阵模块。OCMJ中文模块系列液晶显示器可以实现汉字、ASCⅡ码博鱼·体育(中国)入口、点阵图形和变化曲线的同屏显示,并可以通过字节点阵图形方式造字。本系列模块具有上/下/左/右移动当前显示屏幕及清除屏幕的命令的功能。OCMJ中文模块所有的设置初始化工作都是在上电时自动完成的,实现了“即插即用”。同时保留了一条专用的复位线,可对工作中的模块进行软件或者硬件强制复位。 (四) LCD硬件接口协议 LCD的硬件接口协议为请求/应答(REQ/BUSY)握手方式。应答 BUSY高电平(BUSY=1)表示OCMJ忙于内部处理,不能接受用户命令;BUSY低电平(BUSY=0)表示OCMJ空闲,等待接受用户的命令。发送命令到OCMJ可在BUSY=0后的任意时刻开始,先把用户命令的当前字节放到数据线上,接着发高电平REQ信号(REQ=1)通知OCMJ请求处理当前数据线上的命令或数据。OCMJ模块在收到外部的REQ高电平信号后立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已经收到并正在忙于对此数据的内部处理,此时,用户对模块的写操作已经完成。用户可以撤消数据线上的信号并可作模块显示以外的其他工作,也可不断地查询应答线BUSY是否为低(BUSY=0?),如果BUSY=0,表明模块对用户的写操作已经执行完毕,可以再送下一个数据。如果向模块发出一个完整的显示汉字的命令,包括坐标及汉字代码在内共需5个字节,模块在接收到最后一个字节后才开始执行整个命令的内部操作,因此,最后一个字节的应答BUSY高电平(BUSY=1)持续的时间较长。 (五) LCD引脚设计及功能 本设计采用信达公司的MG-12232芯片,此模块供电电压为典型值3V,工作电流为典型值0 .3毫安博鱼官网,很适合工作电压为3V的低功耗环境 。该模块可显示范围为122×32点阵,即能实现所谓的双排汉显。此液晶模块采用的驱动芯片为两片SED1520F0A,每一片都可以驱动16行×80列。下面对该芯片进行介绍。 SED1520F0A芯片属于行列驱动及控制合一的小规模液晶显示驱动芯片,它用来与单片机进行接口。单片机通过该芯片的驱动来实现数据显示,因此该芯片的管脚信号大致分为两类:单片机接口信号和液晶驱动信号。由于单片机接口信号和液晶驱动信号与单片机具体处理无关,可以不考虑内部是如何实现的,因此这里简单介绍该芯片与单片机的接口信号。具体信号如下: · D0~D7:数据总线: 数据/指令选择信号。当A0=1,表示出现在数据总线时,表示是指令或读出的状态。 · RES:接口时序类型选择。当RES=1时,操作时序为M6800时序,其操作信号CE和R/W;当RES=0时,操作时序为INTER8080时序,操作信号是RD和WR。 · RD(CE):当操作时序为INTER8080时,该信号为读,低电平有效;当操作时序为M6800时序时,该信号为使能信号。 · WR(R/W):当当操作时序为INTER8080时,该信号为写信号,低电平有效;当操作时序为M6800时序时,该信号为读写选择信号。R/W=1为读信号,R/W=0为写信号。 图6.1 MG-12232管脚示意图 LCD液晶显示模块不同引脚具有不同的功能,下表清晰的表示了各引脚的功能。 表 MG-12232液晶显示模块引脚表 引脚 符号 功能 1 VDD +3V 2 GND 接地 3 V0 液晶对比度电压 4 RES 复位 5 E1 读写使能信号 (Master) 6 E2 读写使能信号 (Slave) 7 R/W 读写控制管脚 8 A0 寄存器选择管脚 9 D0 数据线 SLA LCD阳极 18 SLK LCD阴极 图6.2 MG12232接口电路图 由前面的介绍知道,接口电路非常简单。本系统采用MSP430,单片机的P5.0,P5.1,P5.2,P5.3,分别与MG-12232的A0,R/W ,E1, E2管脚相连。单片机的P4口与MG -12232的数据总线进行连接。如上图。该管脚的电源管脚出也放置一个0.1µf的滤波电容,以减少干扰。MSP430F135没有数据总线接口时,采用软件模拟总线方式实现。 芯片指令表 指令名称 R/W A0 D7 D6 D5 D4 D3 D2 D1 D0 显示开/关 0 0 1 0 1 起始行设置 0 0 1 1 0 起始行(0~31) 设置页地址 0 0 1 0 1 1 0 页地址(0~3) 设置列地址 0 0 0 列地址(0~79) 1 读状态寄存器 1 0 busy adc Offon reset 0 0 0 0 写数据 0 1 写入的数据 读数据 1 1 读出的数据 ADC选择 0 0 1 0 1 1 0 0 0 0/1 静态驱动开关 0 0 1 0 1 0 0 1 0 0/1 占空比选择 0 0 1 0 1 0 1 0 0 0/1 换行开始 0 0 1 1 1 0 0 0 0 0/1 换行结束 0 0 1 1 1 0 1 1 1 0/1 复位 0 0 0 1 0 (六) 汉字显示原理 在LCD显示中,本设计还增添了汉字显示的功能,实现了在LCD液晶屏幕上显示“请输入密码”的中文字样的功能,这也用到了汉字显示的一些设计,才能得以实现。 根据液晶显示屏的控制指令及时序可知,只要在对模块写入数据的同时保证模块指令操作延时足够,就可以不检查模块状态,达到直接控制的目的。点阵液晶显示屏的一个点对应存储器中的一位,置位则显示,清除则不显示,因此只要控制相应的数据位就可控制液晶显示屏的显示。 该液晶显示器采用16×16点阵汉字,液晶显示器显示一个16×16点阵需要送进32个字节,因此必须将其送入两缓冲区中的相对列中。每一种商品都事先规定好在液晶显示屏上的显示位置,因为该液晶显示器共可显示两行汉字,每行汉字占两页,所以显示每一行汉字时,先根据每个汉字的编号确定其入口地址,然后分别读取它们的前16个字节在上半页显示,再分别读取这些汉字的后16个字节在下半页显示,这样即可把一行汉字全部显示出来。   (七) 字库的建立 画一个16行16列的方格,根据标准汉字字库所提供的汉字点阵字模在方格上分别画出各点阵,是1则置1,是0则置0,构造出汉字的字形,然后按SED1520的汉字字模排列顺序依次读出转化后的字模,这就是我们所用的液晶显示模块所需要调用的汉字字模形式。按上述方法提取系统中所需要的汉字字模,建立由多个汉字组成的汉字库、多个数字组成的数字库,将这两个字库写入程序中,并存放在单片机的EPROM中,以备点阵式液晶显示器显示调用。 (八) 汉字显示的处理流程图 汉字处理流程图见图6.3。 图6.3 汉字处理流程图 (九) LCD液晶显示流程图 LCD显示实验流程图见图 图6.4液晶显示流程图 (十) 软件设计 整个程序包括单片机的初始化,液晶模块操作。 · 端口初始化程序 void Init_port(void) { //p5.0 p5.1 p5.2 p5.2 p5.3为输出放向 P5DIR │=BIT0; P5DIR │=BIT1; P5DIR │=BIT2; P5DIR │=BIT3; RETURN; } 此程序是设置E1 E2 R/W A0的控制管脚的输入输出方向。 1 控制管脚电平模拟程序 此程序主要是在E1 E2 R/W A0管教上产生高电平或者低电平,下为程序: void E1_High(void) { //P5.2管脚输出为高电平 P5OUT = BIT2; _NOP(); _NOP(); return; } void E1_Low(void) { //P5.2管脚输出为低电平 P5OUT _NOP(); _NOP(); return; } void E2_High(void) { //P5.3管脚输出为高电平 P5OUT = BIT3; _NOP(); _NOP(); return; } void E2_Low(void) { //P5.3管脚输出为低电平 P5OUT _NOP(); _NOP(); return; } void A0_High(void) { //P5.0管脚输出为高电平 P5OUT = BIT0; _NOP(); _NOP(); return; } void A0_Low(void) { //P5.0管脚输出为低电平 P5OUT _NOP(); _NOP(); return; } void R_W_High(void) { //P5.1管脚输出为高电平 P5OUT = BIT1; _NOP(); _NOP(); return; } void R_W_Low(void) { //P5.1管脚输出为低电平 P5OUT _NOP(); _NOP(); return; } //等待空闲状态 2 液晶模块操作程序 此程序主要包括发送命令,显示数据,显示初始化等几个部分。下面给出具体的程序代码。 //等待空闲状态 void WaitIdle(int nZone) { char nTemp; //设置P4口为输入方向 P4DIR = 0; for(;;) { if(nZone == 0) { //E1区 E1_High(); E2_Low(); } else { //E2区 E2_High(); E1_Low(); } R_W_High(); A0_Low(); //取出D7 nTemp = (P4IN nTemp

  = 7; //空闲就跳出循环 if(nTemp == 0) break; } return; } void SendCommand(int nZone,char nVal) { //等待闲 WaitIdle(nZone); //设置P4口为输出方向 P4DIR = 0xff; if(nZone == 0) { //E1区 E1_High(); E2_Low(); } else { //E2区 E2_High(); E1_Low(); } R_W_Low(); A0_Low(); P4OUT = nVal; //写入指令 if(nZone == 0) { //E1区 E1_Low(); } else { //E2区 E2_Low(); } R_W_High(); return; } void WriteData(int nZone,char nVal, char nAddr) { //设置列地址 SendCommand(nZone,nAddr); //等待空闲 WaitIdle(nZone); //设置P4口为输出方向 P4DIR = 0xff; if(nZone == 0) { //E1区 E1_High(); E2_Low(); } else { //E2区 E2_High(); E1_Low(); } R_W_Low(); A0_High(); P4OUT = nVal; //写入指令 if(nZone == 0) { //E1区 E1_Low(); } else { //E2区 E2_Low(); } R_W_High(); return; } void DisplayOn(int nZone) { char nTemp; for(;;) { //发送显示开命令 SendCommand(nZone,0xAF); WaitIdle(nZone); //读状态 //设置为输入方向 P4DIR = 0x00; if(nZone == 0) { //E1区 E1_High(); E2_Low(); } else { //E2区 E2_High(); E1_Low(); } R_W_High(); A0_Low(); //取出D5 nTemp = (P4IN nTemp

  = 5; //如果打开就跳出循环 if(nTemp == 0) break; } return; } void DisplayOff(int nZone) { char nTemp; for(;;) { //发送显示开命令 SendCommand(nZone,0xAE); WaitIdle(nZone); //读状态 //设置为输入方向 P4DIR = 0x00; if(nZone == 0) { //E1区 E1_High(); E2_Low(); } else { //E2区 E2_High(); E1_Low(); } R_W_High(); A0_Low(); //取出D5 nTemp = (P4IN nTemp

  = 5; //如果打开就跳出循环 if(nTemp == 1) break; } return; } void ClearScreen(int nZone) { int i,j; char nPageNum; //设置页地址代码 nPageNum = 0xB8; for(i = 0;i

  #include mg12232.h char WordTable[] = { 0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48, 0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00, 0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42, 0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00 }; void main(void) { // 关闭看门狗 WDTCTL = WDTPW + WDTHOLD; // 关闭中断 _DINT(); // 初始化 Init_CLK(); Init_Port(); //初始化MG-12232 LcdDisplayInit(0); LcdDisplayInit(1); //显示的起始行为第0行,起始列为第0列, //起始页为第0页,显示区为E1区,内容为电 LcdDisplayWord(0,0xC0,0xB8,0,WordTable); return; 6 液晶显示“输入密码”和“再输一次” #include

  #include mg12232.h char WordTable_A[] = { 0X80,0XA8,0XB8,0XA8,0XFF,0XA8,0XA8,0X80 0X08,0XE4,0XA4,0XE9,0X8B,0XE4,0X08,0X10, 0X00,0X00, 0X00, 0X00,0X1F, 0X00,0X00, 0X00 0X00,0X1F, 0X04, 0X1F, 0X0F,0X1F,0X00,0X00 }; “输” char WordTable_B[] = { 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,0X80,0XC8, 0X20,0X40,0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,0X08,0X04,0X02,0X01, 0X00, 0X00, 0X00, 0X00, 0X00,0X01,0X02,0X04,0X08,0X1 };“入” char WordTable_C[] ={ 0X00,0X00,0X0E0XA0,0X0E,0X12,,0X22,0X4B, 0X72,0X52,0X4A,0X46,0X2A,0X12,0X0E,0X00, 0X00,0X00,0X00,0X00,0X72,0X41,0X40,0X40, 0X7F,0X40,0X20,0X10,0X62,0X04,0X08,0X10 };“密” char WordTable_D[] ={ 0X00,0X40,0X28,0XF8,0XA8,0XE8,0X00,0X00, 0X78,0X48,0X48,0X48,0X78,0X40,0XC0,0X00 0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00, 0X01,0X01,0X01,0X01,0X01,0X04,0X0F,0X00 };“码” void main(void) { // 关闭看门狗 WDTCTL = WDTPW + WDTHOLD; // 关闭中断 _DINT(); // 初始化 Init_CLK(); Init_Port(); //初始化MG-12232 LcdDisplayInit(0); LcdDisplayInit(1); //显示的起始行为第0行,起始列为第0列, //起始页为第0页,显示区为E1区,内容为电 LcdDisplayWord(0,0xC0,0xB8,0,WordTable_A); LcdDisplayWord(0,0xC0,0xB8,0X1F,WordTable_B); LcdDisplayWord(1,0xC0,0xB8,0X40,WordTable_C); LcdDisplayWord(1,0xC0,0xB8,0X6F,WordTable_D); return; 七.键盘设计与实现 (一) 键盘的工作原理 在单片机中,键盘是人机对话的输入设备,借助键盘可以设置参数,发出控制指令等。但单片机的键盘不同于通用计算机的键盘,它必须由自己设计 在单片机设计中常用轻触按键作为输入设备——键盘的单元电路。它的一般结构是两个电极和一个弹构成。如图,当金属弹K按下时,两个电极A与B接通。但实际使用并非如此简单,因为单片机的运行速度相对于操作者按下的速度是非常快的,所以应该考虑更多的细节问题。 图7.1 按键原理示意图 这个细节主要是按下按键的前后都有抖动。如果按键的A端接地,B端接上上拉电阻,则平时按键B端为高电平,按下按键时为低电平,松开后又是高电平,这是理论上成立。而实际B端情况如下图 图7.2 按键过程示意图 如果将按键的B端信号送到MCU,系统会认为有几个低电平,就按了几次键。因为MCU认为低电平时按键按下,而抖动过程有很多低电平,同时还有不短的时间,一般在10ms左右博鱼网页版官网登录-入口。常用的消除抖动方式由三种: · 使用R-S触发器构成消抖动开关。 · 使用电阻电容构成的积分器 · 使用软件延时 前两种方法是使用硬件,第三种方法时使用软件,即:打不过MCU得知按键B端出现低电平时,就知道可能有按键按下,于是等待10ms,10ms后再检测按键的B端,如果还是低电平,则就一般的机械按键而言,已经时处于稳定期了,按键的抖动倍消除了;如果10ms之后按键B端没有低电平了,则说明是干扰信号,而非按键按下。 (二) 键盘程序的一般编写方法 键盘是若干上述的独立按键安一定的规则组合而成的。也就是说,按键的基本元素是按键,那么消除抖动时必须的。同时,键盘由若干按键构成的,那么判断时哪一个按下则需要通过判键得到键值。得到键值后,还有一件事情就是等待按下的按键松开综合起来,一般的键盘程序有如下三个步骤: · 消除按键抖动(若是使用硬件可略) · 判断时那个按键按下,识别键码 · 等待按键按下。 (三) 行列扫描式键盘 如果应用系统需要较多的按键,则采用独立式键盘的结构花费资源太多。这里采用行列扫描的方法实现键盘接口,则可以使用较少的I/O口线连接较多的按键。下图为通过MSP430P 口接的3×4=12个按键(编号为0-11)构成的行列式扫描式键盘。下面分析如何在行列式键盘上实现键盘的是三个步骤:判键消抖动;键码识别;等待按下按键的松开。 1 判断有无按键按下的判键 图7.3键盘连线 时行线时列线,其中列线分别有电阻下拉到地。在行线和列线的交界处都有一个按键,按键的两端A和B分别接在行线和列线上。如果按键按下,则与之相连行列线被连通。在检测是否有按键按下时先使行线输出为高电平,读列线。如果有按键按下,则列线;如果没有按键按下,则因所有的列线被下拉,读入MCU数据为0.由此即可判断是否有按键按下,相应程序如下。 Unsigned char keyj(void) {unsigned char x; P1DIR=0XFF; P1OUT=0X0; P1DIR=0X0F; P1OUT=0X0F; X=(P1IN return(x); 无按键返回0,有按键返回非0 } 按键抖动的消除同样是使用软件延时的办法,当检测到有按键按下时,等待10ms在检测是否有按键按下,若有,则已经时按键的稳定期。具体的程序见下面的键盘子程序。 2 按键识别,得到键值 对于行列式键盘常使用扫描的方法识别按键。通过使行线输出高电平,度列线的方法来得知是否有按键被按下。那么可以通过同样的方法来确认究竟那一个键被按下。假定上图中的11号键被按下,那么下面的方法将能找到被按下的按键: · 假定P1.0为高电平,其余行列线都是低电平。 · 读入列线号键被按下,实际上没有按下它应该为低电平;再测试P1.5,看是否为高电平;……直到测试完P1.6. · 然后再使P1.1输出为高电平,其余P1.2~P1.6为低电平 · 读入列线号键被按下,但实际上没有按下所以为低电平。再逐个测试 · 时输出P1.2为高电平…… · 读列线输出为高电平…… · 读行线为高电平,而这个被下拉的I/O口线为什么为高电平呢?因为它与高电平输出的P1.3连接在一起了。由此找到该键在P1.3与P1.6连接处。这种方法称之为扫描法。 通过上述方法找到了被按下按键的确切位置,但识别按键最终要送出的行扫描码与读入的列值组合起来表示。如第9号键被按下,则行扫描码为42H,而读入的列数值为42H 四条行线个按键,如果能使所有的12个按键的编码为0~11,与图中一致时最理想的。观察发现每一行线都通过四个按键和四条列线相连接,那么,第一条行线;后一条行线的三个按键为前一条行线就可以了。其程序框图如图。 行内相邻两键键值为加一渐增,行间每列上相邻两键为加3递增。这样便实现了按键值的自然顺序编码。 图7.4键盘扫描流程图 #include

  unsigned char keybuff[10]; unsigned char keypoint=0; void delay(int v) { while(v!=0)v--; } unsigned char key(void) { unsigned char x=0xff; P1DIR=0X0F; P1OUT=0X01; //扫描第一行 if((P1IN&0X70)==0X10) x=0; else if((P1IN&0X70)==0X20) x=1; else if((P1IN&0X70)==0x40) x=2; else { P1OUT=0X2; //扫描第二行 if((P1IN&0X70)==0X10) x=3; else if((P1IN&0X70)==0X20) x=4; else if((P1IN&0X70)==0x40) x=5; else { P1OUT=0X4; //扫描第三行 if((P1IN&0X70)==0X10) x=6; else if((P1IN&0X70)==0X20) x=7; else if((P1IN&0X70)==0x40) x=8; else {P1OUT=8; //扫描第四行 if((P1IN&0X70)==0X10) x=9; else if((P1IN&0X70)==0X20) x=10; else if((P1IN&0X70)==0x40) x=11; } } } return(x); } 3 等待键盘松开 unsigned char keybuf; //键值缓存器 unsigned char p1keyj(void) //判键子程序 {unsigned char x; x=(P1IN //P10--P12接有按键 return(x); //有按键返回 非0 } unsigned char keycode() //哪个按键被按下,查键值子程序 { unsigned char x; if((P1IN&0x07)= = 1) //是否第一个按键 then x=0; else if((P1IN&0x07)= = 2) //是否第二个按键 then x=1; else if((P1IN&0x07)= = 4) // 是否第三个按键 x=2; return(x); } interrupt[PORT1_VECTOR] void port1key(void) { //端口1的中断服务程序 while(p1keyj()!=0) { delay(500); //延时消除抖动 while(p1keyj()!=0) { keybuf = keycode();//确信有按键按下,找按键得键值,送到全局变量keybuf while(p1keyj()= =0) //等待按键松开 ; } } } 4 完整的扫描式键盘程序 如图所示为一种完整的查询方式程序,一般采取中断方式。中断方式分I/O中断和定时器中断方式。使用两种方式区别是,使用I/O方式有延时消除抖动过程,定时器中断方式没有,因为它定时的时间就是消除抖动的时间。设置两个标志位FF1 FF2,其中FF1用于消除抖动标志,FF2用于按键识别完成标志。初始值为0,表示没有消抖动和完成按键识别。进入中断时博鱼网页版官网登录-入口,如果FF1=0,则没有消除抖动,那么必须判断是否有键按下;若有,设FF1=1,并推出程序,等待下一次中断;如果再次中断,则继续判断是否有键按;如有,说明真正有键按下了,而且时键盘的稳定期;调用识别程序得到键值,设置FF2=1,表示完成了按键识别;如果没有按键按下,则设FF1=0。退出。如果这时再次中断,显然都是一次按键,FF2=1,同时表明没有松开按键,也就退出了。等到按键被松开了,设置FF1=0,FF2=0,为再次按键做准备。这里使用I/O中断方式。 程序如下: interrupt [PORT1_VECTOR] void PORT_ISR(void) { Delay(); KeyProcess(); if(P1IFG & BIT0) { P1IFG // 清除中断标志位 } if(P1IFG & BIT1) { P1IFG // 清除中断标志位 } if(P1IFG & BIT2) { P1IFG // 清除中断标志位 } if(P1IFG & BIT3) { P1IFG // 清除中断标志位 } } Delay()为延时程序,用于消除抖动。 Void Delay(viod) { int I; for(I = 100;i--;i

  0); } (九)致谢 (十)参考文献 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名: 日 期:  指导教师签名: 日期: 使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名: 日 期:  学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子。

Copyright © 2012-2025 博鱼(中国)官方网站-BOYU SPORTS 版权所有HTML地图 XML地图         鲁ICP备2021033975号

x
现在留言,无需等待!

收到你的留言,我们将第一时间与你取得联系