标题: 单片机C语言无源蜂鸣器使用定时器驱动程序求分析 [打印本页]

作者: SHANWAZI    时间: 2021-2-10 16:14
标题: 单片机C语言无源蜂鸣器使用定时器驱动程序求分析
这次一个无源蜂鸣器驱动算是遇到问题了
此程序并非本人所写也是借鉴于论坛大神帖子的!
程序如下:
定时器为八位自动重装模式
定时250us;

void  timer()  interrupt   1
{

static uint16  count=0;
uint16   count;
if(num>0)
{
count++;
if(count<400)
{
beep=~beep;
if(count>=400)
beep=1;
if(count>=800)
{
count=0;
num--;
}

}


}

}
求问:三个if里面的的数值都决定了蜂鸣器的什么状态?
作者: csmyldl    时间: 2021-2-10 17:47
void  timer()  interrupt   1
{

static uint16  count=0;
uint16   count;
if(num>0)
{
count++;
if(count<400)       //决定鸣叫
{
beep=~beep;
if(count>=400)      //决定不叫
beep=1;
if(count>=800)    //决定鸣叫和不叫的周期
{
count=0;
num--;                //决定鸣叫的次数
}
作者: zsw3721    时间: 2021-2-10 18:04
我来分析一下,如果说错了多包涵。
这个程序运行起来的效果是,蜂鸣器会发出2000Hz的声音(类似有源蜂鸣器的频率),交替响100mS停100mS,响的次数由num决定。
第一个if(num>0),就是num还没有自减到0时,才会执行里面的代码。if(count<400),是指在前面400次中断里(每次中断250uS),蜂鸣器交替发声,这就确定了发声的声音频率是1s/500us=2000Hz。if(count>=400) beep=1是指,执行完前面400次中断(100mS)后,在接下来的400次中断(100mS)不发声,直到if(count>=800)把count清零,才会回到发声的代码中,当然前提是num--后num还没到0。
作者: suuy79    时间: 2021-2-10 18:33
蜂鸣器的鸣响由变量NUM决定:
当变量num》时,蜂鸣器以占空比为50%、4KHZ的频率间歇鸣响
NUM=0,蜂鸣器停止鸣响
第一个IF:蜂鸣器鸣响的先决条件
第二个IF:蜂鸣器开始鸣响1秒
第三个IF:蜂鸣器停止鸣响1秒
作者: 人人学会单片机    时间: 2021-2-10 19:04
人人学会单片机 就是用的无源蜂鸣器,课程第25课和第26课
作者: wulin    时间: 2021-2-10 21:09
楼主抄作业也抄错了吧。你这程序只能短暂响一下就没声音了。给你改一下并详细注释。
void  timer()  interrupt   1
{//功能:急促响铃声,适用于报警
        static uint16  count=0;//静态局部计数变量
//        uint16   count;//错误:重复定义同名变量
        if(num>0)//num响铃次数变量
        {
                count++;
                if(count<=1000)//<0.25秒
                        beep=~beep;//蜂鸣器响铃,频率2KHz
                if(count>1000) //>0.25秒
                        beep=1;           //蜂鸣器复位
                if(count>=2000)//0.5秒周期
                {
                        count=0;   //计数变量清0
                        num--;           //响铃次数减1,直减到为0结束
                }
        }
}
作者: SHANWAZI    时间: 2021-2-11 11:15
wulin 发表于 2021-2-10 21:09
楼主抄作业也抄错了吧。你这程序只能短暂响一下就没声音了。给你改一下并详细注释。
void  timer()  inter ...

新年好!!   非常感谢回复解答此程序正式出自您,我也照葫芦画瓢抄了一个 对其中运行原理弄不明白调试过程中配合逻辑分析仪调试硬是没调通!!
作者: wulin    时间: 2021-2-11 15:19
SHANWAZI 发表于 2021-2-11 11:15
新年好!!   非常感谢回复解答此程序正式出自您,我也照葫芦画瓢抄了一个 对其中运行原理弄不明白调试过 ...

给你一个驱动无源蜂鸣器演示程序参考
示例 仿真.zip (155.53 KB, 下载次数: 40)


作者: SHANWAZI    时间: 2021-2-11 16:54
给坛友送个祝福:今天‬就是大年三十了,在此祝愿您新年好!新‬春快乐!祝愿您在2021年事事顺心‬!天天开心!身健体‬康!阖家欢乐!恭发喜‬财!事事‬顺心!万事如意[庆祝][庆祝][庆祝][烟花][烟花][烟花][烟花][合十][合十][合十]2021发发发
作者: SHANWAZI    时间: 2021-2-11 16:54
wulin 发表于 2021-2-11 15:19
给你一个驱动无源蜂鸣器演示程序参考

非常感谢
作者: SHANWAZI    时间: 2021-2-11 17:40
wulin 发表于 2021-2-11 15:19
给你一个驱动无源蜂鸣器演示程序参考

里面元器件非常齐全很感谢

作者: TTQ001    时间: 2021-2-15 02:00
感谢大家的解释,非常有帮助




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1