找回密码
 注册
关于网站域名变更的通知
查看: 3829|回复: 11
打印 上一主题 下一主题

为什么无源蜂鸣器一直响个不停。因为定时器都被占用,只能用延时实现响的时间

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-25 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
为什么无源蜂鸣器一直响个不停。因为定时器都被占用,只能用延时实现响的时间
, `, m% O8 |3 J3 Q/ }( f) K$ X. l, t: O* R0 H; a" ]% m
#include <reg52.h>  //器件配置文件( C7 e1 |5 R  s6 K5 d
' B) _. |8 u: j5 H$ u. w6 X, J' H

9 M  S5 I' Z4 w: E7 {3 [% a   sbit SPK=P1^0;           //蜂鸣器引脚
! x% n$ E& L# ]* i4 |            
) P$ a* c  c9 G1 r* a/*********************************************************/: O. Y$ z2 H: X) o  r
void delayus()     //延时函数,
0 \% a& P9 G0 A3 o{
. A1 q5 R  F0 Cunsigned char i;" K" }+ K' J9 c' H
        {$ Z7 q" L7 Y; \! ?' X  v
for(i=0; i<7; i++)
* L3 I& M% F! z6 k  {;}7 M0 @- Z& E/ F( X7 b; F7 q* ^0 F
        }% r3 b) ?' F+ m% C
}
$ A) `. e, R4 e! a+ W( w# V8 J0 N                             
- W7 e+ }) Z0 P1 k+ T+ r, n8 C/ F/*********************************************************/
) B* s4 K$ ^# f$ T0 _- ^, Y
: K5 O$ q+ L  b+ Tvoid  main(  void  )
9 e( B7 n  S! S* T' H: B1 f{  & P+ {( I3 j: X3 a( D/ {; S1 w
     unsigned int  j;1 W- h3 S0 a9 w& w! C8 |
         
7 ^) r" B: J% U7 V( k        SPK=0;           
/ }" Z7 ]7 d1 n4 X2 h  j = 60;     
+ l& W  J+ n7 {4 ^2 M$ F; J8 c  while(j>0)   
. q# ?; H: j  Q+ E8 v" {! E. B6 z1 U8 Z2 ^  {  }* y. q+ I, ~
   SPK = 1;3 S! e% Y+ _6 V' _9 K. z3 L
               delayus();  //高电平; J2 g2 p, u. U; ^) z
                        delayus(); & G9 `* U  ^' `& A5 k3 P4 S
                        / E: s/ t" I# @4 n+ _
   SPK = 0;
. q/ m4 l$ Z: t- L, e                delayus();  //低电平
! B6 W* ^; q* V4 u5 q2 i                         delayus(); ) e7 Z5 h+ Y2 ]" @; B
                        
% e- K- X  r7 j6 T  {   j--;
7 d( k; `6 Z& T/ I+ p! w, N8 ^                 }
& O9 v# D! O  M) j7 t1 N     
5 r! f7 a: W3 m}
; M- S" M; F+ Z$ @, X- |$ R

该用户从未签到

2#
 楼主| 发表于 2019-4-25 11:11 | 只看该作者
这段程序本来是我调用蜂鸣器响的函数,但是一旦调用,进入蜂鸣器的函数,就进入死循环再也出不来。已经检查过无源蜂鸣器可以发出不同频率的声音

该用户从未签到

3#
发表于 2019-4-25 11:18 | 只看该作者
看你这程序,不知道是让它响一声就停了,还是连续响60下,就停。。还是让它一直响下去。。。。延时长一点,声音就是一声一声的。。。

点评

是想让他j=60循环完了就不再想。现在就是程序烧上,就一直响个不停。是不是单片机把这个主函数运行完会重新运行啊。所以就一直响  详情 回复 发表于 2019-4-25 11:22

该用户从未签到

4#
 楼主| 发表于 2019-4-25 11:22 | 只看该作者
helendcany 发表于 2019-4-25 11:18
6 z3 r7 h$ v4 C0 T9 \% U+ ]) K2 U看你这程序,不知道是让它响一声就停了,还是连续响60下,就停。。还是让它一直响下去。。。。延时长一点, ...
9 F9 Y* V. A) m- ~/ ~- |
是想让他j=60循环完了就不再想。现在就是程序烧上,就一直响个不停。是不是单片机把这个主函数运行完会重新运行啊。所以就一直响
8 L2 `# h- D1 m

点评

你改成for循环试试  详情 回复 发表于 2019-4-25 11:30

该用户从未签到

5#
发表于 2019-4-25 11:26 | 只看该作者
你的延时比较短  且在死循环中出不来   在一直循环    所以一直再响

点评

能不能解释一下怎么就死循环了。j不断减减,满足条件不就跳出来了吗  详情 回复 发表于 2019-4-25 11:37

该用户从未签到

6#
发表于 2019-4-25 11:30 | 只看该作者
十一月 发表于 2019-4-25 11:22% `; R  H3 M4 P' r2 x
是想让他j=60循环完了就不再想。现在就是程序烧上,就一直响个不停。是不是单片机把这个主函数运行完会重 ...
3 A( @, r+ [" h% m  m
你改成for循环试试
7 n/ \2 }, L9 U8 l

点评

我去试试,谢谢  详情 回复 发表于 2019-4-25 11:37

该用户从未签到

7#
 楼主| 发表于 2019-4-25 11:37 | 只看该作者
relchhiclty 发表于 2019-4-25 11:26
  V2 B3 n& }: J+ S你的延时比较短  且在死循环中出不来   在一直循环    所以一直再响

0 t& I  X: T/ G6 H% }" i能不能解释一下怎么就死循环了。j不断减减,满足条件不就跳出来了吗
/ c' g7 J& F, e; R$ J6 P

点评

while(j>0)这个是一直满足条件的 所以一直在while中循环  详情 回复 发表于 2019-4-25 11:45

该用户从未签到

8#
 楼主| 发表于 2019-4-25 11:37 | 只看该作者
helendcany 发表于 2019-4-25 11:30
" @5 `7 p- L) C  s- Z1 R, q你改成for循环试试

" x3 D* e$ Z% z/ ^, `3 p1 {我去试试,谢谢2 h8 Z8 G" I7 ?+ c9 v5 d) ]9 @

该用户从未签到

9#
发表于 2019-4-25 11:45 | 只看该作者
十一月 发表于 2019-4-25 11:37# w2 ]2 w) Q( k+ x8 d- T; `' Z
能不能解释一下怎么就死循环了。j不断减减,满足条件不就跳出来了吗

, R6 X0 R4 M* D( `while(j>0)这个是一直满足条件的   所以一直在while中循环
/ Q" @) g! L" O- q" g4 i$ \

该用户从未签到

10#
 楼主| 发表于 2019-4-25 13:07 | 只看该作者
谢谢各位的答复

该用户从未签到

11#
发表于 2019-4-28 21:11 | 只看该作者
j--;不会一直循环
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-24 01:32 , Processed in 0.125000 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表