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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
//定时器每125uS调用Buz_Output()函数一次,实现无源蜂鸣器4KHZ驱动
2 R* U6 m0 w/ B0 s0 p//功能参数说明:rbeep=0,蜂鸣器不响。rbeep=1,响1声。rbeep=3,响2声。+ c6 o  K. p; v
#define BUZ_OUT_TIME         800        /125uS*800=100mS
. J1 P, {: d8 A1 i5 b; Z: q#define BUZ_STOP_TIME         800        /125uS*800=100mS& K( J& {9 f% j" p( P9 R, z
unsigned char rbeep;
5 b4 ]( f2 j( ~# \2 e& {; p% Wunsigned int temp;
3 ^: z6 X* D; e4 C; s# T. X7 J! gvoid Buz_Output(void)
: ?$ T- C6 Q) y{5 M) F! _3 G3 M1 e: {
        switch (rbeep)' b( Y+ _( G- K
        {
+ U* T; i; d. a+ `9 G                case 0:
+ f7 [: t  _% X7 @& t                        BUZ_GPIO = 0;- b- v1 T0 S$ V! x, V
                        break;7 E5 j1 ~% F2 j* f8 V0 i
//响100mS****************************************************
6 u* h: c( \7 P; W" U$ R) B                case 1:6 {: N7 \4 s7 s5 m$ [2 f% F
                        BUZ_GPIO = ~BUZ_GPIO;1 I0 g; v  \- G, J; U
                        temp ++;
. k6 i2 R2 [. P4 _                        if (temp > BUZ_OUT_TIME)  //125uS*800=100mS
9 W3 r* T) N1 A$ S: s, i                        {( K1 O4 r) e2 l! ^; |
                                temp  = 0;# p$ b* n8 M2 w% T# t! p- _: U% D
                                rbeep = 0;                                
1 q- E" U0 M2 @                        }) ?3 p) s3 d- E8 C
                        break;
* K, u8 V* l) s* i. B7 S//不响100mS****************************************************                        
, m) V' e# F( Q  r9 b' @4 X                case 2:0 q. f: C1 ~) d: I1 g) c. b$ H
                        BUZ_GPIO = 1;& M! A0 w* g4 {4 V7 D7 m1 @2 j
                        temp ++;/ D/ z; R0 K0 O) B1 \0 P( `
                        if (temp > BUZ_STOP_TIME)
  T# c4 }8 @9 {& C6 W) t                        {
: H& I3 O, Z: k% p& _                                temp  = 0;5 H2 s# y  u7 B$ |# H# V
                                rbeep = 1;                                
# _  B$ l" A1 w1 |$ t! `                        }
- ]! W$ H; E# Z3 O                        break;
1 t$ j. p6 v/ }5 y- }$ u) d2 c//响100mS****************************************************                        ! K6 D& C5 L+ N6 }. _) r2 T  O
                case 3:* `3 t- U' v7 Y* A; E; M3 b
                        BUZ_GPIO = ~BUZ_GPIO;- A! T$ E& e0 o5 `
                        temp ++;
: E  s# w) E5 r4 ?$ n4 e) L( _0 }+ R                        if (temp > BUZ_OUT_TIME)
, n3 T" Q# N6 Z1 q4 p                        {
" r9 F* {/ q- ^. B! b6 L                                temp = 0;
7 B0 x; C! u4 t( ]2 s                                rbeep = 2;
; W, P7 [$ C% s                        }" X: |' X: h( x1 c
                        break;               
, s1 ~5 @3 i8 X: k9 \9 s                default:break;
0 S4 R0 K& Q1 |, a6 p- L9 z1 B; p; V        }) z: t! u- Y" ~4 K
}, Y, O6 E% r9 w7 c( }
( f' q4 y# g" z% v  t4 B9 V8 A

该用户从未签到

2#
发表于 2022-6-27 13:46 | 只看该作者
你这驱动还不够完善。只实现断续响1声,断续响2声,立刻停3种功能。0 N% ^& O  D1 T/ y. |7 Z

' u0 \0 ~! e8 L: L# u8 ]# T" w0 ]我也实现过4KHZ无源蜂鸣器驱动,代码框架和你一样,代码行数约为你的一半,但能实现下列功能。
% V6 E. J* \* b7 j1.立刻停(rbeep=0;)
% }6 a; @4 \5 p. L# S& ^2.断续响n声(rbeep=n;),n取值1~253
1 m, Q" I! C! f+ M& ~9 p3.永久断续响(rbeep=254;)
) o7 X; i. T5 o& b/ t  S4.永久连续响(rbeep=255;rbeep1=0;)
+ Q7 J: e; z+ _: d5.连续响(n*100)毫秒(rbeep=255;rbeep1=n;)1 d  F. E- K; C! W# ~- `) Y
( I4 U7 `" p  X1 s3 I" ^1 I
按我提到的修改代码,我相信楼主也能做到。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-29 01:34 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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