历史上的今天
返回首页

历史上的今天

今天是:2025年08月17日(星期日)

2021年08月17日 | 51单片机-无源蜂鸣器鸣叫

2021-08-17 来源:eefocus

1.输出方波图解

我们现在要给单片机IO端口输出4khz的方波。


现在我们算出方波的周期:1/(4*1000)s=0.00025s=0.25ms

高电平时间:(0.25/2)ms=0.125ms      低电平时间:(0.25/2)ms=0.125ms

8.png?imageView2/2/w/550


2.驱动代码

因为我们只写过最低延时1ms的函数,所以这里测试用“for(i=0;i<14;i++);”作为延时0.125ms,本节的单片机IO端口为开发板中的P1.6,无源蜂鸣器的硬件连接因为不像LED那样都接了很多其他器件来初始化,所以本节的代码就显得相当简短,下载进开发板蜂鸣器就一直鸣叫了

1
2
3
4
5
6
7
8
9
10
11
12
13
#include  
sbit BEEP = P1^6;
void main()
{  
    unsigned int i; 
    while(1)
    {
        BEEP=1;
        for(i=0;i<14;i++);//延时接近0.125ms,给P1.6保持了0.125ms高电平时间
        BEEP=0;
        for(i=0;i<14;i++);//低电平时间保持了0.125ms, 我们可以尝试把两个for语句里的14改大一点就会发现鸣叫的音调变得低沉一些了
    } 
}


3.代码书写新知识

我们现在引入新的代码书写知识“BEEP=!BEEP;”。

“!BEEP”是把此时自身的值非一下,比如当还没执行“BEEP =!BEEP;”语句时,假设此时的BEEP是等于1的。


当执行到“BEEP =!BEEP;”时,“!BEEP”是等于上一次的状态1变为0。

那现在的这条“BEEP =!BEEP;”就跟“BEEP=0;”是一样的了。

下一次再执行“BEEP =!BEEP;”时同理变为了“BEEP=1;”。

所以该语句实现的是来回变换赋给BEEP的值(0或1)。

这样我们就可以把上面的代码中while(1)部分简写为

1
2
3
4
5
 while(1)
 {
     BEEP=!BEEP;
     for(i=0;i<14;i++);//只需改变一次for语句中的14就可以实现不同音调的鸣叫了
 }

大家也可以回到第二章的第五讲改写为“LED2=!LED2”同样也可以实现LED闪烁的。

 

4.单片机IO端口初始电平

有同学会问,单片机的其他IO端口在程序里没有给0或1时,它们初始时是输出高电平还是低电平呢?


STC89C52RC这款芯片的P1,P2,P3这一共24个IO端口由于内部硬件的原因上电的时候都是输出高电平的,而P0一开始是一种不确定的状态(有时是高有时是低),但我们用的开发板已经把P0端口接了上拉电阻,所以开发板的P0.0~P0.7初始时也是输出高电平的(可参考《手把手教你学51单片机》文档2.4.1节的复位值和9.1节、9.2节的上下拉电阻了解一下,了解不了可暂时放一下,继续往下学)。


这也就解释了,当初点亮一盏灯的时候,代码没有写过P0.1,P0.2···这些内容,对应的这些灯都没有亮,只有在程序中写让P0.1输出0时灯才亮,所以其他灯不亮是因为IO端口已经默认输出了高电平。


这里我们先记住:所有的IO端口在程序初始时没有给0则全都是输出高电平这样的概念先。


推荐阅读

史海拾趣

High Energy Corp公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的关键设备,具备高度的专业性和广泛的科普意义。从广义上讲,任何与电视机连接的网络终端设备均可称为机顶盒,包括传统的模拟频道增补器到现代的数字卫星机顶盒、有线电视数字机顶盒及IPTV机顶盒等。其主要功能在于接收来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,并将这些信号转换为电视机可识别的视频和音频格式,极大地丰富了用户的观看选择,提升了观看体验。

机顶盒不仅能提供高清、4K甚至超高清的电视节目,还具备网络交互功能,用户可通过机顶盒连接互联网,享受在线购物、观看网络视频、玩游戏等多元化服务。此外,机顶盒还支持电子节目指南、因特网网页浏览等增值服务,使电视机不再仅仅是接收信息的单向设备,而是成为与用户进行互动的智能终端。

随着技术的不断进步,机顶盒正朝着高清化、智能化、多功能化方向发展。例如,通过智能推荐算法,机顶盒能为用户提供个性化的节目推荐;借助语音识别技术,用户可通过语音指令控制机顶盒,实现便捷操作。未来,机顶盒将继续融合新技术,如人工智能、云计算等,为用户提供更加丰富的娱乐选择和更加智能的观看体验。

