单片机可循环国歌程序
如何编写51单片机音乐程序

如何编写51单片机音乐程序正好做了一个音乐程序,贡献出来给你吧,希望你能满意。
电路连接很简单,在P3.0端口接个蜂鸣器,不过效果一般。
如果想效果好点,就加个放大电路,接个小功率喇叭就行。
因为这里发电路不方便,所以如果需要放大电路,可加我QQ:7468485。
音乐程序的设计原理和程序如下:设计原理⑴总体原理:乐曲中不同的音符,实质就是不同频率的声音。
通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。
⑵单片机产生不同频率脉冲信号的原理:1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。
2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下:例如,频率为523Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。
计数脉冲值与频率的关系公式如下:N=Fi/2/Fr(N:计数值,Fi:内部计时一次为1uS,故其频率为1MHz,Fr:要产生的频率)⑶其计数值的求法如下:T=65536-N=65536-Fi/2/Fr计算举例:设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr低音DO的T=65536-500000/262=63627中音DO的T=65536-500000/523=64580高音DO的T=65536-500000/1047=65059⑷ C调个音符频率与计数值T的对照表如下表所示:表9.1 C调各音符频率与计数值T的对照表音符频率(Hz)简谱码T值音符频率(Hz)简谱码T值低1DO 262 63628 #4FA# 740 64860#1DO# 277 63731 中5SO 784 64898低2RE 294 63835 #5SO# 831 64923#2RE# 311 63928 中6LA 880 64968低3M 330 64103 #6 932 64994低4FA 349 64103 中7SI 988 65030#4FA# 370 64260 高1DO 1046 65058低5SO 392 64260 #1DO# 1109 65085#5SO# 415 64331 高2RE 1175 65110低6LA 440 64400 #2RE# 1245 65124#6 466 64463 高3M 1318 65157低7SI 494 64524 高4FA 1397 65178中1DO 523 64580 #4FA# 1480 65198⑸每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。
基于51单片机自动升国旗控制系统

基于51单片机自动升国旗控制系统摘要:该设计的主要目的是解决在人为升旗的时候容易产生误差这一问题。
设计的解决思路是采用基于51单片机的中控系统来控制升旗的速度和升旗过程中国歌的奏唱来保持同步。
在最大程度上解决手动升旗的弊端。
该设计采用步进电机来作为传动系统来控制国旗的升降,用语音模块来模拟国歌的奏唱,采用LCD模块来显示国旗升降的进度。
采用按键模块来作为人机交互的途径,通过按键模块来控制国旗的升降。
关键词:计算机科学及技术;51单片机;步进电机;1引言升国旗代表了国家的主权和独立的象征,对于一个国家的尊严和国威具有重大意义。
举行升旗仪式是对每个公民进行爱国主义教育、国旗意识教育、团体意识教育的重要途径;同时也能衡量公民的素质。
但是传统形式上的手动升降国旗,显现出了很多弊端,比如,升旗不能与国歌同步,不能接近开关检测防止误差等。
基于以上问题的考虑,本文设计的自动升国旗控制系统【1】,具有操作简单,携带方便,价格相对低廉等优点。
主要的目的是通过该设计的使用,来提高国旗升降过程中的稳定性和可靠性。
2系统总体设计方案系统需要能够完成升旗过程,升旗有三种模式,分别为升旗、降旗、升半旗。
在升旗过程中,需要做到,升旗时国旗匀速上升的同时演奏国歌,到达顶端时,国歌自动停止;降旗时,国旗自动匀速下降,到达底端自动停止;升半旗时,国旗先从底端升到顶端(同时奏国歌),再自动降至旗顶与杆顶之间的距离为旗杆全长的三分之一处。
3系统硬件设计3.1 系统的硬件设计框图该系统以单片机作为重要的控制中心,整个系统包括键盘控制模块、液晶显示模块、电机控制模块、LED显示模块、语音录放模块。
3.2 系统的硬件设计流程根据各个模块的功能,可以将整个设计分为以下几个模块:按键控制、延时、语音录放、LED显示、电机控制、液晶显示等几个子程序。
各个主要模块的功能分别为:电机控制模块:该系统中用到电机采用四项步进电机【2】,电机控制模块主要负责国旗的升降控制,模块接收到来自中控系统的信号后,开始工作,正转升旗,反转降旗。
单片机播放音乐的编程方法网络整理版

