单片机演奏乐曲
STC15单片机无源蜂鸣器演奏歌曲RGB灯跟随节奏闪烁程序

敬告:没有51单片机基础的人请慎重下载高质量实用性51单片机STC15W系列程序(2),STC8A系列可参考STC15单片机无源蜂鸣器演奏歌曲RGB灯跟随节奏闪烁程序节选歌曲《骑上我心爱的小摩托》开头部分一段整体程序:#include "STC15.h"#include "intrins.h"#define MAIN_Fosc 11059200Lsbit BUZZ = P3^7;sbit KEY=P2^5;sbit R_color = P1^4;sbit G_color = P1^5;sbit B_color = P3^4;unsigned char cycle_value;bit flag;bit enableBuzzer;bit keyflag;unsigned int code note[]={523, 587, 659, 698, 784, 880, 988,};unsigned int code notefre[]={65536-((MAIN_Fosc/523)/2), 65536-((MAIN_Fosc/587)/2), 65536-((MAIN_Fosc/659)/2),65536-((MAIN_Fosc/698)/2),65536-((MAIN_Fosc/784)/2),65536-((MAIN_Fosc/880)/2),65536-((MAIN_Fosc/988)/2) };void Timer0_config();void PlayMusic();void delay_ms(unsigned int x) {unsigned i,j;for(i=0;i<x;i++){for(j=0;j<1100;j++);}}void Key_Scan(){if(KEY==1){delay_ms(10);if(KEY==1){keyflag = 1;}}}void RGB(){switch(cycle_value){case 0:R_color = 1;G_color = 0;B_color = 0;cycle_value = 1;break;case 1:R_color = 0;G_color = 1;B_color = 0;cycle_value = 2;break;case 2:R_color = 0;G_color = 0;B_color = 1;cycle_value = 0;break;default:break;}}void main(){P3M1 &= 0x7F; P3M0 &= 0x7F;P2M1 &= 0xDF; P2M0 &= 0xDF;P1M1 &= 0xCF; P1M0 |= 0x30;//P14,P15 pull output P3M1 &= 0xEF; P3M0 |= 0x10;//P34 pull outputTimer0_config();EA = 1;while(1){Key_Scan();if(keyflag){keyflag = 0;PlayMusic();}}}void PlayMusic(){unsigned char beat;//present beatunsigned int timer;//timerunsigned int totalTime;//timerunsigned int soundTime;//sount timeunsigned char code MotoNote[] = {0,1, 2,3, 4,3,3, 4,5, 5, 0, 0,0,6, 6,6, 6, 5, 4, 5, 0, 0, };unsigned char code MotoBeat[] = {2,2, 2,2, 2,1,1, 2,2, 6, 4, 4,2,2, 2,2, 2, 4, 2, 6, 4, 4,};for(beat=0;beat<sizeof(MotoBeat);){while(!flag);flag = 0;if(timer==0){totalTime =(note[MotoNote[beat]]*MotoBeat[beat])>>2;soundTime = totalTime - (totalTime>>2);TH0 = notefre[MotoNote[beat]]>>8;TL0 = notefre[MotoNote[beat]];enableBuzzer = 1;timer++;}else{if(timer>=totalTime){timer = 0;beat++;}else{timer++;if(timer==soundTime){enableBuzzer = 0;}}}}}void Timer0_config(){TMOD &= 0xF0;//16bit auto reloadAUXR |= 0x80;//1TTH0 = 0xFF;TL0 = 0x00;ET0 = 1;TR0 = 1;}void Timer0_interrupt() interrupt 1 {if(enableBuzzer){BUZZ = ~BUZZ;RGB();}else{BUZZ = 1;R_color = 0;G_color = 0;B_color = 0;}flag = 1;}。
用51单片机演奏音乐

