×
单片机 > 单片机程序设计 > 详情

PIC单片机汽车防盗器报警声(防盗器)

发布时间:2020-06-03 发布时间:
|

; 汽车防盗器报警声 
;频率分两个0.1s第一个 
;0.1S频率从1.8K-3.5K匀速增加第二个0.1S频率从3.5K-1.8K匀速减少, 
;程序复位后,按S2喇叭叫两声,按S3喇叭叫15秒,中途可按S5停止. 
;========================================================= 
LIST P=16F84A,R=DEC  

__CONFIG B11111111110001;_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC  

RTCC EQU 01H ;定义各寄存器 
PC EQU 02H 
STATUS EQU 03H 
C EQU 0 
RP0 EQU 5 
;---------------------- 
PORTA EQU 05H 
PORTB EQU 06H 

TRISA EQU 5H 
TRISB EQU 6H 
;----------------------- 
SOUNDDELAY1 EQU 10H ;声音频率变化计数器,从1.8~3.55KHz 
FRE_COUNT EQU 11H ;同一频率的重复次数保存地址 
FRE_REPEAT EQU 12H  
SOUND_TEMP EQU 13H 
TEMP EQU 14H ;暂存寄存器 
S_LOOP EQU 46 ;93-47=46 
S_MAX EQU 93 ;最低频率1.8K 93*3=280US*2 
S_MIN EQU 47 ;最高频率3.55K 47*3=140*2 
S_REPEAT EQU 4 ;同一频率重复次数 
;----------------------RA 
KEY1 EQU 3 
KEY2 EQU 4 
;----------------------RB 
KEY3 EQU 0 
KEY4 EQU 1 
;-------------------- 
ORG 0000H 
MAIN 
CLRF PORTA 
CLRF PORTB ;初始化IO口 

BSF STATUS,RP0  
MOV LW 0011000B 
MOV WF TRISA  
MOV LW 00000011B 
MOV WF TRISB  
BCF STATUS,RP0  
LOOP 
BTFSS PORTA,KEY1 ;扫描按键 
GOTO SET_1 
BTFSS PORTA,KEY2 
GOTO SET_2 
GOTO LOOP 
;-------------------------------------------- 
SET_1 
BTFSC PORTA,KEY1 ;去抖动 
GOTO LOOP 
CALL SOUNDDELAY 
BTFSC PORTA,KEY1 ;按S2叫两声 
GOTO LOOP 
CALL SOUND200MS 
CALL SOUND200MS 
GOTO LOOP 
;-------------------------------------------- 
SET_2 
BTFSC PORTA,KEY2 ;去抖动 
GOTO LOOP 
CALL SOUNDDELAY 
BTFSC PORTA,KEY2 ;按S3叫15秒 
GOTO LOOP 
CALL SOUND15S 
GOTO LOOP  
;- - ---------------------------------------- 
SOUND200MS 
MOV LW S_LOOP 
MOV WF FRE_COUNT ;46=93-47 
SOUND_LH_LP 
MOV LW S_REPEAT ;同一频率重复次数送FRE_REPEAT 
MOV WF FRE_REPEAT 
MOV FW FRE_COUNT 
ADDLW S_MIN ;计数值加最小值 
MOV WF TEMP 
REPEAT0_LP 
MOV FW TEMP 
BSF PORTA,0  
CALL SOUNDDELAY0 ;廷时W*3US 
BCF PORTA,0 
MOV FW TEMP 
CALL SOUNDDELAY0 
DECFSZ FRE_REPEAT,1 ;每四次减频率计数一次 
GOTO REPEAT0_LP 
DECFSZ FRE_COUNT,1 
GOTO SOUND_LH_LP 
SOUND_HL 
MOV LW S_LOOP 
MOV WF FRE_COUNT ;46=93-47 
SOUND_HL_LP 
MOV LW S_REPEAT ;同一频率重复次数送FRE_REPEAT 
MOV WF FRE_REPEAT 
MOV FW FRE_COUNT 
SUBLW S_MAX ;最大值减计数值 
MOV WF TEMP 
REPEAT1_LP 
MOV FW TEMP 
BSF PORTA,0 
CALL SOUNDDELAY0 ;廷时W*3US 
BCF PORTA,0 
MOV FW TEMP 
CALL SOUNDDELAY0 
DECFSZ FRE_REPEAT,1;四次减频率计数一次 
GOTO REPEAT1_LP 
DECFSZ FRE_COUNT,1 
GOTO SOUND_HL_LP 
SOUND_END 
RETLW 0 
;------------------------------ 
SOUNDDELAY: ;廷时255*3US+2US 
MOV LW 255 
SOUNDDELAY0 
MOV WF SOUNDDELAY1 ;廷时W*3US+1US 
SOUNDDELAYUS_1 
DECFSZ SOUNDDELAY1,1 
GOTO SOUNDDELAYUS_1 
RETLW 0 
;--------------------- 
SOUND15S ;报警15秒 
MOV LW 73 
MOV WF SOUND_TEMP 
SOUND1S_LP 
CALL SOUND200MS; 
BTFSS PORTB,KEY4 ;按S5退出 
RETLW 0 
DECFSZ SOUND_TEMP,1 
GOTO SOUND1S_LP 
RETLW 0 
;------------------------ 
END 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32 总线矩阵介绍