更多单片机学习笔记:
单片机学习笔记 1. 点亮一个LED灯
单片机学习笔记 2. LED灯闪烁
单片机学习笔记 3. LED灯流水灯
目录
[1-1 蜂鸣器工作原理](#1-1 蜂鸣器工作原理)
[1-2 三极管工作原理](#1-2 三极管工作原理)
[1-3 蜂鸣器原理图](#1-3 蜂鸣器原理图)
0、实现的功能
使蜂鸣器滴~滴~滴~
1、Keil工程
1-1 蜂鸣器工作原理
蜂鸣器有压电式蜂鸣器(用的少,生日贺卡上用的多)和电磁式蜂鸣器(电饭煲、洗衣机用的多)。基本上是导体上绕线圈,线圈上通电/断电使导体产生磁场,把导体上的磁铁片吸附下来
1-2 三极管工作原理
此处主要做开关应用,用PNP型。对于NPN型,若Ibe>1mA / Ube>0.7V 即可导通CE
1-3 蜂鸣器原理图
102电阻为1000Ω。P23默认高电平,外接上拉电阻到电源,所以此时Ub=Ue=5V,EC截止;给P23低电平时,Ub=0V,管子导通,蜂鸣器工作
不能直接蜂鸣器接P23,因为单片机不是功率器件,适合做控制用,不适合驱动。P23外接上拉电阻到电源,所以电流很微弱,不具备驱动设备的能力。
2、代码实现
把上一节的代码复制进来,加上蜂鸣器P23口的位定义,并在主函数中将其取反 ,再延时100ms,即可实现滴滴滴滴的效果
cpp
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep = P2^3; //蜂鸣器的位定义
uchar temp;
void delay(uint z)
{
uint x;
uint y;
for(x = z; x > 0; x--)
for(y = 114; y > 0; y--);
}
void main()
{
temp = 0xfe;
P1 = temp;
delay(100);
while(1)
{
temp = _crol_(temp, 1);
P1 = temp;
beep = ~beep; //按位取反,蜂鸣器发声
delay(100); //延时100ms,发声100ms后再不发声,实现滴滴滴滴的效果
}
}
如果要实现蜂鸣器一直滴~~~的效果,直接beep = 0;
效果展示: