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

基于C语言switch-case结构:4KHZ无源蜂鸣器单片机驱动源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-27 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
//定时器每125uS调用Buz_Output()函数一次,实现无源蜂鸣器4KHZ驱动5 i# }4 K8 i( J
//功能参数说明:rbeep=0,蜂鸣器不响。rbeep=1,响1声。rbeep=3,响2声。8 A$ U, M) X/ _5 b2 u1 V# q9 p0 K
#define BUZ_OUT_TIME         800        /125uS*800=100mS
! v* K6 P9 g. Q, B/ D; i4 z3 o#define BUZ_STOP_TIME         800        /125uS*800=100mS% B# ?3 m1 {/ R' ]0 g
unsigned char rbeep;
! Q: v: d% A0 i+ `0 Nunsigned int temp;
/ G4 T8 q/ }2 x$ e  P7 Lvoid Buz_Output(void)
3 v. W$ G/ [/ k* F{0 v+ Z+ v4 F+ h7 z
        switch (rbeep)
9 M& a# O/ V( Y. j  a2 u3 K7 ?6 _- N        {
! c; _" p0 u- B+ i                case 0:2 v- J! N/ P1 N
                        BUZ_GPIO = 0;$ P% F2 S. o# x. j9 |1 m" s: `( v5 s
                        break;% L$ Y; M) C  r, B! S9 l5 @
//响100mS****************************************************
. t/ w# M; k. U0 C* r                case 1:$ X  @- k2 i; z$ S  d6 u- ~) [
                        BUZ_GPIO = ~BUZ_GPIO;
2 c  Y4 u* }6 t                        temp ++;
6 b$ p% T8 Z) Y( e* ^6 n                        if (temp > BUZ_OUT_TIME)  //125uS*800=100mS
1 c9 l- F+ A  |6 \  r2 e                        {
: l- d$ e! {. r+ K/ ^                                temp  = 0;
4 s; C4 j. L0 H  I8 q( V$ K                                rbeep = 0;                                
1 ^  Z$ B+ a; \# A' @* |                        }/ C4 ]% G; F  P8 e
                        break;: h$ M$ o# N2 x5 C& s7 C- d
//不响100mS****************************************************                        7 ^6 |" A- t# y8 X$ h  [7 ]  R/ _; i& \  k
                case 2:
1 P; M5 {( H" S5 J( w                        BUZ_GPIO = 1;
, ~7 e4 T/ @0 {& T( I% P  `+ a! w                        temp ++;
) b3 N( ]  l+ r: g  d8 w                        if (temp > BUZ_STOP_TIME)
! ]" D' ]6 Y+ j, G                        {0 ?3 K9 l" V! l3 Z) B
                                temp  = 0;
9 s; |9 {6 h' }, X, _( O8 V                                rbeep = 1;                                
" c+ R- u/ s" D" C& \: _% F" T                        }
$ e. x, m. \3 h* b+ m4 X                        break;
: W% F/ p4 _: i! L# z//响100mS****************************************************                        1 R: i, i- g/ G% n7 K
                case 3:
2 c! s; b! T. H, O2 k7 D                        BUZ_GPIO = ~BUZ_GPIO;
0 I# _& I0 o8 f2 I8 x. \                        temp ++;
! @$ p* w8 m2 p: b7 |7 A" L  U6 @                        if (temp > BUZ_OUT_TIME). Z% W; T7 _9 d: \3 i
                        {
( u0 L. P% h* x                                temp = 0;
8 `# T/ w: q7 w+ {' r, o& Y( w                                rbeep = 2;
# C. w/ \- ?5 o4 ?' C                        }# P, s9 ?8 l9 a- b" a$ o
                        break;               
# ^+ O" l8 |0 ~2 Q2 n6 |                default:break;1 t' _+ R* N9 f# C/ z7 k# o
        }( N0 i$ T# a+ p! T; j' W( v7 R
}
' F& V0 a! @( h2 @0 d" |) \
/ e1 n% o% A' i- [" s

该用户从未签到

2#
发表于 2022-6-27 13:46 | 只看该作者
你这驱动还不够完善。只实现断续响1声,断续响2声,立刻停3种功能。
! M* O; ^) G( _  o
3 w, ~0 H8 H3 D- {# y' l我也实现过4KHZ无源蜂鸣器驱动,代码框架和你一样,代码行数约为你的一半,但能实现下列功能。: }% s! k. h6 f" }# n
1.立刻停(rbeep=0;)6 m" \0 v$ |- C$ C9 s5 D8 V
2.断续响n声(rbeep=n;),n取值1~253
$ T' [% N2 g- B, p: n* x3.永久断续响(rbeep=254;)
, O" Z8 P/ o4 D: ]% T4.永久连续响(rbeep=255;rbeep1=0;)* Q5 d& D1 c1 o5 j# N
5.连续响(n*100)毫秒(rbeep=255;rbeep1=n;)  k# @  A- E+ |( A* b, Q

- n9 T: \3 X  P2 ^按我提到的修改代码,我相信楼主也能做到。

该用户从未签到

3#
发表于 2022-6-27 15:59 | 只看该作者
讲解得挺细的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-4 13:34 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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