淮阴工学院毕业设计电动车遥控报警装置设计正文终稿_第1页
淮阴工学院毕业设计电动车遥控报警装置设计正文终稿_第2页
淮阴工学院毕业设计电动车遥控报警装置设计正文终稿_第3页
淮阴工学院毕业设计电动车遥控报警装置设计正文终稿_第4页
淮阴工学院毕业设计电动车遥控报警装置设计正文终稿_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、 淮阴工学院毕业设计说明书(论文) 第 51 页 共 51 页1 引言 1.1 研究背景及研究意义随着科学技术迅猛发展,人民的生活水平不断提高,电动自行车已经进入人们的生活中,并且进一步改善了人们的出行方便。电动自行车以电能为能源,没有废气排放,噪音小又不污染环境,骑行省力,经济适用,通用性很广,上牌手续方便,政府大力支持。目前,摩托车和燃油助力车因污染环境而受到限制。国家出台的燃油含税政策,给电动自行车带来了更多的福音,因此电动自行车成为工薪阶层的最佳选择,受到越来越多人的青睐。然而就在电动自行车进入千家万户的同时,其被盗率连连攀升,给使用者带来了不小的经济损失。为解决广大电动自行车使用者的

2、担忧,急需设计出一套基于单片机的关于电动自行车无线防盗报警器方案,给广大使用者在爱车上装一把“安心锁”。现在市场上有各式各样的电动车防盗报警装置,一些高档智能报警器由于价格过高,用户不愿意为售价仅两三千的电动车去进行配置,进而得不到推广;另外,也有价格适中且质量可靠的防盗报警器出售,但此类报警器的报警喇叭一般都只是安装在电动车车身上。完成警情传递任务的主要部件都是震动电感器,因其灵敏度较高,容易致使一些外界的环境因素,如刮风打雷,儿童嬉闹等使其动作并触发报警器进行报警,这种由于误报警带来噪音污染的情况常常造成不必要的扰民。种种原因使得大部分电动车用户并没有为它们的车去配备防盗报警装置,导致一些

3、不法分子有机可乘,电动车被盗现象日益严重,“电动自行车保险”也因出险率太高而销声匿迹。报警装置作为电动车一个重要的附属配件,其防盗守护的重要作用众所周知。所以,一种低价位、高品质,且适合于普通用户的防盗报警器将是电动自行车市场翘首以盼的。1.2 国内外研究现状及分析为充分掌握电动车市场防盗报警类产品的现状及其发展动态,我们进行了一番市场调研和文献搜索,从商家提供的电动车年销量和报警器年销量数据的不完全统计,现在购买电动车的用户同时配备防盗报警装置的约占98。目前市场上出售的电动车防盗报警装置基本上分如下几类:(1)防盗报警锁,将报警器与车锁集成,一旦内部震动电感器感知到车身震动,就会立即触发启

4、动锁上的报警喇叭报警。这种防盗报警锁使用较方便,售价也较为大家接受,它一般在50元左右,如杰达KL02、新奇特FB8224。但用户反映使用这种防盗报警锁,发生误报的频率较高,而且发现如是误报还得不到解除,同时在锁紧状态下无法人为撤防,造成了不必要的干扰。(2)普通防盗报警器,与防盗报警锁相比,这类报警装置体积较小又可独立安装在电动车上较为隐蔽的地方,不易被发现进而拆卸。其布防、撤防都是通过报警器外壳上同一开关按钮实现,探测警情信号的也是各种类型的震动电感器,电源一般是使用两节7号电池,性能较稳定,价格在60元左右。不过一旦将其安装在车身较为隐蔽的地方,如车底等,车主启动布防和撤防时要按开关就很

