龙芯1B:有源蜂鸣器播放音乐例程-程序员宅基地

技术标签: 龙芯1B  python  c语言  物联网  嵌入式硬件  龙芯1B开发板例程讲解  单片机  

龙芯1B:有源蜂鸣器播放音乐例程

前言

之前也写了两种有源蜂鸣器的鸣叫了,这里咱们就研究一下有源蜂鸣器如何唱歌,其实最好的是无源蜂鸣器,因为无源蜂鸣器准确控制蜂鸣器的频率,故而音调可以准确的控制住。
在此谢谢各位的关注了,大家的关注是我更新的持久动力!


一、蜂鸣器唱歌的关键?

关键在于首先能看得懂乐谱!我表示我刚开始学的时候是真的看不懂!!!
在这里插入图片描述
大家有兴趣的也可以自学一下。

二、开发步骤

1.步骤

首先做一个可变时间的延时开控制发声,关于延时可以使用定时器来做,但是这里为了简便,就是用了一个延时来完成。延时的时间长短可以改变声音的频率。但是如果要播放频率变化特别快的音乐,比如下面的《红尘情歌》,必须控制输出电流大小,直接连接单片机IO口是不行的,加一个100K欧姆的电阻可以听出来,但是声音特别小,不适合做提示。所以,定义了一个简单的提示音数组music完成功能。

此处的想法来源于百度,各个博主之间取长补短而来!!!不过自己的想法也是如此的。但是龙芯是没有定时器的,所以我们要另觅蹊径。

2.乐理知识

音符和频率的对应关系:
*音符频率(Hz)低1 DO262#1 DO#277低2 RE294#2 RE#311低3 MI330低4 FA349#4 FA#370低5 SO392#5 SO#415低6 LA440#6466低7 SI494中1 DO523#1 DO#554
节拍有了音符,也就是知道了这个音怎么发音,那么要想写出一个乐谱,还要知道,这个音发多长时间,这就引出了节拍的概念。

3.学习链接

stm32有源蜂鸣器学习链接

三、代码

buzzer.c 代码如下:

#include "src/buzzer.h"
#include <stdio.h>
#include "string.h"
#include "math.h"

#include "ls1b.h"
#include "mips.h"
#include "ns16550.h"
#include "ls1b_gpio.h"
#include "ls1x_pwm.h"



#define buzzer_gpio 46

void Buzzer_Init(void)
{
    
    gpio_enable(buzzer_gpio,DIR_OUT);
    gpio_write(buzzer_gpio,0);
}

void Sound(u16 frq)
{
    
	u32 time;
	if(frq != 1000)
	{
    
		time = 500000/((u32)frq);
		gpio_write(buzzer_gpio,1);
		delay_us(time);
		gpio_write(buzzer_gpio,0);
		delay_us(time);
	}else{
    
	    gpio_write(buzzer_gpio,0);
	    delay_us(1000);
    }
		
}

void play_music(void)
{
    
	//              低7  1   2   3   4   5   6   7  高1 高2 高3 高4 高5 不发音
	u16 tone[] = {
    247,262,294,330,349,392,440,294,523,587,659,698,784,1000,1047,1175,1319,1397,1568,1760,1976};//音频数据表
	//红尘情歌
	u8 music[]=
            {
    5,5,6,8,7,6,5,6,13,13,//音调
                5,5,6,8,7,6,5,3,13,13,
                2,2,3,5,3,5,6,3,2,1,
                6,6,5,6,5,3,6,5,13,13,

                5,5,6,8,7,6,5,6,13,13,
                5,5,6,8,7,6,5,3,13,13,
                2,2,3,5,3,5,6,3,2,1,
                6,6,5,6,5,3,6,1,

                13,8,9,10,10,9,8,10,9,8,6,
                13,6,8,9,9,8,6,9,8,6,5,
                13,2,3,5,5,3,5,5,6,8,7,6,
                6,10,9,9,8,6,5,6,8};
	u8 time[] =
                {
    2,4,2,2,2,2,2,8,4, 4, //时间
                2,4,2,2,2,2,2,8,4, 4,
                2,4,2,4,2,2,4,2,2,8,
                2,4,2,2,2,2,2,8,4 ,4,

                2,4,2,2,2,2,2,8,4, 4,
                2,4,2,2,2,2,2,8,4, 4,
                2,4,2,4,2,2,4,2,2,8,
                2,4,2,2,2,2,2,8,

                4, 2,2,2, 4, 2,2,2, 2,2,8,
                4, 2,2,2,4,2,2,2,2,2,8,
                4, 2,2,2,4,2,2,5,2,6,2,4,
                2,2 ,2,4,2,4,2,2,12};
	u32 yanshi;
	u16 i,e;
	yanshi = 10;
	for(i=0;i<sizeof(music)/sizeof(music[0]);i++){
    
		for(e=0;e<((u16)time[i])*tone[music[i]]/yanshi;e++){
    
			Sound((u32)tone[music[i]]);
		}
	}
}

总结

源码链接:龙芯1b:有源蜂鸣器播放音乐例程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/oxygen23333/article/details/126530448

智能推荐

Could not execute JDBC batch update_non-atomic batch failure-程序员宅基地

