LscmunaixMG 发表于 2017-6-12 18:36:07

采用宏晶系列单片机STC15F104E实现的超声波扫频驱蚊器,起止频率可直接修改。


/*
采用宏晶系列单片机STC15F104E实现的超声波扫频驱蚊器,起止频率可直接修改。
采用配置特殊功能寄存器的方法实现直接控制输出方波信号并指定频率,频率范围宽、精准准度高等特点被广泛使用。
信号输出口可连接超声波专用功放电路放大信号到扬声器或蜂鸣器。
若使用其他型号芯片代替的或固件版本低的,没有该特殊功能寄存器的无法输出信号。
将起始终止频率调低可代替高分贝报警器使用。
频率过高或过低导致计算结果溢出会导致频率输出错误。
用示波器或逻辑分析仪检测P3.5信号输出波形即可。
晶振频率:12Mhz
*/
#include "reg51.h"
#include "intrins.h"

#define FOSC 12000000L //晶振频率
#define STEP 1L //步进频率 1hz
#define MIN 20000L //起始频率 20khz
#define MAX 100000L //终止频率 100khz

sfr CLK_DIV   = 0x97;           //时钟分频控制寄存器
sfr AUXR      = 0x8e;               //辅助特殊功能寄存器
sfr INT_CLKO= 0x8f;               //唤醒和时钟输出功能寄存器
sbit T1CLKO   = P3^5;               //蜂鸣器连接VCC和P3.5,由硬件寄存器决定,不同型号芯片可能会有不同,无法直接修改。


void beep(unsigned long hz){ //蜂鸣器鸣叫

    TMOD = 0x00;                  //设置定时器为模式1(16位自动重装载)
    TMOD &= ~0x40;                  //C/T1=0, 对内部时钟进行时钟输出
    TL1 = (65536-FOSC/2/hz);               //初始化计时值
    TH1 = (65536-FOSC/2/hz) >> 8;
    INT_CLKO = 0x02;
    TR1 = 1;//开始计数


       

       
}



void main(){ //主函数
unsigned long hz=MIN; //开始频率
bit n=0; //频率加还是减
AUXR |= 0x40; //定时器1时钟为1T模式
    while (1){ //进入死循环
        beep(hz); //修改鸣叫频率
                if(n == 0){ //加
                hz+=STEP; //频率加步进频率

                } else { //减
                hz-=STEP; //频率减步进频率

                }
                        if(hz<=MIN || hz >=MAX){ //频率加到最大或者减到最小
                        n=~n; //加减状态取反
                        }       

       
        }
}



Cute 发表于 2017-6-12 22:07:37

这个好,以后蚊子什么的再也不会再进来了。。:lol

66大顺 发表于 2017-9-18 13:17:19

小萌 发表于 2017-6-12 22:07
这个好,以后蚊子什么的再也不会再进来了。。:lol

这个不一定,看发射功率。

Kuni7wa 发表于 2017-9-22 16:50:16

吃瓜群众 发表于 2017-9-18 13:17
这个不一定,看发射功率。

嗯嗯,大神就是大神,跟着楼主走。
页: [1]
查看完整版本: 采用宏晶系列单片机STC15F104E实现的超声波扫频驱蚊器,起止频率可直接修改。