单片机音乐中音调和节拍的确定方法:调号-音乐上指用以确定乐曲主音高度的符号。很明显一个八度就有12个半音。A、B、C、D、E、F、G。经过声学家的研究,全世界都用这些字母来表示固定的音高。比如,A这个音,标准的音高为每秒钟振动440周。 升C调:1=#C,也就是降D调:1=BD;277(频率)升D调:1=#D,也就是降E调:1=BE;311升F调:1=#F,也就是降G调:1=BG;369升G调:1=#G,也就是降A调:1=BA;415升A调:1=#A,也就是降B调:1=BB。466,C 262 #C277 D 294 #D(bE)311 E 330 F 349 #F369 G 392 #G415A 440. #A466 B 494 所谓1=A,就是说,这首歌曲的“导”要唱得同A一样高,人们也把这首歌曲叫做A调歌曲,或叫“唱A调”。1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”。同样是“导”,不同的调唱起来的高低是不一样的。各调的对应的标准频率为: 单片机演奏音乐时音调和节拍的确定方法 经常看到一些刚学单片机的朋友对单片机演奏音乐比较有兴趣,本人也曾是这样。在此,本人将就这方面的知识做一些简介,但愿能对单片机演奏音乐比较有兴趣而又不知其解的朋友能有所启迪。 一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。 在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程, 在音乐中1(do)与 ,2(来)与 ……正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。以1—i八音区为例, 12个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。这12个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。 知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。那么怎样确定一个频率所对应的定时器的定时值呢?以标准音高A为例: A的频率f = 440 Hz,其对应的周期为:T = 1/ f = 1/440 =2272μs 由上图可知,单片机上对应蜂鸣器的I/O口来回取反的时间应为:t = T/2 = 2272/2 = 1136μs这个时间t也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0,则定时器的予置初值由下式来确定: t = 12 *(TALL – THL)/ f0 式中TALL = 216 = 65536,THL为定时器待确定的计数初值。因此定时器的高低计数器的初值为: TH = THL / 256 = ( TALL – t* f0/12) / 256 TL = THL % 256 = ( TALL – t* f0/12) %256 将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值为 : TH440Hz = (65536 – 1136 * 12/12) /256 = FBH TL440Hz = (65536 – 1136 * 12/12)%256 = 90H根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。 音符的节拍我们可以举例来说明。在一张乐谱中,我们经常会看到这样的表达式,如1=C 、1=G …… 等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联, 、 就是用来表示节拍的。以 为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。比如: 其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。下面给出部分音符(三个八度音)的频率以及以单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值 : C调音符 频率Hz 262 277 293 311 329 349 370 392 415 440 466 494TH/TL F88B F8F2 F95B F9B7 FA14 FA66 FAB9 FB03 FB4A FB8F FBCF FC0BC调音符 1 1# 2 2# 3 4 4# 5 5# 6 6# 7频率Hz 523 553 586 621 658 697 739 783 830 879 931 987TH/TL FC43 FC78 FCAB FCDB FD08 FD33 FD5B FD81 FDA5 FDC7 FDE7 FE05C调音符 频率Hz 1045 1106 1171 1241 1316 1393 1476 1563 1658 1755 1860 1971TH/TL FB21 FE3C FE55 FE6D FE84 FE99 FEAD FEC0 FE02 FEE3 FEF3 FF02
上传时间: 2013-10-20
上传用户:哈哈haha
实时操作系统,Kernel部分完成于2006年上半年,其IPC部分甚至是年中时才具备相 应的雏形。最开始时是因为要为朋友做一个小型的手持设备,而本人起初又是另一国内老牌 实时操作系统:DOOLOO RTOS开发人员,但这个团队在2005年底已经解散。但朋友的系统要 上,用其他小型系统吗,一不熟悉,二看不上。答应朋友的事,总得有解决方法吧,即使是原来 的DOOLOO RTOS,因为其仿VxWorks结构,导致它的核心太大,包括太多不必要的东西(一套 完整的libc库),这些方案都否决了。怎么办?当时朋友那边也不算太急,先自己写一套内核吧。 这个就是源头!(后来虽然朋友的项目夭折了,但这套OS则保留下来了,并开源了,万幸) 1 序 3 1.1 RT-Thread诞生 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 艰难的发展期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 一年增加0.0.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 Cortex-M3的变革 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 面向对象设计方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.6 文档结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 实时系统 7 2.1 嵌入式系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 实时系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 软实时与硬实时 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 快速入门 11 3.1 准备环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 初识RT-Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 系统启动代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4 用户入口代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.5 跑马灯的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.6 生产者消费者问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4 RT-Thread简介 25 4.1 实时内核 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.2 虚拟文件系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.3 轻型IP协议栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.4 shell系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.5 图形用户界面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.6 支持的平台 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5 内核对象模型 29 5.1 C语言的对象化模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.2 内核对象模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6 线程调度与管理 39 6.1 实时系统的需求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
上传时间: 2013-10-14
上传用户:1234321@q
UG8.0破解版下载地址_UG8.0安装教程 里面包含了,下载地址和视频教程安装 ug8.0安装方法 一、安装 1.将文件夹……\NX_8.0.0.25_Win64\NX_8.0.0.25_Win64_crack_SSQ\UGSLicensing中的NX8.0.lic复制到硬盘任意一个英文文件夹下面 2.用记事本打开NX8.0.lic,将第一行的“this_host”改成本记算机的名称如“LBDZ-20111018GA”保存备用 3.开始安装UG,双击运行Launch.exe 4.弹出NX8.0安装介面,先安装许可证文件 Install license Server,指定安装路径,下一步 5.指定使用许可证文件的路径指向第2步备用的NX8.0.lic,下一步,点安装……完成许可证安装 6.返回NX8.0安装介面,安装主程序 Install NX,安装类型选典型(安装所有程序),下一步 7.指定安装路径,下一步,下一步 8.NX语言选择 简体中文,下一点,点安装……完成NX安装 ug8.0安装方法 二、破解 1.在破解文件夹NX_8.0.0.25_Win64_crack_SSQ中找到DRAFTINGPLUS、NXCAE_EXTRAS、NXNASTRAN、NXPLOT、UGII这5个文件夹,将之替换到安装目录D:\Program Files\Siemens\NX 8.0\ 2.在破解文件夹UGSLicensing中找到ugslmd.exe文件,将之替换到许可证安装目录D:\Program Files (x86)\UGS\UGSLicensing ug8.0安装方法 三、配置许可许 1.点开始--程序--Siemens NX 8.0--NX许可工具--Lmtools,启动许可证服务器 2.点Config Services选项卡,如果只装有一个版本的UG默认设置即可,点Save Service保存服务,点是 3.然后点Start/Stop/Reread选项卡,(中间应该出现一个许可证服务器),勾选“Force Server Shutdown”, 4.选点Stop Server停止服务器,再点Start Server启动服务器,下面显示Server Start Successful表示启动成功,配置完毕 (如果装有其它版本的UG,配置过程稍有不同,第2步需要手动设置) ug8.0安装方法 四、启动UG8.0 OK!
上传时间: 2013-10-12
上传用户:athjac
UG8.0破解版下载地址_UG8.0安装教程 里面包含了,下载地址和视频教程安装 ug8.0安装方法 一、安装 1.将文件夹……\NX_8.0.0.25_Win64\NX_8.0.0.25_Win64_crack_SSQ\UGSLicensing中的NX8.0.lic复制到硬盘任意一个英文文件夹下面 2.用记事本打开NX8.0.lic,将第一行的“this_host”改成本记算机的名称如“LBDZ-20111018GA”保存备用 3.开始安装UG,双击运行Launch.exe 4.弹出NX8.0安装介面,先安装许可证文件 Install license Server,指定安装路径,下一步 5.指定使用许可证文件的路径指向第2步备用的NX8.0.lic,下一步,点安装……完成许可证安装 6.返回NX8.0安装介面,安装主程序 Install NX,安装类型选典型(安装所有程序),下一步 7.指定安装路径,下一步,下一步 8.NX语言选择 简体中文,下一点,点安装……完成NX安装 ug8.0安装方法 二、破解 1.在破解文件夹NX_8.0.0.25_Win64_crack_SSQ中找到DRAFTINGPLUS、NXCAE_EXTRAS、NXNASTRAN、NXPLOT、UGII这5个文件夹,将之替换到安装目录D:\Program Files\Siemens\NX 8.0\ 2.在破解文件夹UGSLicensing中找到ugslmd.exe文件,将之替换到许可证安装目录D:\Program Files (x86)\UGS\UGSLicensing ug8.0安装方法 三、配置许可许 1.点开始--程序--Siemens NX 8.0--NX许可工具--Lmtools,启动许可证服务器 2.点Config Services选项卡,如果只装有一个版本的UG默认设置即可,点Save Service保存服务,点是 3.然后点Start/Stop/Reread选项卡,(中间应该出现一个许可证服务器),勾选“Force Server Shutdown”, 4.选点Stop Server停止服务器,再点Start Server启动服务器,下面显示Server Start Successful表示启动成功,配置完毕 (如果装有其它版本的UG,配置过程稍有不同,第2步需要手动设置) ug8.0安装方法 四、启动UG8.0 OK!
上传时间: 2013-11-19
上传用户:yuchunhai1990
原文书名: 《Writing Clean Code ── Microsoft Techniques for Developing Bug-free C Programs》 Steve maguire 著 Microsoft Press 出版 所据译本: 《编程精粹 ── Microsoft 编写优质无错C 程序秘诀》 姜静波、佟金荣 译,麦中凡 校 电子工业出版社 出版 整理: Solmyr:序、某些背景、命名约定、引言、第1、2、3、8 章、后记、参考文献 iliad: 第4、5 章 lavos: 第6 章、附录A warz: 第7 章 chief: 附录B、C
标签: Developing Techniques Microsoft Bug-free
上传时间: 2013-11-25
上传用户:stampede
* 高斯列主元素消去法求解矩阵方程AX=B,其中A是N*N的矩阵,B是N*M矩阵 * 输入: n----方阵A的行数 * a----矩阵A * m----矩阵B的列数 * b----矩阵B * 输出: det----矩阵A的行列式值 * a----A消元后的上三角矩阵 * b----矩阵方程的解X
上传时间: 2015-07-26
上传用户:xauthu
上下文无关文法(Context-Free Grammar, CFG)是一个4元组G=(V, T, S, P),其中,V和T是不相交的有限集,S∈V,P是一组有限的产生式规则集,形如A→α,其中A∈V,且α∈(V∪T)*。V的元素称为非终结符,T的元素称为终结符,S是一个特殊的非终结符,称为文法开始符。 设G=(V, T, S, P)是一个CFG,则G产生的语言是所有可由G产生的字符串组成的集合,即L(G)={x∈T* | Sx}。一个语言L是上下文无关语言(Context-Free Language, CFL),当且仅当存在一个CFG G,使得L=L(G)。 *⇒ 例如,设文法G:S→AB A→aA|a B→bB|b 则L(G)={a^nb^m | n,m>=1} 其中非终结符都是大写字母,开始符都是S,终结符都是小写字母。
标签: Context-Free Grammar CFG
上传时间: 2013-12-10
上传用户:gaojiao1999
>项目名称:电脑电子商务平台 >1.运行环境JDK1.6+Oracle10g+Tomcat5.5 >2.开发工具: MyEclipse Enterprise Workbench 项目名称:电脑电子商务平台 1.运行环境JDK1.6+Oracle10g+Tomcat5.5 2.开发工具: MyEclipse Enterprise Workbench 5.1.0 GA 3.开发框架:Struts1.38+Ibertis2.3 4.功能描述: 项目后台和前台.后台是网站管理员对商务网的产品和商品的分类进行管理,客户的会员管理前台显示最新的产品信息,会员注册登 陆后可以享用购物车和网上订购产品功能. 使用说明: 1.数据库配置,在ORACLE10的客户工具运行ddl里的CREATE TABLE SHOP.sql创建数据库表 2.用MyEclipse上传项目到tomcat5.5中,然后启动tomcat. 3.系统后台数据管URL是http://localhost:8080/omegshop/admin/adminLogin.jsp 默认的用户名是admin,密码admin. 4.系统前台URL是http://localhost:8080/omegshop/index.jsp, 注册用户名: member 密码: member
标签: Enterprise MyEclipse Workbench gt
上传时间: 2015-12-07
上传用户:onewq
′问题描述: 设 X[0:n-1]和 Y[0:n-1]为 2 个数组,每个数组中含有 n 个已排好序的数。试设计一个 O(logn)时间的算法,找出X和Y的2n个数的中位数。 例如,当n=7,X=[1,3,6,7,8,9,10];Y=[2,4,5,11,12,13,14]时,X 和Y 的中位数是7。
上传时间: 2013-12-26
上传用户:咔乐坞
1.under bootloader 1)cd your_dir/mrua_EM8620L_2.5.115.RC8_dev.arm.bootirq/MRUA_src/loader 2)将flash_v3.c改名为flash.c替换原来的flash.c 3)编译 2.under linux kernel 1)cd armutils_2.5.108.0/build_arm/linux-2.4.22-em86xx/drivers/mtd 2)将mtdblock_v4.c改名为mtdblock.c替换原来的mtdblock.c 3)cd armutils_2.5.108.0/build_arm/linux-2.4.22-em86xx/drivers/mtd/chips 4)将cfi_cmdset_0002_v4.c改名为cfi_cmdset_0002.c替换原来的cfi_cmdset_0002.c 5)编译。 note:如果在使用cat等指令写flash的过程中出现下面的信息: Flash write to Buffer aborted @ 0x****** = 0x****** 是正常信息。
标签: bootloader MRUA_src your_dir bootirq
上传时间: 2013-12-17
上传用户:阳光少年2016