汽车报警系统_第1页
汽车报警系统_第2页
汽车报警系统_第3页
汽车报警系统_第4页
汽车报警系统_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汽车报警系统的设计摘要本文所设计的汽车报警系统是一种基于STM32系列单片机芯片以及GPRS的报警系统,该系统能够较为准确的检测到汽车发生的异常信息,并且能够发出报警信号以及及时的反馈给车主,以便做出控制指令。本文介绍了相关模块的硬件电路设计过程,以及相关模块的软件设计流程,该系统能够具有较高的从可靠性与实时性。关键词:汽车报警;STM32;GPRS。ABSTRACTAkindofalarmsystemofthecaralarmsystembasedonSTM32seriessinglechipandGPRSisdesignedinthispaper.Theabnormalinformationofthecarcanbedetectedaccuratelybythesystem,andthealarmsignalcanbetimelysenttothecarowner,inordertomakethecontrolcommand.Thispaperintroducestheprocessofhardwarecircuitdesignandsoftwaredesignofrelatedmodules.Thesystemhashighreliabilityandreal-time.Keywords:Thecaralarmsystem;STM32;GPRS.目录TOC\o"1-3"\h\u1.前言 11.1本设计的目的和意义 11.2本设计在国内外的发展概况与存在的问题 11.3本设计应解决的主要问题 22.系统总体设计与框架图 33.系统硬件设计介绍 43.1.STM32f103c6t8单片机43.1SIM800AGPRS模块 43.2指纹识别as608模块 53.3信号采集与控制模块 53.5OLED显示模块64.系统软件设计介绍 74.1指纹识别模块软件设计 84.2OLED程序设计 94.3双向通信控制软件设计 105.结论 11参考文献 12附录 13前言1.1本设计的目的和意义近年来现代电子科技的快速发展,人们在日常生活中对于电子产品的需求与要求都越来越高。随着国家经济实力的飞速提高,普通百姓家的生活水平不断得到提升,作为日常交通工具的汽车也进入寻常百姓之家。但是在汽车给我们的日常生活提供交通便利的同时,汽车的使用存在着一个大难题,那就是汽车的防盗报警。如前所述,日常生活中家庭都会用到汽车,而车主对于汽车的防盗性能也要求越来越高,电子智能防盗报警系统也随之应运而生。市场上出现的传统的防盗报警系统的容易被破解,防盗性能较差,而近年来兴起的网络防盗系统误报率较高,反馈周期较长。根据以上分析可知,现在市面上有的汽车防盗系统不能够满足我们用户对汽车报警系统的要求,而且以为汽车报警系统发生误报情况会带来较大的噪声污染,影响周围人的日常生活,因此我们需要设计新型的更为可靠更为环境友好的汽车报警系统。1.2本设计在国内外的发展概况与存在的问题当今市场上一般使用的汽车防盗报警系统所依据的中心思想就是要在防止汽车被盗方面入手,另一种说法也就是即便考虑盗贼闯入汽车内,也无法把车主的汽车盗走,目前这些报警系统所采用的报警手段包括了如下四种形式:机械式的,电子式的,芯片数码式的,GPS网络报警式的以及车载电话系统报警形式的。机械式防盗报警器该类报警器在当今市场上经常见到,主要包括了两大类,即方向盘锁以及排挡锁,这类报警器所存在的缺点也显而易见,就是防盗功能可靠性较低,每次进行拆装该类报警器步骤比较复杂。电子式防盗报警器该类报警器主要可以分为以下两大类,分别为单向与双向。第一类报警系统的主要功能是,不管所保护的汽车哪一个部件发生了异常情况,该报警器都能给出报警信号以便得到用户的注意。第二类报警器与第一类报警器相比更为直观能够使得汽车的实时情况能够反馈给车主,当汽车报警器发出报警信号时,汽车的实时状况会显示在该报警器的遥控器上面,该类报警器的缺点是有效范围很小仅为200米。该类报警器还存在一个最大的致命问题,问题的根源在于该类报警器所使用的操作方式为电子密码方式和遥控操作方式。在汽车车主用该报警系统的遥控器打开或者关闭车门时,附近的小偷就可以利用接收器来接受遥控器所发出的信号,然后再将该信号破解,就能够达到破解该报警系统的目的,这样一来该报警系统的可靠性出现了致命问题。与此同时,该报警器容易发生错误发出报警信号的情况,影响周围居民。芯片式数码防盗报警器该类报警器是现在汽车报警器发展的新型关键领域,目前大多数的汽车都将该类报警器作为汽车原装报警器。该类报警器采用将汽车发动机,电路以及油路系统锁定的方式,提高系统的可靠性,在盗车贼没有芯片钥匙时,其根本找不到开启该车辆的方法。因为密码采用数字化的形式时可靠性比较高,能够满足可靠性的要求。GPS网络式防盗报警系统该类报警器的性能与其他报警器相比最为先进。下面来介绍以下该类报警器的基本工作原理,该类报警器就是将一个小型的GPS系统安装在汽车上面,然后根据无线通讯网络以及GPS中心连接为一个整体系统,这类报警器具有的优势包括定位较为准确,所监测的范围较为大,能够主动报警,报警反应速度较快,失窃车辆召回概率较高,在汽车出现异常情况时能够将报警信息及时的送达车主,退一步说,汽车即便被偷窃,该报警系统仍然能够帮助警方找回的丢失的汽车。此外,该装置在夜间车主熟睡的情况下仍然能够自动监测警情并及时通知车主。该报警装置具有如下优势:能够使得跟踪控制车辆的过程变得较为简单,能够较为高效的找回失窃的汽车。但是与此同时,该类报警器的缺点也比较明显,那就是该报警系统所需要的跟踪系统比较庞大,也需要用户24小时对车辆进行人工监控,与上述报警系统相比价格比较昂贵。以上所述几种防盗报警装置各有优缺点,汽车防盗报警系统正在不断朝着芯片式和GPS网络式发展,这也是本文所重点考虑的设计方向。1.3本设计应解决的主要问题本文所介绍的汽车报警系统以STM32芯片为控制主芯片,基于GPRS通讯技术,完成车主与汽车的双向交互控制功能,本设计的主要任务如下:能够采样汽车的异常信号,并发出报警信号,在利用指纹识别芯片判别系统使用者身份为车主之后,由车主做出针对车辆异常信息的控制指令,实现双向控制功能。综上所述,本文所设计的电子智能防盗报警系统以STM32为核心芯片,通过相关的传感器以及GPRS网络实现了汽车较为精准的实时防盗报警功能,及时反馈给车主汽车信息,车主得到信息后能够对汽车发出控制指令做出反应,实现了用户和汽车之间的双向控制功能。2.系统总体设计与框架图本章主要介绍后了本文所设计的基于GPRS的STM32单片机为核心芯片的汽车报警控制系统。本系统所采用的核心芯片为STM32系列的单片机,该类单片机将主要控制部分集成在一个控制芯片上面,这些主要部分包括了中央处理器,随机存储器,只读存储器,中断系统,定时器以及定时器,还有I/O接口。单片机具有所占空间较小,能够完成计算机系统的功能,本文中所使用的单片机主要利用了该芯片的控制功能。图2.1控制框架图如上图所示该汽车报警系统包括了如下几个模块:给系统其他模块供电的电源模块,利用GPRS业务以及SIM800A芯片模块的GPRS模块,该GPRS模块能够完成信息的传输和发送功能。另外还有振动传感器模块,人体红外传感器模块,as608芯片模块,oled芯片模块以及用于报警的蜂鸣器模块。3.系统硬件设计介绍3.1STM32F103C8T6单片机现如今的单片机发展太迅速,像之前学习的C51系列的单片机渐渐的退出历史舞台,而本设计使用的STM32单片机,渐渐取代C51系列的单片机的地位,C51单片机能达到的要求,STM32单片机也能达到,并且STM32处理数据的速度比C51单片机快得多。STM32F103C8T6单片机是具有基于ARM的32位微控制器,是通用类型,增强型,具有48个引脚和256k字节的闪存存储器,封装为LQFP,具有32KB存储量。总电源正极接单片机5V电源端口。端口具有通用定时器(TIMx),普通I/O端口,I2C总线端口,SPI串行外设接口,ADC接口等等。STM32单片机的调试端口有两种,一种是SWD,一种是JTAG接口调试,JTAG接口使用最为普遍,现如今基本上都是使用JTAG接口,而SWD一样可以进行调试,并且SWD接线比起JTAG接口少得多,本设计使用到的是JTAG接口。在STM32的外面有4个接口供用户使用,该端口是接连单片机内部的JTAG调试模块上的,用户可以根据需要进行接连调试。STM32F103C8T6单片机是整个系统的中心处理器,就像人的大脑一样,可以命令自己的四肢一样,如果没有单片机,整个系统也运行不起来,本设计钟的单片机的作用是把六个模块连接起来,模块之间根据单片机内的编程代码,可以使得模块之间相互配合运行,以此来满足用户安全性的要求。3.2SIM800AGPRS模块GPRS模块所使用的是SIM800a模块,该模块的主要特点介绍如下:SIM800A采用高性能工业级GSM/GPRS模块:SIM800A工作频段:GSM900/1800MHZ可以实现电话语音,发送短信和彩信GPRS数据传输功能外(支持透传模式,域名解析和IP模式)还具有DTMF解码(可以识别对方按键)6)音频接口:音频的输出和输入接口通过排针引脚,以供用户灵活使用。2)具有TTL串口和RS232串口(USART串口)8)一路SIM卡接口9)支持蓝牙功能该模块的主要参数如下所示:供电:电压范围:5V~18V频段:GSM900该模块支持的串行接口形式为8线制,传输速率宽带范围为1.2kbps-115.2kbps。该模块提供了两个异步串行接口,这两个接口分别用于通讯功能和软件调试功能。该模块的TXD发送数据到处理器的RXD上,RXD在处理器的TXD数据线3上进行数据的接收。在进行SIM800a模块与STM32单片机芯片之间进行数据传输的过程中用到了AT命令。GPRS模块具有标准的SIM卡的接口。在对GPRS模块进行硬件电路设计的过程中需要分为以下几个模块来进行具体设计:该芯片的的供电模块,SIM卡模块,SIM卡模块的开机硬件设计。模块电源可以控制模块的重启,该模块高电平供电,低电平断电,当模块出现程序混乱或者是死机的情况下,可以断开电源的方式进行模块的复位,而且该模块具有上电自动开机的功能,无需使用开关,使用时简单方便。SIM800AGPRS模块在系统中即是输入端也是输出端,用户可以借助该模块控制系统的运作。用户发送信息到该模块上,模块会把信息传给单片机,单片机根据发送的信息内容进行指纹的录入,或者是启动安全模式。而当进入安全模式后,当外界发生异常情况,单片机命令该模块把出现异常的情况以信息的方式发送到车主的手机上,这样的设计使用户控制时更加方便,也便于车主在第一时间作出反应。3.3指纹识别as608模块指纹识别模块as608传感器主要用于车主身份的识别,在MCU将识别的信号处理之后,经过对该信号的判别即可做出控制响应。下面我们来见到介绍一下数字智能热释电红外传感器AS608的基本原理和主要特性AS608传感器芯片是由AS608指纹识别芯片所制作的指纹芯片,在我们使用该芯片时,厂家已经设计好外围电路,已经集成出了一个指纹芯片,该指纹芯片可以提供二次开发。基于该芯片的指纹识别模块的控制电路与控制协议基本上相同。硬件接口AS608模块采用8pin的控制接口,供电电压为3.3V,通信总线的具体形式分为以下两类,包括了串口通信方式和USB通讯方式;在采用第一种通讯模式下,编程的步骤较为简明,比较常用,但是兼容性能较差;采用USB通讯的模式之下,编程较为困难,但是兼容性较好。在实际控制接线中,该模块的touch引脚接到单片机芯片的普通I/O口上,当检测到有指纹按下时,该引脚触发一个高电平信号;TX,RX引脚接到单片机模块的串口引脚上。需要特别注意的是该指纹识别模块只能使用3.3V电压供电,不能使用5V电压供电。在单片机对指纹识别模块进行控制过程中,需要基于指纹识别模块所规定的通讯格式,将串口数据进行发送以及处理,另外该指纹识别模块的其他控制功能也必须基于上述的通讯格式来执行。控制指令分为三类,包括了指令包,数据包,结束包。一般情况下单片机将指令包一般指令包发送给指纹识别芯片当中,该芯片在接收到控制指令后,将相对应的数据包返回给单片机;指令包主要包括了包头,芯片地址,包标识,包长度,控制参数以及校验和;数据包与指令包的区别在于将控制参数替换为数据。数据包与结束包的区别在于包标识。AS608指纹模块有两个功能,第一个功能就是录入用户的指纹存于单片机内,而另一个功能就是系统验证是否车主本人的一个依据,当汽车报警系统出现异常后,用户可以使用本人的指纹关闭系统的报警状态。3.4信号采集与控制模块下面来介绍一下本文所设计的控制系统当中的信号采集模块,该模块利用传感器芯片来将外界对汽车的作用采集起来,然后对这些外部信号进行分辨与检测。在汽车被强行拖车或者打开车门,发生碰撞都属于需要采集的信号,本系统所侧重采集的就是诸如此类的汽车异常信号,因此本系统采用的震动传感器以判别汽车的异常状态。本系统所选用的震动传感器通过内部微球来检测判断汽车车体所受到的震动情况,这里所使用的内部微球起到了如下所用:该微球是两个触点传感器的内部电极相互连接的部分,这样就能够使得两个外部连接垫片电阻的电阻数值下降。汽车发生的异常情况的信息在得到传感器的采集之后,通过GPRS网络由车主发送应对异常信息的指令控制模块电路来实现对汽车的控制。车主对车辆的控制措施当中由紧急报警等具体功能。收集外界信号有两个模块,人体红外传感器和震动传感器,两个传感器均是输出端,是收集外界异常的两个模块,也是触发报警的源头,报警器安全性的高低,很大程度上是传感器的质量,传感器收集数据越准确,报警器的安全性往往就越高,而本设计使用的人体红外传感器和震动传感器也是报警器中常用的传感器。3.5OLED显示模块