我将阐述播放音乐的软件编程方法。
原理:1’要让单片机控制扬声器发出音调只要计算出某一音频的频率,进而计算出周期,然后将这一周期除以二,即为半周期的时间。
利用定时器计数这半个周期。
每当计数到这个时间就将输出I/O口取反,重复这个步骤就可以得到这个音调的脉冲。
2’利用80C51扥内部定时器使用其工作在计数器模式MODE1下,改变计数值TH0,及TL0易产生不同频率的方法。
例如长生频率为532HZ的脉冲,其周期为T=1/523=1912us。
因此只要计数器计数956/1us=956。
在每次计数956次后将I/O口取反,就可得到中音DO(523HZ)。
计数脉冲值与频率的关系公式如下:N=Fi÷2÷Fr N:计算值Fi:内部计数时一次计数为1us,故其频率为1MHZ.3’其计数值的求法如下;T=65536-N=65536-Fi÷2÷Fr 其计数值的求法如下例如:设K=65536,F=1000000=Fi=1MHZ,求低音DO(261HZ),中音DO(523HZ),高音DO(1046HZ)的计算值。
T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr。
低音DO的 T=65536-500000/262=63627中音DO的 T=65536-500000/523=64580高音DO的 T=65536-500000/1047=650594’ C调各音符频率与计数值T的对照表如下所示.在音乐中所谓音调其实就是我们所说的音高,在音乐中我们常把C 调上方的A作为标准音调,其频率等于440HZ。
当两个声音信号的频率相差一倍是也即f1=2f2,则称相差一个倍频程,在音乐中低音1和中音1,低和中2正好相差一个倍频程在音乐上称他们相差一个八度音,一个八音度有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.如果我们知道了这十二个基本音调的频率,我们就可以根据倍频程的关系得到其他调。
单片机小程序