5、困难,不易操作;如果安装在方便车主启动开关的地方,此报警器很容易被盗贼发现而将其拆卸。(3)遥控防盗报警器,由车载主机和手持遥控发射器组成,报警喇叭大多是只安装在车载主机上,遥控器作用主要是设防、撤防和启动报警功能,这相当于主机的一个无线遥控电源开关,如新奇特E-12,龙锐lr-007。这类报警器是现在是电动车市场上的主流防盗产品,一般灵敏度较高,性能较稳定,报警声响可达到100分贝以上,可以满足一般电动车用户的需要,市场价格在80元左右。且漏报率和故障率都较低,但是误报率很高,误报警噪音扰民现象严重。(4)无线智能数字报警器,如荣高VA-2型、旭飞报警器。这类防盗报警器大多采用微电脑技术,智

6、能化程度高,除了能遥控设防撤防、寻车外,而且还具有遥控熄火、自动延时设防和智能记忆等功能。这类产品设计合理、性能优越,但作为电动车的附属配件,它们的价格相对较高,一般要高于150元,普通用户难以接受,因而在电动车市场也就得不到推广。电动自行车之所以能够走进千家万户,为广大消费者所青睐,一个很重要的原因就是其价格相对于摩托车和汽车要低很多,能被一般收入的家庭所接受。因此,开发一种高性能、低价位的电动车防盗报警器是适合市场需要的,也是目前电动车用户这个消费群体给我们提出的一项艰巨而现实的任务。2 单片机语言简介目前对于51系列的单片机,现有四种语言的支持,即PL/M、汇编、BASIC和C语言。2.

7、1 BASIC语言BASIC一般附在PC机上面,是初学编程的第一种语言。一个新变量名定义在程序中作变量的使用,简单又易学,错误能在程序执行完之前显现出来。BASIC由于逐行解释自然会很慢,每一行必须在执行时转换成机器的代码,需要花费很长时间才能做到实时性。BASIC为了简化使用变量,所有变量都是使用浮点值。BASIC是用于要求编程简单并且对于编程效率和运行速度要求不高的情况1。2.2 PL/M语言PL/M是Intel 从8080微处理器开始为它系列产品开发的编程语言。它很像PASCAL,是一种结构化的语言,但是它使用关键字去定义结构2。PL/M编译器好像汇编器一样可生成紧凑的代码。PL/M总体

8、来说是“高级汇编语言”,可以详细控制着代码生成。但对于51系列,PL/M不支持复杂的算术运算、浮点变量无丰富库函数支持。2.3 汇编语言51单片机汇编语言由于采用了助记符号编写程序,它比用机器语言的二进制代码编程要更方便,在一定程度上简化了编程过程。汇编语言特点是用符号代替机器指令代码,并且助记符与指令代码一一对应,基本保留了机器语言的灵活性2。使用汇编语言能够面向机器并较好地发挥机器的特性,得到质量较高的程序。2.4 单片机C语言的发展C语言是一种源于编写UNIX操作系统的语言,它是一种结构化的语言,可以产生压缩代码。C语言可进行许多机器级函数控制而不用汇编语言。同汇编语言相比,有如下优点:

9、对单片机的指令系统并不要求了解,只要求对51的存储器结构有初步的了解,寄存器分配、不同存储器寻址及数据类型等细节可以由编译器管理。程序有规范的结构,它可分为不同函数。这种方式可使程序结构化,有让可变的选择与特殊操作组合在一起的能力,改善程序的可读性、编程及程序调试时间缩短,从而提高了效率。C语言提供的库包含许多标准的子程序,其具有较强的数据处理能力,能将已编好的程序很容易地植入新程序,因为它拥有方便的模块化编程技术。C语言作为一种方便的语言进而得到广泛支持。C语言程序本身并不依赖于机器硬件系统,基本上不做修改便可根据单片机的不同而较快地移植过来3。C语言是一种结构化的语言。它层次清晰便于按模块

10、化方式组织程序,又易于调试和维护。C语言的表现能力和处理能力非常强。它不仅具有丰富的运算符和数据类型,又便于实现各类复杂的数据结构。它还可直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,所以C语言集高级语言和低级语言的功能于一体,既可用于系统软件开发,也适合于应用软件开发。此外C语言还具有效率高,可移植性强的特点。因此它被广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。对于大多数51系列的单片机,使用C语言这样的高级语言与使用汇编语言相比具有如下一些优点:(1)不需要了解处理器指令集,也不必了解存储器的结构。(2)寄存器分配和寻址方式由编译器进