本文所设计的控制系统所选用的显示芯片为OLED芯片,该芯片名称表示有机发光二极管显示器。传统的LCD液晶显示相比本文所采用的OLED芯片而言,诸多性能不如后者。主要包括了,传统的LCD液晶显示需要单独给背光的操作才能够使得显示屏所显示的信息较为明显的呈现出来。另外,LCD显示屏的黑位水平、对比度、厚度、视角、颜色均匀性等方面的性能,与本文所选用的OLED芯片相比较为落后。

本文所选用的OLED显示模块的正常工作维度范围在-40~+70℃之间,内部自带升压电路,分辨率为128*64像素,供电电压在3-5V即可。本文所选用的通信接口方式设置为SPI串口模式。

本文所设计的控制系统当中OLED显示模块采用的通信接口方式为SPI串口通信接口模式。

在该通信接口模式中,STM32单片机与该模块通信依靠排针连接,单片机连接引脚与普通的LCD液晶模块的连接引脚基本一致:在这些连接引脚中必须包括电源引脚与接地引脚,主其他主要的引脚包括了如下几个:CS片选信号;RES复位线;DC数据或指令选择信号;D0为SPI时钟线,D1为SPI数据线等。在控制该模块时,首先需要选择输入的是指令抑或是数据,之后将片选引脚的电位取为低电平,然后将写信号使能设置好,将数据写入到所用到的数据线内,这样就能进行数据的读写操作。因为模块为串行通信,为了与STM32单片机兼容连接,模块中的D0,D1端口需要连接单片机串行口,具体连接是:VCC引脚接系统总电源正极,GND引脚接总电源负极,D0引脚接PA0引脚,D1引脚接PA1引脚,CS引脚接PB0引脚。OLED显示模块主要是显示AS608指纹识别模块上的内部的程序运行,模块上显示的内容可以让车主清楚AS608指纹录入是否成功,识别是否成功,如果没有显示模块,车主并不知道指纹是否传达给单片机,使用时也不知道匹配是否成功,所以该模块是非常方便用户识别指纹录入和识别的情况。4.系统软件设计介绍开始开始单片机初始化单片机初始化否是否收到信息否是否收到信息否否否否是是SIM800AGPRS是否接受到ADDSIM800AGPRSSIM800AGPRS是否接受到ADDSIM800AGPRS是否接受到SAFE是是是是启动AS608指纹模块录入指纹启动汽车报警系统启动AS608指纹模块录入指纹启动汽车报警系统否否触发震动传感器,人体红外传感器,否否触发震动传感器,人体红外传感器,AS608指纹识别失败录入指纹是否成功录入指纹是否成功是是将用户指纹存于单片机是将用户指纹存于单片机是蜂鸣器发声蜂鸣器发声用户指纹识别成功用户指纹识别成功蜂鸣器停止发声SIM800AGPRS模块发送信息wrong到用户手机蜂鸣器停止发声SIM800AGPRS模块发送信息wrong到用户手机图4.1软件逻辑流程图系统采用C语言进行编程,然后将编写好的程序写入单片机闪存内。主要控制流程如下所示:首先进行系统的初始化过程,在初始化结束后对系统是否在要转变为警戒状态进行判断;在判断为要转变为警戒态后,将GPRS模块和各种传感器模块进行使能,开启以上功能。在汽车受到外部影响进入异常状态的情况下,系统内部的各种传感器会将高低电平的切换信息进行采集,与此同时,单片机的串口发出响应操作,控制系统将外部异常信息通知车主,并同时通过GPRS网络将所采集到的信息传输给信息中心。在车主得到传送过来的警情信息后,可以立即给出控制指令来对汽车进行控制以反馈得到的警情信息。在该系统中,GPRS模块在启动之后就一直处于循环的问询之下,车主可以据此了解车辆的实时信息,并且据此发出实时指令,所发出的控制指令在经过单片机控制芯片进行处理之后,将其发送到GPRS模块,然后车主再GPRS网络来得到所反映的车辆信息。与此同时,在车主要使用时,可以通过指纹识别系统判别出车主身份。4.1指纹识别模块软件设计本设计所采用的指纹识别模块的控制软件程序设计包括以下几个环节:录入图像,生成特征,搜索指纹,自动验证指纹,自动注册模板,删除指纹。录入指纹需要在系统中录入指纹信息,需要:录入图像,生成特征,快速查找图像,自动注册模板。程序可分为以下几个具体步骤:1)录入图像指令2)生成特征指令存入指纹图像,存入单片机模块给定的缓冲区号中;3)快速查找图像生成图像后要验证是否在缓冲区号之内4)自动注册模板最后将缓冲区号里面的图像存入Flash里面5)在自动验证指纹录入指纹后,就可以匹配本人的指纹完成身份识别,只许要发送自动验证指纹指令,返回的确认码为0x00,即为匹配成功,不为则匹配失败。6)删除指纹:管理员如果需要删除系统中录入的指纹信息,需要写入删除所需删除的指纹的ID号码,然后发送删除指纹指令即可删除相应的指纹。其具体程序代码见附表中指纹采样代码。具体代码实现的功能:读摸出感应状态判断中断接收的数组有没有应答包探测手指,探测到后录入指纹图像存入ImageBuffer(录入图像)将ImageBuffer中的原始图像生成指纹特征文件存于charBuffer1或charBuffer2(生成特征)5)精确比对CharBuffer1与CharBuffer2中的特征文件6)以CharBuffer1或CharBuffer2中的特征文件搜索整个或部分指纹库.若搜索到,则返回页码。7)将CharBuffer1与CharBuffer2中的特征文件合并生成模板,结果存于CharBuffer1与CharBuffer28)将CharBuffer1或CharBuffer2中的模板文件存到PageID号flash数据库位置。9)

