首页 门禁系统课程设计

门禁系统课程设计

举报
开通vip

门禁系统课程设计目录 3第一章 绪论 31.1 课题研究背景 41.2智能门禁系统在国内外的研究现状 41.3 课题主要研究内容及结构 5第二章 系统总体设计方案及论证 52.1 门禁系统工作原理 52.2 门禁系统的总体结构图 62.3 门禁系统方案选择 62.3.1主控芯片的选择 62.3.2显示器的选择 72.3.3温度传感器的选择 7第三章 门禁系统主要硬件电路设计 73.1 系统主控芯—MSP430F149 73.1.1 MSP430主要性能 83.1.2 MSP4...

门禁系统课程设计
目录 3第一章 绪论 31.1 课题研究背景 41.2智能门禁系统在国内外的研究现状 41.3 课题主要研究内容及结构 5第二章 系统总体设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 及论证 52.1 门禁系统工作原理 52.2 门禁系统的总体结构图 62.3 门禁系统方案选择 62.3.1主控芯片的选择 62.3.2显示器的选择 72.3.3温度传感器的选择 7第三章 门禁系统主要硬件电路设计 73.1 系统主控芯—MSP430F149 73.1.1 MSP430主要性能 83.1.2 MSP430x14x引脚功能 113.1.3电源电路 133.1.4 时钟电路 143.1.5 复位电路 143.1.6异步通信 173.2 通信模块—USR_WIFI232 173.2.1 模块功能描述 193.2.2 模块设置及使用 283.3 显示电路 283.3.1 LCD12864 的基本参数及引脚说明 303.3.2 LCD12864的指令说明及时序 313.3.3 LCD12864屏幕与DDRAM地址的对应关系 313.3.4 LCD12864与单片机接口电路 323.4 温度读取电路 323.4.1 DS18B20主要特性 323.4.2 DS18B20的引脚功能 333.4.3 DS18B20的测温原理 373.4.4 DS18B20与单片机的接口电路 373.5 开锁控制电路 373.5.1 28BYJ48电机驱动方法及参数 383.5.2 电机主要参数特性 383.5.3 ULN2003驱动芯片简介 403.5.4 电机与单片机的接口电路 41第四章 软件设计 414.1 软件设计的流程 424.2 开发环境 434.3 部分程序代码 59第五章 结语 60参考文献 第一章 绪论 1.1 课题研究背景 出入口门禁安全管理系统是新型现代化安全管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子,机械,光学,计算机技术,通讯技术,生物技术等诸多新技术。它是解决重要部门出入口实现安全防范管理的有效措施。使用各种机要部门,如银行,宾馆,机房,军械库,机要室,办公室,智能化小区,工厂等。在数字技术网络技术飞速发展的今天门禁技术得到了迅猛的发展。门禁系统早已超越了单传的门道以及钥匙管理,它已经逐渐发展成为一套完整的出去管理系统。它在工作环境安全,人事考勤管理等行政管理工作中发挥着巨大的作用。 门禁, 又称出入管理控制系统,是一种将信息技术、电子技术和机械锁有机地结合在一起,对进出人员进行适当级别的权限鉴别,并进行相应控制的数字化管理系统。目前门禁系统是基于非接触式感应IC卡识别技术,由管理系统、控制器、感应式读卡器、电子锁等组成的一个功能强大的智能型网络门禁系统,人员手持一张合法的感应式IC卡即可通过IC卡识读设备自动控制授权允许开启的电子锁。可是IC卡也很容易丢失,而且到了小区门口还要停下来刷卡,浪费汽油,况且下雨天这样会很麻烦。 1.2智能门禁系统在国内外的研究现状 门禁系统是随着自动识别技术的发展而迅速发展起来的,国外门禁系统的知识品牌有美国的休斯(HID)、西屋(WSE)、洛泰克(NTK),以色列的DDS、英国的集宝等品牌。国内从事门禁系统有深圳红门、门吉利、捷顺、北京青云等公司。 目前,国内外研制和使用的门禁系统主要集中在感应门禁系统和生物识别门禁系统。在生物识别门禁系统中又以指纹门禁系统应用最为广泛。随着计算机图像处理和模式识别理论以及大规模集成电路技术的不断发展与成熟,指纹自动识别系统的体积不断缩小,其价格也不断降低。据国际生物认证团(IBG)的预测:美国生物认证市场2002年突破7亿美元,其中指纹识别占近50%,虹膜识别占8%。美国生物认证市场到2005年将达到19亿美元,指纹识别占近40%,虹膜识别占10%左右。美国生物识别市场在未来几年中仍将会保持高速增长的趋势,纵观门禁市场发展,预计未来1-3年中国门禁市场的平均增长比例将达20%以上。 目前国外生产的门禁系统安全性较高,但是价格昂贵,感应式门禁系统控制器的价格从4000到3万元不等,包括读卡器、门锁、控制器、软件在内的一套系统报价在万元以上。国内生产的感应式门禁系统和指纹门禁系统价格较国外同类产品价格低大约10%-50%,但系统的可靠性稍差。 高级智能型门禁控制系统是当前门禁系统的重要发展方向,高级智能型门禁系统是一种联网式门禁系统,功能也比较完善。但对于一般的企业住宅小区来说,并不是最理想的选择。这种门禁系统常用于国防、军事等单位。 1.3 课题主要研究内容及结构 本课题主要研究基于wifi的简易门禁系统的设计,应用wifi模块实现车载控制端对道闸的开关,系统主要包括发送模块,显示模块,道闸模块等,这些模块构成一个综合的系统,能够满足普通小区停车场车辆不停车状态下的出入。 课题结构如下: 第一章 绪论 介绍了课题的背景知识,智能门禁系统在国内外的研究现状以及研究的意义。 第二章 系统总体设计方案及论证 本章对设计前的方案进行了选择和 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ,最终确定一种方便,可行的实施方案。 第三章 门禁系统主要硬件电路设计 本章对系统中的主要硬件模块做了阐述,并且给出了各部分的电路图。 第四章 软件设计 本章对系统软件开发环境已经部分源程序做了解释,给出整个系统的软件流程图。 第二章 系统总体设计方案及论证 2.1 门禁系统工作原理 基于wifi的门禁系统主要依靠PC或手机终端对无线模块发送开锁信号,wifi模块接收到信号之后传递给主控模块进行分析处理,若信号有效,则打开道闸,在道闸打开的前提下,系统会在道闸打开之后5S自动将道闸关闭,若车辆出门,则置于内部的红外对管会获取车辆信息,并且在无需开门信号的前提下自动将道闸打开。若信号无效,则不打开道闸,在一般状态之下系统给出当前温度以及时间信息。 2.2 门禁系统的总体结构图 2.3 门禁系统方案选择 2.3.1主控芯片的选择 方案一:采用AT89S51 作为系统控制器。它的功耗低,技术成熟,成本低,引脚较少,硬件布线较简单。但实时性不好,复杂的控制算法难以实现;另外,增加的外围电路数据转换速度慢,因此放弃此方案。 方案二:采用MSP430单片机,430系列是一个16位的,具有精简指令集的,超低功耗的混合型单片机,另外430系列单片机集成了丰富的片内外设,由于本设计需要较多的I/O口,因此430具有强大的综合优势。 综上,此方案选用MSP430F149作为系统主控芯片。 2.3.2显示器的选择 方案一:LED数码管按段数分为七段数码管和八段数码管,结构简单,显示亮度高,价格便宜,使用简单,可是显示效果会受外部环境影响较大,加上单片机扫描显示会导致亮度不均匀等情况,短时间的电流过载也可能会发光管造成永久性的损坏,由于本次设计需要显示的内容较多,因此此方案局限性太大。 方案二:LCD12864液晶显示器画质高并且不会闪烁,和单片机系统的借口简单可靠,操作方便。而且12864作为128*64点阵的液晶屏可以显示数字,字母和汉字等,适合本设计。 综上,此系统选用LCD12864作为显示器。 2.3.3温度传感器的选择 方案一:数字温度传感器DS18B20具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。测温范围为-55℃~+125℃,固有测温分辨率是0.5℃。最为重要的是单片机可以直接读取温度,方便,高效。 方案二:集成温度传感器AD590实质上是一种半导体集成电路,线性好、精度中、灵敏度高、体积小,常用于测温和热电偶的冷端补偿。测温范围为-55℃~+150℃。 非线性误差为±0.3℃。可是温度值要通过A/D转换器才能被单片机读取,且线路连接比较麻烦。 综合上述,选择方案一。 第三章 门禁系统主要硬件电路设计 3.1 系统主控芯—MSP430F149 3.1.1 MSP430主要性能 MSP430F149具有如下主要性能: · 功耗低。典型功耗是:2.2V时钟频率1MHZ时,活动模式为0.2MA,关闭模式仅为0.0001 MA,且具有5种节能方式。 · 高效16位RISC-CPU,27条指令,8MHZ时钟频率时,指令周期时间125ns,绝大多数指令一个时钟周期完成;32KHZ时钟频率时,16位MSP430单片机的执行速度高于典型的8位单片机20MHZ时钟频率时的执行速度。 · 低电压供电、宽工作电压范围:1.8V-3.6V。 · 灵活的时钟系统(两个外部时钟和一个内部时钟) · 低时钟频率可实现高速通信。 · 具有串行在线编程能力。 · 强大的中断能力。 · 唤醒时间短,从低功耗模式下唤醒仅需0.006ms。 · ESD保护,抗干扰能力强。 3.1.2 MSP430x14x引脚功能 如图3-1为MSP430F149的引脚图。 引脚具体说明,如下表所示: 3.1.3电源电路 本系统需要5V供电,因此供电电路利用LM2576设计5V稳压电路。 LM2576的特性如下: (1) 有3.3V、5V、12V、15V和可调电压输出多种系列。 (2) 输出电压可调的范围为1.23V~37V (HV型号的可达57V),负载电压的输出容差最大为±4%。 (3) 最少只需要4个外围元件,可达3A的输出电流。 (4) 宽的输入电压范围,HV型号甚至可达40V~60V。 (5) 内部振荡器产生52KHz的固定频率。 (6) 可用TTL电平关闭输出,低功耗待机模式,典型待机电流为50μA。 (7) BUCK式降压器,较高的转换效率。 (8) 过热和过流保护。 (9) 可实现Buck-Boost式正-负电压转换器。 5V稳压电路外围元件的选择: (1) 输入电容CIN1 电容作为旁路电容,防止在输入端出现大的瞬态电压。还有,当你的输入电压波动较大,输出电流有较高,容量一定要选用大些,470μF--10000μF都是可行的选择;电容的电流均方根值至少要为直流负载电流的1/2;基于安全考虑,电容的额定耐压值要为最大输入电压的1.5倍。千万不要选用瓷片电容,会造成严重的噪声干扰。 (2) 续流二极管 首选肖特基二极管,因为此类二极管开关速度快、正向压降低、反向恢复时间短。 (3) 储能电感 LM2576既可工作于连续型也可非连续型,流过电感的电流若是连续的为连续型,电感电流在一个开关周期内降到零为非连续型。 (4) 输出端电容COUT 推荐使用1μF--470μF之间的低ESR的钽电容。若电容值太大,反而会在某些情况(负载开路、输入端断开)对器件造成损害。COUT用来输出滤波以及提高环路的稳定性。如果电容的ESR太小,就有可能使反馈环路不稳定,导致输出端振荡。这几乎是稳压器的共性,包括LDO等也有这一现象。 利用LM2576芯片实现5V电源电路的设计如下图所示: 3.1.4 时钟电路 MSP430x14X系列单片机基础时钟模块结构如下图: 从图中可以看出,它有3个时钟源输入端: · LFXT1CLK低频时钟源,按低频时钟晶体,也可接高频时钟晶体,陶瓷谐振器或直接外接时钟信号源。 · XT2CLK高频时钟源,按 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 高频晶体,也可接陶瓷谐振器或直接外接450kHz~8MHz时钟信号源。 · DCOCLK片内可以数字控制的RC振荡器。 本系统使用XT2高频时钟源,晶振电路如下图: 3.1.5 复位电路 在单片机系统中,为了保证系统上电时进行初始化,上电后REST管脚被CR1上拉电阻为高电平,当按键CS1被按下时REST被置低电平。复位电路如下图所示。 3.1.6异步通信 · 异步通信寄存器 MSP430系列有些型号的期间中有两个通信硬件模块USART0和USART1,因此它们有两套寄存器,如MSP430F149。 USART0的寄存器如下表所列: MSP430 USART模块配置为异步模式时的结构如下图: · 波特率的产生 所谓波特率,是指单位时间内传送的二进制数据位数,以bit/s为单位,是衡量串行数据传送速度快慢的重要指标和参数。在异步串行通信时,波特率的产生是必须的。MSP430单片机的波特率产生部分如下图所示,由时钟源输入选择与分频,波特率产生器,调整器和波特率寄存器等构成。其中,整个模块的时钟源输入通过控制寄存器UxTCTL中的SSEL0和SSEL1选择来自内部的3个时钟或外部输入时钟,以决定最终进入模块的时钟信号BRCLK的频率,时钟信号BRCLK进入一个15位分频器,通过一系列的硬件控制,当计数器的计数值减到0的时候,输出触发器翻转,最终输出两个移位寄存器使用的移位时钟BITCLK信号,所以BITCLK信号周期的一半就是定时器,即分频计数器的定时时间。 图 波特率产生器结构图 MSP430的波特率发生器首先使用一个16位计数器和一个比较器,当发送和接受数据时,计数器装载着INT(N/2),其中N是UxBR1和UxBR0存储值。计数器重新装载为版周期的计数值INT(N/2),从而给出一个N个BRCLK时钟的周期。对于给定的BRCLK时钟源,分频因子N由送到分频计数器的时钟频率(BRCLK)和所需的波特率来决定,即 如果使用常用的波特率与常用晶体产生的BRCLK,则一般得不到整数的N,分频计数器可实现分频因子N的整数部分,其次,调整器可使得小数部分尽可能准确,那么分频因子N可定义如下: 其中,N为目标分频因子,UxBR为UxBR1和UxBR0中的16位数据值;n为总字符位数,m为调整器寄存器UXMCTL中的各数据位(1或0) 波特率由下式计算: 3.2 通信模块—USR_WIFI232 3.2.1 模块功能描述 1.无线组网 HF-A11x的无线模块即可以配置成一个无线STA,也可以配置成AP。所以HF-A11x逻辑上支持2个无线接口,一个作为STA,另一个接口相当于一个AP,其它STA可以通过这个模块的AP接口连入无线网络。所以,利用HF-A11x可以提供十分灵活的组网方式和网络拓扑。HF-A11x的功能模块如下图所示: HF-A11x的功能结构 说明: AP:即无线接入点,是一个无线网络的中心节点。通常使用的无线路由器就是一个AP,其它无线终端可以通过AP相互连接。 STA:即无线站点,是一个无线网络的终端,如笔记本电脑、PDA等。 2.安全机制 HF-A11x模块支持多种无线网络加密方式,能充分保证数据的安全传输,包括: ①WEP ②WAP-PSK/TKIP ③WAP-PSK/AES ④WAP2-PSK/TKIP ⑤WAP2-PSK/AES 3.地址绑定 HF-A11x模块支持在联网过程中(作为STA,去连接AP过程中)绑定目的网络的BSSID的功能。根据802.11 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 规定,不同的无线网络可以具有相同的网络名称(即SSID/ESSID),但是必须对应一个唯一的BSSID地址(即MAC地址)。非法入侵者可以通过建立具有相同的SSID/ESSID的无线网络的方法,是的网络中的STA连接到非法的AP上,从而造成网络的泄密。通过BSSID地址绑定,可以防止STA接入到非法的网络上,从而提高无线网络的安全性。 4.以太网接口功能 HF-A11x模块提供一个100M以太网接口,通过这个100M以太网接口,用户可以实现WIFI口,串口,以太网口,三个接口互通。在组网方面,HF-A11x模块支持桥接模式和路由模式来对应不同的具体应用。 5.工作模式 HF-A11x 模块支持两种工作模式:透明传输模式和协议传输模式。透明传输模式可以实现串口即插即用,从而最大程度的降低用户使用的复杂度。协议传输模式可以实现用户 数据的准确传输。用户可以根据实际需要设置不同的工作模式,并保存在 Flash 中,上 电起动后模块会自动进入该工作模式。 HF-A11x 模块上电起动后,会根据用户预先设置好的参数,自动的去连接无线网络及服务器,并且进行设置的工作模式,按预设的串口参数打开串口。 用户需要预设的参数有: ☆ 无线网络参数 ■ 网络名称(SSID) ■ 安全模式 ■ 密钥 ☆ 默认TCP/UDP连接参数 ■ 协议类型 ■ 连接类型(server或client) ■ 目的端口 ■ 目的IP地址 ☆ 串口参数 ■ 波特率 ■ 数据位 ■ 校验位 ■ 停止位 ■ 硬件流控 ☆ 工作模式 ■ 透明传输 ■ 协议传输模式 6.网络协议 HF-A11x 模块支持 TCP/UDP 网络协议,协议端口可以通过 web 方式或串口的 AT+命令设置。HF-A11x 网络侧的接口可以是 server,也可以是 client,通过 web 方式或串口的AT+命令设置。 7.参数设置 HF-A11x模块支持web方式的参数设置,用户可以使用IE浏览器十分方便的进行设置。如果模块已经连接到某个无线网络,则只要PC机也连入同一个网络就可以进行设置,另外因为HF-A11x同时也是一个AP,所以PC机也可以连接到需要设置的模块上进行设置。 8.固件升级 HF-A11x模块支持web方式的在线固体升级 9.GPIO功能 HF-A11x模块最多可以提供7个GPIO。其中包括3个指示引脚,4个UART引脚,根据需要都可以制定为GPIO引脚。作为GPIO时,可以从网络发送几个特定指令控制GPIO的输出高、低电平,也可以读入GPIO状态。 3.2.2 模块设置及使用 · 模块设置 1.网页配置 保持WIFI网络连接,登录http://10.10.100.254,即可进入设置网页,默认用户和密码均为admin 2.配置软件通过串口配置 将模块的串口连接到计算机串口,安装设置软件运行库,然后运行All_Config_serial_cn.exe,点击连接模块,成功后点读取设置,即可进入配置 3.配置软件通过WIFI配置 运行 A11_Config_net_cn.exe WIFI模块上电,等待WIFI模块启动完成,让WIFI网卡加入HF-All_AP这个无线网络,WIFI建立连接成功后,模块会自动和配置软件建立连接,点击读取设置,即可进行设置。 4.手工AT指令配置 发送三个加号+++,注意无回车换行等任何其他字符,收到字符 a,三秒之内回应字符 a,收到+ok 的提示,即进入了 AT 命令模式,发送 AT+H 加回车,可以获得帮助提示,发送 AT+ENTM 加回车回到数据透明传输模式。更详细 AT 指令说明请参考详细 手册 华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载 文档,测试过程截图如下(发送的内容看不到,只看到返回的内容) 模块加入普通路由器的网络 1. 登录WIFI路由器了解一些信息,SSID名称,用户名和密码,加密方式。 2. 输入WIFI模块默认的IP地址10.10.100.254进入配置界面,选择模块工作在终端模式 3. 进入无线终端接口设置子界面,根据要连入的WIFI路由器的信息设置SSID(无线网络名称),用户名和密码,选择加密方式。 4.进入模块管理子页面,重启模块,也可以断电重启 4. 完成之后,从无线路由器的DHCP列表里面能找到模块已经主动连入路由器创建的网络 · 模块测试 1. 硬件连接 关于串口的连接,模块的引脚引出为3.3TTL电平,不能直接和计算机相连,需要带底板或者用户有TTL转RS232的转接线再连接到计算机上。硬件连接妥当后,给模块供电,红色电源指示灯亮,等待大约20秒(内部LINUX系统启动),Ready灯亮起,表示系统启动完成,可以操作了,进入下一步。 2. 网络连接 搜索网络,如下图的HF-Allx_AP即是模块的默认网络名称(SSID) 加入网络,选择自动获取IP,WIFI模块支持DHCP Server功能并默认开启 此时模块的Link指示灯亮起。 3. 收发测试 打开测试软件 USR-TCP232-Test.exe ,选择硬件连接到的计算机的串口号,这里是 COM3,选择波特率57600,此为 WIFI 模块内部串口默认的波特率,点打开串口。 网络设置区选择TCP client模式,服务器IP地址输入10.10.100.254,此为WIFI模块默认的IP地址,服务器端口号8899,此为模块默认监听的TCP端口号,点击连接建立TCP连接。 至此,就可以在串口和网络之间进行数据收发测试了,串口到网络的数据流向是:计算机串口->模块串口->模块WIFI->计算机网络,网络到串口的数据流向是:计算机网络->模块WIFI->模块串口->计算机串口。 测试过程可以看到模块的TXD和RXD指示灯在有数据通过时闪烁。 4.安卓手机和串口通讯 保持计算机上的测试软件开启状态,链接也依然开启。 手机开启WIFI功能,找到并加入HF-AllX的WIFI网络。在手机上启动有人网络助手软件,切换到TCP Client界面,点击增加,创建一个到10.10.100.254的8899端口的TCP连接,创建成功后,会建立和WIFI模块的TCP连接。 建立连接成功后,手机发送数据,计算机上的串口会收到信息,计算机的串口发送信息,计算机上测试软件的网络部分会收到信息,同时手机上的网络助手也会收到信息。 3.3 显示电路 3.3.1 LCD12864 的基本参数及引脚说明 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 基本特性: (1)低电源电压(VDD:+3.0~+5.5V) (2)显示分辨率:128×64点 (3)内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)内置 128个16×8点阵字符 (5) 2MHZ时钟频率 (6) 显示方式:STN、半透、正显 (7) 驱动方式:1/32DUTY,1/5BIAS (8) 视角方向:6点 (9) 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5~1/10 (10) 通讯方式:串行、并口可选 (11) 内置DC-DC转换电路,无需外加负压 (12) 无需片选信号,简化软件设计 (13) 工作温度: 0℃ ~+55℃ ,存储温度: -20℃ ~ +60℃ 芯片管脚: 管脚号 管脚名称 电平 管脚功能描述 1 VSS 0V 电源地 2 VCC 3~5V 电源正 3 V0 - 对比度(亮度)调整 4 RS(CS) H/L RS=“H”,表示DB7——DB0为显示数据 RS=“L”,表示DB7——DB0为显示指令数据 5 R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7——DB0 R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR 6 E(SCLK) H/L 使能信号 7 DB0 H/L 三态数据线 8 DB1 H/L 三态数据线 9 DB2 H/L 三态数据线 10 DB3 H/L 三态数据线 11 DB4 H/L 三态数据线 12 DB5 H/L 三态数据线 13 DB6 H/L 三态数据线 14 DB7 H/L 三态数据线 15 PSB H/L H:8位或4位并口方式,L:串口方式(见注释1) 16 NC - 空脚 17 /RESET H/L 复位端,低电平有效(见注释2) 18 VOUT - LCD驱动电压 19 A VDD 背光源正端(+5V)(见注释3) 20 K VSS 背光源负端(见注释3) *注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平。 *注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 3.3.2 LCD12864的指令说明及时序 指令说明: 模块控制芯片提供两套控制命令,基本指令和扩充指令如下图 读写操作时序: · 写操作时序 · 读操作时序 3.3.3 LCD12864屏幕与DDRAM地址的对应关系 第一字 第二字 …… 第七字 第八字 第一行 80H 81H …… 86H 87H 第二行 90H 91H …… 96H 97H 第三行 88H 89H …… 8EH 8FH 第四行 98H 99H …… 9EH 9FH 3.3.4 LCD12864与单片机接口电路 3.4 温度读取电路 3.4.1 DS18B20主要特性 · 适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数 据线供电 · 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯 · DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 · DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内 · 1.5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃ · 可编程 的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温 · 在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 · 测量结果直接输出数字温度信号,以"一 线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 · 负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。 3.4.2 DS18B20的引脚功能 DS18B20的引脚定义: (1)DQ为数字信号输入/输出端; (2)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 3.4.3 DS18B20的测温原理 DS18B20通过使用在板温度测量专利技术来测量温度。通过门开通期间内低温系数振荡器经历的时钟周期个数计数来测量温度,而门开通期由高温系数振荡器决定。计数器予置对应于-55℃的数值—将增量,指示温度高于-55℃。 同时,计数器用钭率累加器电路所决定的值进行予置。为了对遵循抛物线规律的振荡器温度特性进行补偿,这种电路是必需的。时钟再次使计数器计值至它达到零。如果门开通时间仍未结束,那么此过程再次重复。 钭率累加器用于补偿振荡器温度特性的非线性,以产生高分辨率的温度测量。通过改变温度每升一度,计数器必须经历的计数个数来实行补偿。因此,为了获得所需的分辨率,计数器的数值以及给定温度处每一摄氏度的计数个数(钭率累加器的值)二者都必须知道。 此计算的DS18B20内部完成以提供0.5℃的分辨率。温度读数以16位,符号扩展的二进制补码读数形式提供。表2-6说明输出数据对测量温度的关系。数据在单线接口上串行发送。DS18B20可以以0.5℃的增量值,在-55℃至+125℃的范围内测量温度。对于应用华氏温度的场合,必须使用查找表或变换系数。 注意,在DS18B20中,温度是以1/2℃LSB(最低有效位)形式表示时,产生以下9位格式: 1 1 1 0 0 1 1 1 0 图 存储器帧格式 最高有效(符号)位被复制到存储器内两字节的温度寄存器中较高MSB的所有位,这种“符号扩展”产生了如表2-6所示的16为温度读数。 以下的过程可以获得较高的分辨率。首先,读温度,并从读得的值截去0.5℃(最低有效位)。这个值便是TEMP_READ。然后可以读留在计数器内的值。此值是门开通期停止之后计数剩余(COUNT_REMAIN)。所需的最后一个数值是在该温度处每一摄氏度的计数个数(COUNT_PER_C)。于是用户可以使用下式计算实际温度: 温度/数据关系 · DS18B20初始化时序: (1) 先将数据线置高电平“1”。 (2) 延时(该时间要求的不是很严格,但是尽可能的短一点) (3) 数据线拉到低电平“0”。 (4) 延时750微秒(该时间的时间范围可以从480到960微秒)。 (5) 数据线拉到高电平“1”。 (6) 延时等待(如果初始化成功则在15到60微妙时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。 (7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。 (8) 将数据线再次拉高到高电平“1”后结束。 · DS18B20的写操作 (1) 数据线先置低电平“0”。 (2) 延时确定的时间为15微秒。 (3) 按从低位到高位的顺序发送字节(一次只发送一位)。 (4) 延时时间为45微秒。 (5) 将数据线拉到高电平。 (6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。 (7) 最后将数据线拉高。 · DS18B20的读操作 (1)将数据线拉高“1”。 (2)延时2微秒。 (3)将数据线拉低“0”。 (4)延时3微秒。 (5)将数据线拉高“1”。 (6)延时5微秒。 (7)读数据线的状态得到1个状态位,并进行数据处理。 (8)延时60微秒。 注: 3.4.4 DS18B20与单片机的接口电路 由于DS18B20只有一根数字信号输出/输入端,因此和单片机的接口电路很简单,如下图: 3.5 开锁控制电路 3.5.1 28BYJ48电机驱动方法及参数 · 28BYJ48简介: 步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-),八拍(A-AB-B-BC-C-CD-D-DA-A) · 28BYJ48驱动方法: 按照图示时序,通过单片机的I/O口给步进电机脉冲。 3.5.2 电机主要参数特性 · 电机主要参数: · 电机主要特性: 1.步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。 2.28BYJ48是5V驱动的4相5线的步进电机,而且是减速步进电机,减速比为1:64,步进角为5.625/64度。如果需要转动1圈,那么需要360/5.625*64=4096个脉冲信号。 3.步进电机具有瞬间启动和急速停止的优越特性。 4.改变脉冲的顺序,可以方便的改变转动的方向。 3.5.3 ULN2003驱动芯片简介 · ULN2003特点: 1.ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路 2.直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。 ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时3.承受50V 的电压,输出还可以在高负载电流并行运行。 4.ULN2003 采用DIP—16 或SOP—16 塑料封装。 · ULN2003作用: ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。 输入5VTTL电平,输出可达500mA/50V。 ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。 该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。 ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。 · ULN2003引脚介绍: 引脚1:CPU脉冲输入端,端口对应一个信号输出端。 引脚2:CPU脉冲输入端。 引脚3:CPU脉冲输入端。 引脚4:CPU脉冲输入端。 引脚5:CPU脉冲输入端。 引脚6:CPU脉冲输入端。 引脚7:CPU脉冲输入端。 引脚8:接地。 引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。 引脚10:脉冲信号输出端,对应7脚信号输入端。 引脚11:脉冲信号输出端,对应6脚信号输入端。 引脚12:脉冲信号输出端,对应5脚信号输入端。 引脚13:脉冲信号输出端,对应4脚信号输入端。 引脚14:脉冲信号输出端,对应3脚信号输入端。 引脚15:脉冲信号输出端,对应2脚信号输入端。 引脚16:脉冲信号输出端,对应1脚信号输入端。 3.5.4 电机与单片机的接口电路 第四章 软件设计 4.1 软件设计的流程 4.2 开发环境 软件开发通常遵循4-9图所示的流程: (1) 安装IAR Embedded3.1软件。 (2) 创建一个新的工程。 双击IAR软件图标弹出如图4-10所示的对话框选择“Create new project in current workspace”。然后会弹出如图4-11所示的对话框选择“Empty project”然后点击OK。然后输入新的工程名字(不包含中文字符)。 图4-10 (2) 编写C程序源文件。 点击File ——>new——>File,然后在空白的页面里编写C语言的源文件。编写完后保存程序源文件文件名以点C结尾。 (3) 在工程中添加C程序源文件 在IAR Embedded3.1环境下右击workspace中的工程名。选择add—>add files找到编写的C源程序,点击ok。 (4) 链结程序 在IAR Embedded3.1环境下右击workspace中的工程名,选择options将会弹出如图3—5所示的对话框。 通过选择General Options—>Target—>选择MSP430F149。 通过选择General Options—>Setup—>Driver—>FET Debugger。 (5) 编译下载程序 Project——>compile初步编译源程序如有报错修改后保存在进行保存。 Project——>make——>make and debug深层编译远程序。 Project——>GO下载到硬件设备。 4.3 部分程序代码 · 温度读取函数: #include #include"temp.h" unsigned char q; void DelayNus(unsigned int n) { while(n--); } /******************************************* 函数名称:Init_18B20 功 能:对DS18B20进行复位操作 参 数:无 返回值 :初始化状态标志:1--失败,0--成功 ********************************************/ unsigned char Init_18B20(void) { unsigned char Error; DQ_out; _DINT(); DQ0; DelayNus(700); DQ1; DelayNus(40); DQ_in; _NOP(); if(DQ_val) { Error = 1; //初始化失败 } else { Error = 0; //初始化成功 } DQ_out; DQ1; _EINT(); DelayNus(400); return Error; } /******************************************* 函数名称:Write_18B20 功 能:向DS18B20写入一个字节的数据 参 数:wdata--写入的数据 返回值 :无 ********************************************/ void Write_18B20(unsigned char wdata) { unsigned char i; _DINT(); for(i = 0; i < 8;i++) { DQ0; DelayNus(6); //延时6us if(wdata & 0X01) DQ1; else DQ0; wdata >>= 1; DelayNus(50); //延时50us DQ1; DelayNus(10); //延时10us } _EINT(); } /******************************************* 函数名称:Read_18B20 功 能:从DS18B20读取一个字节的数据 参 数:无 返回值 :读出的一个字节数据 ********************************************/ unsigned char Read_18B20(void) { unsigned char i; unsigned char temp1 = 0; _DINT(); for(i = 0;i < 8;i++) { temp1 >>= 1; DQ0; DelayNus(6); //延时6us DQ1; DelayNus(8); //延时9us DQ_in; _NOP(); if(DQ_val) temp1 |= 0x80; DelayNus(45); //延时45us DQ_out; DQ1; DelayNus(10); //延时10us } _EINT(); return temp1; } /******************************************* 函数名称:Skip 功 能:发送跳过读取产品ID号命令 参 数:无 返回值 :无 ********************************************/ void Skip(void) { Write_18B20(0xcc); } /******************************************* 函数名称:Convert 功 能:发送温度转换命令 参 数:无 返回值 :无 ********************************************/ void Convert(void) { Write_18B20(0x44); } /******************************************* 函数名称:Read_SP 功 能:发送读ScratchPad命令 参 数:无 返回值 :无 ********************************************/ void Read_SP(void) { Write_18B20(0xbe); } /******************************************* 函数名称:ReadTemp 功 能:从DS18B20的ScratchPad读取温度转换结果 参 数:无 返回值 :读取的温度数值 ********************************************/ unsigned int ReadTemp(void) { unsigned char temp_low; int temp; temp_low = Read_18B20(); //读低位 temp = Read_18B20(); //读高位 if(temp&0x80) { temp = (temp<<8) | temp_low; temp=((~temp)+1); temp=(int)(0.625*temp); } else { temp =(temp<<8) | temp_low; temp=(int)(0.625*temp); } return temp; } /******************************************* 函数名称:ReadTemp 功 能:控制DS18B20完成一次温度转换 参 数:无 返回值 :测量的温度数值 ********************************************/ unsigned int Do1Convert(void) { unsigned char i; do { i = Init_18B20(); } while(i); Skip(); Convert(); for(i = 20;i > 0;i--) DelayNus(600); //延时800ms以上 do { i = Init_18B20(); } while(i); Skip(); Read_SP(); return ReadTemp(); } · LCD显示函数 #include #include"lcd.h" #include"temp.h" #include"time.h" //unsigned char time_buf[]={0,0,0,0,0,0}; /******************************************** 函数名称:LCD_busy 函数功能:测试LCD忙碌状态 函数参数:无 函数返回:无 *********************************************/ unsigned char LCD_busy() { unsigned char result; RS_0; RW_1; DATA_IN; EN_1; _NOP();_NOP();_NOP();_NOP(); if((P5IN & 0x80)!=0) result =1; else result=0; EN_0; return result; } /******************************************** 函数名称:write_command() 函数功能:写入指令数据到LCD 函数参数:cmd:指令代码 函数返回:无 *********************************************/ void write_command(unsigned int cmd) { while(LCD_busy()); DATA_OUT; RS_0; RW_0; DATAPORT = cmd; EN_1; _NOP(); EN_0; } /******************************************** 函数名称:write_data() 函数功能:写入显示数据到LCD 函数参数:dat:显示数据 函数返回:无 *********************************************/ void write_data(unsigned int dat) { while(LCD_busy()); DATA_OUT; RS_1; RW_0; DATAPORT = dat; EN_1; _NOP(); EN_0; } /******************************************** 函数名称:LCD_init 函数功能:LCD初始化 函数参数:无 函数返回:无 *********************************************/ void LCD_init() { CTRL_OUT; PSB_1; //LCD初始化设定 RESET_1; write_command(0x30); //基本指令集 write_command(0x02); //地址归位 write_command(0x0c); //显示开关 write_command(0x01); //清除LCD的显示内容 write_command(0x06); //输入方式 write_command(0x80); //设定显示的起始地址:第0行 } /******************************************** 函数名称:DISP_num 功 能:显示多位数字 参 数:x--显示的位置 num--要显示的数字32位 返回值 :无 *********************************************/ void DISP_numSP0(unsigned char x,unsigned int num) { unsigned char Buff[4];//最多显示32个数字 unsigned int Atemp=num; Buff[3]=Atemp%10; Buff[2]=((Atemp%1000)%100)/10; Buff[1]=(Atemp%1000)/100; Buff[0]=Atemp/1000; write_command(x | 0x80);//显示的位置(第X个地址,80H~9FH) //write_data(0x3A); //显示“:” write_data(0x30+Buff[0]); write_data(0x30+Buff[1]); //write_data(0x2E); write_data(0x30+Buff[2]); write_data(0x30+Buff[3]); } /***************************************************** 函数名称:DISP_temp 函数功能:显示汉字指定编码的汉字 函数参数:x:显示起始位置 w:汉字个数 dat:显示的汉字编码 函数返回:无 *****************************************************/ void DISP_temp(unsigned char x,unsigned int dat) { unsigned char disdata[4]; disdata[0]=dat/1000; disdata[1]=dat%1000/100; disdata[2]=dat%100/10; disdata[3]=dat%10; write_command(x | 0x80);//显示的位置(第X个地址,80H~9FH) write_data(disdata[0]+0x30); write_data(disdata[1]+0x30); write_data(disdata[2]+0x30); write_data(0x2e); write_data(disdata[3]+0x30); } /***************************************************** 函数名称:DISP_time 函数功能:显示实时时间 函数参数:x:显示起始位置 函数参数:w:时间存储数组的起始位置 函数返回:无 *****************************************************/ void DISP_time(unsigned char x,unsigned int w,unsigned char *buf) { write_command(x | 0x80);//显示的位置(第X个地址,80H~9FH) write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; write_data(buf[w++]); if(w==30) w=0; } /***************************************************** 函数名称:DISP_word 函数功能:显示汉字指定编码的汉字 函数参数:x:显示起始位置 w:汉字个数 dat:显示的汉字编码 函数返回:无 *****************************************************/ void DISP_word(unsigned char x,unsigned char w,unsigned char *dat) { write_command(0x80 | x); //写DDRAM起始地址 unsigned char j; for(j = 0;j0;i--) { DISP_word(site,1,clear); site++; } } · 时钟函数 #include #include"time.h" #include"Uart_rx.h" #include"main.h" char transform(unsigned int x); unsigned int year; unsigned int month; unsigned int day; unsigned int hour; unsigned int min; unsigned int sec; unsigned char time_buf[30]={0,0,0,0,0xC4,0xEA,0,0,0xD4,0xC2,0,0,0xC8,0xD5,0X20,0X20,0,0,0X3A,0,0,0x3A,0,0,0x20,0x20,0x20,0x20,0x20,0x20}; unsigned char time_setting[]; char returned; void time() { sec++; if(sec==60) { min++; sec=0; if(min==60) { hour++; min=0; if(hour==24) { sec=0; min=0; hour=0; day++; //判断是否为闰年 if((year%4==0)&&(year%100!=0)||(year%400==0)) { //--------判断大小月,确定天数------------- if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if(day==32) { day=1; month++; if(month==13) { month=1; year++; } } } if(month==4||month==6||month==9||month==11) { if(day==31) { day=1; month++; if(month==13) { month=1; year++; } } } if(month==2) { if(day==30) { day=1; month++; if(month==13) { month=1; year++; } } } } if(!((year%4==0)&&(year%100!=0)||(year%400==0))) { //--------判断大小月,确定天数------------- if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if(day==32) { day=1; month++; if(month==13) { month=1; year++; } } } if(month==4||month==6||month==9||month==11) { if(day==31) { day=1; month++; if(month==13) { month=1; year++; } } } if(month==2) { if(day==29) { day=1; month++; if(month==13) { month=1; year++; } } } } } } } } void time_allocate() { time_buf[0]=transform(year/1000); time_buf[1]=transform(year%1000/100); time_buf[2]=transform(year%100/10); time_buf[3]=transform(year%10); time_buf[6]=transform(month/10); time_buf[7]=transform(month%10); time_buf[10]=transform(day/10); time_buf[11]=transform(day%10); time_buf[16]=transform(hour/10); time_buf[17]=transform(hour%10); time_buf[19]=transform(min/10); time_buf[20]=transform(min%10); time_buf[22]=transform(sec/10); time_buf[23]=transform(sec%10); } char transform(unsigned int x) { switch(x) { case 0:returned= 0x30;break; case 1:returned= 0x31;break; case 2:returned= 0x32;break; case 3:returned= 0x33;break; case 4:returned= 0x34;break; case 5:returned= 0x35;break; case 6:returned= 0x36;break; case 7:returned= 0x37;break; case 8:returned= 0x38;break; case 9:returned= 0x39;break; } return returned; } · 异步通信接收中断函数 #pragma vector=UART0RX_VECTOR __interrupt void UART0_RX_ISR(void) { if(code_rec==1) { UART_buff=U0RXBUF; Data[numb++]=charge_code(UART_buff); //numb++; if(numb==4) { lcd_acti=1; numb=0; } } if(time_set==1) { UART_buff=U0RXBUF; init_clock[num]=UART_buff; num++; if(UART_buff=='K') { init_clk(init_clock); //num=0; time_set=0; code_rec=1; } } } 第五章 结语 通过本次从零开始设计一个基于wifi模块的简易门禁系统,从一开始学习全新的430单片机,到学习12864液晶显示,再学习18B20温度传感器的使用,本组的成员通过努力,客服了重重的困难,其实小组成员一直很遗憾没有想到一个比较好的wifi模块的课题,因此整个过程虽然学到了很多的新知识,但是最后的结果还是不尽人意。 课题设计最重要的是选择一个有意义的想法,然后去实现,在当代社会中,有思想有创新的人越来越少,多的是会一门已经存在的技术,将他重复的使用的人,我们本打算通过这个wifi的门禁系统,为以后社会带来一定程度的经济效益,但是由于水平有限,整个制作过程也逐渐围绕自己去学习的目的展开。 由于有51单片机的基础,因此学习起430单片机没有很困难,但是一开始怎么用430去点亮一盏灯,也足够让我们头疼。一个月以来,每天都在重复着发现新问题,分析问题,再解决问题的过程,这过程很痛苦,但是一旦深陷其中,便会喜欢上这个过程,自己绞尽脑汁去解决一个阻碍自己前进的问题,是一种学习的过程。 整个门禁系统虽然结构简单,也没有运用到什么新技术,和别人的好的方案相比较还是显逊色,但是在经历了这么一次痛苦的学习过程之后,我相信在以后的学习过程中,等我们再次遇到困难或者瓶颈时,我们不会再半途而废,更不会因为遇到困难而轻易放弃,天无绝人之路,只要愿意想,再曾经让人感觉无法解决的问题,也都会在一个人的坚韧毅力下被驯服。 最后,也是最重要的,要感谢在这个过程中帮助过我们的人,尤其是老师给我们的建议和意见,以及老师的指导,都对我们的学习过程起到了至关重要的作用,我也深刻的体会到了,不一定是站在巨人的肩膀上,就是站在巨人的身边,也可以学到很多很多的东西,其实在大学的生活中,作为一名曾经憧憬大学生活的人来说,我们特别的期待老师可以不仅为我们讲相对枯燥的课堂知识,而是作为我们身边有力的知识支柱,帮助我们学习的更快,接触的更多,最后的最后,还是想对所有在我们学习道路上帮助我们的老师送上最真挚的祝福和感谢! 参考文献 [1] 沈建华,杨艳琴.MSP430系列16位超低功耗单片机原理与应用[M]. 北京:清华大学出版社,2004.11. [2] 秦龙.MSP430单片机C语言应用程序设计实例精讲[M]. 北京.电子工业出版社,2006.5. [3] 曹磊.MSP430单片机C程序设计与实践[M]. 北京:北京航空航天大学出版社,2007.5. [4] 张长海,陈娟.C程序设计[M]. 北京:高等教育出版社,2004.11. [5] 沈建华.MSP430系列16位超低功耗单片机实践与系列设计[M].北京:清华大学出版社.2005.4 [6] 李建忠. 单片机原理及应用[M]. 西安:西安电子科技大学出版社,2002. [7] 马忠梅等. 单片机的C语言应用设计[M]. 北京:北京航空航天大学出版社,1999. [8] 黄仁欣等. 单片机原理及应用技术[M]. 北京:清华大学出版社,2005. [9] 坂本正文等. 步进电机应用技术[M]. 北京:科学出版社,2010. 开始 是否有当前时间数据输入 否 系统运行,显示当前温度以及时间 是否有密码数据 是 密码正确? 是 开门 否 是 _1234567895.unknown
本文档为【门禁系统课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
金水文库
鑫淼网络科技有限公司主要经营:PPT设计 、课件制作,软文策划、合同简历设计、计划书策划案、各类模板等。公司秉着用户至上的原则服务好每一位客户
格式:doc
大小:4MB
软件:Word
页数:60
分类:企业经营
上传时间:2019-02-03
浏览量:75