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

51简单的蜂鸣器驱动

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51简单的蜂鸣器驱动, H: I/ B( i) Q5 b+ J0 z9 e1 z

3 z3 T4 ]% F( V& D& O; A- G

3 x! W% Q% q* X/*
) b9 A% }( X5 [* O( n  S" Q- U, M*******************************************************************************1 T1 {( ^9 S! x
*                     《手把手教你学51单片机(C语言版)》8 d$ I5 K! e+ `$ M* Q" d
*                    配套 KST-51 单片机开发板 示例源代码: c; b/ k# p) J" _7 {+ O2 e$ @
*
! W. j6 P& f1 o3 a7 b- l8 |& S*         (c) 版权所有 2014 金沙滩工作室/清华大学出版社 保留所有权利
5 b- G# J5 b3 I$ n8 \+ Z*; D" D& B, k. A1 |5 K, Y! r
* 文件名:main.c
# Y0 q, f& w8 D+ K9 ~2 N+ m( J* 描  述:第9章 蜂鸣器驱动的基础示例
) r  v" @1 g  K4 D  W, _* 版本号:v1.0.0
! ^: B' a3 Q1 l- I# J6 ?* 备  注:详情见第9章9.4节3 H# d) V! l1 F6 l; K
*******************************************************************************1 y4 C& C9 B2 t) v4 S
*/
, C" ~- X( ]  o. ^* X2 e3 {5 n: l) k/ Y2 B* H' z
#include <reg52.h>2 P2 ^6 s, ]4 X: `6 s

7 }) c% \0 v  Csbit BUZZ = P1^6;  //蜂鸣器控制引脚7 v' \) ^# z6 m! r* ?
unsigned char T0RH = 0;  //T0重载值的高字节
3 I6 U0 c* R8 y7 I3 Nunsigned char T0RL = 0;  //T0重载值的低字节5 E! d3 J3 C) o3 R8 A3 f0 D: Q5 x
) K- I( F/ I% O2 C: X
void OpenBuzz(unsigned int frequ);" E7 K" ^, {5 {0 H* I
void StopBuzz();
$ |/ H* y; `3 L3 [: j2 y+ r% U4 V. ?+ I% Y
void main()0 }* H* C7 \( r/ R& s
{0 z1 _; @" i( B3 `! B) e3 Y
    unsigned int i;& d, Z: v0 M) A( ^% x& t

8 l+ t# V. T/ j; B0 X. ]5 J8 [    TMOD = 0x01;  //配置T0工作在模式1,但先不启动
2 |2 t- P. ?( \    EA = 1;       //使能全局中断
- y! b% K6 O/ k. @0 Q* c! e  f/ q) E5 u% @* }6 H
    while (1)3 b* ?" c  b, H$ H, M4 a& Z& R% c
    {. o% D1 w6 Y' d5 s
        OpenBuzz(4000);          //以4KHz的频率启动蜂鸣器6 A+ m1 D$ e3 q
        for (i=0; i<40000; i++);
( J7 T- [! J/ A        StopBuzz();              //停止蜂鸣器' _) k' h! B0 G1 K
        for (i=0; i<40000; i++);' `0 h' j- O/ I6 c% q. x
        OpenBuzz(1000);          //以1KHz的频率启动蜂鸣器
3 ]5 Y8 r( @! P        for (i=0; i<40000; i++);3 u! v2 H  g! F" ]3 H$ ?
        StopBuzz();              //停止蜂鸣器
- s: e9 A4 S* Y% ?' c( |        for (i=0; i<40000; i++);( X# P3 q" |) q% ~$ `$ `# M
    }' e$ W$ z" p; w" Z+ P- @$ z6 C
}. ~  g6 K" L0 f2 |: m' B1 `
/* 蜂鸣器启动函数,frequ-工作频率 *// U' z& l. _* z4 f, u- H( s
void OpenBuzz(unsigned int frequ)& @. Q4 i0 E4 @+ n
{8 c# W1 J6 H" s2 [0 z$ K
    unsigned int reload;    //计算所需的定时器重载值! |7 t# @9 ?8 U  \4 j1 Z
/ [& [6 e* Z5 c! Z3 R/ G
    reload = 65536 - (11059200/12)/(frequ*2);  //由给定频率计算定时器重载值
# M  [; N* u+ ]" ~5 K3 M$ P    T0RH = (unsigned char)(reload >> 8);  //16位重载值分解为高低两个字节7 ?) Z; p# U$ r3 \$ _9 K
    T0RL = (unsigned char)reload;
6 n6 k4 d" y& S0 E7 M. P: z    TH0  = 0xFF;  //设定一个接近溢出的初值,以使定时器马上投入工作9 b8 y7 o. B1 k6 i0 H* i
    TL0  = 0xFE;1 @) \7 }9 a6 F' r# ?6 X, Y. X
    ET0  = 1;     //使能T0中断
! _/ z9 `' n! X( x; X. r) g    TR0  = 1;     //启动T0. M8 }4 W( J5 L: Y4 h
}7 S& k: B8 d) c$ J* x( g
/* 蜂鸣器停止函数 */1 e5 y- H. z; g& t3 o' s
void StopBuzz(), I0 ^  e- W) ]& {: I1 w5 N7 G9 b  i
{( @- V- |+ d. N/ x
    ET0 = 0;   //禁用T0中断7 c% ?/ l7 E' x  X# B) h& e
    TR0 = 0;   //停止T0
) I! l) M7 p' H' K}; V. e1 o) G1 v
/* T0中断服务函数,用于控制蜂鸣器发声 */; p# G, b4 O6 t
void InterruptTimer0() interrupt 16 |) {: [9 {! X4 {& f) U. ]" i
{
7 ~  g2 z, g( r' g( @! K( P2 l    TH0 = T0RH;   //重新加载重载值
% O4 a0 n0 |* I0 I3 j    TL0 = T0RL;
, e/ _9 ]  V: ~% _" g1 Q1 U    BUZZ = ~BUZZ; //反转蜂鸣器控制电平
% k' T8 t. g$ v}

, v1 p/ V, w7 H$ G- p2 W, B
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 19:18 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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