资讯详情

51曲谱网_51单片机简谱编码

单片机C语言音乐简谱代码

编程师设计的代码格式没有统一的规范。

以下链接可供参考。

http://hi.baidu.com/???/blog/item/88bfff323ec42ef21b4cff09.html

求助:如何将简谱编成单片机代码?

声音是由振动引起的,不同频率的振动形成不同的声音。

根据音符的声音频率,从SPK引脚输出音符的频率。

在51单片机上用C语言实现电子琴功能,但同时数码管可以显示简谱,怎么编程序?

1.数据管显示没什么。只需找一些简单的数字管驱动程序进行更改。一般来说,您可以先选择数字管,然后设置值显示,但您需要注意刷新,10ms刷新一个应该就够了,刷新频率低的话会闪闪发光,这个你应该明白。

2,蜂鸣器发do我不知道这个硬件是否实现了。也许有硬件 编码控制自动生成相应频率的值。我想如果是通过软件实现的,不妨考虑一下定时器。假设do音是1000Hz如果频率(不检查,不清楚,假设),可以控制定时器的触发频率1万hz,触发一次,如果定时器的频率为10000,则将相应的输出电平跳到蜂鸣器口hz如果应该有500hz频率,一个周期需要一高一低!中断读取按钮信号,分析按钮,然后设置定时器频率,启动定时器,设置响时间,然后关闭定时器,按下k会发出一声do声音,然后停了。

3.按键读取程序,中断或查询,自己选择,别忘了延迟5ms左右读取按钮,这是抖动。

4.建议模块化编程,先处理按钮,然后处理数字管,然后处理时间器,然后考虑如何组合它们。好吧,别说了。我说得此外,我会回到大学,哈哈。简言之,一点一点地做应该不难。51熟练,c语言熟练,板子焊接的结构比较清晰的话,很快就可以搞定的。

5.建议您自己编写每个模块的驱动代码,如按钮、数字管、led是的,温度传感器、光敏、蜂鸣器、遥控器、定时器、中断等模块(可以从别人那里学习,你必须知道),然后在需要时,copy过来,改变就行了,快而且快bug少。建议keil c语言编程,语言编程太耗时了。

谁能用51单片机解释音乐乐谱?

用51单片机写音乐乐谱 的 可以参考单片机音乐代码生成器,下载附件 有 模拟实例可以模拟试试。

单片机音乐代码

#include "reg51.h"

#define uint unsigned int

#define uchar unsigned char

uchar * TABLE ;

code uint TABLE1 [15]={64260,64400,64524,64580,

64684,64777,64820,64898,

64968,65030,65058,65110,

65157,65178,65217};

code uchar SONG [ ]={

//1. 迟来的爱

};

code uchar SONG1 [ ]={

//2.两只蝴蝶

};

code uchar SONG3 [ ]={

//4.师傅三徒弟

};

uchar hjsz;

uchar ljsz;

uchar jpm;

uchar yfm;

uchar t0 =0;

uint i=0;

sbit Speaker =P1^0;

uint k;

void Delay1()

{

for ( k=0;k<20000;k );

}

void Lignt( )

{ uchar t;

for(t=0;t<10;t )

{

P2=0xff;

Delay1();

P2=0x00;

Delay1();

}

}

void Lignt1( )

{

P2=0xaa;

Delay1();

P2=0x55;

Delay1();

}

void Delay(uchar t0)//延时

{

while(t0--) //决定节拍

Lignt1();

}

void Delay2(uchar w0)//延时

{

while(w0--) //决定节拍

Lignt();

}

void T0Int() interrupt 1//TIMER0

{

TL0 = ljsz;

TH0 = hjsz;

Speaker=!Speaker;

}

void ExtInt0() interrupt 0//INT0

{

if(t0>10)

t0=0;

i=0; // 全局变量指向歌谱第一

switch(t0 )

{

case 0 : TABLE=SONG;break; //选第一首

case 1 : TABLE=SONG1;break;//选第二首

case 2 : TABLE=SONG2;break;//选第三首

case 3 : TABLE=SONG3;break;//选第四首

case 4 : TABLE=SONG4;break;//选第五首

case 5 : TABLE=SONG5;break;//选第六首

case 6 : TABLE=SONG6;break;//选第七首

case 7 : TABLE=SONG7;break;//选第八首

case 8 : TABLE=SONG8;break;//选第九首

case 9 : TABLE=SONG9;break;//选第10首

}

}

void songsing()///发音程序

{

i=0;

while(TABLE[i])

{

jpm=TABLE[i]&0x0f; //节拍值

yfm=(TABLE[i]>>0x04)&0x0f;//简谱值

if(yfm) ///简谱为1,取计数值

{

yfm=yfm-1;

hjsz=(uchar)(TABLE1[yfm]>>0x08)

TH0 = hjsz;

ljsz=(uchar)(TABLE1[yfm]); //取数值低字节

TL0 = ljsz;

TR0 = 1; //启动TIMER0

}

else TR0 = 0; ///简谱为0,不发音

Delay(jpm); //节拍延时

i ;

}

}

void main(void)

{

TMOD =0X01;//设TIMER0在MODE1

TCON =0X01;//外部中断INT下降沿触发

IE =0x83.//开中断(INT0,TIMER0)

IP =0x00;//设置中断优先级

TABLE=SONG0;

while(1)

{

Lignt( );

songsing()//调用发音程序

TR0 = 0;//停止TIMER0

Delay2(1);

TABLE=SONG0;// 更改歌曲0

songsing();

}

}

标签: f6光敏传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台