目录
前面学习了
MCU-51:单片机蜂鸣器播放音乐和提示音
我们知道了可以用51单片机播放乐谱
今天我们用51单片机播放 孤勇者
爱你孤身走暗巷
爱你不跪的模样
爱你对峙过绝望
不肯哭一场
爱你破烂的衣裳
却敢堵命运的枪
爱你和我那么像
缺口都一样
去吗 配吗 这褴褛的披风
战吗 战啊 以最卑微的梦
…
下面我们再来回顾下蜂鸣器知识
蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号
蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器
有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音






#include <REG52.H>
#include <INTRINS.H>
sbit speaker=P2^5;
unsigned char timer0h,timer0l,time=1;
// 孤勇者,3分30秒,原唱4分16秒
code unsigned char gyz[]={
122,27,121,26,122,27,121,26,122,27,121,26,120,
// 音高(低音0,中音1,高音2),音长(节拍),音调(do,le,mi,fa,so,la,si)
143,140,110,111,112,111,143,130,111,112,111,112,113,36,111,36,111,36,111,122,121,47,140,
//都,是勇敢的,你额头的伤口你的不同你犯的错
143,140,111,112,111,143,140,111,112,111,112,113,36,111,36,111,36,111,123,122,47,140,
//都,不必隐藏,你破旧的玩偶你的面具你的自我
16,111,136,116,116,115,126,116,115,116,115,116,115,143,140,16,111,136,116,116,115,116,115,137,117,117,116,127,126,143,
//他们说要带着光驯服每一头怪兽,他们说要缝好你的伤没有人爱小丑
120,113,115,113,132,113,132,113,132,113,115,113,115,113,132,113,132,113,142,120,111,112,123,26,121,123,132,113,112,121,46,140,
//为何孤独不可光荣,人只有不完美值得歌颂,谁说污泥满身的不算英雄
116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,
//爱你孤身走暗巷,爱你不跪的模样,爱你对峙过绝望,不肯哭一场,
116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,225,
//爱你破烂的衣裳却敢堵命运的枪,爱你和我那么像缺口都一样
233,215,233,215,213,215,216,213,225,225,233,215,233,215,
//去吗,配吗,这褴褛的披风,战吗,战啊,
213,215,216,213,225,215,215,213,222,222,211,223,232,222,221,146,140,215,215,213,222,222,211,233,222,222,221,146,140,140,
//以最卑微的梦,致那黑夜中的呜咽与怒吼(hou),谁说站在光里的才算英雄
116,115,136,115,116,115,116,115,126,116,115,116,115,116,115,143,140,116,115,136,115,116,115,116,115,137,117,117,116,117,116,143,140,
//他们说要戒了你的狂就像擦掉了污垢(gou),他们说要拾台阶而上而代价是低头
113,115,113,132,113,132,113,132,113,115,113,115,113,132,113,132,113,142,120,111,112,123,126,221,223,232,213,212,231,166,120,
//那就让我不可乘风,你一样骄傲着那种孤勇,谁说对弈平凡的不算英雄
116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,
//爱你孤身走暗巷,爱你不跪的模样,爱你对峙过绝望,不肯哭一场,
116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,225,
//爱你破烂的衣裳却敢堵命运的枪,爱你和我那么像缺口都一样
233,215,233,215,213,215,216,213,225,225,233,215,233,215,
//去吗,配吗,这褴褛的披风,战吗,战啊,
213,215,216,213,225,215,215,213,222,222,211,223,232,222,221,146,140,215,215,213,222,222,211,233,222,222,221,146,140,140,
//以最卑微的梦,致那黑夜中的呜咽与怒吼(hou),谁说站在光里的才算英雄
26,121,123,147,127,117,127,186,120,26,121,123,147,127,117,127,186,120,
//你的斑驳与众不同,你的沉默震耳欲聋
116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,
//爱你孤身走暗巷,爱你不跪的模样,爱你对峙过绝望,不肯哭一场,
116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,225,
//爱你来自于蛮荒,一生不借谁的光,你将造你的城邦,在废墟之上
233,215,233,215,213,215,216,213,225,225,233,215,233,215,
//去吗,去啊,以最卑微的梦,战吗,战啊,
213,215,216,213,225,215,215,213,222,222,211,223,232,222,221,146,140,215,215,213,222,222,211,233,222,222,221,146,140,140,
//以最孤高的梦,致那黑夜中的呜咽与怒吼(hou),谁说站在光里的才算英雄
0
};
// 定时时间越短,那么声音频率越高,
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,
0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,
0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
//做成对应的频率表,其实前几个很少遇得到,那么这里再缩减的话,
//就除以10,就可以用char类型而不用int类型了,后边计算计时时间的时候再乘10补回
unsigned int code FreTab[28] = {
3517,3134,2792,2633,2351,2094,1865,
1758,1566,1395,1319,1175,1046,932 ,
880 ,785 ,699 ,660 ,587 ,523 ,466 ,
440 ,392 ,349 ,329 ,293 ,261 ,233 ,
};
void t0int() interrupt 1
{
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
}
// 节奏的快慢,这里是半个节拍的时间
void delay(unsigned char t)
{
unsigned long t2;
for(;t>0;t--)
{
for(t2=0;t2<5000;t2++){;}
}
TR0=0;// 停止发音 如果屏蔽掉,会出现连音的不正常现象
}
/**/
void song()
{
unsigned char k=0;
unsigned long i=0; // 由于歌词长度问题,需要设置大一点的范围,否则还没唱完一遍又重新开始了
// 这里这样做就只唱一遍,寻到最后的0值时就停止了
while(time)
{
if(gyz[i]%10==0) // 音调为0值时停顿处理
{
TR0=0; // 停止发音
}
else
{
k=gyz[i]%10+7*(gyz[i]/100+1)-1;
timer0h=FREQH[k]; // 这里将K值改成定值,发现实际上并不是按照do,le,mi,fa,so,la,si这样发音
timer0l=FREQL[k];
//如果用频率表输出的话,就屏蔽上两句,开启下两句
//timer0h=(65535-FreTab[k])/256;
//timer0l=(65535-FreTab[k])%256;
TR0=1; // 启动T0输出方波去发音
}
time=gyz[i]/10%10;
i=i+1;
delay(time);
}
}
void main(void)
{
TMOD=1; // 设置定时器0为16位计数模式
EA=1;ET0=1; // 开定时器0中断
while(1)
{
song();
}
}
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
本人是音乐爱好者,从小就特别喜欢那个随着音乐跳动的方框效果,就是这个:arduino上一大把对,我忍你很久了,我就想用mpy做,全网没有,行我自己研究。果然兴趣是最好的老师,我之前有篇博客专门讲音频,有兴趣的可以回顾一下。提到可视化频谱,必然绕不开fft,大学学过这玩意,当时一心玩,老师讲的一个字都么听进去,网上教程简略扫了一下,大该就是把时域转频域的工具,我大mpy居然没有fft函数,奶奶的,先放着。音频信息如何收集?第一种傻瓜式的ADC,模拟转数字,原始粗暴,第二种,I2S库,我之前博客有讲过,数据是PCM编码。然后又去学PCM编码,一学豁然开朗,舒服,以代码为例:audio_in=I2S
目录SPI总线SPI总线概述 SPI总线分类SPI优点及缺点SPI接口硬件原理SPI四种工作模式 74HC595应用74HC595芯片概述74HC595封装及管脚功能74HC595工作原理 编辑 74HC595串行转并行点亮LED灯 程序实现 Proteus运行结构示意图SPI总线SPI总线概述 SPI(SerialPeripheralinterface):串行外围设备接口 用途:用来在微控制器与外围设备芯片之间实现数据交换 特点:高速、全双工、同步 SPI总线分类四线制全双工SPI(同时收发)MISO 主机输入/从机输出MOSI 主机输出/从机输入SCLK 串行时钟CS或
文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室
一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress位数/字节数备注AT24C044k5123216A2A149/1WordAddress使用P0位AT24C088k1024
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、设计原理1.DS1302介绍2.闹钟音乐播放原理二、程序设计1.DS1302.h2.ds1302.c3.music.h4.main.c三、电路图四、运行结果1.proteus仿真2.开发板实验五、总结六、附件提示:以下是本篇文章正文内容,下面案例可供参考一、设计原理1.DS1302介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。该芯片采用普通32.768kHz晶振,DS1302工作时功耗很
目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式 2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置 3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一
1、单片机控制液晶显示模块1602LCD的显示。液晶显示器(LiquidCrystalDisplay,LCD)具有省电、体积小、抗干扰能力强等优点,LCD显示器分为字段型、字符型和点阵图形型。(1)字段型。以长条状组成字符显示,主要用于数字显示,也可用于显示西文字母或某些字符,广泛用于电子表、计算器、数字仪表中。(2)字符型。专门用于显示字母、数字、符号等。一个字符由5、7或5、10的点阵组成,在单片机系统中已广泛使用(3)点阵图形型。广泛用于图形显示,如笔记本电脑、彩色电视和游戏机等。它是在平板上排列的多行列的矩阵式的晶格点,点大小与多少决定了显示的清晰度。引脚包括8条数据线、3条控制线和3
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替了传统的机械式密码锁,电子密码锁具有安全性高、成本低、功耗低、易操作等优点。本文主要介绍运用51单片机设计数字密码锁的方法。本设计采用自上而下的数字系统设计方法,将数字密码锁系统分解为若干子系统,并且进一步细划为若干模块,然后用C语言来设计这些模块,通过KEIL软件编译,并且进行实机调试。调试结果表明:该数字密码锁能够效验4位十进制