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

51简单的蜂鸣器驱动

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51简单的蜂鸣器驱动& P5 [, V8 }& n: s9 N
1 ~1 B8 x$ U2 I8 r. B) W1 R
' p- w$ R- F% d' ~( n* v
/*
1 U9 W- E$ g( X9 Y7 ?3 q. s4 @  H3 @*******************************************************************************
9 J  Q, ^0 r. i8 ~- R*                     《手把手教你学51单片机(C语言版)》
- n, A) @" `$ s2 l( j1 D2 R: I# e*                    配套 KST-51 单片机开发板 示例源代码
' L- q6 q7 ]% n; a+ k*' J6 M5 a2 R( ]: ^" g
*         (c) 版权所有 2014 金沙滩工作室/清华大学出版社 保留所有权利; X0 s7 Q. A: o7 E
*
. |2 G# _' Z# ]' V$ i- R* 文件名:main.c
2 M- w8 l0 q4 l: [* 描  述:第9章 蜂鸣器驱动的基础示例
, Z$ Y  ^7 z2 ^7 i2 l2 ]* 版本号:v1.0.0
& s/ s! B/ M# V5 J  g: |* 备  注:详情见第9章9.4节$ C) [" D2 q, |% q5 Z7 P
*******************************************************************************0 a/ @2 N9 z) s4 ^( [1 X* Z0 |" }: X
*/5 n# C, c/ d9 p! @/ C

- ^5 t: _- m' o6 x# e6 {#include <reg52.h>" F' A5 e8 ]# U3 _) B0 F) l1 }

  K+ y* n+ U- ?sbit BUZZ = P1^6;  //蜂鸣器控制引脚
8 D2 a) K; n$ r1 munsigned char T0RH = 0;  //T0重载值的高字节7 B1 `- w6 P: o3 ~+ o
unsigned char T0RL = 0;  //T0重载值的低字节
1 v7 O( l7 x7 U" Z- J' ]: g) f" H3 A, U
void OpenBuzz(unsigned int frequ);- W1 c) i( ^1 W, I) U" l' m
void StopBuzz();( M5 f" d% i  D6 M/ T* J! A1 O: h1 q
5 `) g/ s/ `6 B7 v! R
void main()" L, t' G. C6 p& n- u9 b* _; t! O7 k
{
  U" Y$ I; Q& \. f  }; j6 F! _8 q    unsigned int i;
0 }; v1 M' c0 q% V
8 i% X1 S% ^. Z. }) K% X    TMOD = 0x01;  //配置T0工作在模式1,但先不启动
9 v) Q# C. O4 c' P0 k, L    EA = 1;       //使能全局中断9 J% J9 [& t& F

( P1 h" k9 s& P! n8 x$ l    while (1); `' U& ~4 }# K& G6 x# a4 W# n* ]
    {
; M8 a* A$ g& ?1 e- o6 f        OpenBuzz(4000);          //以4KHz的频率启动蜂鸣器
# K/ R: f4 w5 b, |        for (i=0; i<40000; i++);( |0 F/ D; d3 ^% B4 u0 O2 b1 a
        StopBuzz();              //停止蜂鸣器
! T$ a7 X& \) G. i% z; a        for (i=0; i<40000; i++);
! ?/ N: t: o2 }        OpenBuzz(1000);          //以1KHz的频率启动蜂鸣器% I0 `8 |- @/ Q% J. l. Z' y5 Q
        for (i=0; i<40000; i++);( w; A+ E, \3 s% K
        StopBuzz();              //停止蜂鸣器' R( F9 {" w& @' k$ ^0 |
        for (i=0; i<40000; i++);
1 y: u$ l# \! _6 i8 x4 ]    }
, P" q+ |( E! g& _& N}
5 v5 n$ l* H* N3 [! c( Z# T/* 蜂鸣器启动函数,frequ-工作频率 */3 F: w% v  E/ ]( y( c
void OpenBuzz(unsigned int frequ)# t0 M5 l' m3 K, l" F  t7 x! O
{+ u3 v: j; f  Q$ A6 [; B7 w" v
    unsigned int reload;    //计算所需的定时器重载值
5 c4 D! Q8 G3 [9 M  K# b2 E$ \& u# |% r* V
    reload = 65536 - (11059200/12)/(frequ*2);  //由给定频率计算定时器重载值9 E+ `  `$ O- S( I. B( Y& h) O
    T0RH = (unsigned char)(reload >> 8);  //16位重载值分解为高低两个字节
1 Z8 M  c6 y- o3 `    T0RL = (unsigned char)reload;6 N- K+ A: }/ b3 ^3 s
    TH0  = 0xFF;  //设定一个接近溢出的初值,以使定时器马上投入工作
* Y$ l, {& o. F' I    TL0  = 0xFE;2 Y4 z- h9 O) l# ]; H
    ET0  = 1;     //使能T0中断1 Z2 ]5 O. b6 q5 k8 f& ~9 U) ]
    TR0  = 1;     //启动T0% G0 u1 E, U4 H' y
}
8 V) g4 x  R  y, ?2 Z" s/* 蜂鸣器停止函数 */
9 y' d- ]% H( U; i/ e  fvoid StopBuzz()
- y! q+ S: \# @3 u4 f- A; O{' X* j4 @' h8 v% `! X4 u9 B  R
    ET0 = 0;   //禁用T0中断0 q. Z$ f! J+ i4 u% ~: w
    TR0 = 0;   //停止T05 F- }5 `& L& S$ G+ a5 I
}
% A# ]0 J* ~; n7 U/* T0中断服务函数,用于控制蜂鸣器发声 */" Z* g7 q) a) e& W0 R- g
void InterruptTimer0() interrupt 16 s: j, _0 K3 V- X# a. e' U
{
% \1 y7 h& D; n$ w+ E; N    TH0 = T0RH;   //重新加载重载值/ m( T/ d0 K1 @  O
    TL0 = T0RL;- ]  f  O- @8 `, o+ A( f7 M+ O& D
    BUZZ = ~BUZZ; //反转蜂鸣器控制电平$ q' e: N! p( B; x! t1 T3 A
}

5 P+ B+ y$ Y& R# U
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-17 06:00 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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