51单片机驱动无源蜂鸣器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机驱动无源蜂鸣器
在学习过程中遇到如下例题:8 个发光管由上至下间隔1s 流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。流水灯
的程序相对我个人来说比较简单,但是蜂鸣器有些难度,正常给I/0 口一个信号,蜂鸣器既然不响,后经查证是无源蜂鸣器;无源的蜂鸣器,就要通过IO 口输出振荡信号来驱动蜂鸣器
蜂鸣器简介:蜂鸣器根据结构不同分为压电式蜂鸣器和电磁式蜂鸣器;而两种蜂鸣器又分为有源蜂鸣器和无源蜂鸣器,这里的源特指振荡源;有源蜂鸣器直接加电就可以响起,无源蜂鸣器需要我们给提供振荡源。理想的振荡源为一定频率的方波。由于系统采用了无源蜂鸣器,所以需要我们通过编程来控制I/0 口的翻转来产生一定频率的方波信号。本文采用默认频率0.5KHZ 的标准方波。可以算出周期T = 2ms 脉宽t = 1ms,因此我们可以通过简单的延时函数延时
1ms。然后控制P3.7 口的电平高低产生0.5KHZ 的方波信号;本程序只是通过
简单延时达到驱动蜂鸣器的效果。#include sbit buzzer = P1 ;void delayms(unsigned int xms)//延时函数,延时xms{unsigned int i , j;for(i = 0; i
#include#define uint unsigned int#define uchar unsigned charsbit buzzer=P1 ;sbit
D1=P1;void delay(uint z)//延时1ms{uint x,y;for(x=z;x>0;x--){for(y=0;y<114;y++){}}}
fasheng() //发声子程序{unsigned int a,x;for (a=0;a<456;a++){buzzer=!buzzer;for
(x=0;x<45;x++); //45 为蜂鸣器发声频率}}void main(){while (1){D1=0;fasheng();
D1=1;delay(200);}}tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!