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

51简单的蜂鸣器驱动

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51简单的蜂鸣器驱动; y% x  k$ h" F( D

5 i' H, a; T1 U9 e

0 M! H, V- U8 D* B4 |0 v/ {, h/*0 z% K/ u1 e  B- @! u7 X7 \0 O
*******************************************************************************
% b- a0 Q4 O3 v  Q. b*                     《手把手教你学51单片机(C语言版)》
) n- N* U  X% N6 g* l*                    配套 KST-51 单片机开发板 示例源代码3 B1 ^0 |/ }! F0 V7 Y
*
, F/ l- `& d7 S$ I% _0 }*         (c) 版权所有 2014 金沙滩工作室/清华大学出版社 保留所有权利5 [5 m% `* T2 j' z+ ~$ j0 U. z' Y7 Q
*% Q2 ?/ k' F9 k/ `
* 文件名:main.c7 m3 ^8 q- c4 C  T* G- U% u! c! y
* 描  述:第9章 蜂鸣器驱动的基础示例" x2 }* @9 L; _( E( {  {- e
* 版本号:v1.0.0& p9 s* ~! G( L- X2 ^+ e
* 备  注:详情见第9章9.4节: _; a: ^9 ?' Z. S1 ?$ |
*******************************************************************************
- @9 X" S* Z& ^*/- d5 x2 s4 l5 Z8 F6 N3 A
! \1 ~/ l+ i& S
#include <reg52.h>
2 R+ C, m' i# f4 q7 m
, ~% m, M6 `0 }( v! \; ?: r4 _" @sbit BUZZ = P1^6;  //蜂鸣器控制引脚
5 j7 d, n& g4 y) runsigned char T0RH = 0;  //T0重载值的高字节
. h+ T9 j- H! Punsigned char T0RL = 0;  //T0重载值的低字节
7 i( ^+ q' f0 M  z: @6 U; B: ]7 m/ L$ _+ s
void OpenBuzz(unsigned int frequ);
0 H: m9 P* j% T, ^5 h* Cvoid StopBuzz();
2 X! W; g9 }% [- I+ |7 l
6 s! i. r/ a$ ^  d9 Uvoid main()) y$ U, C: x# |
{& ?7 i4 T  Y3 R3 E
    unsigned int i;
0 B. m! `& E, w& Q8 A# V  l8 i  [3 Q/ G. W
    TMOD = 0x01;  //配置T0工作在模式1,但先不启动& q( ?" u/ D0 P# Y
    EA = 1;       //使能全局中断( u8 b" \8 i+ I. C( A2 O! K7 M
. S4 A1 o' {6 ?
    while (1)
/ L& T, ^% B7 O. S* R    {- @( D. R$ w0 B- G5 ?2 n
        OpenBuzz(4000);          //以4KHz的频率启动蜂鸣器
  G6 }8 }( n& Y! @5 H        for (i=0; i<40000; i++);3 g3 n' ~. d3 V, P& M% X6 |: }
        StopBuzz();              //停止蜂鸣器
8 G: `7 t; X6 ~+ Q$ ~( t: n  v6 a        for (i=0; i<40000; i++);3 F1 p7 `; q7 ^  e7 o: }* w
        OpenBuzz(1000);          //以1KHz的频率启动蜂鸣器
& I. l; k4 R# q6 p1 B: x" d9 N  P        for (i=0; i<40000; i++);
) J! N& S! o% m% v. r3 ~5 Q, }        StopBuzz();              //停止蜂鸣器
" e$ h# u! }& k. b, i        for (i=0; i<40000; i++);
: h8 R2 C+ H9 p1 Y' d; i: Y. A    }7 W6 Z- O. Q2 u0 M9 a0 U
}4 X: {: G) G0 k; w+ y2 h
/* 蜂鸣器启动函数,frequ-工作频率 */
6 F0 Y' _3 q9 u# o) t) ?4 qvoid OpenBuzz(unsigned int frequ)- `0 ^5 L* t7 T
{
* H: u$ ?; V  d+ o- u    unsigned int reload;    //计算所需的定时器重载值1 J& @  a$ f- r& O" ]
  }, ]' L7 u& E6 }0 R; `. b1 c
    reload = 65536 - (11059200/12)/(frequ*2);  //由给定频率计算定时器重载值5 K2 U  g+ L2 `- X: D; s4 ?
    T0RH = (unsigned char)(reload >> 8);  //16位重载值分解为高低两个字节7 G# t, ]6 L  C( q8 ?/ y
    T0RL = (unsigned char)reload;$ R' w/ D0 ~' L! a
    TH0  = 0xFF;  //设定一个接近溢出的初值,以使定时器马上投入工作" H- N7 K1 ?5 m/ D  c- L
    TL0  = 0xFE;
$ p4 P5 Y& [" }: E3 R    ET0  = 1;     //使能T0中断. w9 U! ^% j5 O' j; E& N0 S4 A
    TR0  = 1;     //启动T0# u) X( F  j3 e9 ]- x9 c$ c4 l8 ]
}: L* n6 j6 P" N5 C* k& U8 V( J
/* 蜂鸣器停止函数 */
; z, ~. m" C$ E* Xvoid StopBuzz()% H: F' C+ Z1 E3 Y
{
$ a$ K# s: H' {9 Y9 C2 n    ET0 = 0;   //禁用T0中断* ~$ ^8 P9 M* Y7 ]
    TR0 = 0;   //停止T0  x2 @  h! q! L; M: W1 O/ d
}
* c, Y1 J/ g' @" f! Y3 |/* T0中断服务函数,用于控制蜂鸣器发声 */. H: T; S+ Y5 ^' e0 g7 e
void InterruptTimer0() interrupt 1
) H7 ?3 s5 e5 h' n0 b# G0 J{5 e, z8 z2 `" E' m
    TH0 = T0RH;   //重新加载重载值8 B" q0 |+ O, r- u" s- k: i# @
    TL0 = T0RL;1 F; u& V, m" G9 }& M; b$ @* a5 D
    BUZZ = ~BUZZ; //反转蜂鸣器控制电平
6 ?! V2 e' d! F" G. H}

7 S5 `. f2 ^9 P" }6 y0 L: E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 13:14 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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