单片机演奏音乐一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
在音乐中所谓“音调”,其实就是我们常说的“音高”。
在音乐中常把五线谱中央C 上方的A 音定为标准音高,其频率f=440Hz。
当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1 高一个倍频程, 在音乐中1与.1(1前面的点应在1的上面),2与.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 个音阶的分度基本上是以对数关系来划分的。
如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。
知道了一个音符的频率后,常采用的方法就是通过一个延时程序,延时对应频率周期的二分之一周期(即t=1/2f)后,将单片机上连接蜂鸣器的I/O ()口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将不同的延时时间值t赋给延时程序即可实现。
例:我门以440Hz 的声音频率来计算,其对应的时间t=1/2f=1/2*440=1136us 但在实际程序中常采用查表的方式来取的t值,而为了节约存储器空间则将t值以字节来进行存储,由于大部分t值都大于256。
所以,需将t值除以一个常数(t/x)使其小于256。
那么,在查表取得t 值后就要再乘上该常数后再赋给延时程序。
以下为常用音符对应的频率和二分之一周期值t :21171426-0x152#12414020x1431316380<0x13413933580x124#1476340;0x11515633200x105#1658302,0x0f617552840x0e6#1860268}0x0d719712540x0c一首乐曲的每一个音符除了频率之外,还会有不同的节拍,确定节拍的方法有以下几种:1.在一张乐谱中,我们经常会看到这样的表达式,等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,就是用来表示节拍的。
51单片机蜂鸣器奏乐(生日快乐)

next: mov a,30h ;简谱码指针载入A
mov dptr,#table ;至table取简谱码
movc a,@a+dptr
mov r2,a ;取到的简谱码暂存于R2
jz end0 ;是否取到00(结束码)?
anl a,#0fh ;不是,则取低4位(节拍码)
dw 64684,64777,64820,64898
dw 64968,65030,65058,65110
dw 65157,65178,65217
table:
;1
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
mov 22h,a ;存入(22H).
rl a ;乘2
mov dptr,#table1 ;至table1取相对的高位字节计数值
m高位字节存入TH0
mov 21h,a ;取到的高位字节存入(21H)
mov a,22h ;再载入取的的音符码
inc 30h ;取简谱码指针加1
jmp next ;取下一个码
end0: clr tr0 ;停止timer0
jmp start0 ;重复循环
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;time0中断服务子程序用来产生相应的音调脉冲频率。
;4
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00
用单片机播放音乐的程序实现