Global Communications公司的发展小趣事
温度传感器的输出与温度之间的线性关系也很重要,因为这直接影响到补偿电路的准确性和稳定性。
Agilent Technologies公司的发展小趣事
根据晶体振荡器对频率稳定性的要求,选择具有足够精度的温度传感器。精度越高,补偿效果通常越好。
Califia Lighting公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,Califia Lighting开始积极寻求与国际市场的合作。他们与多个国家和地区的合作伙伴建立了稳定的合作关系,将产品出口到全球各地。同时,公司还参加了多个国际电子照明展会,与全球同行交流学习,进一步提升了公司的国际影响力。

广东华裕(GDHY)公司的发展小趣事

在竞争激烈的电子照明市场中,Califia Lighting始终坚持以技术创新为核心竞争力。公司不断投入研发资源,推动LED照明技术的升级和突破。通过引入先进的生产工艺和设计理念,Califia Lighting成功开发出了一系列具有独特优势的产品,如高效节能、长寿命、环保等,赢得了市场的广泛认可。

Fronter Electronics Co Ltd公司的发展小趣事

Fronter电子成立于1991年,由一群对电子技术充满热情的创业者共同创立。在公司成立初期,Fronter电子专注于电子元件的代理与销售,通过引进国际知名品牌的产品,如SUNLORD、KDS等,迅速在行业内建立了初步的声誉。公司凭借敏锐的市场洞察力和高效的供应链管理,逐步在电子元器件市场中站稳脚跟。

问答坊 | AI 解惑

请教FirstPT的地址问题

各位前辈好!想向大家请教一个问题,是这样的: 我在做OAL时,用IAR5.2调试,在startup.s的开头的几行定义如下:     bl      TT     g_oalAddressTable_address           ...…

查看全部问答>

猜猜看,这是什么?

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑     其实,这是一款小巧的卡通猫照相机。它就像猫咪一样灵巧,带有磁性的爪子可以牢牢附着在铁栏杆上。这款小相机虽说没有观景窗,但是它却可以根据定时,自动拍摄照片。其中一只 ...…

查看全部问答>

号召加入!!TI LM3S811 DIY之【步进电机驱动器】

号召加入!!TI LM3S811 DIY之【步进电机驱动器】 ...…

查看全部问答>

这段代码正确么?

刚调代码,发现了一个奇怪的问题,没法得到准确结果,现在放上来给大家看看,问题出在哪里  C51下,ACC是内部累加器A。a=0x1,b=0x2。                 &n ...…

查看全部问答>

我的单片机型号是MC9S08DZ60,求助CAN通讯波特率计算

我的单片机型号是MC9S08DZ60,所使用的晶振频率是4MHZ,谁能给我一个计算CAN通讯波特率的范例吗?谢谢你们啦!!!…

查看全部问答>

如何用msp430f449设计实时时钟,只要代码就行

谢谢各位大虾的帮忙啊,小弟不胜感激…

查看全部问答>

7 月份编程语言排行 - Objective-C 超于 C++

IOBE 发布了 2012 年 7 月份的最新编程语言排行榜.这个月编程语言最大的变化是 Objective-C 超越 C++,成为仅次于 C 和 Java 的编程语言。Objective-C 和 C++ 都是1983年发明的,作为 C 语言的面向对象后代。在刚开始的时候,它们就在互相竞争成为 ...…

查看全部问答>

谈谈对这次易电源试用目的的理解

replyreload += \',\' + 1364929;(注:以下观点可能有误) 这次易电源试用,TI送了板子又设大奖,目的是让大家体验易电源的优势,看看它的性能。 它们也就是拿个觉得“自豪”的产品,让你找找它具体在各方面的与众不同之处。那么,这次试的目的 ...…

查看全部问答>

关于电机驱动模块对无线信号的干扰的测试

搭了个小车,无线收发模块出现了一些问题。单独测试,正常,组合到一起,遥控功能变得很差。接收距离缩短了百分之九十多。在后来的测试中,我改变了固封的可调电感,我意识到调坏了。原来的状态调不回去了。调到了一个相对好一点的状态,继续测试。 ...…

查看全部问答>

头疼的SPI读写程序

我写的程序读写不能同时工作。我用板子上的例程直接下进去可以正常读写,而我写的程序却有问题; 我用我程序读例程写在地址1000处的字符串可以正确读出来,例程读我写在地址100处的也可以读出来; 而我用我自己的程序读自己写在地址100处的例程却 ...…

查看全部问答>