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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
//定时器每125uS调用Buz_Output()函数一次,实现无源蜂鸣器4KHZ驱动
7 t. }" M# ?" \8 O2 ~$ d! t# s//功能参数说明:rbeep=0,蜂鸣器不响。rbeep=1,响1声。rbeep=3,响2声。$ g4 F' B% `, E# M0 r
#define BUZ_OUT_TIME         800        /125uS*800=100mS& [( [4 E" ]* |$ T
#define BUZ_STOP_TIME         800        /125uS*800=100mS
* B8 R5 @  L  p# @: @; w% i8 S" {unsigned char rbeep;
9 Q% h" b  M" p' yunsigned int temp;4 e* N) O; g  }- [/ z# t" _
void Buz_Output(void)& \/ o' q$ b# g# A8 e3 n% D7 K" L
{4 i) ~" X4 K9 O: a
        switch (rbeep)
" J* U0 j; m0 ?2 [        {/ q( f8 {/ n* o- z; e: q
                case 0:
' N/ n! J4 ]; s. N                        BUZ_GPIO = 0;+ ^) U( M2 u$ `$ u; @0 s
                        break;2 S2 I2 l* o+ x9 I# \# t
//响100mS****************************************************9 G; Y  Q: g1 H; w: g  t5 f! h' D& q2 T
                case 1:
8 b5 N8 v8 t# N0 ~- }9 `7 P1 t( Y                        BUZ_GPIO = ~BUZ_GPIO;
9 S) H6 ^4 @. G, S! s6 c0 K                        temp ++;" ]$ p5 m$ b& [4 n
                        if (temp > BUZ_OUT_TIME)  //125uS*800=100mS
0 ~) T+ r% j# E- x' h- s) H& `2 {" ^                        {
9 K7 l/ @* C0 T+ _. r* q. s                                temp  = 0;0 W: C3 _/ ~& j9 S! L
                                rbeep = 0;                                
. k- _6 k1 }: \                        }) \7 p& V; J/ m0 k; s! y+ P
                        break;
3 \0 Z# L  o6 `//不响100mS****************************************************                        
, B& [8 A0 n2 U' L                case 2:( C0 Q5 N4 N' k$ n$ h
                        BUZ_GPIO = 1;
% V, R0 W  y- V: v5 I                        temp ++;7 V4 b) I6 }) Q) c- x, y* E
                        if (temp > BUZ_STOP_TIME)
+ r  @2 u6 L" ]                        {
0 L' P0 a# e. }/ p' Q  T                                temp  = 0;
% Y9 v, Q% A2 @3 R4 w  @6 G7 t                                rbeep = 1;                                % P" e6 T8 b( @/ B) }( j
                        }
& Y" }7 K9 E' ]: C8 y; g                        break;6 G6 m8 e: h( C7 O
//响100mS****************************************************                        1 a: M6 N+ ]9 }
                case 3:
6 x8 g6 |0 C! D                        BUZ_GPIO = ~BUZ_GPIO;1 y% M& m2 R' O3 A9 s
                        temp ++;7 M" ?! V1 o8 t8 R
                        if (temp > BUZ_OUT_TIME)" {* }6 A4 _6 S: B. w2 F, y" ]
                        {
/ N% o- H% B. ^% d8 |5 X! R) u3 p                                temp = 0;
3 E+ S2 l1 ?% d! z3 ~1 ]# _                                rbeep = 2;
$ {! e4 X5 R4 U7 n/ J" `                        }6 q* J% z3 Z  V( Q; j
                        break;                ' ]+ [. U- O) r9 o" w
                default:break;* l; B; r6 a+ M7 L
        }) n. n9 I0 O, U  M! E
}/ f2 h7 S9 b3 d
0 o8 V8 J# Y0 B/ t. g3 J5 N

该用户从未签到

2#
发表于 2022-6-27 13:46 | 只看该作者
你这驱动还不够完善。只实现断续响1声,断续响2声,立刻停3种功能。4 E5 C; S6 j  ]* A+ B+ a

9 \% ^1 b3 y+ z4 J9 N, b; r2 n我也实现过4KHZ无源蜂鸣器驱动,代码框架和你一样,代码行数约为你的一半,但能实现下列功能。
1 l5 l8 P$ W! ]- x1.立刻停(rbeep=0;)% g9 A! F; {$ g# z5 y" j# b
2.断续响n声(rbeep=n;),n取值1~253* [" `% I4 J8 a0 S, r- s  e' l  t
3.永久断续响(rbeep=254;)
: n8 ~( x; u, X4 I, U- ]* q4.永久连续响(rbeep=255;rbeep1=0;)
8 @: e2 v! O1 A* c5.连续响(n*100)毫秒(rbeep=255;rbeep1=n;)" p) }5 q' ?, U. |! `( o

9 K9 U/ x+ K, ~' |# ~# ?按我提到的修改代码,我相信楼主也能做到。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 05:35 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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