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

51简单的蜂鸣器驱动

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51简单的蜂鸣器驱动
7 O1 i. q7 H! k. ^9 t: _! j! V2 q7 L/ o4 G: q
3 \$ c7 n" J6 B3 I9 J" l( U6 E
/*$ ^! M& V  {5 i( [9 a
*******************************************************************************
: s+ x* t, e/ g' _+ r*                     《手把手教你学51单片机(C语言版)》+ b+ T7 o6 x5 T& p% o0 h
*                    配套 KST-51 单片机开发板 示例源代码
5 ?8 i& q6 Z' ~* P- u5 {*
: |$ t3 V+ h; N4 [* ?9 m*         (c) 版权所有 2014 金沙滩工作室/清华大学出版社 保留所有权利0 l9 b1 T- R6 t8 [
*
' q; C% J$ z& ^) w2 j* 文件名:main.c
2 a4 u* V% j1 o9 n4 E9 P/ q8 i* 描  述:第9章 蜂鸣器驱动的基础示例
+ g" J& B" V, E, F! A/ |* 版本号:v1.0.03 D* d* A) _4 l' ?
* 备  注:详情见第9章9.4节- f% S0 [" G* ~6 i' K! r$ z
*******************************************************************************. [& \7 a/ C- K0 n
*/
; T- s$ K' ?* _' V: G, E7 n/ W' N% q% g
# Y3 G( e, P: F2 b#include <reg52.h>5 v7 H# I1 v1 A; i: {

* X4 D( o5 M- R' \3 X! w( Psbit BUZZ = P1^6;  //蜂鸣器控制引脚
. v& f# O% q3 H" J$ L: g1 q  ?' {unsigned char T0RH = 0;  //T0重载值的高字节
, `& l7 D$ W  S4 W5 ounsigned char T0RL = 0;  //T0重载值的低字节
! G3 U5 U* Y5 O: n
3 c3 K! j7 m& K6 i/ Y) Xvoid OpenBuzz(unsigned int frequ);
4 N% `! d/ R! U2 g$ g! x, Gvoid StopBuzz();
4 ?1 ~, Y0 \: V% f! ]3 F! j
0 f; R0 Q8 ^5 e8 P7 e4 ?/ Avoid main()
* l# C+ G  m: `! I& K3 n( \7 l{
4 ^5 f1 ?3 t, K: l4 c2 ~- k    unsigned int i;
. {) _1 S7 K; N9 w- p) z2 z* j' l# J/ E7 k; U& P! s  K
    TMOD = 0x01;  //配置T0工作在模式1,但先不启动
* H& x; \. G0 d    EA = 1;       //使能全局中断1 J2 o6 u  ]* o6 Z! e" A

: k& I4 E! n$ n6 ?/ [3 `    while (1)" b  [- n7 d- J3 `
    {
' R3 k% V. b# z; ]7 C9 V        OpenBuzz(4000);          //以4KHz的频率启动蜂鸣器
) b. W5 L: `- r1 U! V+ z2 K        for (i=0; i<40000; i++);/ z& T8 G" {) J, z3 T1 f
        StopBuzz();              //停止蜂鸣器
% t  j* J5 P" ^        for (i=0; i<40000; i++);
  N+ f# a+ l5 L6 F/ O        OpenBuzz(1000);          //以1KHz的频率启动蜂鸣器
! x3 w& H  j% f6 j" Q" @        for (i=0; i<40000; i++);
% x2 ?" K6 u5 c        StopBuzz();              //停止蜂鸣器7 ^. z2 l' S& `
        for (i=0; i<40000; i++);
8 P+ j  t6 H1 l- [    }; f, u) s& u, l+ }
}
% e  a5 S* z* Q1 i  f/* 蜂鸣器启动函数,frequ-工作频率 */
! Z4 e" `8 o, Z1 mvoid OpenBuzz(unsigned int frequ)0 D5 W+ O4 M9 M' V# n! d
{
9 K& u1 ]1 ^  x2 j# r' p    unsigned int reload;    //计算所需的定时器重载值
# I, }% b+ p& B/ U
6 ~0 B3 L" r* b6 t0 f) ?0 `6 K& y3 E    reload = 65536 - (11059200/12)/(frequ*2);  //由给定频率计算定时器重载值
* `3 S7 U, s  J: g# m0 C; H* {    T0RH = (unsigned char)(reload >> 8);  //16位重载值分解为高低两个字节7 m: `6 ?& }! z8 _# r
    T0RL = (unsigned char)reload;
7 I. F. |8 t. K5 x6 d0 ]    TH0  = 0xFF;  //设定一个接近溢出的初值,以使定时器马上投入工作( q) T2 w5 @2 G* t$ I6 l# R
    TL0  = 0xFE;5 ?9 x( e0 {" K  a( o6 Q) g
    ET0  = 1;     //使能T0中断  |4 r. d  R* W; F6 e2 @6 L' r% R
    TR0  = 1;     //启动T0
2 ?$ s% @$ C- r- R$ q}6 W9 K0 U1 Y/ A8 f
/* 蜂鸣器停止函数 */
7 {6 D' v5 y# Q$ G6 h  j' Gvoid StopBuzz()" d$ u! S3 [  c% }7 p0 e
{9 R0 B2 x2 m. z- A; y9 I* ~' a
    ET0 = 0;   //禁用T0中断
9 k7 @8 R: [8 I6 |) C8 s* D& @    TR0 = 0;   //停止T0
; k- i2 H2 n  B  F8 t}
5 T; @& v7 s5 I& r; K; }/* T0中断服务函数,用于控制蜂鸣器发声 */
' b1 L0 c- V9 l% {3 C4 Xvoid InterruptTimer0() interrupt 1
- L3 c/ u9 D; u) E{9 C9 }9 k9 ~7 M
    TH0 = T0RH;   //重新加载重载值% Z8 s% m8 U' r! Y7 f  O: p
    TL0 = T0RL;
5 X4 l' m" ]) @) T    BUZZ = ~BUZZ; //反转蜂鸣器控制电平
/ n8 C) k: p- B7 I" N2 J8 |}

( o# K. g+ U6 k3 |* e
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-11 22:15 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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