11、行管理,编程时不需要考虑存储器寻址和数据类型等细节。(3)指定操作的变量选择组合提高程序的可读性。(4)可使用同人的思维更相近的关键字以及操作函数。(5)同使用汇编语言编程相比,程序开发和调试时间缩短。(6)C语言中的库文件提供许多标准例程,例如格式化输出、数据转化和浮点运算等。(7)通过C语言可以实现模块化编程技术,从而可将已编制好的程序加入到新程序中去。(8)C语言可移植性好且非常的普及,C语言编译器几乎适用于所有目标系统,已完成的软件项可以很容易地转化到其它处理器或环境中。所有这些并不能说明汇编语言就没有立足之地,很多系统尤其是实时时钟系统都是用C语言和汇编语言联合编写成的。对时钟要求严

12、格时使用汇编语言是唯一方法。此外,包括硬件接口的操作都应该用C语言编写。C语言的特点就是可以使程序员尽量少的对硬件进行操作,它是一种功能性和结构性很强的语言。3 硬件方案设计3.1 硬件总体方案设计电动车无线防盗报警器的总体方案设计是根据其功能和设计要求,从全局的角度,以系统的观点而进行整体方面的设计,主要包括无线收发模块设计,信号触发模块设计和报警电路模块设计等内容。硬件总体方案设计框图如图3.1所示AT89C51单片机信号触发模块无线发送模块无线接收模块报警电路模块图3.1 总体框架结构体系单片机引脚图如图3.2所示图3.2 单片机引脚图其中单片机作为控制单元模块,震动电感作信号触发模块,

13、采用远距离无线收发装置作无线收发模块,蜂鸣器作报警电路模块。当单片机收到无线收发模块发出的预警信号后,进入预警状态,并让震动电感在收到外界震动影响后,接通电路使报警器报警,以此来威慑犯罪分子,达到保护电动自行车的目的。3.2 使用的主要芯片根据系统的需要,选择AT89C51单片机作为核心的控制芯片,用震动电感作为所需的输入信号发生模块,用蜂鸣器组成报警电路。用PT2262作为无线发送模块。3.3 主要芯片的介绍3.3.1 AT89C51AT89C51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/记数器,一个5向量两级中断结构,一个全双工

