一种基于AT89C51单片机的电动车遥控报警装置

著录项
  • CN201710121962.6
  • 20170303
  • CN106965773A
  • 20170721
  • 长沙开雅电子科技有限公司
  • 不公告发明人
  • B60R25/20
  • B60R25/20 B60R25/10

  • 湖南省长沙市长沙高新开发区尖山路39号长沙中电软件园总部大楼6楼601室
  • 湖南(43)
摘要
本发明专利涉及一种基于AT89C51单片机的电动车遥控报警装置,本发明首先判断是否有无线信号发送,如果有无线信号发送则读入无线信号;然后判断此信号是否为解除设防信号,如果为解除设防信号,则防盗器解除设防,系统继续判断有没有新的无线信号发送;如果不是解除设防信号,则判断是否为设防信号;如果为设防信号则设防响应成功;如果不是设防信号则判断之前有无设防响应成功,如果成功则判断此信号是否为寻车信号,是则音乐响起提示车主停车地点;不是则继续判断是否有新的无线信号发送;防响应成功后,只要接收到震动电感发送的触发信号,就执行震动触发报警中断子程序,否则继续判断是否有新的无线信号发送。
权利要求

1.本发明专利涉及一种基于AT89C51单片机的电动车遥控报警装置,本发明首先判断 是否有无线信号发送,如果有无线信号发送则读入无线信号;然后判断此信号是否为解除 设防信号,如果为解除设防信号,则防盗器解除设防,系统继续判断有没有新的无线信号发 送;如果不是解除设防信号,则判断是否为设防信号;如果为设防信号则设防响应成功;如 果不是设防信号则判断之前有无设防响应成功,如果成功则判断此信号是否为寻车信号, 是则音乐响起提示车主停车地点;不是则继续判断是否有新的无线信号发送;防响应成功 后,只要接收到震动电感发送的触发信号,就执行震动触发报警中断子程序,否则继续判断 是否有新的无线信号发送。

2.根据权利要求1所述的一种基于AT89C51单片机的电动车遥控报警装置,本发明选择 AT89C51单片机作为核心的控制芯片。

3.根据权利要求1所述的一种基于AT89C51单片机的电动车遥控报警装置,本发明采用 震动电感作为所需的输入信号发生模块。

4.根据权利要求1所述的一种基于AT89C51单片机的电动车遥控报警装置,本发明采用 蜂鸣器组成报警电路。

5.根据权利要求1所述的一种基于AT89C51单片机的电动车遥控报警装置,本发明采用 PT2262作为无线发送模块。

说明书

一种基于AT89C51单片机的电动车遥控报警装置

技术领域

本发明专利涉及电子设计技术领域,尤其涉及一种基于AT89C51单片机的电动车 遥控报警装置。

背景技术

随着科学技术迅猛发展,人民的生活水平不断提高,电动自行车已经进入人们的 生活中,并且进一步改善了人们的出行方便。电动自行车以电能为能源,没有废气排放,噪 音小又不污染环境,骑行省力,经济适用,通用性很广,上牌手续方便,政府大力支持。目前, 摩托车和燃油助力车因污染环境而受到限制。国家出台的燃油含税政策,给电动自行车带 来了更多的福音,因此电动自行车成为工薪阶层的最佳选择,受到越来越多人的青睐。然而 就在电动自行车进入千家万户的同时,其被盗率连连攀升,给使用者带来了不小的经济损 失。为解决广大电动自行车使用者的担忧,急需设计出一套基于单片机的关于电动自行车 无线防盗报警器方案,给广大使用者在爱车上装一把“安心锁”。

现在市场上有各式各样的电动车防盗报警装置,一些高档智能报警器由于价格过 高,用户不愿意为售价仅两三千的电动车去进行配置,进而得不到推广;另外,也有价格适 中且质量可靠的防盗报警器出售,但此类报警器的报警喇叭一般都只是安装在电动车车身 上。完成警情传递任务的主要部件都是震动电感器,因其灵敏度较高,容易致使一些外界的 环境因素,如刮风打雷,儿童嬉闹等使其动作并触发报警器进行报警,这种由于误报警带来 噪音污染的情况常常造成不必要的扰民。

种种原因使得大部分电动车用户并没有为它们的车去配备防盗报警装置,导致一 些不法分子有机可乘,电动车被盗现象日益严重,“电动自行车保险”也因出险率太高而销 声匿迹。报警装置作为电动车一个重要的附属配件,其防盗守护的重要作用众所周知。所 以,一种低价位、高品质,且适合于普通用户的防盗报警器将是电动自行车市场翘首以盼 的。

发明专利内容