用单片机播放音乐的程序实现殷松瑜 江苏商贸职业学院 226011音、高音和超高音,四个八度共28个音符。
MUSIC_TAB 自定义乐曲数据表,演奏乐曲时根据不同音符的数值,从B_ZQ_TAB 中找到定时时间初始值,送入定时器即可控制发音的音调。
例如0xF8和0x89送到定时器,定时器产生中断输出的方波,人们就听到低音DO 的声音。
单片机发出不同频率的方波,人听起来就是不同音调的音乐。
把这个音调数据表放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到下表中频率的声音。
这个表中每三个数字,说明了一个音符,它们分别代表;第一个数字是音符的数值1234567之一,代表哆来咪发嗦拉西;第二个数字是0123之一,代表低音、1/4节拍与节拍码对照1/8节拍与节拍码对照3 编码以李叔同大师的《送别》的前二小节来说明转换的方法。
这部分的歌词是:“长亭外,古道边,芳草碧连天”;这部分的乐谱是:| 5 35 1 - | 6 1 5 - |512321|2---|。
根据乐谱可以写出《送别》前二小节的数据表。
本程序用这个数据表播放《送别》的前四小节。
(如图2)4 51单片机演奏乐曲的程序SPK BIT P1.7 ;指定扬声器接口ORG 0000H LJMP START ORG 000BH LJMP T0_INT ORG 001BH LJMP T1_INT;------------------------------------------------------------B_ZQ_TAB: ;定时半周期初始值数据表DW 63625, 63833, 64019, 64104, 64260, 64400, 64524 ;低音区:1 2 3 4 5 67DW 64580, 64685,64778, 64820, 64898, 64968, 65030 ;中音区:1 2 3 4 5 6 7DW 65058, 65110, 65157, 65178, 65218, 65252, 65283 ;高音区:1 2 3 4 5 6 7D W 65297 自定义 分别是音名、拍为单位)嗦,中音, 4个1/8拍咪,中音, 2个1/8拍嗦,中音, 2个1/8拍哆,高音, 8个1/8拍啦,中音, 4个1/8拍哆,高音, 4个1/8拍 嗦,中音, 8个1/8拍嗦,中音, 4个1/8拍哆,中音, 2个1/8拍来,中音, 2个1/8拍咪,中音, 4个1/8拍来,中音, 2个1/8拍哆,中音, 2个1/8拍来,中音, 16个1/8结束标记#11H ;T1, T0皆以200ms,为1/8拍MOV DPTR, #MUSIC_TAB;-------------------下面是从自定义乐曲数据表中读取三个字节M_LOOP:CLR A MOVC A, @A+DPTR MOV R2, A INC DPTR CLR A MOVC A, @A+DPTR MOV B, A INC DPTR CLR A MOVC A, @A+DPTR JZ START;-------------------下面是根据前两个字节,在半周期初值表中找网络出版时间:2014-01-10 22:38网络出版地址:/kcms/detail/11.3571.TN.20140110.2238.1074.htmlMOV R3, A INC DPTR MOV 44H, DPL MOV 45H, DPH MOV A, #7MUL AB ADD A, R2JZ JI_SHI DEC A ADD A, ACC MOV R2, A MOV DPTR, #B_ZQ_TAB MOVC A, @A+DPTR MOV TH0, A MOV 41H, A MOV A, R2INC A MOVC A,@A+DPTR MOV TL0, A MOV 40H, A SETB TR0JI_SHI:MOV 42H, #100MOV 43H, #0MOV A, R3;用第三个字节控制时长CJNE A, 43H, $CLR TR0SETB SPK MOV DPL, 44H MOV DPH, 45H SJMP M_LOOP;------------------------------------------------------------T0_INT:MOV TL0, 40H MOV TH0, 41H CPL SPK RETI;------------------------------------------------------------T1_INT:MOV TL1, #24 ;(65536-1000) MOD 256MOV TH1, #252 ;(65536-1000) / 256定时1ms@12MHzDJNZ 42H, T1_END MOV 42H, #200 ;此数值越大,节奏越慢INC 43H ;43H 单元每隔200ms,自动加一次一T1_END:RETI;============================================================END 图1图2。
单片机演奏音乐音调和节拍确定方法

单片机演奏音乐时音调和节拍的确定方法单片机演奏音乐时音调和节拍的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
在音乐中所谓“音调”,其实就是我们常说的“音高”。
在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz。
当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程, 在音乐中1(do)与i ……正好相差一个倍频程,在音乐学中称它相差一个八度音。
在一个八度音内,有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 = 2^16 = 65536,THL为定时器待确定的计数初值。
单片机音乐盒原理

单片机音乐盒原理单片机音乐盒是一种利用单片机技术实现的自动演奏乐曲的装置。
它在实现自动演奏的基础上,还可以通过编程控制乐曲的演奏方式和效果,具有一定的创造性和个性化。
单片机音乐盒的原理主要包括以下几个方面:数据存储与处理、音频输出、外部输入与控制以及电源供给等。
首先,单片机音乐盒需要将乐曲的数据进行存储与处理。
一般情况下,音乐盒会使用存储介质(如EEPROM或Flash)来存储乐曲的音符信息。
音符信息一般以二进制形式存储,其中包括音符的频率、持续时间等信息。
单片机通过读取存储介质中的音符信息,将其转换成特定的音频信号。
其次,单片机音乐盒需要将音频信号转换成模拟音频输出。
音乐盒的音频输出一般采用DAC(数字模拟转换器)来实现。
DAC可以将数字音频信号转换成模拟音频信号,然后通过音箱或耳机等设备放大和播放出来。
通过控制DAC的输出,可以实现不同音符的演奏以及音量、音调的调节。
第三,单片机音乐盒需要提供外部输入与控制接口。
这些接口可以用来连接各种传感器或按钮,以实现对音乐演奏的控制。
例如,可以通过按钮输入来实现播放、停止、切换乐曲等操作;也可以通过光敏传感器来实现环境光强度控制演奏速度等等。
这些外部输入与控制接口可以通过单片机的输入输出端口进行连接,并通过编程来处理和响应相应的操作。
最后,单片机音乐盒需要电源供给,以提供正常的工作能量。
音乐盒通常使用直流电源供电,可以通过连接电池或者适配器等方式进行供电。
为了保护音乐盒的稳定工作和延长使用寿命,还可以在电源电路中加入稳压电路和过载保护电路等元件,以保证音乐盒的正常工作。
总结来说,单片机音乐盒利用单片机的数据存储与处理能力,通过读取存储介质中的音符信息并进行处理,然后利用DAC将其转换成模拟音频信号输出,同时通过外部输入与控制接口接收和响应用户的操作指令,最终通过电源供给实现整个音乐盒的正常工作。
这就是单片机音乐盒的基本原理。
通过合理设计和编程,可以实现丰富多样的音乐效果,给人们带来不同的听觉享受。
如何让单片机演奏音乐