14、串行通信口,片内震荡器及时钟电路。同时,AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/记数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但震荡器停止工作直到下一个硬件复位4。3.3.2 PT2262 PT2262是一种CMOS工艺制造的低功耗低价位通用编码电路,PT2262最多可有12位(A0- A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供 531441种地址的编码,PT2262最多可有6位(D0-D5)数据端管脚,设定的地址码和数据码从17脚串行输出,可用于无线遥控发射电路。3.

15、3.3 315MHz收发 DF数据发射的工作频率为315M,采用声表谐振器SAW稳频,频率稳定度极高,当环境温度在2585度之间变化时,频飘仅为3ppm/度。特别适合多发一收无线遥控及数据传输系统。声表谐振器的频率稳定度仅次于晶体,而一般的LC震荡器频率稳定度及一致性较差,即使采用高品质微调电容,温差变化及震动也很难保证已调好的频点不会发生偏移5。3.3.4 MAX232 MAX232由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口RS232电平是-10V、+10V,一般的单片机应用系统的信号电压是TTL电+5V,MAX232 就是用来进行电平转换的,该器件包含2驱动器、

16、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F 电平转换成5V TTL/CMOS 电平。每一个发送器将TTL/CMOS 电平转换成TIA/EIA-232-F 电平。这些接收器具有1.3V 的典型门限值及0.5V的典型迟滞,而且可以接收30V的输入6。所有的驱动器、接收器及电压发生器都可以在德州仪器公司的LinASIC元件库中得到标准单元。MAX232的工作温度范围为0至70。4 系统软件部分4.1 软件部分总体设计程序主要包括解码子程序、按键判断子程序、蜂鸣器发声处理子程序、震动检测子程序。主流

17、程图如图4.1所示开始系统初始化无线信号?读入无线信号解除设防信号?设防信号?设防成功触发中断子程序设防成功?寻车信号?音乐提示子程序YN解除设防成功YNYNYNNY图4.1 主程序流程图(1)解码子程序:由解码和解码后数据处理两部分组成。它是软件部分的关键环节,是解码的核心部分。(2)按键判断子程序:解码后通过对按键的判断,判断发送出的信号要完成的功能,其中包括设防、静音设防、解除设防、寻车等功能。(3)蜂鸣器发声处理子程序:不同功能下发出不同的提示音。(4)震动检测子程序:这是由于电动车收到外部给予的震动信号而触发的一个中断子程序。4.2 各软件模块设计4.2.1 主程序模块系统基于单片机

18、运用Keil uVision4软件编程,使用的编程语言是C语言。Keil uVision4是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统C语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,它还能嵌入汇编,可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强, 可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uV

19、ision4的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器7。uVision4 IDE可为它们提供单一而灵活的开发环境。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,能在很短的时间内就能学会使用keil C51来开发单片机应用程序 。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。主程序代码#include #include /方便调用_nop_();做延时用; #define

20、 uChar unsigned Char#define uint unsigned intunsigned Char Receive3 ; /解码缓冲区:Receive0:A0 A1 A2 A3 ; Receive1:A4 A5 A6 A7 ; Receive2: D3 D2 D1 D0/Receivex:xx xx xx xx 代表 4bit/bit flag = 0 ; /解码完成标志位sbit RemPin = P32 ; /编码信号输入脚unsigned Char RemDat = 0x00 ; /解码后数据寄存器bit remotekey.flag=0;bit lock.flag=0

21、;sbit beep=P25;void Initial0(); /外部中断0初始化函数声明void Initial1(); /外部中断1初始化函数声明bit FINT1; /外部中断1标志 void int_1(); /外部中断1函数声明void int_0(); /外部中断0函数声明void main() Initial0( ); /中断0系统初始化 Initial1( ); /中断1系统初始化 if(remotekey.flag) /解码按键标志为1 remotekey.flag=0; switch(remotekey_value)/解码结果判断 Case KEY_LOCK: lock.f

22、lag=1; play(1); /蜂鸣器响一声 /break; return ; Case KEY_QUIET: / system_state_Change(State,GUARD_QUIET,1); /break;return ; Case KEY_FIND: if(lock.flag) playmusic(); /播放生日快乐歌,提示用户 /break;return ; Case KEY_UNLOCK: lock.flag=0; /蜂鸣器响一声play(1);return ; if(lock_flag & FINT1) /在设防的情况下,如果震动电感检测到车身震动则蜂鸣器发出报警 uint

23、 i; FINT1=0; for(i=1;i3;i+) play(2); delay(1000); 4.2.2 解码及数据处理子程序模块当2262 的D0D3 引脚出现高电平时, 2262 便通过TXD 脚输出相应的编码波形, 每次发射时至少发射5 组相同的编码波形, 每组编码由同步头、两个字节宽度的地址码以及一个字节宽度的按键码这三部分构成。图4.2是2262 地址引脚全部悬空时按下D3 时输出的一段波形。地址码由2262 的地址引脚的高、低、悬空3 种状态确定, 分别用“11”、“00”、“01”表示, 按键码由4 个按键输入引脚确定, 共有15 种组合。图4.2 2262发出的一组完整波

24、形编码波形的周期由2262 的外接震荡电阻决定, 震荡电阻不同输出的编码波形的周期也不相同。从图4.2中可以发现2262 所发出的波形实是由“0 码”、“1 码”以及“同步头”3 种基本波形构成, 对2262 的软件解码实际上也就是对3 种基本波形的识别。图4.3是这3 种基本波形的放大图。从图4.3可以发现无论是“0 码”还是“1 码”都是从高电平开始并且其周期都是一样的为T,“0 码”和“1 码”的区别仅仅在于高电平的宽窄,“1 码”时高电平是低电平的3 倍,“0 码”时情况相反, 而同步头是一个周期较长的脉冲信号, 其周期是8T, 高电平时间和“0码”的一样。在同步头中包含了两部分信息,

25、 一是告知了2262 发码的波特率; 二是告知编码的开始, 正确的处理同步头就能正确地进行软件解码。图4.3 基本波形的放大图在使用中,一般采用 8 位地址码和 4 位数据码,这时编码电路 PT2262 和单片机解码程序相对应,PT2262有三种状态可供选择:悬空、接正电源、接地三种状态,3 的 8 次方为 6561,所以地址编码不重复度为 6561组,只有发射端 PT2262 和接收端单片机的地址编码完全相同,才能配对使用,例如将发射机的 PT2262 的第 2 脚接地第 3 脚接正电源,其它引脚悬空,那么接收机单片机相应引脚接正电源,其它引脚悬空就能实现配对接收。当两者地址编码完全一致时,

26、接收机对应的 D1D4 端输出约 4V 互锁高电平控制信号,同时 VT 端也输出解码有效高电平信号。然后将这些信号加一级三极管放大,便可驱动继电器等负载进行遥控操纵。设置地址码的原则是:同一个系统地址码必须一致;不同的系统可以依靠不同的地址码加以区分。本设计使用高低电平抽样比较法来判断接收到的是“0码”还是“1”码,如图4.4。每个编码的解码从高电平开始,每隔一段延时对电平高低状态进行一次抽样,若持续为高则对寄存器C_HBIT进行一次加一,若变为低电平则认为高电平状态结束开始对低电平进行计数,结果保存在寄存器C_LBIT中,当电平状态从新回到高电平状态,则认为完成了一个码的接收,对C_HBIT

27、、C_LBIT进行比较,若C_HBIT大于C_LBIT则认为收到是“1码”,C_HBIT小于C_LBIT则为“0码”。图4.4 高低电平抽样判断图仅有对“0码”和“1码”的接收还不足以完成一次正确的解码,捕捉到了同步头才能保证解码的正确性,而在不知道编码的波特率的情况下是不能保证同步头的捕捉,因此必须先对2262发出的编码的波特率进行测量。由图4.3可知在2262输出的编码中同步头的高电平时间和“0码”的高电平时间以及“1码”的低电平时间一样,从另外一个角度讲无论是“0码”、“1码”还是“同步头”中都包含了波特率的信息。因此完整接收到一个“0码”、“1码”或者“同步头”就可以得到编码的波特率。

28、编码的波特率可以通过接收任意相连的两个码得到,由于检测波特率的程序进入的时间不确定,第一个码的高电平是否完全接收无法保证,把得到第一个码丢弃,把第二码中接收到的高、低电平的记数值进行比较,取较小的那个作为波特率的标准,把该记数值乘4,得到的结果就是1个T对应值C_BAUD,这个C_BAUD是用来捕捉编码中同步头的关键。本文的解码方法中把同步头的捕捉放到了解码程序中,图4.4是解码的流程。在每次进行计数加一后都把C_HBIT或C_LBIT与C_BAUD进行了一次比较,因为同步头的低电平时间宽度为7.75T远大于一个码的周期T,若C_LBIT大于C_BAUD则说明接收到的是同步头,而C_HBIT大

29、于C_BAUD则说明接收到的是误码,都必须重新开始解码。在接收到同步头后解码的正确率可达百分之百。需要注意的是在对2262进行解码时必须要保证解码的时间窗口要大于一组完整的编码的时间。这个时间窗口可以根据前面得到的波特率的记数值C_BAUD来计算,一个完整的编码要接收24码和一个同步头,既32T,按照最坏情况接收是从第二码开始来计算,要保证能够接收到一个完整的编码必须要63T,所以在程序中要给出一个宽度为63T的时间窗口来保证正确解码。将解调部分接收的编码信号送入单片机的P3.2口,采用外部中断0对编码信号进行解码,解码部分流程图如图4.5所示图4.5 解码流程图解码程序代码/* 描 述:对P

30、T226的编码信号进行解码* PT2262的输出信号经三极管* 反向后送入单片机的中断引脚* 代 码:A0 - A11 中的每bit用2bit表示:0码:00 ;1码:11* 备 注:PT2262输出数据的顺序:A0 A1 - A10 A11+同步码+A0 A1 - A10 A11+同步码,连续发四次*/unsigned Char Receive3 ; /解码缓冲区:Receive0:A0 A1 A2 A3;Receive1:A4 A5 A6 A7 ;Receive2: D3 D2 D1 D0/Receivex:xx xx xx xx 代表 4bit/bit flag = 0 ; /解码完成标

31、志位/sbit RemPin = P32 ; /编码信号输入脚/* 函数名:Initial0( )* 描 述:中断系统初始化* 参 数:输入参数:无输出参数:无*/void Initial0( void )IT0 = 1 ; /外部中断0下降沿有效EX0 = 1 ; /开外部中断0EA = 1 ; /开全局中断/* 函数名:INT_0( )* 描 述: 外部中断0服务函数,实现对PT2262的解码* 参 数:输入参数:无输出参数:无*/void INT_0 (void) interrupt 0 using 1unsigned Char i = 0 ;unsigned Char j = 0 ;u

32、nsigned int temp = 0x0000;EA = 0 ;TH0 = 0 ;TL0 = 0 ; /11.0592 最大值 71111uswhile( !RemPin); /等待高电平的到来,检测同步头TR0 = 1 ; /启动定时器0,开始测量高电平的宽度while( RemPin) if( TF0 = 1 ) goto RemExit; /定时器超时溢出则退出TR0 = 0 ;temp = TH0 ;temp = temp 8 ;temp = temp + TL0 ; /取得高电平的宽度if( ( 0x0D8F /*3471*/ temp ) & ( temp 0x0F8F /*3

33、983*/) ) /检测到同步头for( j = 0 ; j 3 ; j +) /循环3次for( i = 0 ; i 8; i + )TH0 = 0 ;TL0 = 0 ;while( !RemPin); /等待高电平到来TR0 = 1 ; /开启定时器0 ,测量高电平的宽度while( RemPin) if( TF0 = 1 ) goto RemExit; /定时溢出则退出 TR0 = 0 ;temp = TH0 ;temp = temp 8 ;temp = temp + TL0 ; /取得高电平的宽度if( ( 0x60 /*96*/ temp ) & (temp 0x90 /*144*/

34、 ) ) /判断得窄脉冲:1表示,0x60代表96us,0x90代表144usReceivej = Receivej 1 ;Receivej = Receivej + 0x01 ;else if( ( 0x0100 /*256*/ temp) & (temp 0x0200 /*512*/) ) /判断得宽脉冲:0表示Receivej = Receivej 1 ;else return; remotekey.flag = 1 ; /表示已解码完毕return;else TR0 = 0 ;EA = 1 ;TF0 = 0 ;RemPin = 1 ;return; /*解码后数据处理*void Dat

35、a_processing( void )unsigned Char i = 0 ;unsigned int j = 0 ;unsigned Char Dat = 0x00;/unsigned Char RemDat = 0x00 ; /解码后数据寄存器/Initial( ); /中断系统初始化/Init_uart(); /串口初始化while(1)if( remotekey.flag ) /解码完毕remotekey.flag = 0 ;RemDat = 0x00;for( i = 0 ; i 4 ; i +)Dat = Receive2;Receive2 = Receive2 2 ;Dat

36、= Dat & 0xc0; /判断高2bitif( Dat = 0xc0 ) /高2bit:11 ;则为1码 ;否则为0码RemDat = RemDat 1 ;RemDat = RemDat + 0x01; elseRemDat = RemDat 1 ;/P0 = RemDat ; /将解码后的数据送入P0口,通过开发板上的LED显示出来for( i = 0 ; i 2 ; i +) /普通延时for( j = 0 ; j 0xFFFF ; j + )_nop_();TF0 = 0 ;EA = 1 ; /重开中断 4.2.3 按键判断子程序模块设防键按下为高电平,其它按键为低电平,发送的编码是

37、11000000即为0xc0,所以设防功能在C语言里的KeyValue为0xc0;解除设防键按下为高电平,其它按键为低电平,发送的编码是00110000即为0x30,所以解除设防功能在C语言里的KeyValue为0x30;静音设防键按下为高电平,其它按键为低电平,发送的编码是00001100即为0x0c,所以静音设防功能在C语言里的KeyValue为0x0c;寻车键按下为高电平,其它按键为低电平,发送的编码是00000011即为0x03,所以寻车功能在C语言里的KeyValue为0x03。先判断KeyValue是否为0xc0,是则进入设防模式;否则判断KeyValue是否为0x30,是则接触设

38、防;否则继续判断KeyValue是否为0x0c,是则进入静音设防;否则判断KeyValue是否为0x03,是则为寻车模式;否则说明数据码有误。按键判断部分流程图如图4.5图4.6 按键判断流程图按键判断程序代码/*按键识别*uChar remotekey_value(RemDat) KeyValue=(uChar)(RemDat); if(KeyValue=0xc0) return KEY_LOCK; /设防 else if(KeyValue=0x30) return KEY_UNLOCK; /解除设防 else if(KeyValue=0x0c) return KEY_QUIET; /静音设

39、防 else if(KeyValue=0x03) return KEY_FIND; /寻车 else return KEY_UNKNOW;4.2.4 蜂鸣器发声处理子程序模块蜂鸣器发声分三种情况:设防时,蜂鸣器响一声;寻车时,蜂鸣器播放生日快乐歌,循环播放直到用户按下解除设防键;震动时,蜂鸣器循环鸣叫。蜂鸣器发声处理程序代码:/*蜂鸣器发生处理*/*设防时,蜂鸣器响一声*/*寻车时,蜂鸣器播放生日快乐歌,循环播放直到用户按下解除设防键*/*震动时,蜂鸣器循环鸣叫 */* /生日快乐歌的音符频率表,不同频率由不同的延时来决定uChar Code song_tone=212,212,190,212

40、,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0;/生日快乐歌节拍表,节拍决定每个音符的演奏长短uChar Code song_long=9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0;/延时void delay(uint x) uChar t;while(x-) for (t=0; t120; t+);/按周期t发音void play(uChar t) uChar i;for (i

41、=0;i100;i+) beep=!beep; delay(t);beep=0;/播放函数void playmusic() uint i=0,j,k; while(song_longi!=0|song_tonej!=0) /播放各个音符,song_long为帕子长度for(j=0;jsong_longi*20;j+) beep=beep; /song_tone延时表决定了每个音符的频率 for(k=0;ksong_tonei/3;k+);delay(10);i+; /*4.2.5 震动检测子程序模块当系统处于设防的情况下,系统检测到车身震动是,将震动信号接入单片机的P3.3引脚,采用外部中断1

42、服务程序完成震动报警9。震动触发流程图如图所示图4.7 震动触发流程图震动检测程序代码/中断初始化void initial() EA=1; EX1=1; IT1=0; return;/中断服务程序void int_1() interrupt 2 using 2 FINT1=1;/延时void delay(uint x) uchar t;while(x-) for (t=0; t120; t+);/按周期t发音void play(uchar t) uchar i;for (i=0;i100;i+) beep=!beep; delay(t);beep=0;/播放函数void playmusic()

43、 uint i=0,j,k; while(song_longi!=0|song_tonej!=0) /播放各个音符,song_long为帕子长度for(j=0;jsong_longi*20;j+) beep=beep; /song_tone延时表决定了每个音符的频率 for(k=0;ksong_tonei/3;k+);delay(10);i+; void main() beep=0; initial(); while(1) if(key1=0) lock_flag=1; play(1); / if(key2=0) play(2); if(key3=0) play(1); lock_flag=0

44、; if(key4=0) playmusic(); if(lock_flag & FINT1) uint i; FINT1=0; for(i=1;i3;i+) play(2); delay(1000); 5 软件调试5.1 仿真系统此次设计使用的仿真系统软件是Keil Vision4和Proteus。Keil软件是目前最流行开发MCS-51系列单片机的软件。Keil提供包括C编译器,宏汇编,连接器,库管理和一个功能强大的仿真调试器等在内的完整开发方案7。通过一个集成开发环境Vision4将这些部分组合在一起。图5.1 keil启动界面Proteus软件是英国LabCenter eleCtron

45、iCs公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、AVR、ARM、PIC10/1

46、2/16/18/24/30/DsPIC33、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其它系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器8。本次设计用到的是Keil编译器。图5.2 ISIS启动界面5.2 软件仿真5.2.1 keil软件部分先建立一个工程,然后写入程序。写完程序后,就可以“编译”“链接”了。所谓的编译,就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。图5.3 编译过程检测编译是否成功,没有错误后,就可以进行下一步工作。图5.4 检测编译成功让kei

47、l生成需要的文件,也是就“HEX”文件。图5.5 生成“HEX文件”5.2.2 Proteus软件部分绘制原理图要在原理图编辑窗口中的蓝色方框内完成。原理图编辑窗口的操作是不同于常用的 WINDOWS 应用程序的,正确的操作是:用左键放置元件;右键选择元件;双击右键删除元件;右键拖选多个元件;先右键后左键编辑元件属性;先右键后左键拖动元件;连线用左键,删除用右键;改连接线:先右击连线,再左键拖动;中键放缩原理图。用上面的方法按照蜂鸣器和外部中断原理图画图。图5.6 蜂鸣器和外部中断原理图根据之前在keil软件中生成的“HEX文件”,添加源文件。图5.7 添加源文件源文件添加成功后即可运行仿真。

48、通过四个开关,分别模拟设防,静音设防,解除设防和寻车四种功能按键。图5.8 运行仿真按下设防键,响一声;按下静音设防,没有声音;按下解除设防键,响一声;按下寻车键,发出生日歌乐曲;按下中断触发键,连续响四声。其中,寻车跟中断触发只有在设防情况下才会发出声音;如按下静音键后,再按下寻车跟中断触发键是不会发出声音的;按下设防键后,如按下解除设防,设防功能即被取消。6 软硬件联调首先给电路通电。第一步测试是否能实现无线收发。无线收发的调试方式是按下遥控器的某一按键,用万用表检测解码电路相应引脚电平是否正确。按下设防键,用万用表检测单片机第12引脚(P3.2,INT0)的电压,测得电压为3.02V,说

49、明解码成功。在用万用表测量单片机第21脚(P2.0)电压,测得电压为2.99V,依次测量2224脚电压为0V,说明解码结果为设防键按下,解码正确。用同样的方式依次测量其他按键解码是否正确。测试后感觉解码与否不够直观,所以在PT2272的17脚与单片机之间接一个LED作为解码指示灯,解码成功则灯亮。其次测试单片机最小系统是否正常,包括时钟电路测试和复位电路测试。时钟电路主要测试单片机晶振能否正常起振,测试方法是用万用表测试晶振引脚(P18,P19)的对地电压为多少,如果正常起振,测得电压应为电源电压的一半。首次测量时发现晶振引脚电压始终为0V,说明晶振无法起振,经检查后发现在连接时钟电路时底线连接错误,及时更正。复位电路电路测量方法即用万用表测试单片机复位引脚(P9)对地电压,若复位键按下前电压为0V,按下后为3V即说明复位电路正常。完成以上测试后将程序用开发板下载进单片机芯片,进行总体测试。首次测试发现没有任何实验现象,在仔细思考后发现单片机中断为低电平触发

温馨提示

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

评论

0/150

提交评论