文章浏览阅读3.4k次。014-10-11 14:58:30,951 [org.hibernate.util.JDBCExceptionReporter]-[WARN] SQL Error: -99999, SQLState: null2014-10-11 14:58:30,952 [org.hibernate.util.JDBCExceptionReporter]-[ERROR] Non-atomic batch f_non-atomic batch failure

COCO数据集人体姿态估计关键点检测评估_coco关键点-程序员宅基地

文章浏览阅读1.4w次,点赞15次,收藏117次。MS COCO数据集人体关键点评估(Keypoint Evaluation)_coco关键点

web复制功能实现-程序员宅基地

文章浏览阅读1.2k次。web复制功能实现html部分html部分此处真正需要的是btn,其他的都是样式上的设置&lt;a class="mui-navigate-right btn"&gt; &lt;span class="mui-icon iconfont icon-kefu" style="color: #F5A623;"&gt;&lt;/span&gt; 联系客服&lt;/a&gt

git更新代码_git对比后,怎么更新代码啊-程序员宅基地

文章浏览阅读5.4k次。用github做repository,有点搞不清楚怎么更新代码。尝试了git pull好几次,发现需要git pull origin master才OK。太过习惯svn不是好事。_git对比后,怎么更新代码啊

Linux常用命令(超详细)_linux -exec命令-程序员宅基地

文章浏览阅读1.5w次,点赞53次,收藏682次。目录1、写在前面的话2、常用命令2.1、常用命令的使用:2.1.1、pwd命令2.1.2、cd命令2.1.3、cp命令2.1.4、mv命令2.1.5、chmod命令2.1.6、ls命令2.1.7、rm命令2.1.8、rmdir2.1.9、touch命令2.2.0、gzip命令2.2.1、tar命令2.2.2、mail命令2.2.3、wall命令3、心得体会1、写在前面的话在我们使用Linux系统时,学..._linux -exec命令

mybatis查询结果中去掉前后空格_mybatis去除前后空格-程序员宅基地

文章浏览阅读1.4w次。在mybatis的configure文件中增加typehandler:&lt;configuration&gt;&lt;typeHandlers&gt; &lt;typeHandler handler="com.test.framework.utils.MyStringTypeHandler" javaType="java.lang.String" jdbcType="C..._mybatis去除前后空格

随便推点

STC16f40k128 使用VOFA+进行电机PID参数整定_vofa 电机闭环-程序员宅基地

文章浏览阅读4.9k次,点赞10次,收藏108次。VOFA+是一个串口调试助手,但凭它简单的通信协议、数据可视化以及频域分析,三维打印等优点在众多串口调试助手中脱颖而出。就凭一个打印波形,屁颠屁颠就冲这软件来了。_vofa 电机闭环

NTP注意事项_localhost: timed out, nothing received-程序员宅基地

文章浏览阅读3.1k次。NTP注意事项注意一:首先是关于时区的问题,经度的零点在 Greenwich,因此就有了 GMT(Greenwich Mean Time) 的概念,GMT 以东的快(+),以西的慢(-),比如大陆就是 GMT+8,也就是比 GMT 快 8 h。GMT 为 0 点的时候,大陆已经早上 8 点了。然后还有个国际日期变更线的问题,这个在太平洋上,也就是精读为 180 的那_localhost: timed out, nothing received

BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐_bzoj 链表-程序员宅基地

文章浏览阅读453次。【BZOJ修复计划 #16】BZOJ 2151 种树【国家集训队2011】_bzoj 链表

mybatis源码编译的一些坑_could not compute the year of the last git commit -程序员宅基地

文章浏览阅读822次。  讲道理,如果mybatis和mybatis-parent的版本号一致的话,大概率是不会遇到坑的。但是不排除某些人的自残倾向,非要用不同版本的mybatis和mybatis-parent,这样的话可能会遇到以下这些坑:“cannot resolve plugins xxx”的问题:导致这个问题的原因是没有指定插件的版本号,在pom文件中为相应插件指定version即可,例如:或者干脆注释掉:“Cannot resolve plugin org.apache.maven.plugins:mav_could not compute the year of the last git commit for file

Linux上ftp传输文件怎么改名,Linux Ftp上传文件变更(MD5值变更)-程序员宅基地

文章浏览阅读1.5k次。最近遇到一个很棘手的问题. 问题很简单:一般情况下使用ftp上传就是这个样子:如下脚本:$ vim copy.sh#! /bin/bashremote_path=远程地址if [ -f $1 ]thenftp -i -n <open ftp服务器user 账户名 密码put $1 $remote_path$1quitUPLOADfi这是文本文件内容. vim会默认在文件末尾追加\n$ vim..._ftp linux 重命名文件

Go 语言搭建个人博客(qiucode.cn 重构篇 一)_golang 开发的多用户博客-程序员宅基地

文章浏览阅读744次。在下图所示目录中创建一个新文件夹(新目录),当然咯,你大可在你电脑的任何位置新建一个目录。浏览器: Chrome (在版本上没有特别要求)想要搭建一个简单的 HTTP 服务器端,需调用。极力推崇的最新管理项目的方案,这种方式摆脱了。命令行处于监听状态,打开浏览器,在地址栏输入。windows 系统版本: win 8.1。执行以上命令后,会在当前目录下自动生成。golang 版本: 1.19。函数进行路由注册,而后通过。函数来开启对客户端的监听。进行管理的,毕竟这是。所在目录下管理项目。_golang 开发的多用户博客

推荐文章

热门文章

相关标签