88河南科技2011.03 下如何让单片机演奏音乐河南信息工程学校 李 峡分析图2可知,1KHz 的信号周期为1ms ,信号电平每0.5ms 取反1次,因此100ms 内信号电平要变化200次。
同理,500Hz 信号周期为2ms ,信号电平为每1ms 取反1次,200ms 内信号电平也要变化200次。
只要在单片机的I/O 口循环输出1KHz (持续100ms )和500Hz (持续200ms )的信号就可以了,输出信号时的持续时间可以用软件产生,也可以用定时/计数器产生。
以软件延时为例,可编程如下:MAIN: MOV R0, #DATA1 ;R0中存放循环次数DATA1,决定第1种音 频的持续时间LOOP1: CPL P1.0;输出取反,产生第1种音频信号LCALL DELAY1;DELAY1的延时时间决定第一种音频信号频率DJNZ R0, LOOP1;第1种音频信号持续一定时间,直到R0为0MOV R0, #DATA2 ;R0中存放循环次数DATA2,决定第2种音频的持续 时间LOOP2: CPL P1.0;输出取反,产生第2种音频信号LCALL DELAY2;DELAY2的延时时间决定第2种音频信号的频率DJNZ R0, LOOP2;第2种音频信号持续一定时间,直到R0为0LJMP MAIN;依次循环以上程序段中DELAY1、DELAY2为延时子程序,只要让DA-LAY1的延时时间为0.5ms ,让DALAY2的延时时间为1ms ,每次向R0中存放循环次数200,即可得到图2所示的双音频信号。
修改DE-LAY1、DELAY2,可以改变2种音频信号的频率;而改变R0的值,则可以改变每种音频持续的时间。
三、让单片机演奏一首乐曲要想让单片机演奏乐曲,首先要了解一些简单的乐理知识,这样才能进行编程。
所有音乐都由4个基本要素构成,即音的高低、音的长短、音的力度和音质,而其中最重要的是“音的高低”和“音的长短”。
单片机音乐播放器应用 实现简单的音乐播放功能