本发明专利涉及一种基于AT89C51单片机的电动车遥控报警装置,本发明首先判断是 否有无线信号发送,如果有无线信号发送则读入无线信号;然后判断此信号是否为解除设 防信号,如果为解除设防信号,则防盗器解除设防,系统继续判断有没有新的无线信号发 送;如果不是解除设防信号,则判断是否为设防信号;如果为设防信号则设防响应成功;如 果不是设防信号则判断之前有无设防响应成功,如果成功则判断此信号是否为寻车信号, 是则音乐响起提示车主停车地点;不是则继续判断是否有新的无线信号发送;防响应成功 后,只要接收到震动电感发送的触发信号,就执行震动触发报警中断子程序,否则继续判断 是否有新的无线信号发送。

本发明用单片机来实现报警功能,开发方便,实用性好,可靠性高,成本低,本系统 是根据一般需要来设计,在实际应用中,可根据具体情况,加入更多智能化技术。

附图说明

图1:总体框架结构体系图。

图2:单片机引脚图。

图3:主程序流程图。

图4:2262发出的一组完整波形图。

图5:基本波形的放大图。

图6:高低电平抽样判断图。

图7:解码流程图。

图8:按键判断流程图。

图9:震动触发流程图。

具体实施方式

为了使本发明专利的目的、技术方案及优点更加清楚明白,以下结合附图及实施 例,对本发明专利进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释 本发明专利,并不用于限定本发明专利。

本发明专利涉及一种基于AT89C51单片机的电动车遥控报警装置,本发明首先判 断是否有无线信号发送,如果有无线信号发送则读入无线信号;然后判断此信号是否为解 除设防信号,如果为解除设防信号,则防盗器解除设防,系统继续判断有没有新的无线信号 发送;如果不是解除设防信号,则判断是否为设防信号;如果为设防信号则设防响应成功; 如果不是设防信号则判断之前有无设防响应成功,如果成功则判断此信号是否为寻车信 号,是则音乐响起提示车主停车地点;不是则继续判断是否有新的无线信号发送;防响应成 功后,只要接收到震动电感发送的触发信号,就执行震动触发报警中断子程序,否则继续判 断是否有新的无线信号发送。

进一步的,电动车无线防盗报警器的总体方案设计是根据其功能和设计要求,从 全局的角度,以系统的观点而进行整体方面的设计,主要包括无线收发模块设计,信号触发 模块设计和报警电路模块设计等内容。硬件总体方案设计框图如图1所示。单片机引脚图如 图2所示。其中单片机作为控制单元模块,震动电感作信号触发模块,采用远距离无线收发 装置作无线收发模块,蜂鸣器作报警电路模块。当单片机收到无线收发模块发出的预警信 号后,进入预警状态,并让震动电感在收到外界震动影响后,接通电路使报警器报警,以此 来威慑犯罪分子,达到保护电动自行车的目的。

进一步的,本发明选择AT89C51单片机作为核心的控制芯片,用震动电感作为所需 的输入信号发生模块,用蜂鸣器组成报警电路。用PT2262作为无线发送模块。

进一步的,本发明的程序主要包括解码子程序、按键判断子程序、蜂鸣器发声处理 子程序、震动检测子程序。主流程图如图3所示:

(1)解码子程序:由解码和解码后数据处理两部分组成。它是软件部分的关键环节,是 解码的核心部分;

(2)按键判断子程序:解码后通过对按键的判断,判断发送出的信号要完成的功能,其 中包括设防、静音设防、解除设防、寻车等功能;

(3)蜂鸣器发声处理子程序:不同功能下发出不同的提示音;

(4)震动检测子程序:这是由于电动车收到外部给予的震动信号而触发的一个中断子 程序。

进一步的,本发明的主程序代码如下:

#include <reg51.h>

#include<intrins.h> //方便调用_nop_();做延时用;

#define uChar unsigned Char

#define uint unsigned int

unsigned Char Receive[3] ; //解码缓冲区:Receive[0]:A0 A1 A2 A3 ; Receive:A4 A5 A6 A7 ; Receive[2]: D3 D2 D1 D0

//Receive[x]:xx xx xx xx 代表 4bit

//bit flag = 0 ; //解码完成标志位

sbit RemPin = P3^2 ; //编码信号输入脚

unsigned Char RemDat = 0x00 ; //解码后数据寄存器

bit remotekey.flag=0;

bit lock.flag=0;

sbit beep=P2^5;

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.flag=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 i;

FINT1=0;

for(i=1;i<3;i++)

{

play(2);

delay(1000);

}

}

}

}。