单片机最小系统播放欢乐颂及最炫民族风片段学习单片机,制作单片机最小系统是每个单片机爱好者的都经历过的阶段,单片机最小系统制作好有什么用呢?为提高单片机爱好者学习制作单片机最小系统兴趣,这里介绍一个有趣的单片机小程序,就是用单片机最小系统播放欢乐颂及最炫民族风片段。
在按下图制作好单片机最小系统后,再增加三只元件:1个电阻、1个S9012三极管,1个8欧的小喇叭后,即可完成这个单片机最小系统播放欢乐颂及最炫民族风片段的小试验,单片机爱好者通过这个小试验后,一定会大大增强对单片机学习的兴趣。
这个单片机最小系统播放欢乐颂及最炫民族风片段的小试验,由于电路比较简单,所以这里就不画出原理图了,直接给出试验的PCB图,感兴趣的爱好者可以按图进行焊接制作,制作好后向单片机内烧写程序后安装上去就可以工作,感受一下单片机的无穷勉力。
焊好的单片机最小系统播放欢乐颂及最炫民族风片段试验板的实物照片播放板的单片机最小系统PCB图焊好的单片机最小系统播放试验板未装单片机的照片焊好的单片机最小系统播放欢乐颂及最炫民族风片段试验板的实物反面照片/****************************************************************************** //**程序名称:单片机播放欢乐颂与最炫民族风片段/**其他:用于时钟周期为12MHz的STC89C52单片机/**由电子乐屋整理制作,更详细的制作资料请到电子乐屋下载/mifklrxdjqbadoq/****************************************************************************** /#include<reg52.h>sbit BUZZER = P3^2;#define uchar unsigned char#define uint unsigned int#define REST 36 //休止符#define A 0 //低音1#define AB 1 //低音1.5#define B 2 //低音2#define BC 3 //低音2.5#define C 4 //低音3#define D 5 //低音4#define DE 6 //低音4.5#define E 7 //低音5#define EF 8 //低音5.5#define F 9 //低音6#define FG 10 //低音6.5#define G 11 //低音7#define L 12 //中音1#define LM 13 //中音1.5#define M 14 //中音2#define MN 15 //中音2.5#define N 16 //中音3#define O 17 //中音4#define OP 18 //中音4.5#define P 19 //中音5#define PQ 20 //中音5.5#define Q 21 //中音6#define QR 22 //中音6.5#define R 23 //中音7#define S 24 //高音1#define SU 25 //高音1.5#define U 26 //高音2#define UV 27 //高音2.5#define V 28 //高音3#define W 29 //高音4#define WX 30 //高音4.5#define X 31 //高音5#define XY 32 //高音5.5#define Y 33 //高音6#define YZ 34 //高音6.5#define Z 35 //高音7//音阶uchar code m_note[][2] = {{248,136},{248,243},{249,88},{249,184},{250,18},{250,103},{250,184},{251,3},{251,75}, {251,143},{251,206},{252,11},{252,67},{252,121},{252,172},{252,219},{253,9},{253,51}, {253,91},{253,129},{253,165},{253,199},{253,231},{254,5},{254,33},{254,60},{254,85}, {254,109},{254,132},{254,153},{254,173},{254,192},{254,210},{254,227},{254,243},{255,2}, {0,0},};//音符(1对应三十二分音符,32对应全音符)uchar code display[][2] = {//欢乐颂{N,8},{N,8},{O,8},{P,8},{P,8},{O,8},{N,8},{M,8},{L,8},{L,8},{M,8},{N,8},{N,12},{M,4},{M,8},{0xff,8}, {N,8},{N,8},{O,8},{P,8},{P,8},{O,8},{N,8},{M,8},{L,8},{L,8},{M,8},{N,8},{M,12},{L,4},{L,8},{0xff,8}, {M,8},{M,8},{N,8},{L,8},{M,8},{N,4},{O,4},{N,8},{L,8},{M,8},{N,4},{O,4},{N,8},{M,8},{L,8},{M,8},{E,8}, {N,8},{N,8},{O,8},{P,8},{P,8},{O,8},{N,8},{M,8},{L,8},{L,8},{M,8},{N,8},{M,12},{L,4},{L,8},{0xff,8}, {M,8},{M,8},{N,8},{L,8},{M,8},{N,4},{O,4},{N,8},{L,8},{M,8},{N,4},{O,4},{N,8},{M,8},{L,8},{M,8},{E,8}, {N,8},{N,8},{O,8},{P,8},{P,8},{O,8},{N,8},{M,8},{L,8},{L,8},{M,8},{N,8},{M,12},{L,4},{L,8},{0xff,8},//乐谱(最炫民族风){N,8},{F,4},{F,4},{L,8},{N,8},{M,4},{M,2},{N,2},{M,4},{L,4},{M,4},{L,4},{F,8},{N,8},{F,4},{F,4},{L,8},{N,8},{P,4},{M,2},{N,2},{M,4},{L,4},{M,4},{L,4},{G,4},{E,4},{N,8},{F,4},{F,4},{L,8},{N,8},{M,4},{M,2},{N,2},{M,4},{L,4},{M,4},{L,4},{F,4},{E,4},{N,8},{F,4},{F,4},{L,8},{N,8},{P,4},{N,4},{0xff,24},//前奏{F,8},{F,4},{E,4},{F,8},{F,4},{L,4},{L,8},{M,4},{L,4},{F,8},{0xff,8},{L,8},{L,4},{E,4},{L,4},{M,4},{N,4},{P,4},{P,4},{N,4},{M,8},{N,8},{0xff,8},{Q,4},{Q,4},{Q,4},{P,4},{N,4},{N,8},{L,4},{F,4},{F,4},{F,4},{N,4},{M,8},{0xff,8},{N,4},{N,4},{P,4},{N,4},{M,4},{N,4},{M,4},{L,4},{F,8},{E,8},{F,8},{0xff,8},{F,8},{F,4},{E,4},{F,8},{F,4},{L,4},{L,8},{M,4},{L,4},{F,8},{0xff,8},{L,8},{L,4},{E,4},{L,4},{M,4},{N,4},{P,4},{P,4},{N,4},{M,8},{N,8},{0xff,8},{Q,4},{Q,4},{Q,4},{P,4},{N,4},{N,8},{L,4},{F,4},{F,4},{F,4},{N,4},{M,8},{0xff,8},{N,4},{N,4},{P,4},{N,4},{M,4},{N,4},{M,4},{L,4},{F,8},{E,8},{F,8},{0xff,8},{N,4},{N,4},{P,4},{N,4},{N,4},{P,4},{P,4},{Q,4},{S,4},{Q,4},{P,8},{Q,8},{0xff,8}, //此处有变调{F,8},{F,4},{E,4},{F,8},{L,8},{M,4},{N,2},{M,2},{L,4},{M,4},{N,8},{0xff,8},{F,4},{Q,4},{Q,4},{P,4},{M,4},{N,2},{M,2},{L,4},{M,4},{N,8},{0xff,8},{0xff,16},{L,4},{F,4},{F,4},{L,4},{M,8},{E,4},{E,4},{N,4},{P,4},{N,4},{M,4},{L,8},{0xff,8},{F,4},{L,4},{M,4},{N,4},{M,4},{L,4},{E,4},{C,4},{F,8},{0xff,8},{0xff,16},{F,8},{F,4},{E,4},{F,8},{L,8},{M,4},{N,2},{M,2},{L,4},{M,4},{N,8},{0xff,8},{F,4},{Q,4},{Q,4},{P,4},{M,4},{N,2},{M,2},{L,4},{M,4},{N,8},{0xff,8},{0xff,16},{L,4},{F,4},{F,4},{L,4},{M,8},{E,4},{E,4},{N,4},{P,4},{N,4},{M,4},{L,12},{L,4},{F,4},{L,4},{M,4},{N,4},{P,4},{N,4},{N,4},{P,4},{Q,8},{0xff,8},{0xff,8},{Q,6}, {Q,2},{Q,4},{Q,4},{Q,6},{P,2},{N,4},{M,4},{M,6},{M,2},{N,6},{P,2},{N,6},{M,2},{L,6},{F,2},{F,8},{F,4},{E,4},{F,8},{F,4},{L,4}, {M,4},{N,2},{M,2}, {L,4},{M,4},{N,8},{0xff,8},{Q,4},{P,4},{N,4},{M,4},{P,4},{N,4},{M,4},{L,4},{L,8},{0xff,8},{F,2}, {A,2},{B,2},{C,2},{B,2},{A,2}, {F,2},{A,2},{N,4},{N,4},{P,4},{N,4},{N,4},{P,4},{P,4},{Q,4},{S,4},{Q,4},{P,8},{Q,8},{0xff,8}, //此处有变调{F,8},{F,4},{E,4},{F,8},{L,8},{M,4},{N,2},{M,2},{L,4},{M,4},{N,8},{0xff,8},{F,4},{Q,4},{Q,4},{P,4},{M,4},{N,2},{M,2},{L,4},{M,4},{N,8},{0xff,8},{0xff,16},{L,4},{F,4},{F,4},{L,4},{M,8},{E,4},{E,4},{N,4},{P,4},{N,4},{M,4},{L,8},{0xff,8},{F,4},{L,4},{M,4},{N,4},{M,4},{L,4},{E,4},{C,4},{F,8},{0xff,8},{0xff,16}, {F,8},{F,4},{E,4},{F,8},{L,8},{M,4},{N,2},{M,2},{L,4},{M,4},{N,8},{0xff,8},{F,4},{Q,4},{Q,4},{P,4},{M,4},{N,2},{M,2},{L,4},{M,4},{N,8},{0xff,8},{0xff,16},{L,4},{F,4},{F,4},{L,4},{M,8},{E,4},{E,4},{N,4},{P,4},{N,4},{M,4},{L,12},{L,4},{F,4},{L,4},{M,4},{N,4},{P,4},{N,4},{N,4},{P,4},{Q,8},{0xff,8},{0xff,8},{0,0xff},};uchar time_h,time_l;void Delay(uchar x);void main(){uchar j;uint i;TMOD = 0x01;ET0 = 1;EA = 1;TR0 = 1;i = 0;j = 0;while(1){while(display[i][1] != 0xff){if(display[i][0] == 0xff){TR0 = 0;Delay(display[i][1]);BUZZER = 1;}else{time_h = m_note[display[i][0]][0];time_l = m_note[display[i][0]][1];TH0 = time_h;TL0 = time_l;ET0 = 1;TR0 = 1;Delay(display[i][1]);TR0 = 0;ET0 = 0;BUZZER = 1;}i++;}i = 0;}}void Timer0() interrupt 1{TR0 = 0;TH0 = time_h;TL0 = time_l;BUZZER = ~BUZZER;TR0 = 1;}void Delay(uchar x){uint i,j;for(i = 0;i < x;i++)for(j = 0;j < 12000;j++);}。
[整理]51单片机利用中断播放音乐程序
![[整理]51单片机利用中断播放音乐程序](https://img.taocdn.com/s3/m/304e5ef5a300a6c30d229f0a.png)
[整理]51单片机利用中断播放音乐程序中断播放音乐程序示例单片机机器周期的算法:比如一个12M的单片机,它的指令周期是1/12M,它的一个机器周期是12*1/12M,1/1M=1微秒在单片机中,它的中断源的定时记一个数是以机器周期为基准的,即对于一个12M的单片机来说,它的记数脉冲是1微秒,也就是说,记下两个数之间间隔的时间是1微秒。
单片机播放音乐其实也就是要干两件事情,能用单片机确定单调和节拍。
所谓音调,也就是音乐的频率,而节拍呢,就是间隔多少时间响一次,正好可以利用两个中断来完成这个工作。
怎么让一个单片机发出一个定频率的声音呢,比如一个440HZ的声音。
440HZ的声音的周期是T,1/440HZ,2272us 即控制给蜂鸣器输入端一个1136us的高电平,再给一个同时长的低电平,这样不断的交替进行,即可以得到440HZ的声音了。
那么这个过程如何用单片机的中断来实现呢, 关键就是该对中断TH0,TL0如何赋初值。
单片机的晶振是12M的,那么这个中断定时计一个数代表的时间是1us,即如果想要实现440HZ的声音,工作于方式1时,计数器最多可以记下65536的数,那么:TH0=(65536,1136)/256TL0=(65536,1136)%256在乐谱中,可以看到下图这样的数字和符号,其中1,C, 1,G表示曲调,与音频有很大的关系。
3/4表示乐谱中,以四分音符为节拍,每一小节有三拍,以下图为例说明:其中1,2为一拍,3,4,5为一拍,6为一拍,一共三拍。
1,2时长是四分音符的一半,即八分音符,3,4时长是八分音符,一半,即十六分音符,5时长是八分音符,6时长表示四分音符。
一拍的时长大约是400ms--500ms,以400ms为例,一拍是400ms,那么四分音符的时长就是400ms,那么八分音符的时长就是200ms,十六分音符的时长就是100ms,在单片机上,控制一个音符唱多长时间,可以用延时的方法,以十六分时长为最基本的延时单元,那么如果要延时八分时长,那么就运行两次这个延时单元,如果要延时四分音符的时长,那么就运行四次这个延时单元。
基于STC89C52单片机的国旗自动升降系统设计开题报告

精品文档毕业设计开题报告精品文档.精品文档精品文档.精品文档L298作为电机驱动的核心。
因为本在本设计拟采用集成驱动芯片L298桥集成电机芯片,利用该芯片是实现驱动步进电机的一种简H是恒压恒流双,可精确控制步距和速度,2A单方法, 可时控制四相电机,且输出电流可达到利用该方法设计的步进电机驱动系统具有硬件结构简单、软件编程容易的特点,能够满足该设计的要求。
、电源3的供电电压与步进电机的供电电压都是五伏,所以在此STC89C2单片机需要设计一个五伏的电源,五伏电源主要包括四个部分:降压、整流、滤波、,远大于我们所需电压幅值,必须220V稳压、输出。
由于输入的市用电压为把电压降低,直接用一个变压器即可达到降压的目的。
降压后,电压为交流电压,而最终得到的是直流五伏电源,所以必须利用整流桥进行整流形成直流。
而此时的直流并非稳定的直流,它是一个周期性的震荡曲线。
要减弱这种振荡幅度,最简单的滤波方法就是用电容,利用电容的充放电特性。
输入,电容放电,此时,放电未完又再次充电,输入的U1>U2,电容的U1<U2C 就开始充电,同时,充电未完又再次放电,由此类推,不断放电充电,滤C使用大电容在到的正电压之间波动变化,且波动幅度变缓,波后的电压为U2 值的电容滤波此幅度波动更平缓,且多次滤波使直流的纹波更小。
4、语音芯片秒钟,所以选用的语音芯片其录放43因为本设计要演奏国歌,其时间为完秒,其录放时间为60ISD2560时间应大于43秒钟,即在此选用语音芯片,语音芯片中,然后用它的单次播放ISD2560全符合要求,把国歌音乐录制在输出播音控制、当升旗键按下时,ISD2560功能播放国歌。
其控制原理为:A当降国歌播放完毕;43s信号播放国歌,国旗经的时间匀速上升至旗杆顶端,ISD2560、在半旗状态时,当升旗键按下时,对旗键按下时,不播放国歌。
B的时间匀速从最低端上升到最顶端之国旗经43s输出播音控制信号播放国歌,高度处停止;2/3后,国歌停奏,然后自动经14s的时间匀速下降到总高度的当降旗键按下时,不播放国歌。
基于单片机控制的电子音乐盒课程设计

基于单片机控制的电子音乐盒课程设计单片机课程设计设计(论文)摘要为了实现单片机控制音乐播放,此次毕业设计做出了尝试,即电子音乐盒的设计。
本设计采用了蜂鸣器发声来实现歌曲的播放,能保持基本音调不变,流畅播放出歌曲。
现选用AT89S51单片机。
主要设计模块包括数码管显示部分,功能键盘部分,蜂鸣器发声部分,彩灯部分。
数码管采用共阳极数码管,通过单片机P1口控制,实现歌曲序号的显示;功能键盘采用按键开关,通过单片机P3口控制,实现歌曲播放顺序的调换和暂停播放功能;蜂鸣器由单片机的P2口控制,实现歌曲播放;彩灯是由普通发光二极管代替,能实现单色长亮和闪烁效果。
主要工作过程是通过按下功能键实现上一首和下一首及暂停播放,同时有数码管显示当前播放歌曲的序号,蜂鸣器播放出音乐,当播放最后一首夜曲时还伴有彩灯闪烁。
此次设计要利用单片机及KeilC51编程软件编程和PROTEUS单片机仿真软件和电子电工等方面知识,用KeilC51编程软件编程,用PROTEUS单片机仿真软件仿真。
最后制作实物,将程序下载到单片机中,利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。
关键词:AT89S51单片机方波音调第I页单片机课程设计设计(论文)目录摘要 ..................................................................... .. I 目录 ..................................................................... II 第 1 章绪论 ............................................................... 1 第2章音乐盒总体设计 (2)2.1 设计功能要求 (2)2.2 总体设计原理 (2)2.3 总体设计框图 ........................................................ 2 第3章芯片的选择和介绍 .. (4)3.1 MCS-51系列单片机简介 (4)3.2 单片机的选择 (4)3.2.1 AT89S51芯片介绍 ................................................ 5 第4章系统硬件设计 (8)4.1 电源电路 (8)4.2 单片机最小系统 (9)4.3 数码管显示部分 (10)4.4 键盘部分 (11)4.4.1 按键开关 (11)4.4.2 轻触开关 (12)4.5 蜂鸣器部分 ......................................................... 12 第5章系统软件设计 (13)5.1 软件系统介绍 (13)5.2 编程语言的选择 ................................... 错误~未定义书签。
51单片机音乐播放器程序

51单片机音乐播放器程序#include //包含51单片机寄存器定义的头文件sbit sound=P3^6; //将sound位定义为P3.6unsigned int C; //储存定时器的定时常数//以下是C调低音的音频宏定义#define l_dao 262 //将"l_dao"宏定义为低音"1"的频率262Hz #define l_re 286 //将"l_re"宏定义为低音"2"的频率286Hz#define l_mi 311 //将"l_mi"宏定义为低音"3"的频率311Hz#define l_fa 349 //将"l_fa"宏定义为低音"4"的频率349Hz#define l_sao 392 //将"l_sao"宏定义为低音"5"的频率392Hz#define l_la 440 //将"l_a"宏定义为低音"6"的频率440Hz#define l_xi 494 //将"l_xi"宏定义为低音"7"的频率494Hz//以下是C调中音的音频宏定义#define dao 523 //将"dao"宏定义为中音"1"的频率523Hz#define re 587 //将"re"宏定义为中音"2"的频率587Hz#define mi 659 //将"mi"宏定义为中音"3"的频率659Hz#define fa 698 //将"fa"宏定义为中音"4"的频率698Hz#define sao 784 //将"sao"宏定义为中音"5"的频率784Hz#define la 880 //将"la"宏定义为中音"6"的频率880Hz#define xi 987 //将"xi"宏定义为中音"7"的频率523H//以下是C调高音的音频宏定义#define h_dao 1046 //将"h_dao"宏定义为高音"1"的频率1046Hz #define h_re 1174 //将"h_re"宏定义为高音"2"的频率1174Hz#define h_mi 1318 //将"h_mi"宏定义为高音"3"的频率1318Hz #define h_fa 1396 //将"h_fa"宏定义为高音"4"的频率1396Hz #define h_sao 1567 //将"h_sao"宏定义为高音"5"的频率1567Hz #define h_la 1760 //将"h_la"宏定义为高音"6"的频率1760Hz#define h_xi 1975 //将"h_xi"宏定义为高音"7"的频率1975Hz /*******************************************函数功能:1个延时单位,延时300ms******************************************/void delay(){unsigned char i,j;for(i=0;i<300;i++)for(j=0;j<300;j++);}/*******************************************函数功能:主函数******************************************/void main(void){unsigned char i,j;//以下是《知足》的一段简谱unsignedint code f[]={ dao,l_xi,dao ,sao,sao,dao,l_xi,dao,mi,dao,l_xi,dao,l_sao,mi,re,l_la,l_xi,dao,re,dao,l_xi,dao,sao,sao,la,xi,la,mi,la,xi,h_dao,sao,mi,mi,fa,mi,l_la,re,dao,dao,l_xi,dao,sao,sao,dao,l_xi,dao,mi,dao,l_xi,dao,l_sao,mi,re,l_la,l_xi,dao,re,dao,l_xi,dao,sao,sao,la,xi,h_dao,sao,la,xi,h_dao,sao,mi,mi,fa,mi,l_sao,re, dao,l_sao,h_dao,xi, la,fa,re, re,l_sao,xi,la,sao,re,dao,dao,re,mi,fa,fa,la,sao,mi,re,mi,fa,fa,sao,dao,h_dao,xi, la,fa,xi,h_dao,h_re, sao,h_re,xi,h_dao,la,xi,h_dao,h_re,sao,0xff}; //以0xff作为音符的结束标志//以下是简谱中每个音符的节拍//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位unsigned char code JP[ ]={2,1,1,2,2,2,1,1,4,2,1,1,2,2,1,1,1,1,4,2,1,1,2,1,1,2,1,1,4,2,1,1,2,1,1,1,1,1,1,4,2,1,1,2,2,2,1,1,4,2,1,1,2,2,1,1,1,1,4,2,1,1,2,2,2,1,1,4,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,2,2,1,1,2,2,1,1,3,1/2,1/2,3,1/2,1/2,3,1,4,};EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x00; // 使用定时器T0的模式1(13位计数器)while(1) //无限循环{i=0; //从第1个音符f[0]开始播放while(f[i]!=0xff) //只要没有读到结束标志就继续播放{C=460830/f[i];TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR0=1; //启动定时器T0for(j=0;j<="">delay(); //延时1个节拍单位TR0=0; //关闭定时器T0i++; //播放下一个音符}}}/*********************************************************** 函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波************************************************************/ void Time0(void ) interrupt 1 using 1{sound=!sound; //将P3.7引脚输出电平取反,形成方波TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法}。