打印

介绍个汽车报警器声音的程序给大家

[复制链接]
2079|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcubase|  楼主 | 2007-1-4 20:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;*****************************************************
  LIST P=16F84A,R=DEC         ;定义器件,默认为十进制
;-----------------------------------------------------
  __CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC 
                                              ;没有代码保护
                                              ;看门狗关闭
                                              ;上电廷时器开启
                                              ;振荡器模式为XT
;-----------------------------------------------------
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     ;设置数据寄存器体1
    MOVLW 0011000B
    MOVWF TRISA        ;设置各开关端口为输入其它为输出
    MOVLW 00000011B
    MOVWF TRISB 
    BCF STATUS,RP0     ;恢复数据寄存器体0
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
    MOVLW S_LOOP
    MOVWF FRE_COUNT     ;46=93-47
SOUND_LH_LP
    MOVLW S_REPEAT      ;同一频率重复次数送FRE_REPEAT
    MOVWF FRE_REPEAT
    MOVFW FRE_COUNT
    ADDLW S_MIN        ;计数值加最小值
    MOVWF TEMP
REPEAT0_LP
    MOVFW TEMP
    BSF PORTA,0       
    CALL SOUNDDELAY0   ;廷时W*3US
    BCF PORTA,0
    MOVFW TEMP
    CALL SOUNDDELAY0
    DECFSZ FRE_REPEAT,1 ;每四次减频率计数一次
    GOTO REPEAT0_LP
    DECFSZ FRE_COUNT,1
    GOTO SOUND_LH_LP
SOUND_HL
    MOVLW S_LOOP
    MOVWF FRE_COUNT   ;46=93-47
SOUND_HL_LP
    MOVLW S_REPEAT    ;同一频率重复次数送FRE_REPEAT
    MOVWF FRE_REPEAT
    MOVFW FRE_COUNT
    SUBLW S_MAX       ;最大值减计数值
    MOVWF TEMP
REPEAT1_LP
    MOVFW TEMP
    BSF PORTA,0
    CALL SOUNDDELAY0    ;廷时W*3US
    BCF PORTA,0
    MOVFW 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
    MOVLW 255
SOUNDDELAY0
    MOVWF SOUNDDELAY1     ;廷时W*3US+1US
SOUNDDELAYUS_1
    DECFSZ SOUNDDELAY1,1
    GOTO SOUNDDELAYUS_1
    RETLW 0
;---------------------
SOUND15S                    ;报警15秒
    MOVLW 73
    MOVWF SOUND_TEMP
SOUND1S_LP
    CALL SOUND200MS
    BTFSS PORTB,KEY4       ;按S5退出
    RETLW 0
    DECFSZ SOUND_TEMP,1
    GOTO SOUND1S_LP
    RETLW 0
;------------------------
    END
 
推荐个单片机网站给大空学习参考:www.mcubase.com 单片机基地

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