进一步的,本发明当2262的D0~D3 引脚出现高电平时,2262 便通过TXD 脚输出 相应的编码波形, 每次发射时至少发射5 组相同的编码波形,每组编码由同步头、两个字 节宽度的地址码以及一个字节宽度的按键码这三部分构成。图4是2262 地址引脚全部悬空 时按下D3 时输出的一段波形。地址码由2262 的地址引脚的高、低、悬空3 种状态确定,分 别用“11”、“00”、“01”表示,按键码由4 个按键输入引脚确定,共有15 种组合。编码波形的 周期由2262 的外接震荡电阻决定,震荡电阻不同输出的编码波形的周期也不相同。从图4 中可以发现2262 所发出的波形实是由“0 码”、“1 码”以及“同步头”3 种基本波形构成,对 2262 的软件解码实际上也就是对3 种基本波形的识别。图5是这3种基本波形的放大图。从 图5可以发现无论是“0 码”还是“1 码”都是从高电平开始并且其周期都是一样的为T,“0 码”和“1 码”的区别仅仅在于高电平的宽窄,“1 码”时高电平是低电平的3 倍,“0 码”时情 况相反,而同步头是一个周期较长的脉冲信号,其周期是8T,高电平时间和“0码”的一样。在 同步头中包含了两部分信息,一是告知了2262 发码的波特率;二是告知编码的开始, 正确 的处理同步头就能正确地进行软件解码。在使用中,一般采用 8 位地址码和4位数据码,这 时编码电路 PT2262 和单片机解码程序相对应,PT2262有三种状态可供选择:悬空、接正电 源、接地三种状态,3的8次方为6561,所以地址编码不重复度为 6561组,只有发射端PT2262 和接收端单片机的地址编码完全相同,才能配对使用,例如将发射机的PT2262 的第2脚接 地第3脚接正电源,其它引脚悬空,那么接收机单片机相应引脚接正电源,其它引脚悬空就 能实现配对接收。当两者地址编码完全一致时,接收机对应的D1~D4端输出约4V互锁高电 平控制信号,同时VT端也输出解码有效高电平信号。然后将这些信号加一级三极管放大,便 可驱动继电器等负载进行遥控操纵。设置地址码的原则是:同一个系统地址码必须一致;不 同的系统可以依靠不同的地址码加以区分。

进一步的,本发明使用高低电平抽样比较法来判断接收到的是“0码”还是“1”码, 如图6。每个编码的解码从高电平开始,每隔一段延时对电平高低状态进行一次抽样,若持 续为高则对寄存器C_HBIT进行一次加一,若变为低电平则认为高电平状态结束开始对低电 平进行计数,结果保存在寄存器C_LBIT中,当电平状态从新回到高电平状态,则认为完成了 一个码的接收,对C_HBIT、C_LBIT进行比较,若C_HBIT大于C_LBIT则认为收到是“1码”,C_ HBIT小于C_LBIT则为“0码”。仅有对“0码”和“1码”的接收还不足以完成一次正确的解码,捕 捉到了同步头才能保证解码的正确性,而在不知道编码的波特率的情况下是不能保证同步 头的捕捉,因此必须先对2262发出的编码的波特率进行测量。由图5可知在2262输出的编码 中同步头的高电平时间和“0码”的高电平时间以及“1码”的低电平时间一样,从另外一个角 度讲无论是“0码”、“1码”还是“同步头”中都包含了波特率的信息。因此完整接收到一个“0 码”、“1码”或者“同步头”就可以得到编码的波特率。编码的波特率可以通过接收任意相连 的两个码得到,由于检测波特率的程序进入的时间不确定,第一个码的高电平是否完全接 收无法保证,把得到第一个码丢弃,把第二码中接收到的高、低电平的记数值进行比较,取 较小的那个作为波特率的标准,把该记数值乘4,得到的结果就是1个T对应值C_BAUD,这个 C_BAUD是用来捕捉编码中同步头的关键。本文的解码方法中把同步头的捕捉放到了解码程 序中,图7是解码的流程。在每次进行计数加一后都把C_HBIT或C_LBIT与C_BAUD进行了一次 比较,因为同步头的低电平时间宽度为7.75T远大于一个码的周期T,若C_LBIT大于C_BAUD 则说明接收到的是同步头,而C_HBIT大于C_BAUD则说明接收到的是误码,都必须重新开始 解码。在接收到同步头后解码的正确率可达百分之百。需要注意的是在对2262进行解码时 必须要保证解码的时间窗口要大于一组完整的编码的时间。这个时间窗口可以根据前面得 到的波特率的记数值C_BAUD来计算,一个完整的编码要接收24码和一个同步头,既32T,按 照最坏情况接收是从第二码开始来计算,要保证能够接收到一个完整的编码必须要63T,所 以在程序中要给出一个宽度为63T的时间窗口来保证正确解码。将解调部分接收的编码信 号送入单片机的P3.2口,采用外部中断0对编码信号进行解码,解码部分流程如图7所示。

进一步的,本发明的解码程序代码如下:

void INT_0 (void) interrupt 0 using 1

{

unsigned Char i = 0 ;

unsigned Char j = 0 ;

unsigned int temp = 0x0000;

EA = 0 ;

TH0 = 0 ;

TL0 = 0 ; //11.0592 最大值 71111us

while( !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 /*3983*/) ) //检测 到同步头