删除flash数据库中指定ID号开始的N个指纹模板10)

删除flash数据库中所有指纹模板11)

写模块寄存器12)

读取模块的基本参数(波特率,包大小等)13)设置模块地址14)模块内部为用户开辟了256bytes的FLASH空间用于存用户记事本,该记事本逻辑上被分成16个15)

读取FLASH用户区的128bytes数据页。16)以CharBuffer1或CharBuffer2中的特征文件高速搜索整个或部分指纹库。

若搜索到,则返回页码,该指令对于的确存在于指纹库中,且登录时质量很好的指纹,会很快给出搜索结果。17)读有效模板个数18)解析确认码错误信息返回信息代码设置中,每当有新指纹进入时,系统会删除存在flash中的指纹,所以本设计中的指纹模块个数为1,其目的是为了更加方便调试。4.2OLED程序设计

4.2.1初始化程序设计

本文所选用的OLED模块也需要进行程序的初始化,初始化程序包括了该显示控制芯片的一系列的设置操作,这些设置操作包括了关闭显示、设置时钟分频因子、设置显示偏移、设置内存地址、行列起始地址等。本文编写初始化程序直接参考厂家所提供的源码。

4.2.2读出数据/指令

进行显示屏模块的读出操作,实际上就是与模块内的控制芯片进行通信。读出的指令遵循的是SPI通信协议。由于OLED硬件的设定,该模块上的DO端口上,接的是SPI的时钟线,而D1端口则是SPI的输出线,是单片机输出给模块的线,工作时,SCK时钟线为上沿时采集数据,时钟为初始状态时为高电平。在传输信号的过程在,模块可以根据SCK时钟线来决定数据线什么时候传输,传输多少信号。本设计中的显示模块与AS608指纹模块结合,显示模块的主要作用是为了显示指纹录入的情况和识别的情况,让用户知晓指纹模块中的运行情况,因指纹模块分为录入指纹与识别指纹两种功能,显示模块设置软件时,也需把两种功能都显示出来。4.2.3OLED显示模块与AS608指纹识别模块的结合编程(1)指纹录入:当指纹模块中有指纹生成特征charBuffer1时,显示模块显示指纹正常,而后显示再按一次,当用户再按一次时,指纹生成特征charBuffer2时,模块再次显示指纹正常。上述完成后,指纹模块将会精确对比charBuffer1与charBuffer2中的特征文件,这时会显示模块会显示对比指纹,如果成功,显示模块会显示对比成功,反之则会显示对比失败。上述完成后,指纹模块就会将charBuffer1和charBuffer2生成模块存于charBuffer1与charBuffer2中,当执行时,会显示生成模板,当完成生成模块存入后,显示模块会显示生成成功,上诉完成后,指纹模块将charBuffer1或charBuffer2中的模板文件存到pageID号flash数据库位置后,显示模块会显示录用成功。假如模块启动录入指纹一段时间没有按手指,模块会自动退出录入指纹模式。(2)识别指纹:当录入指纹后,获取图像成功,生成特征成功,以charBuffer1或charBuffer2中的特征文件高速搜索整个或部分指纹库,若搜索到,则显示验证成功,否则显示验证失败。4.3双向通信控制软件设计车主在接收到车辆异常信息之后需要发出控制指令进行响应,而车主所发出的指令需要GPRS模块进行解析。这一部分的操作主要包括了SMS的存储操作、读取以及解析步骤。本文所采用的软件代码以GSM字符集为7位编码,可以将其理解为ASCII码(ASCII值小于80Hex,因此,Bit8被忽略),在此过程中将下一7位编码的后几位依照次序逐次移动到前面,这样就形成了形成新的8位编码。然后通过函数的处理,这些固定格式的指令的解析步骤是在SMS里完成,得到的解析指令发送给计算机以便其作出响应。另一方面为了得到车主短信的指令,需要对其进行解析,然后利用GPRS模块将这些解析后的短信指令发送到STM32单片机处理器,就可以做出响应。具体编程为:设置发送指令设置Sim800a模块发送信息的SIM卡号码设置模块读取开启添加指纹与开始报警模式,向Sim800a模块上的SIM发送ADD即可开启添加指纹模式,向Sim800a上的SIM卡发送SAFE即可开始报警系统设置发送消息到SIM卡上的消息格式5.结论本文设计了一种基于STM32系列单片机芯片与GPRS的汽车报警系统,该系统利用了全球移动通信网络以及单片机控制技术。本文分别介绍了该汽车报警系统的硬件设计部分及软件设计部分,采集外部环境对汽车作用所产生的异常信息用到了振动传感器模块,人体红外传感器,利用指纹识别模块判别车主身份,由STM32处理器解析GPRS通讯系统传输的信号,这一控制系统能够实现对汽车异常状况的实时监测,车主在车辆发生异常情况时能及时做出反应,提高了该报警系统的实时性能,同时车主也能对汽车进行远程的控制。参考文献1.基于单片机的汽车防盗报警系统设计与实现[期刊论文]宫唤春-《汽车工程师》-2018年5期2.基于LM741的汽车蓄电池低电量报警系统设计[期刊论文]刘方林素敏单鱼洋-《湖北农业科学》CSTPCD北大核心-2019年11期3.基于STM32单片机实现汽车报警系统的设计[期刊论文]张歆彤-《电子世界》-2018年6期4.基于单片机的汽车防盗报警系统的设计与实现[期刊论文]王文安-《电子制作》-2018年10期5.基于STC89C52的汽车智能报警系统的设计[期刊论文]戴庚-《电子技术与软件工程》-2018年001期6.基于单片机的汽车防盗报警系统设计[期刊论文]余亚美彭森-《卷宗》-2017年13期7.基于GPS和GSM的汽车防盗报警系统设计[期刊论文]杨民生唐俊遥肖杰-《科学与财富》-2015年9期8.基于RFID和GSM的汽车防盗报警系统设计[期刊论文]王素青许根源-《自动化与仪表》CSTPCDSA-2015年9期9.基于单片机的汽车防盗报警系统的设计与实现[期刊论文]曹莉凌简佳辉-《电子设计工程》CSTPCD-2015年15期10.一种新型汽车防盗报警系统的设计与实现[期刊论文]杨帆-《电脑知识与技术》-2015年21期谢辞本设计,可以说是人生以来自己做的最难,也是最有挑战的一个项目,从一开始的什么都不懂,到后来慢慢的了解,完成实物的安装,完成编程等等,到最后写的论文,一步一个脚印走来,刚开始的时候真的想放弃了,后来经过朋友的开导,慢慢到网上去了解单片机的知识,从模块的选取到端口的连接,再到逻辑的思考,到最终完成论文。完成这个汽车报警系统,也意味着整个大学生涯,甚至是整个校园时代生涯的结束,这次的毕业设计,也算是在我进入社会之前的一次自我的挑战,让我知道只要有心去做一件事,没什么是完成不了的,谢谢在我毕业设计完成道路上给予我帮助的人,谢谢在我从一无所知,鼓励我渐渐深入了解各项模块的同学,谢谢,谢谢你们!附录电路图设计程序指纹采样代码#include<string.h>#include"delay.h" #include"usart2.h"#include"as608.h"#include"oled.h"#include"beep.h"#include"sim800a.h"u32AS608Addr=0XFFFFFFFF;//默认SysParaAS608Para;//指纹模块AS608参数u16ValidN;//模块内有效指纹个数//初始化PA6为下拉输入 //读摸出感应状态(触摸感应时输出高电平信号)voidPS_StaGPIO_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟//初始化读状态引脚GPIOAGPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//输入下拉模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHzGPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIO }//串口发送一个字节staticvoidMYUSART_SendData(u8data){ while((USART2->SR&0X40)==0); USART2->DR=data;}//发送包头staticvoidSendHead(void){ MYUSART_SendData(0xEF); MYUSART_SendData(0x01);}//发送地址staticvoidSendAddr(void){ MYUSART_SendData(AS608Addr>>24); MYUSART_SendData(AS608Addr>>16); MYUSART_SendData(AS608Addr>>8); MYUSART_SendData(AS608Addr);}//发送包标识,staticvoidSendFlag(u8flag){ MYUSART_SendData(flag);}//发送包长度staticvoidSendLength(intlength){ MYUSART_SendData(length>>8); MYUSART_SendData(length);}//发送指令码staticvoidSendcmd(u8cmd){ MYUSART_SendData(cmd);}//发送校验和staticvoidSendCheck(u16check){ MYUSART_SendData(check>>8); MYUSART_SendData(check);}//判断中断接收的数组有没有应答包//waittime为等待中断接收数据的时间(单位1ms)//返回值:数据包首地址staticu8*JudgeStr(u16waittime){ char*data; u8str[8]; str[0]=0xef;str[1]=0x01;str[2]=AS608Addr>>24; str[3]=AS608Addr>>16;str[4]=AS608Addr>>8; str[5]=AS608Addr;str[6]=0x07;str[7]='\0'; USART2_RX_STA=0; while(--waittime) { delay_ms(1); if(USART2_RX_STA&0X8000)//接收到一次数据 { USART2_RX_STA=0; data=strstr((constchar*)USART2_RX_BUF,(constchar*)str); if(data) return(u8*)data; } } return0;}//录入图像PS_GetImage//功能:探测手指,探测到后录入指纹图像存于ImageBuffer。//模块返回确认字u8PS_GetImage(void){u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x01);temp=0x01+0x03+0x01; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//生成特征PS_GenChar//功能:将ImageBuffer中的原始图像生成指纹特征文件存于CharBuffer1或CharBuffer2 //参数:BufferID-->charBuffer1:0x01 charBuffer1:0x02 //模块返回确认字u8PS_GenChar(u8BufferID){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x04); Sendcmd(0x02); MYUSART_SendData(BufferID); temp=0x01+0x04+0x02+BufferID; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//精确比对两枚指纹特征PS_Match//功能:精确比对CharBuffer1与CharBuffer2中的特征文件//模块返回确认字u8PS_Match(void){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x03); temp=0x01+0x03+0x03; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//搜索指纹PS_Search//功能:以CharBuffer1或CharBuffer2中的特征文件搜索整个或部分指纹库.若搜索到,则返回页码。 //参数:BufferID@refCharBuffer1 CharBuffer2//说明:模块返回确认字,页码(相配指纹模板)u8PS_Search(u8BufferID,u16StartPage,u16PageNum,SearchResult*p){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x08); Sendcmd(0x04); MYUSART_SendData(BufferID); MYUSART_SendData(StartPage>>8); MYUSART_SendData(StartPage); MYUSART_SendData(PageNum>>8); MYUSART_SendData(PageNum); temp=0x01+0x08+0x04+BufferID +(StartPage>>8)+(u8)StartPage +(PageNum>>8)+(u8)PageNum; SendCheck(temp); data=JudgeStr(2000); if(data) { ensure=data[9]; p->pageID=(data[10]<<8)+data[11]; p->mathscore=(data[12]<<8)+data[13]; } else ensure=0xff; returnensure; }//合并特征(生成模板)PS_RegModel//功能:将CharBuffer1与CharBuffer2中的特征文件合并生成模板,结果存于CharBuffer1与CharBuffer2 //说明:模块返回确认字u8PS_RegModel(void){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x05); temp=0x01+0x03+0x05; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure; }//储存模板PS_StoreChar//功能:将CharBuffer1或CharBuffer2中的模板文件存到PageID号flash数据库位置。 //参数:BufferID@refcharBuffer1:0x01 charBuffer1:0x02//PageID(指纹库位置号)//说明:模块返回确认字u8PS_StoreChar(u8BufferID,u16PageID){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x06); Sendcmd(0x06); MYUSART_SendData(BufferID); MYUSART_SendData(PageID>>8); MYUSART_SendData(PageID); temp=0x01+0x06+0x06+BufferID +(PageID>>8)+(u8)PageID; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure; }//删除模板PS_DeletChar//功能:删除flash数据库中指定ID号开始的N个指纹模板//参数:PageID(指纹库模板号),N删除的模板个数。//说明:模块返回确认字u8PS_DeletChar(u16PageID,u16N){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x07); Sendcmd(0x0C); MYUSART_SendData(PageID>>8); MYUSART_SendData(PageID); MYUSART_SendData(N>>8); MYUSART_SendData(N); temp=0x01+0x07+0x0C +(PageID>>8)+(u8)PageID +(N>>8)+(u8)N; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//清空指纹库PS_Empty//功能:删除flash数据库中所有指纹模板//参数:无//说明:模块返回确认字u8PS_Empty(void){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x0D); temp=0x01+0x03+0x0D; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//写系统寄存器PS_WriteReg//功能:写模块寄存器//参数:寄存器序号RegNum:4\5\6//说明:模块返回确认字u8PS_WriteReg(u8RegNum,u8DATA){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x05); Sendcmd(0x0E); MYUSART_SendData(RegNum); MYUSART_SendData(DATA); temp=RegNum+DATA+0x01+0x05+0x0E; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; if(ensure==0) printf("\r\n设置参数成功!"); else printf("\r\n%s",EnsureMessage(ensure)); returnensure;}//读系统基本参数PS_ReadSysPara//功能:读取模块的基本参数(波特率,包大小等)//参数:无//说明:模块返回确认字+基本参数(16bytes)u8PS_ReadSysPara(SysPara*p){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x0F); temp=0x01+0x03+0x0F; SendCheck(temp); data=JudgeStr(1000); if(data) { ensure=data[9]; p->PS_max=(data[14]<<8)+data[15]; p->PS_level=data[17]; p->PS_addr=(data[18]<<24)+(data[19]<<16)+(data[20]<<8)+data[21]; p->PS_size=data[23]; p->PS_N=data[25]; } else ensure=0xff; if(ensure==0x00) { printf("\r\n模块最大指纹容量=%d",p->PS_max); printf("\r\n对比等级=%d",p->PS_level); printf("\r\n地址=%x",p->PS_addr); printf("\r\n波特率=%d",p->PS_N*9600); } else printf("\r\n%s",EnsureMessage(ensure)); returnensure;}//设置模块地址PS_SetAddr//功能:设置模块地址//参数:PS_addr//说明:模块返回确认字u8PS_SetAddr(u32PS_addr){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x07); Sendcmd(0x15); MYUSART_SendData(PS_addr>>24); MYUSART_SendData(PS_addr>>16); MYUSART_SendData(PS_addr>>8); MYUSART_SendData(PS_addr); temp=0x01+0x07+0x15 +(u8)(PS_addr>>24)+(u8)(PS_addr>>16) +(u8)(PS_addr>>8)+(u8)PS_addr; SendCheck(temp); AS608Addr=PS_addr;//发送完指令,更换地址data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; AS608Addr=PS_addr; if(ensure==0x00) printf("\r\n设置地址成功!"); else printf("\r\n%s",EnsureMessage(ensure)); returnensure;}//功能:模块内部为用户开辟了256bytes的FLASH空间用于存用户记事本,// 该记事本逻辑上被分成16个页。//参数:NotePageNum(0~15),Byte32(要写入内容,32个字节)//说明:模块返回确认字u8PS_WriteNotepad(u8NotePageNum,u8*Byte32){ u16temp;u8ensure,i; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(36); Sendcmd(0x18); MYUSART_SendData(NotePageNum); for(i=0;i<32;i++) { MYUSART_SendData(Byte32[i]); temp+=Byte32[i]; }temp=0x01+36+0x18+NotePageNum+temp; SendCheck(temp);data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//读记事PS_ReadNotepad//功能:读取FLASH用户区的128bytes数据//参数:NotePageNum(0~15)//说明:模块返回确认字+用户信息u8PS_ReadNotepad(u8NotePageNum,u8*Byte32){ u16temp;u8ensure,i; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x04); Sendcmd(0x19); MYUSART_SendData(NotePageNum); temp=0x01+0x04+0x19+NotePageNum; SendCheck(temp);data=JudgeStr(2000); if(data) { ensure=data[9]; for(i=0;i<32;i++) { Byte32[i]=data[10+i]; } } else ensure=0xff; returnensure;}//高速搜索PS_HighSpeedSearch//功能:以CharBuffer1或CharBuffer2中的特征文件高速搜索整个或部分指纹库。// 若搜索到,则返回页码,该指令对于的确存在于指纹库中,且登录时质量// 很好的指纹,会很快给出搜索结果。//参数:BufferID,StartPage(起始页),PageNum(页数)//说明:模块返回确认字+页码(相配指纹模板)u8PS_HighSpeedSearch(u8BufferID,u16StartPage,u16PageNum,SearchResult*p){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x08); Sendcmd(0x1b); MYUSART_SendData(BufferID); MYUSART_SendData(StartPage>>8); MYUSART_SendData(StartPage); MYUSART_SendData(PageNum>>8); MYUSART_SendData(PageNum); temp=0x01+0x08+0x1b+BufferID +(StartPage>>8)+(u8)StartPage +(PageNum>>8)+(u8)PageNum; SendCheck(temp); data=JudgeStr(2000); if(data) { ensure=data[9]; p->pageID =(data[10]<<8)+data[11]; p->mathscore=(data[12]<<8)+data[13]; } else ensure=0xff; returnensure;}//读有效模板个数PS_ValidTempleteNum//功能:读有效模板个数//参数:无//说明:模块返回确认字+有效模板个数ValidNu8PS_ValidTempleteNum(u16*ValidN){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x1d); temp=0x01+0x03+0x1d; SendCheck(temp);data=JudgeStr(2000); if(data) { ensure=data[9]; *ValidN=(data[10]<<8)+data[11]; } else ensure=0xff; if(ensure==0x00) { printf("\r\n有效指纹个数=%d",(data[10]<<8)+data[11]); } else printf("\r\n%s",EnsureMessage(ensure)); returnensure;}//与AS608握手PS_HandShake//参数:PS_Addr地址指针//说明:模块返新地址(正确地址) u8PS_HandShake(u32*PS_Addr){ SendHead(); SendAddr(); MYUSART_SendData(0X01); MYUSART_SendData(0X00); MYUSART_SendData(0X00); delay_ms(200); if(USART2_RX_STA&0X8000)//接收到数据 { if(//判断是不是模块返回的应答包 USART2_RX_BUF[0]==0XEF &&USART2_RX_BUF[1]==0X01 &&USART2_RX_BUF[6]==0X07 ) { *PS_Addr=(USART2_RX_BUF[2]<<24)+(USART2_RX_BUF[3]<<16) +(USART2_RX_BUF[4]<<8)+(USART2_RX_BUF[5]); USART2_RX_STA=0; return0; } USART2_RX_STA=0; } return1; }//模块应答包确认码信息解析//功能:解析确认码错误信息返回信息//参数:ensureconstchar*EnsureMessage(u8ensure){ constchar*p; switch(ensure) { case0x00: p="OK";break; case0x01: p="数据包接收错误";break; case0x02: p="传感器上没有手指";break; case0x03: p="录入指纹图像失败";break; case0x04: p="指纹图像太干、太淡而生不成特征";break; case0x05: p="指纹图像太湿、太糊而生不成特征";break; case0x06: p="指纹图像太乱而生不成特征";break; case0x07: p="指纹图像正常,但特征点太少(或面积太小)而生不成特征";break; case0x08: p="指纹不匹配";break; case0x09: p="没搜索到指纹";break; case0x0a: p="特征合并失败";break; case0x0b: p="访问指纹库时地址序号超出指纹库范围"; case0x10: p="删除模板失败";break; case0x11: p="清空指纹库失败";break; case0x15: p="缓冲区内没有有效原始图而生不成图像";break; case0x18: p="读写FLASH出错";break; case0x19: p="未定义错误";break; case0x1a: p="无效寄存器号";break; case0x1b: p="寄存器设定内容错误";break; case0x1c: p="记事本页码指定错误";break; case0x1f: p="指纹库满";break; case0x20: p="地址错误";break; default: p="模块返回确认码有误";break; }returnp; }//显示确认码错误信息voidShowErrMessage(u8ensure){//OLED_ShowCH(5,0,(u8*)EnsureMessage(ensure));}externu8ZW_MODE;externu8Waring_MODE;voidAdd_FR(){u8i,ensure,processnum=0;u8ID_NUM=0;while(1) { switch(processnum){case0:i++; OLED_ShowChinese(0,0,15,16);//请 OLED_ShowChinese(18,0,16,16);//按 OLED_ShowChinese(36,0,17,16);//手 OLED_ShowChinese(54,0,0,16);//指 OLED_Refresh(); ensure=PS_GetImage();if(ensure==0x00){ensure=PS_GenChar(CharBuffer1);//生成特征if(ensure==0x00) { OLED_ShowChinese(0,18,0,16);//指纹正常 OLED_ShowChinese(18,18,1,16); OLED_ShowChinese(36,18,18,16); OLED_ShowChinese(54,18,19,16); OLED_Refresh(); i=0;processnum=1;//跳到第二步 } elseShowErrMessage(ensure); } elseShowErrMessage(ensure); break;case1:i++;OLED_ShowChinese(0,18,20,16);//再按一次 OLED_ShowChinese(18,18,16,16); OLED_ShowChinese(36,18,21,16); OLED_ShowChinese(54,18,22,16);OLED_Refresh(); ensure=PS_GetImage();if(ensure==0x00){ensure=PS_GenChar(CharBuffer2);//生成特征if(ensure==0x00){OLED_ShowChinese(0,18,0,16);//指纹正常 OLED_ShowChinese(18,18,1,16); OLED_ShowChinese(36,18,18,16); OLED_ShowChinese(54,18,19,16); OLED_Refresh();i=0;processnum=2;//跳到第三步}elseShowErrMessage(ensure);}elseShowErrMessage(ensure);break;case2:OLED_ShowChinese(0,18,23,16);//对比指纹 OLED_ShowChinese(18,18,24,16); OLED_ShowChinese(36,18,0,16); OLED_ShowChinese(54,18,1,16); OLED_Refresh();ensure=PS_Match();if(ensure==0x00){OLED_ShowChinese(0,18,23,16);//对比成功 OLED_ShowChinese(18,18,1,16); OLED_ShowChinese(36,18,26,16); OLED_ShowChinese(54,18,27,16);OLED_Refresh(); processnum=3;//跳到第四步}else{OLED_ShowChinese(0,18,23,16);//对比失败 OLED_ShowChinese(18,18,24,16); OLED_ShowChinese(36,18,28,16); OLED_ShowChinese(54,18,29,16); OLED_Refresh();ShowErrMessage(ensure);i=0;processnum=0;//跳回第一步}delay_ms(500);break; case3:OLED_ShowChinese(0,18,30,16);//生成模板 OLED_ShowChinese(18,18,26,16); OLED_ShowChinese(36,18,2,16); OLED_ShowChinese(54,18,31,16); OLED_Refresh();delay_ms(500);ensure=PS_RegModel();if(ensure==0x00){OLED_ShowChinese(0,18,30,16);//生成成功 OLED_ShowChinese(18,18,26,16); OLED_ShowChinese(36,18,26,16); OLED_ShowChinese(54,18,27,16); OLED_Refresh();processnum=4;//跳到第五步}else{processnum=0;ShowErrMessage(ensure);}delay_ms(1000);break; case4: ID_NUM=1; ensure=PS_StoreChar(CharBuffer2,ID_NUM);//储存模板 if(ensure==0x00){ ZW_MODE=2;OLED_Clear();OLED_ShowChinese(0,18,35,16);//录用成功 OLED_ShowChinese(18,18,36,16); OLED_ShowChinese(36,18,26,16); OLED_ShowChinese(54,18,27,16); OLED_Refresh();return;}else{OLED_Clear();processnum=0;ShowErrMessage(ensure);}break; } delay_ms(400);if(i==10)//超过5次没有按手指则退出{break;} }}SysParaAS608Para;//指纹模块AS608参数externu8ZW_MODE;externu8Waring_MODE;voidpress_FR(void){SearchResultseach;u8ensure;//charstr[20];OLED_ShowChinese(0,0,15,16);//请 OLED_ShowChinese(18,0,16,16);//按OLED_ShowChinese(36,0,17,16);//手OLED_ShowChinese(54,0,0,16);//指OLED_Refresh();ensure=PS_GetImage();if(ensure==0x00)//获取图像成功{ensure=PS_GenChar(CharBuffer1);if(ensure==0x00)//生成特征成功{ensure=PS_HighSpeedSearch(CharBuffer1,0,99,&seach);if(ensure==0x00)//搜索成功{ Waring_MODE=0; BEEP=0; SIM800A_SendCmd_OK("AT+CMGD=1",20);OLED_ShowChinese(0,18,13,16);//验证成功 OLED_ShowChinese(18,18,14,16); OLED_ShowChinese(36,18,26,16); OLED_ShowChinese(54,18,27,16); OLED_Refresh();delay_ms(1500);delay_ms(1500);}else{OLED_ShowChinese(0,18,13,16);//验证失败 OLED_ShowChinese(18,18,14,16); OLED_ShowChinese(36,18,28,16); OLED_ShowChinese(54,18,29,16); OLED_Refresh();delay_ms(1500);}}else {};OLED_Clear();OLED_ShowChinese(0,0,15,16);//请 OLED_ShowChinese(18,0,16,16);//按 OLED_ShowChinese(36,0,17,16);//手 OLED_ShowChinese(54,0,0,16);//指OLED_Refresh();} }voidDEL_FR(void){u8ensure;u16ID_NUM=0;ensure=PS_Empty();//清空指纹库

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论