单片机音乐播放器应用实现简单的音乐播放功能单片机音乐播放器应用音乐是人们生活中不可或缺的一部分,而在现代科技的不断发展下,单片机音乐播放器应用已经成为许多人追求的目标。
本文将介绍如何实现一个简单的单片机音乐播放器功能,让您能够轻松享受音乐的魅力。
一、硬件准备在开始之前,我们需要准备一些硬件设备,以确保音乐播放器能够正常工作。
首先,我们需要一块单片机开发板,例如STC89C52,这是一款常用的单片机开发板;其次,我们需要一个音频解码模块,例如DFPlayer Mini,他可以轻松解码并播放存储卡上的音乐文件;最后,我们还需要一个音箱或者耳机,用于输出音乐。
二、软件编程1. 搭建开发环境首先,我们需要安装MIDE-51集成开发环境,它是STC89C52单片机所使用的开发工具。
安装完成后,可以通过打开MIDE-51来创建一个新的工程。
2. 编写代码首先,我们需要在代码中包含一些必要的库文件,以便使用一些功能函数。
例如,我们可以通过以下代码片段引入DFPlayer Mini音频库文件:```c#include <DFPlayer_Mini_Mp3.h>```接下来,我们可以通过定义一些常量或变量来控制音乐的播放,例如:```cconst int playButton = 2; // 播放按钮连接到单片机的2号引脚const int nextButton = 3; // 下一首按钮连接到单片机的3号引脚const int previousButton = 4; // 上一首按钮连接到单片机的4号引脚```然后,我们可以在主循环中不断检测按钮的状态,并根据按钮的状态来控制音乐的播放:```cvoid loop() {if (digitalRead(playButton) == HIGH) { // 如果播放按钮被按下DFPlayer_Mini_Mp3.play(); // 播放音乐}if (digitalRead(nextButton) == HIGH) { // 如果下一首按钮被按下 DFPlayer_Mini_Mp3.next(); // 播放下一首音乐}if (digitalRead(previousButton) == HIGH) { // 如果上一首按钮被按下DFPlayer_Mini_Mp3.previous(); // 播放上一首音乐}}```通过上述代码,我们可以实现简单的音乐播放功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专科生毕业设计(论文)姓名: == 学号:==系部:信息工程系专业:电子信息工程技术班级:===设计题目:单片机演奏乐曲设计指导教师: == 职称 ==2011年6月南京摘要本文是应用MCS-51单片机原理和控制理论设计乐曲演奏控制器的硬件电路,并利用C语言进行程序设计。
通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音调的音乐,再利用延迟来控制发音时间的长短。
把乐谱转化成相应的定时常数就可以从发音设备中演奏出悦耳动听的音乐。
此外,其还可以应用多种领域,比如可以应用于门铃、闹铃等各种系统。
总之,乐曲演奏器有广泛的用途,而且有很强的生命力。
这种控制电路结构简单,可靠性高,应用性强;软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。
在此可以为大家演奏两首乐曲《好人一生平安》。
关键词:AT89C51单片机;乐曲; C语言。
目录1 绪论 (1)1.1 引言 (1)1.2 选题背景 (1)1.3 选题意义 (1)2单片机演奏乐曲设计的理论基础 (1)2.1单片机演奏乐曲的基本原理 (2)2.2 单片机演奏乐曲的控制 (2)3 单片机 (3)3.1单片机的概念及单片机的种类 (3)3.1.1 单片机及单片机系统 (3)3.1.2单片机程序设计语言及开发环境简介 (4)3.2 常用单片机的应用领域 (4)3.3 单片机的发展趋势 (5)4 单片机演奏乐曲 (5)4.1本设计的目的和意义 (5)4.2本设计的电路原理图及元器件 (5)4.3本设计的程序设计 (8)5 总结 (10)参考文献 (11)致谢 (11)1 绪论1.1 引言为了降低成本,在最小硬件设计的基础上,系统的功能尽可能用软件来实现,这样的控制电路不但结构简单,可靠性高,应用性强;并且软件程序适应范围广,单片机演奏乐曲就是充分利用了上述的特点进行设计的,对于不同的音乐只需要改变相应的定时常数即可。
1.2 选题背景随着科学技术的发展和进步,各种高科技玩具应运而生,并且各种智能玩具层出不穷,如何给玩具添加更多的功能成为厂家在商业竞争中处于优势地位的主要手段。
所以,我觉得,给玩具添加乐曲演奏不失为良策。
当然,这种演奏不但是一首乐曲的演奏,还可以是各种大自然的各种的动物的喊叫。
试想一下,一只玩具狗不但会发出“汪汪”的声音,而且还会用妈妈的声音唱摇篮曲,孩童的声音交谈,那该是一件让人多么愉悦的事啊!总之,用单片机实现乐曲演奏的功能,既简单轻便,又易于实现,并且成本比古典乐器低廉得多,更重要的是,基于单片机控制的乐曲演奏能够发出一般乐器难以实现的音效。
1.3 选题意义该设计课题使我们能够掌握用定时器TO的方式0控制播放乐曲原理和设计方法,对大学期间所学习的一些理论进行了实践,使我们对所学过的理论知识有了新的认识。
并且通过该设计课题掌握了MC-51单片机的的软硬件开发工具的使用方法,为以后从事相关行业的工作积累了实际工作经验。
目前我国的信息行业发展迅速,因此此课题不论是对自己的就业还是对我国单片机应用技术的发展都有非常现实与积极的意义。
2单片机演奏乐曲设计的理论基础单片机演奏乐曲的基础理论包括半导体器件、数字电子电路、大规模集成电路、单片机及微机等各个方面,既有硬件又有软件。
上述各个领域都有自成体系,本文无法一一尽述,只能以显示屏为主线进行讨论,主要阐述了单片机演奏乐曲的应用基础和工作原理,以及电路的构成和工作原理。
2.1单片机演奏乐曲的基本原理单片机演奏乐曲是通过控制定时器时间的不同来产生不同频率的方波,用于驱动喇叭发出不同的音调,再利用延时来控制发音时间的长短,既控制节拍,把乐曲中的音符和相应的节拍换成定时常数和延时常数存放在存储器中。
这样就可以听到悦耳的音乐了。
2.2 单片机演奏乐曲的控制2.2.1系统硬件组成1.、89C51单片机一个;开关一个;1uf电容一个,220μf电容一个,10μf电容三个,30pf电容两个;11.0592MHz晶振一个;绿色发光二极管一个;5.1kΩ、510Ω、100kΩ、100Ω、10kΩ各一个电阻;集成电路IC;还有相关的电线等。
2、4×4键盘3、三节电池4、喇叭一个2.2.2实现方法1、音频控制要让蜂鸣器发出某音调的声音,只要给蜂鸣器输送该音调频率的电平信号就可以了。
由于单片机I/O口的输出只有高电平“1”和低电平“0”两种状态,因此向蜂鸣器输送的电平信号实际上就是该音频的方波。
例如中音“1”的频率为532Hz(如图1所示,表示了音调与频率的对应关系),它的周期为1/532s,即1..91ms。
因此,只要向蜂鸣器输送周期为1.91ms的脉冲方波电平信号就能发出532Hz 的音调,该方波的半周期为1.91/2=0.955ms。
为此,需要利用定时器的中断,让输送给蜂鸣器的电平信号每0.955ms取反一次即可。
因为所选的单片机的晶振为11.0592MHz,它的一个机器周期为12×(1/11.0592)μs=1..058μs,因此需要的机器周期总数为955μs/1.085μs=880即定时器的定时常数就应取为880。
根据上述分析,发出频率为f的音频时,定时常数C计算公式为(106/2f)μs/1.085μs=460 830/f=CT0工作于方式0,最大计数为8192,完全可以满足各音频定时常数设置的需要。
可以证明,在已知定时常数为C的条件下,13位计数器的高8位和低5位的初值可由以下公式设定:TH0=(8192-C)/32; //证明这是13位计数器TH0高8位的赋值方法TL0=(8192-C)%32; //证明这是13位计数器TL0低5位的赋值方法2、节拍控制因为本例简朴的节拍为每分钟72拍,则每个节拍需时间:1000×60ms/72=833ms根据乐谱知识,乐谱第一行的第1小节各音调的节拍如下:★“2”为1拍,需延时833ms★“32为两个1/4拍,需分别延时833/4=208ms★“1”为1拍,需延时833ms★“6.”为1/4拍,需延时208ms★“1”为1/4拍,需延时208ms★“6.”为两个1/2拍,需延时833/2=416ms根据上述分析,可以取1/4拍(约200ms)为1个延时单位,若某音调为1/2拍,则延时2个单位;若某音调为1拍,则延时4个单位。
3、音调与节拍的存储可以将简谱中所有音调的频率及其节拍分别存储于两个数组,然后依次从数组中读出频率,再根据频率和定时器延时常数的计算公式即可由定时器中断控制发出该音调的音频,其发出声时间可由节拍控制(即1~4个延时单位)。
4、音调的宏定义在音调频率存储中,直接将频率存入数组,显然不如以“dao、rei、mi、fa、sao、…”的形式存储方便。
但是,为了让单片机认识“dao、rei、mi、fa、sao、…,需要在程序开头处对各音调的频率进行宏定义,例如低音6(即6.)的频率为440Hz;中音6的频率为880Hz;高音6的频率为1760Hz。
所以可以对这三个频率进行如下宏定义(其他类似):#define 1_la 440 //将“1_la”宏定义为低音“6”d 频率440Hz#define la 880 //将“la”宏定义为中音“6”d 频率880Hz#define h_la 1760 //将“h_la”宏定义为高音“6”d 频率1760Hz 有了上述宏定义,只要直接将“dao、rei、mi、fa、sao、…”及其节拍存入数组,再由单片机读出处理就可以播放音乐了。
3 单片机3.1单片机的概念及单片机的种类3.1.1 单片机及单片机系统单片机是微型计算机发展的一个分支,是一种专门面向控制的微处理器件,故又称之为微控制器(Micro Controller Unit,MCU)。
单片机通常以单一芯片的形式出现,但是它已具有了微型计算机所包含的基本组成结构和特有的控制应用功能,是一种芯片级的微型计算机。
另外,由于单片机的体积、结构和功能特点,在实际应用中可以完全融入应用系统之中,故而也称为嵌入式微控制器(Embedded Micro-Controller)。
最基本的单片机系统由单片机芯片和软件程序共同组建而成,是用户为了实现某种控制用途的需要而设计的实际装置。
在单片机系统中,单片机芯片内部的中央处理单元(CPU)处于核心地位,CPU通过执行软件程序调动硬件电路完成控制功能。
根据这种工作方式,单片机系统可以划分为硬件和软件两个组成部分。
1. 硬件部分单片机系统的硬件部分是包括CPU在内的所有硬件电路,按照硬件电路的功能和配置大致可以分为以下3类1) 基本功能类基本功能类硬件包括:CPU(用于运算、控制)、RAM(用于数据存储)、ROM(用于程序存储)、I/O设备(实现串行、并行输入/输出接口)及时钟电路(建立工作时序)。
在微型计算机中,上述部件被分成若干块芯片,安装在一块称之为主板的印刷线路板上,在程序的指挥下完成计算机的基本运算操作功能。
但是在单片机中,除了时钟电路之外,其余部分一般均被集成到一块半导体芯片上,所以被称为单片机,即单芯片微型计算机。
2) 控制功能类控制功能类硬件包括:定时器/计数器(用于时间设定/事件记录)和中断装置(实现实时处理)。
使用这类硬件是为了实现单片机的控制功能,即定时控制、顺序控制和实时控制等基本控制功能。
作为面向嵌入式控制的特色,这类部件通常也集成在单片机芯片内部。
3) 辅助功能类辅助功能类硬件包括:A/D(模/数转换)和D/A(数/模转换,通常采用PWM形式)等部件。
这类部件根据芯片的配置不同不一定集成在单片机芯片上,需要用户根据使用要求选择。
2. 软件部分与微型计算机的运行原理相似,单片机系统的运行也需要软件系统的支持,但是由于处理任务的不同,其复杂程度相对较低。
根据单片机软件所要实现的功能,可以将软件划分为管理程序和应用程序两类。
1) 管理程序管理程序是单片机系统的监控程序,主要用于控制过程复杂,控制量较大的装置,例如测控仪器、仪表等。
对于仅完成简单控制任务的单片机系统一般可以相应简化。
2) 应用程序应用程序是针对具体的控制动作而编写的程序,是实现控制具体功能的程序基础,通常以子程序模块的形式出现,便于执行控制动作时调用。
3.1.2单片机程序设计语言及开发环境简介单片机程序设计语言主要是指在开发系统中使用的语言。
在单片机开发系统中可以使用机器语言、汇编语言和高级语言。
机器语言采用机器码,是单片机能够直接识别的程序语言,汇编语言是以助记符表示机器码的程序设计语言。
机器语言和汇编语言都是高效的计算机语言,实时性较强,但它们都是面向机器的语言,通用性差,编程效率低。
单片机的开发过程涉及3项内容,即编程、纠错和仿真。
一般采用PC机内安装的集成开发环境(IDE)软件进行开发调试。