{

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*/ ) ) //判断得窄脉冲:1表示,0x60代表96us,0x90代表144us

{

Receive[j] = Receive[j] << 1 ;

Receive[j] = Receive[j] + 0x01 ;

}

else if( ( 0x0100 /*256*/ <temp) && (temp< 0x0200 /* 512*/) ) //判断得宽脉冲:0表示

{

Receive[j] = Receive[j] << 1 ;

}

else return;

}

}

remotekey.flag = 1 ; //表示已解码完毕

return;

}

else

{

TR0 = 0 ;

EA = 1 ;

TF0 = 0 ;

RemPin = 1 ;

return;

}

}

void Data_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 = Receive[2];

Receive[2] = Receive[2] << 2 ;

Dat = Dat & 0xc0; //判断高2bit

if( Dat == 0xc0 ) //高2bit:11 ;则为1码 ;否则为0码

{

RemDat = RemDat << 1 ;

RemDat = RemDat + 0x01;

}

else

{

RemDat = RemDat << 1 ;

}

}

//P0 = RemDat ; //将解码后的数据送入P0口,通过开发板上的LED 显示出来

for( i = 0 ; i < 2 ; i ++) //普通延时

{

for( j = 0 ; j < 0xFFFF ; j ++ )

{

_nop_();

}

}

TF0 = 0 ;

EA = 1 ; //重开中断

}

}

}。

进一步的,设防键按下为高电平,其它按键为低电平,发送的编码是11000000即为 0xc0,所以设防功能在C语言里的KeyValue为0xc0;解除设防键按下为高电平,其它按键为 低电平,发送的编码是00110000即为0x30,所以解除设防功能在C语言里的KeyValue为 0x30;静音设防键按下为高电平,其它按键为低电平,发送的编码是00001100即为0x0c,所 以静音设防功能在C语言里的KeyValue为0x0c;寻车键按下为高电平,其它按键为低电平, 发送的编码是00000011即为0x03,所以寻车功能在C语言里的KeyValue为0x03。先判断 KeyValue是否为0xc0,是则进入设防模式;否则判断KeyValue是否为0x30,是则接触设防; 否则继续判断KeyValue是否为0x0c,是则进入静音设防;否则判断KeyValue是否为0x03,是 则为寻车模式;否则说明数据码有误。按键判断部分流程图如图8所示,按键判断程序代码 如下:

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; //静音设防

else if(KeyValue==0x03) return KEY_FIND; //寻车

else return KEY_UNKNOW;

}。

进一步的,本发明的蜂鸣器发声分三种情况:设防时,蜂鸣器响一声;寻车时,蜂鸣 器播放生日快乐歌,循环播放直到用户按下解除设防键;震动时,蜂鸣器循环鸣叫。蜂鸣器 发声处理程序代码:

//生日快乐歌的音符频率表,不同频率由不同的延时来决定

uChar Code song_tone[]=

{212,212,190,212,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; t<120; t++);

}

//按周期t发音

void play(uChar t)

{

uChar i;

for (i=0;i<100;i++)

{

beep=!beep;

delay(t);

}

beep=0;

}

//播放函数

void playmusic()

{

uint i=0,j,k;

while(song_long[i]!=0||song_tone[j]!=0)

{

//播放各个音符,song_long为帕子长度

for(j=0;j<song_long[i]*20;j++)

{

beep=~beep;

//song_tone延时表决定了每个音符的频率

for(k=0;k<song_tone[i]/3;k++);

}

delay(10);

i++;

}

}。

进一步的,本发明当系统处于设防的情况下,系统检测到车身震动是,将震动信号 接入单片机的P3.3引脚,采用外部中断1服务程序完成震动报警。震动触发流程图如图9所 示,震动检测程序代码如下:

//中断初始化

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; t<120; t++);

}

//按周期t发音

void play(uchar t)

{

uchar i;

for (i=0;i<100;i++)

{

beep=!beep;

delay(t);

}

beep=0;

}

//播放函数

void playmusic()

{

uint i=0,j,k;

while(song_long[i]!=0||song_tone[j]!=0)

{

//播放各个音符,song_long为帕子长度

for(j=0;j<song_long[i]*20;j++)

{

beep=~beep;

//song_tone延时表决定了每个音符的频率

for(k=0;k<song_tone[i]/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;

}

if(key4==0) playmusic();

if(lock_flag & FINT1)

{

uint i;

FINT1=0;

for(i=1;i<3;i++)

{

play(2);

delay(1000);

}

}

}

}

以上所述仅为本发明专利的较佳实施例而已,并不用以限制本发明专利,凡在本发明 专利的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明专利的保 护范围之内。

本文发布于:2024-09-23 11:19:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/72316.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议