对于单片机学习版上的蜂鸣器的问题。。STC89C52的单片机。。应该是无源蜂鸣器。。
电路图如图所示。。。我的问题是。。我编程控制它。。先定义:sbitbeer=P0^7;然后控制语句时beer=0;或者beer=~beer;延时一段时间;beer=1;再...
电路图如图所示。。。我的问题是。。我编程控制它。。先定义:sbit beer=P0^7;然后控制语句时beer=0;或者beer=~beer;延时一段时间;beer=1;再延时。。就这样一直循环。。运行程序后。。蜂鸣器只响一瞬间。。即每次循环只响一瞬间。。但是如果我整个程序不加其他句子。。就一句:beer=~beer;蜂鸣器就能一直响。。哪位能够解答一下??在线等。。
展开
4个回答
展开全部
I/O 口定时翻转电平驱动蜂鸣器方式
使用I/O 口定时翻转电平驱动蜂鸣器方式的设置比较简单,只需要对波形分析一下。由于驱动的信号刚好为周期500μs,占空比为1/2duty 的方波,只需要每250μs 进行一次电平翻转,就可以得到驱动蜂鸣器的方波信号。在程序上,可以使用TIMER0 来定时,将TIMER0 的预分频设置为/1,选择TIMER0 的始终为系统时钟(主振荡器时钟/4),在TIMER0 的载入/计数寄存器的高4 位和低4 位分别写入00H 和06H,就能将TIMER0 的中断设置为250μs。当需要I/O 口驱动的蜂鸣器鸣叫时,只需要在进入TIMER0 中断的时候对该 I/O 口的电平进行翻转一次,直到蜂鸣器不需要鸣叫的时候,将I/O 口的电平设置为低电平即可。不鸣叫时将I/O 口的输出电平设置为低电平是为了防止漏电。
估计是你的延时太长了
使用I/O 口定时翻转电平驱动蜂鸣器方式的设置比较简单,只需要对波形分析一下。由于驱动的信号刚好为周期500μs,占空比为1/2duty 的方波,只需要每250μs 进行一次电平翻转,就可以得到驱动蜂鸣器的方波信号。在程序上,可以使用TIMER0 来定时,将TIMER0 的预分频设置为/1,选择TIMER0 的始终为系统时钟(主振荡器时钟/4),在TIMER0 的载入/计数寄存器的高4 位和低4 位分别写入00H 和06H,就能将TIMER0 的中断设置为250μs。当需要I/O 口驱动的蜂鸣器鸣叫时,只需要在进入TIMER0 中断的时候对该 I/O 口的电平进行翻转一次,直到蜂鸣器不需要鸣叫的时候,将I/O 口的电平设置为低电平即可。不鸣叫时将I/O 口的输出电平设置为低电平是为了防止漏电。
估计是你的延时太长了
宿兴电子
2024-11-28 广告
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡...
点击进入详情页
本回答由宿兴电子提供
展开全部
一般单片机的程序都是一个while(1),单片机会一直执行while循环里面的语句;
你的程序应该在主程序里面这样写;
while(1)
{
beep=~beep;
delay();
}
这样蜂鸣器才会循环响的。
你的程序应该在主程序里面这样写;
while(1)
{
beep=~beep;
delay();
}
这样蜂鸣器才会循环响的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你画个程序流程图,或者在线仿真,看看程序到底怎么走,在通过WATCH窗口看PORTC的值 逻辑没错的话 不会出现此问题的
初步估计,你是程序跑到底就不返回了 也就是只执行一遍~~
初步估计,你是程序跑到底就不返回了 也就是只执行一遍~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(1)
[
beer=0;
delay(1);
beer=1;
delay(1);
]
delay().................试试(自己写delay吧)
[
beer=0;
delay(1);
beer=1;
delay(1);
]
delay().................试试(自己写delay吧)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询