分享

用单片机的摩托车防盗器原理图、源代码

 共同成长888 2016-06-07

接收模块用的YCJS102(见图),大概几块钱.
单片机具有解码﹑蜂鸣器驱动和实现摩托车防盗器的控制的功能用,以达到简化系统降低成本的目的,同时降低板内干扰提高性能。

此款与其它摩托车防盗器的不同之处主要是在语音方面。
 一)。音频功放:
    该电路采用双运放组成的BTL电路,因此输出不接电容而直接与喇叭相接,这样就可以克服原电路在语音开始时出现的上电噪音"啪"。同时该电路有静音控制,在静音状态下电路的工作电流的典型值65uA,方便了语音电路的静音控制,单片机一输出脚就能实现语音的控制,而不需原电路通过两只三极管来实现语音功放电源的开关控制,这样将大大的降低功放电路的噪声。
二)。语音的回放:
    该电路仍然采用IS22C012语音回放芯片。由于该电路具有自动功率下降功能,在不播放时静态电流不大于5uA,因此不需要象原电路那样进行电源开关控制,可将该芯片直接挂在5V电源上,通过两只单片机的脚来实现音段选择。这样将极大的简化设计电路。
通过上面的一)和二)的设计,不仅回避了原来的专利,同时也使电路简单化,省去了三只三极管,而电路的静态电流增加不会大于0。1mA。与原来的电路相比,只是增加了三只单片机输出脚。同时,由于增加了三只单片机脚,虽然采用单片机解码空出来了四只脚,如此一来就只剩一只脚用于遥控器的键数选择,而无法实现编码外读的功能。这是一大遗憾,这就要求我们在编码记录时不能有半点马虎。
三)。六音报警:
  按厂家要求在开锁时问候:欢迎乘坐某某摩托。闭锁问候:欢迎下次乘坐某某摩托。并有防盗、寻车、防抢、解除等警报。

单片机解码模块原代码

 R3        EQU    0X03
            PORT5        EQU    0X05
            PORT6        EQU    0X06
            R3        EQU    0X03

            KEY_STATUS    EQU    0X10    ;低半字节为按键标志,高半字节为控制标志
            SIGNAL_LOW    EQU    0X11    ;信号电平低计数器
            SIGNAL_HIGH    EQU    0X12    ;信号电平高计数器
            DATA_RECORDER    EQU    0X13    ;接收码数据字节
            CODE_RECORDER2    EQU    0X14    ;接收码地址高字节
            CODE_RECORDER1    EQU    0X15    ;接收码地址低字节
            CODE_TOTAL    EQU    0X16    ;接收数据位计数器
            KEY_COUNTER    EQU    0X17    ;两次按键检测计数器
/**********************KEY_STATUS标志位定义***********************************/
            AUTORUN_KEY    EQU    0    ;遥控键标志
            LOCK_KEY    EQU    1    ;防盗键标志
            SEARCH_KEY    EQU    2    ;寻车键标志
            OPEN_KEY    EQU    3    ;解除键标志
            PRESS_FLAG    EQU    4    ;有键按下标志
            CHECK_FLAG    EQU    5    ;校验标志
/***********************CONSTANT DEFINE*************************************/
            CODE_ADDRESS1    EQU    0B10001100    ;遥控器地址码,更改常数即可实现其他遥控器收码
            CODE_ADDRESS2    EQU    0B00101100        
            AUTORUN_VALUE    EQU    0B00000011    ;遥控器相应键值,改变相应数值即可更改其功能
            LOCK_VALUE    EQU    0B00001100
            SEARCH_VALUE    EQU    0B00110000
            OPEN_VALUE    EQU    0B11000000
/**********************当PORT6.2口电平为高时调用该程序收码******************/
;PORT6.2为信号输入口

collect_2262:
            mov    a,@0xf0
            And     KEY_STATUS,a
            clr    code_total
            clr    signal_high
collect1:
            inc    signal_high
            MOV    A,SIGNAL_HIGH
            SUB    A,@30
            JBS    R3,0
            RET
            clr    signal_low
            call    delay20us
            jbs    port6,2
            jmp    collect_low
            jmp    collect1
