⑴ 单片机c语言音乐简谱代码
代码的格式,是由编程者设计的,并没有统一的规范。
下面的链接可供参考。
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/88bfff323ec42ef21b4cff09.html
⑵ 51单片机曲谱编写音乐程序,我看不懂曲谱,谁能教下我!
//《世上只有妈妈好》51单片机C语言程序和音乐采灯程序
//此程序在硬件上调试通过
//本程序的单片机晶振采用11.0592MHZ
//此程序的流水灯随音乐的节拍的快慢而动
#include <reg51.h>
sbit speaker=P2^0; //接音频放大电路,
//sbit speaker=P3^2;
sbit sw=P3^0; //电后位后,sw合上后就开始放音乐,灯开始闪动,sw断开,音乐停 止, 灯也同时停止闪动
unsigned char timer0h,timer0l,time,led=1,j=0;
unsigned char flagd=0;
//世上只有妈妈好数据表
code unsigned char sszymmh[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
} ;
// 音阶频率表 高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
void delay(unsigned char t)
{
unsigned char t1;
unsigned long t2;
for(t1=0;t1<t;t1++)
{
for(t2=0;t2<8000;t2++)
{
;
}
}
TR0=0;
}
void t0int() interrupt 1
{
TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void song()
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);
}
void main(void)
{
unsigned char k,i;
TMOD=1; //置CT0定时工作方式1
EA=1;ET0=1;//IE=0x82 //CPU开中断,CT0开中断
while(1)
{
i=0;
time=1;
sw=1;
while(time)
{
if(sw)
{P1=0;i=0;continue;}
if(j==8)
{
//led=1;
j=0;flagd=~flagd;
if(flagd)
{
led=0x80;
}
else
{
led=1;
}
}
else
{
P1=~led;
if(flagd)
{
led=led>>1;
}
else
{
led=le d<<1;
}
j++;
}
k=sszymmh[i]+7*sszymmh[i+1]-1;
timer0h=FREQH[k];
timer0l=FREQL[k];
time=sszymmh[i+2];
i=i+3;
song();
}
}
}
⑶ 单片机音乐的简谱怎么写的代码数据
首先你要知道你定时器的工作方式,单片机的晶振,这样你才能计算出具体的需要频率,因为音乐代码的话主要还是通过定时器改变蜂鸣器的频率,使得发出音乐。
你这个18H,30H应该是通过那个定时器频率计算方法计算出来的。
⑷ 这些单片机代码根据曲谱怎么写出来的,求大神详细教啊!
哈哈,LZ有求知欲很好嘛!其实原理是这样的:
首先,音乐有哪几个最基本的要素?
1,音高(频率) 2,节拍(音符长度)3,强度。
其次,单片机演奏音乐的原理?
1,硬件方面:以I/o口输出方波,驱动无源蜂鸣器震动,方波频率与乐谱中音符的频率对应(实现了音乐的第1要素)
2,软件方面,有两点
(1)如何产生某一频率的方波?通过定时器产生周期性中断,在中断里将IO口的电平翻转即可,中断周期(即定时器应赋的初值)可以由需要的频率计算得到。
(2)如何控制音符的长度(即音乐的第2要素)?从程序结构上来讲,有几种实现途径,我能想到的:再使用一个定时器,它的中断周期固定,以它作为长度的基准。比如,定为10ms中断一次,中断100次就是1秒,那么演奏节拍为2/4拍一分钟60拍的二分音符小字一组A(440Hz),就是200次中断。定时器0控制I/O口输出频率440Hz的方波,并等定时器1中断 200次之后,就切换到下一音符。这样就实现了乐音输出。
3.当然,这样的音乐是控制不了强弱的,无法实现音乐的要素3。非常简陋,只能将就。
程序最下面的数组就是单片机的“乐谱”,每一对元素,前面是音高(对应的宏给其对应的在音阶里的位置进行了编号,后面是音符长度)。m_note数组存储的就是演奏某一频率的乐音对应的定时器中断周期。
⑸ 单片机对面的女孩看过来简谱
要程序吗?
⑹ 简谱的数据怎么转化为单片机代码(节拍和频率)最主要是节拍,频率已明白
其实就是时间,也就是定时器定时的时间,需要根据节拍计算定时器定时的时间常数。
你需要知道节拍的时间长短,然后转换为定时常数,然后做成一个表格就可以了。
⑺ 51单片机简谱编码
// 8键电子琴C程序 自己根据音节做个与简谱对应的表就可以了。
#include <AT89X51.H>
sbit SPEAKER = P3^7;
#define KEY P1
unsigned char MUSIC;
unsigned char STH0;
unsigned char STL0;
unsigned int code tab[]={
64021,64103,64260,64400,//低音3开始
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178
};
void main(void){
TMOD=0x01;
ET0=1;
EA=1;
KEY = 0xff;
while(1){
if(KEY != 0xff){
switch (~KEY){//显示的列位置
case 0x01://
MUSIC = 7;
break;//
case 0x02://
MUSIC = 6;
break;//
case 0x04://
MUSIC = 5;
break;//
case 0x08://
MUSIC = 4;
break;//
case 0x10://
MUSIC = 3;
break;//
case 0x20://
MUSIC = 2;
break;//
case 0x40://
MUSIC = 1;
break;//
case 0x80://
MUSIC = 0;
break;//
}
STH0=tab[MUSIC]/256;
STL0=tab[MUSIC]%256;
TR0=1;
}else{
SPEAKER = 1;
TR0=0;
}
}
}
void t0(void) interrupt 1 using 0{
TH0=STH0;
TL0=STL0;
SPEAKER=~SPEAKER;
}
⑻ 求几首单片机经典歌曲乐谱,及蜂鸣器驱动原理和 C语言程序。
建议用小喇叭,效果比蜂鸣器好很多,驱动就是正负极啊,一接就好了,当时做这个不是难点。C语言程序网上可以搜到的,这里歌曲乐谱都是一些数组组成,你换歌相当于换数组里的数,所以意思就是程序模板是不变的。定时器可能会用到,你说的中断切换歌曲也是可以实现的。
⑼ 请问单片机音乐乐谱怎么看
哈哈 我看懂了,就是看懂了几个单词加点简谱知识。
首先你把这张曲谱下载下来对着看,
Timer0_H,Timer0_L,Time ,如6,2,3 第一、二、三位分别代表唱名、音高、每个音的时值(就是每个音演奏多长,几拍),即第一个6代表简谱6,第二个2代表是6是中音(若是1则代表6是低音),第三个3代表6演奏是3个半拍
,你照着曲谱看看,就知道啦
⑽ 谁能讲解一下用51单片机写音乐乐谱
用51单片机写音乐乐谱 的单片机音乐代码生成器,可以参考一下,下载附件 有 仿真实例可以仿真试试。