技术标签: 龙芯1B python c语言 物联网 嵌入式硬件 龙芯1B开发板例程讲解 单片机
之前也写了两种有源蜂鸣器的鸣叫了,这里咱们就研究一下有源蜂鸣器如何唱歌,其实最好的是无源蜂鸣器,因为无源蜂鸣器准确控制蜂鸣器的频率,故而音调可以准确的控制住。
在此谢谢各位的关注了,大家的关注是我更新的持久动力!
关键在于首先能看得懂乐谱!我表示我刚开始学的时候是真的看不懂!!!
大家有兴趣的也可以自学一下。
首先做一个可变时间的延时开控制发声,关于延时可以使用定时器来做,但是这里为了简便,就是用了一个延时来完成。延时的时间长短可以改变声音的频率。但是如果要播放频率变化特别快的音乐,比如下面的《红尘情歌》,必须控制输出电流大小,直接连接单片机IO口是不行的,加一个100K欧姆的电阻可以听出来,但是声音特别小,不适合做提示。所以,定义了一个简单的提示音数组music完成功能。
此处的想法来源于百度,各个博主之间取长补短而来!!!不过自己的想法也是如此的。但是龙芯是没有定时器的,所以我们要另觅蹊径。
音符和频率的对应关系:
*音符频率(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
节拍有了音符,也就是知道了这个音怎么发音,那么要想写出一个乐谱,还要知道,这个音发多长时间,这就引出了节拍的概念。
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:有源蜂鸣器播放音乐例程
文章浏览阅读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
文章浏览阅读1.4w次,点赞15次,收藏117次。MS COCO数据集人体关键点评估(Keypoint Evaluation)_coco关键点
文章浏览阅读1.2k次。web复制功能实现html部分html部分此处真正需要的是btn,其他的都是样式上的设置<a class="mui-navigate-right btn"> <span class="mui-icon iconfont icon-kefu" style="color: #F5A623;"></span> 联系客服</a>
文章浏览阅读5.4k次。用github做repository,有点搞不清楚怎么更新代码。尝试了git pull好几次,发现需要git pull origin master才OK。太过习惯svn不是好事。_git对比后,怎么更新代码啊
文章浏览阅读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命令
文章浏览阅读1.4w次。在mybatis的configure文件中增加typehandler:<configuration><typeHandlers> <typeHandler handler="com.test.framework.utils.MyStringTypeHandler" javaType="java.lang.String" jdbcType="C..._mybatis去除前后空格
文章浏览阅读4.9k次,点赞10次,收藏108次。VOFA+是一个串口调试助手,但凭它简单的通信协议、数据可视化以及频域分析,三维打印等优点在众多串口调试助手中脱颖而出。就凭一个打印波形,屁颠屁颠就冲这软件来了。_vofa 电机闭环
文章浏览阅读3.1k次。NTP注意事项注意一:首先是关于时区的问题,经度的零点在 Greenwich,因此就有了 GMT(Greenwich Mean Time) 的概念,GMT 以东的快(+),以西的慢(-),比如大陆就是 GMT+8,也就是比 GMT 快 8 h。GMT 为 0 点的时候,大陆已经早上 8 点了。然后还有个国际日期变更线的问题,这个在太平洋上,也就是精读为 180 的那_localhost: timed out, nothing received
文章浏览阅读453次。【BZOJ修复计划 #16】BZOJ 2151 种树【国家集训队2011】_bzoj 链表
文章浏览阅读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
文章浏览阅读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 重命名文件
文章浏览阅读744次。在下图所示目录中创建一个新文件夹(新目录),当然咯,你大可在你电脑的任何位置新建一个目录。浏览器: Chrome (在版本上没有特别要求)想要搭建一个简单的 HTTP 服务器端,需调用。极力推崇的最新管理项目的方案,这种方式摆脱了。命令行处于监听状态,打开浏览器,在地址栏输入。windows 系统版本: win 8.1。执行以上命令后,会在当前目录下自动生成。golang 版本: 1.19。函数进行路由注册,而后通过。函数来开启对客户端的监听。进行管理的,毕竟这是。所在目录下管理项目。_golang 开发的多用户博客