collect_low:    
            mov    a,signal_high    ;信号高电平宽度<80US时滤除
            sub    a,@4
            jbc    r3,0
            ret
            mov    a,@20        ;信号高电平宽度在80—400US时为采集为0
            sub    a,signal_high    ;信号高电平宽度在400US以上时为采集为1
            rrc    data_recorder
            rrc    code_recorder2
            rrc    code_recorder1
            inc    code_total
            clr    signal_high
            mov    a,@24
            xor    a,code_total
            jbc    r3,2
            jmp    collect_end
input_low:
            inc    signal_low
            mov    a,signal_low    ;信号低电平宽度大于800US时滤除
            sub    a,@40
            jbs    r3,0
            ret
            call    delay20us
            jbs    port6,2;3
            jmp    input_low    
            jmp    collect1
collect_end:    
            mov    a,code_recorder1    ;校验低字节地址
            xor    a,@code_address1
            jbs    r3,2
            ret
            mov    a,code_recorder2    ;校验高字节地址
            xor    a,@code_address2
            jbs    r3,2
            ret
            jbs    KEY_STATUS,check_flag    ;是否是第一串收码?
            jmp    storage_data
            bc    KEY_STATUS,check_flag  
            mov    a,com_data_rec
            xor    a,data_recorder
            jbs    r3,2
            jmp    storage_data
            mov    a,data_recorder
            xor    a,@autorun_value        ;是启动键?
            jbs    r3,2
            jmp    key1
            bs    KEY_STATUS,autorun_key    ;置启动键标志
            bs    KEY_STATUS,press_flag    ;置有键按下标志
            clr    key_counter        ;清除按键间隔计数器
            ret            
key1:
            mov    a,data_recorder
            xor    a,@open_value        ;是解除键?
            jbs    r3,2
            jmp    key2
            bs    KEY_STATUS,open_key    
            bs    KEY_STATUS,press_flag
            clr    key_counter    
            ret
key2:
            mov    a,data_recorder
            and    a,@0x0c            ;同时有两个键按下时不为0X30
            xor    a,@lock_value        ;是防盗键?
            jbs    r3,2            
            jmp    key3
            bs    KEY_STATUS,lock_key
            bs    KEY_STATUS,press_flag
            clr    key_counter
key3:
            mov    a,data_recorder
            and    a,@0x30
            xor    a,@search_value    ;是寻车键?
            jbs    r3,2
            ret    
            bs    KEY_STATUS,search_key    
            bs    KEY_STATUS,press_flag
            clr    key_counter            
            ret
storage_data:                        ;第一次收码存储数据字节
            bs    KEY_STATUS,check_flag
            mov    a,data_recorder
            mov    com_data_rec,a
            ret

delay20us:
            wdtc
            mov    a,@3;9
            mov    delay1,a
delay20us_1:        
            nop
            djz    delay1
            jmp    delay20us_1
            ret
遥控板用的是PT2262,hs2260原理应是一样,但应看一下它是如何编码的,再相应修改。
地址码可修改,但请注意,为了方便生产或遥控器的更换,该地址必须要能读出。因此,还需设计一专门的地址读出器,以方便生产时对遥控器进行编码。

检测振动模块

;数据寄存器定义
        NUMBER0        EQU    0X1D    ;振动宽度计数器
        GRADEDATA    EQU    EQU0X1E;当前灵敏度
        COM_DATA_REC    EQU    0X1F;上一次数据寄存器
        
        ;PSW位定义
        TCINTBIT    EQU    0;中断计数标志位,约为750ms(TCC Rate=1:256)
        VibraBIT    EQU    1;是否达到当前灵敏度宽度,即是否有振动
        
CHECK_Vibra:
CELLECTION_VIB:
        CLR    NUMBER            ;检测振动前先把计数器清0
        CLR    TCC
        CLR    NUMBER0
        BC    PSW,TCINTBIT
CELLECTION_L:        ;采集数据子程序
        MOV    A,@89            ;730ms
        SUB    A,NUMBER
        JBC    R3,0
        BS    PSW,TCINTBIT
        JBC    PSW,TCINTBIT            
        JMP    CELLECTION_CN4            ;是否超时                
        JBS    PORT5,SEN
        JMP    CELLECTION_L
