历史上的今天
今天是:2025年10月27日(星期一)
2022年10月27日 | 52单片机IO口输出-蜂鸣器(硬核)
2022-10-27 来源:csdn
什么是蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器,广泛应用于电子产品中作发声器件,起到警报提醒的作用。
有源蜂鸣器与无源蜂鸣器
这里的“源”不是指电源,而是指震荡源。
有源蜂鸣器内部带震荡源,所以只要异同点就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。需要用2K~5K的方波去驱动它,有源蜂鸣器往往比无源的贵,就是因为里面多个振荡电路。
无源蜂鸣器的优点是:
1.便宜
2.声音频率可控,可以做出音乐里基本七音符的效果
有源蜂鸣器的优点是:
程序控制方便,接通电源就可以工作,程序简单。
三极管的工作原理
什么是三极管:
三极管全称半导体三极管,也称晶体三极管,是一种控制电流的半导体器件其作用是把微弱的电信号放大成幅度值较大的电信号,也用作无触点开关,在电路中主要起开关和增大电流的作用。

三极管正如其名有三个引脚分别是:B(基极),C(集电极),E(发射极)
按照半导体排列方式区分:分为NPN三极管和PNP三极管两种。
按照材质区分:硅管(PN结导通电压0.5 ~ 0.7V)、锗管(PN结导通电压0.1 ~ 0.3V)
三极管的型号记忆方式:箭头朝内PNP,箭头朝外NPN,箭头引脚发射极

PN结偏置:正偏,反偏,零偏

三种状态:

口诀:发正集反是放大,全正饱和全反截。
蜂鸣器驱动电路分析

这是蜂鸣器的控制电路,因为IO口的输出电流小,无法直接用IO口驱动,需要用接了10K的上拉电阻的IO口才可以
这次我用的是IO口驱动这种方法,我用的单片机是STC89C52,它的P1组IO口没有上拉排阻,所以我用的P2组IO口

*74hc595芯片可以起到扩充单片机IO口的作用,因为输出电流也比IO口大,所以也有放大电流的作用*
参考代码
延时方法1
unsigned int i = 1000;
while(i--);
延时方法2
void delay();//延时函数声明
void delay()//延时函数 { uint16 i; for(i=100000;i>0;i--); }
延时方法3
使用_nop_();函数(记得带上头文件#include 我们可以使用stc官方软件直接生成我们想要的函数(懒) 方法如下 ①打开下图的软件,在右上菜单栏中点开软件延时计算器 ②左上角修改参数,选择自己的晶振频率和想要延长的时间 ③点击生成代码,然后软件会自动生成,复制即可使用 完整参考代码↓(用的延时方法3) #include #include sbit beep = P2^0;//蜂鸣器端口 void Delay500ms();//@11.0592MHz void main() { while(1) { beep = 1; //蜂鸣器启动 Delay500ms(); //@11.0592MHz beep = 0; //蜂鸣器关闭 Delay500ms(); //@11.0592MHz } } void Delay500ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); _nop_(); i = 22; j = 3; k = 227; do { do { while (--k); } while (--j); } while (--i); } 参考内容链接: https://www.bilibili.com/video/BV1Kt411Q7aV?p=6. 
史海拾趣
|
来自网络的一篇文章!希望对您有所帮助。 常言道:10多岁比智力,20多岁比体力,30来岁拼专业,40岁拼人脉……年纪再大些要拼什么我就不知道了。 第一、建立你的价值。 这里的“价值”,换个更贴切的说法就是“被利用价值”,在盘点人脉关系前, ...… 查看全部问答> |
|
现在在做个项目,需要开发个在WINCE下驱动PS2键盘的程序,现在急需要这方面的例子,不知道各位大大有没有这方面的开发经验,如果有的话请不吝赐教,可以在此回复,也可以给我写邮件:killerlu@sina.com 我QQ:552012884(请在消息框中注明来自eeworld,谢谢)… 查看全部问答> |
|
有两个比较弱智的问题: 1: 一般FRAME界面中,只要触摸笔点下,一定可以触发相应的消息是哪个?不管是点在有效(无效)按键上还是空白处. 2: 怎么判断SD卡是否已经插入? 请各位软件高手指点...谢谢! … 查看全部问答> |
|
2个问题:1ctrl+z相当于0x1a是怎么看出来的?2串口发送始化的问题 1虽然我知道ctrl+z在程序里用0x1a表示,但是差了ascii码表,0x1a也就是26是什么SUB.如何看出来代表ctrl+z啊 请大家告诉我 2int usart_putchar(char c) { if(c==\'\\n\') &nbs ...… 查看全部问答> |
|
如果不用到printf()函数的话程序可以正常运行,加了这个函数后就死掉,内存里的值也不对了。要怎么设置吗?我在网上查了一下,要设置这两个地方, 1.OPTIONS -> CONFIGURE TARGET -> ARMULATE; 2.OPTIONS -> CONFIGRUE PROCESSOR -> SEMIHOSTIN ...… 查看全部问答> |
|
需画出音标,但个别音标显示一个个小框框,添加字体后出问题,请高手进来赐教 我从数据库中读取相应的音标数据,用DrawText画,一些音标可以画出,但大部分音标画不出,我怀疑系统部支持个别音标的显示,就去网上找了Kingsoft的音标字体使用AddFontResource添加后,修改LOGFONT属性来画,结果还是不行,请高手指点 代码如下: ...… 查看全部问答> |