CELLECTION:
        JBS    PORT5,SEN
        JMP    CELLECTION_END
        MOV    A,@53            ;DELAY 60us
        CALL    DELAY0
        INC    NUMBER0
        JMP    CELLECTION
CELLECTION_END:
        MOV    A,GRADEDATA            ;比较振动灵敏度
        SUB    A,NUMBER0
        JBS    R3,0
        JMP    CLRNUMBER0
        CLR    NUMBER0
        BS    PSW,VibraBIT        ;置检测到振动标志
        ret
        
CELLECTION_CN4:        
        CLR    NUMBER0        
        BC    PSW,TCINTBIT
        BC    PSW,VibraBIT
        RET
CLRNUMBER0:
        CLR    NUMBER0
        JMP    CELLECTION_L
注:警报音频率为1.8K到3.5K之间,具体请查资料


OSCILLATION:R/C =晶振    CLOCK    =    2
Frequency     =4MHZ
;=================================================================*/
            Fre_COUNT    EQU    0X37    ;'声音频率变化计数器,从1.8~3.55KHZ
            Fre_Repeat    EQU    0x38    ;'同一频率的重复次数
            SOUND_TEMP    EQU    0X39    
            ;'Replace program variable value and debug is more than easy.
            S_Loop        EQU    67    ;'MAX-MIN
            S_MAX        EQU    138
            S_MIN        EQU    71
            S_Repeat    EQU    4
            
;开始0.2秒发音
SOUND200ms:
SOUND_LH:        ;1.8~3.55        
            MOV    A,@S_Loop        ;66=134-68
            MOV    Fre_COUNT,A
SOUND_LH_LP:
            MOV    A,@S_Repeat        ;
            MOV    Fre_Repeat,A
            MOV    A,Fre_COUNT
            ADD    A,@S_MIN        ;
repeat0_lp        BS    PORT6,BUZ
            CALL    SOUNDDELAY0
            BC    PORT6,BUZ
            CALL    SOUNDDELAY0
            DJZ    Fre_Repeat
            JMP    repeat0_lp
            DJZ    Fre_COUNT
            JMP    SOUND_LH_LP
SOUND_HL:        ;3.55~1.8    
            MOV    A,@S_Loop        ;66=134-68
            MOV    Fre_COUNT,A
SOUND_HL_LP:
            MOV    A,@S_Repeat        ;
            MOV    Fre_Repeat,A
            MOV    A,Fre_COUNT
            SUB    A,@S_MAX        ;
repeat1_lp        BS    PORT6,BUZ
            CALL    SOUNDDELAY0
            BC    PORT6,BUZ
            CALL    SOUNDDELAY0
            DJZ    Fre_Repeat
            JMP    repeat1_lp
            DJZ    Fre_COUNT
            JMP    SOUND_HL_LP
SOUND_END:                        ;
            RET
            
;**********************************************************
Sound2s:        ;2S内短鸣两声
WARNING1:
            CALL    Sound200ms
            CALL    Delay800ms
            CALL    Sound200ms
            CALL    Delay800ms
            RET
Delay800ms:
            CLR    TIME1            ;'get ready for 0.8 second delay.
Sound_delay        MOV    A,@196            ;'delay 0.8 second
            SUB    A,TIME1
            JBS    R3,0
            JMP    Sound_delay
            RET
;************************************************
Sound15s:        ;连续报警15S
WARNING2:
            MOV    A,@73
            MOV    SOUND_TEMP,A
Sound1s_lp        CALL    Sound200ms
            JBC    PORT6,SDT        ;'SDT上电立即中断报警
            RET
            DJZ    SOUND_TEMP
            JMP    Sound1s_lp
            RET
;============================
        SOUNDDELAY1    EQU    0X3A
        
sounddelay:
            mov    a,@18        ;
sounddelay0        mov    sounddelay1,a    ;=(A*9)+3
            wdtc
sounddelayus_1:        
            nop
            nop
            nop
            nop
            nop
            nop
            djz    sounddelay1
            jmp    sounddelayus_1
            ret






    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多