当前位置:文档之家› 基于51单片机两种音乐编码的比较及用法

基于51单片机两种音乐编码的比较及用法

基于51单片机两种音乐编码的比较及用法
基于51单片机两种音乐编码的比较及用法

基于51单片机的两种音乐编码方法的比较及用法

(建议对这方面有兴趣的朋友们要先看懂了解音乐简谱,包括高音、中音、低音,节拍、延时,及各个音调的频率,网上有很多资料)

1方法:用51单片机音乐编码器软件(Music encode)

输出十六进制数表示:

曲谱存贮格式unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important) (其实软件“关于”里的源代码有使用方法的介绍)

音高由三位数字组成:

个位是表示1~7 这七个音符

十位是表示音符所在的音区:1-低音,2-中音,3-高音;

百位表示这个音符是否要升半音: 0-不升,1-升半音。

音长最多由三位数字组成:

个位表示音符的时值,其对应关系是:

|数值(n): |0 |1 |2 |3 | 4 | 5 | 6

|几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n

十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音

百位是符点位: 0-无符点,1-有符点

2方法:编码为十六进制(高四位表示音调编码,低四位表示节拍编码)(各音调频率及初值计算定时器初值网上有,在此不叙说)

do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。

如0x24,表示低音LA、1拍。以此类推

表4.4简谱对应的简谱码、T值、节拍数

简谱发音简谱码T值节拍码节拍数

5 低音SO 1 64260 1 1/4拍

6 低音LA 2 64400 2 2/4拍

7 低音TI 3 64524 3 3/4拍

1 中音DO 4 64580 4 1拍

2 中音RE 5 64684 5 1又1/4拍

3 中音MI 6 64777 6 1又1/2拍

4 中音FA 7 64820 8 2拍

5 中音SO 8 64898 A 2又1/2拍

6 中音LA 9 64968 C 3拍

7 中音TI A 65030 F 3又3/4拍

1 高音DO B 65058

2 高音RE C 65110

3 高音MI D 65157

4 高音FA E 65178

5 高音SO F 65217

总结:

通过两种方法仿真比较,这两种方法各有优劣,方法1用Music encode编码简单不需要对简谱有深入了解但蜂鸣器发音不理想,用方法2编码需要看懂简谱及要知道各音调节拍所对应的编码号但蜂鸣器比较动听,柔和(后面附有两种方法的仿真代码和原理图)

(想要Music encode软件的朋友可以留下邮箱,我发给你们,网上也有的)

方法1代码:

//51单片机播放音乐库文件

/**************************************************************************

SOUND PLAY FOR 51MCU

COPYRIGHT (c) 2005 BY JJJ.

-- ALL RIGHTS RESERVED --

File Name: SoundPlay.h

Author: Jiang Jian Jun

Created: 2005/5/16

Modified: NO

Revision: 1.0

******************************************************************************* /

/*说明

**************************************************************************

曲谱存贮格式unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important)

音高由三位数字组成:

个位是表示1~7 这七个音符

十位是表示音符所在的音区:1-低音,2-中音,3-高音;

百位表示这个音符是否要升半音: 0-不升,1-升半音。

音长最多由三位数字组成:

个位表示音符的时值,其对应关系是:

|数值(n): |0 |1 |2 |3 | 4 | 5 | 6

|几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n

十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音

百位是符点位: 0-无符点,1-有符点

调用演奏子程序的格式

Play(乐曲名,调号,升降八度,演奏速度);

|乐曲名: 要播放的乐曲指针,结尾以(0,0)结束;

|调号(0-11) : 是指乐曲升多少个半音演奏;

|升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度;

|演奏速度(1-12000): 值越大速度越快;

***************************************************************************/

#ifndef __SOUNDPLAY_H_REVISION_FIRST__

#define __SOUNDPLAY_H_REVISION_FIRST__

#include

//**************************************************************************

#define SYSTEM_OSC 11059200//12000000 //定义晶振频率12000000HZ

#define SOUND_SPACE 4/5 //定义普通音符演奏的长度分率,//每4分音符间隔

sbit BeepIO = P2^3; //定义输出管脚

unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表

unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 };

//1~7在频率表中的位置

unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };

unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定时器初值暂存

unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音长定时器初值暂存

//************************************************************************** void InitialSound(void)

{

BeepIO = 1;

Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256; // 计算TL1应装入的初值(10ms的初装值)

Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256; // 计算TH1应装入的初值

TH1 = Sound_Temp_TH1;

TL1 = Sound_Temp_TL1;

TMOD |= 0x11;

ET0 = 1;

ET1 = 0;

TR0 = 0;

TR1 = 0;

EA= 1;

}

void BeepTimer0(void) interrupt 1 //音符发生中断

{

BeepIO = !BeepIO;

TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0;

}

//************************************************************************** void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed) {

unsigned int NewFreTab[12]; //新的频率表

unsigned char i,j;

unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;

unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;

for(i=0;i<12;i++) // 根据调号及升降八度来生成新的频率表

{

j = i + Signature;

if(j > 11)

{

j = j-12;

NewFreTab[i] = FreTab[j]*2;

}

else

NewFreTab[i] = FreTab[j];

if(Octachord == 1)

NewFreTab[i]>>=2;

else if(Octachord == 3)

NewFreTab[i]<<=2;

}

SoundLength = 0;

while(Sound[SoundLength] != 0x00) //计算歌曲长度

{

SoundLength+=2;

}

Point = 0;

Tone = Sound[Point];

Length = Sound[Point+1]; // 读出第一个音符和它时时值

LDiv0 = 12000/Speed; // 算出1分音符的长度(几个10ms)

LDiv4 = LDiv0/4; // 算出4分音符的长度

LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准

TR0 = 0;

TR1 = 1;

while(Point < SoundLength)

{

SL=Tone%10; //计算出音符

SM=Tone/10%10; //计算出高低音

SH=Tone/100; //计算出是否升半

CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出对应音符的频率

if(SL!=0)

{

if (SM==1) CurrentFre >>= 2; //低音

if (SM==3) CurrentFre <<= 2; //高音

Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值

Sound_Temp_TH0 = Temp_T/256;

Sound_Temp_TL0 = Temp_T%256;

TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿

}

SLen=LengthTab[Length%10]; //算出是几分音符

XG=Length/10%10; //算出音符类型(0普通1连音2顿音)

FD=Length/100;

LDiv=LDiv0/SLen; //算出连音音符演奏的长度(多少个10ms)

if (FD==1)

LDiv=LDiv+LDiv/2;

if(XG!=1)

if(XG==0) //算出普通音符的演奏长度

if (SLen<=4)

LDiv1=LDiv-LDiv4;

else

LDiv1=LDiv*SOUND_SPACE;

else

LDiv1=LDiv/2; //算出顿音的演奏长度

else

LDiv1=LDiv;

if(SL==0) LDiv1=0;

LDiv2=LDiv-LDiv1; //算出不发音的长度

if (SL!=0)

{

TR0=1;

for(i=LDiv1;i>0;i--) //发规定长度的音

{

while(TF1==0);

TH1 = Sound_Temp_TH1;

TL1 = Sound_Temp_TL1;

TF1=0;

}

}

if(LDiv2!=0)

{

TR0=0; BeepIO=1;

for(i=LDiv2;i>0;i--) //音符间的间隔

{

while(TF1==0);

TH1 = Sound_Temp_TH1;

TL1 = Sound_Temp_TL1;

TF1=0;

}

}

Point+=2;

Tone=Sound[Point];

Length=Sound[Point+1];

}

BeepIO = 1;

}

//**************************************************************************

#endif

//挥着翅膀的女孩

unsigned char code Music_jimo[]={ 0x15,0x03, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x04,

0x16,0x03, 0x16,0x0E, 0x16,0x03, 0x16,0x04,

0x17,0x04,

0x19,0x04, 0x19,0x03, 0x17,0x04, 0x19,0x03,

0x1A,0x04,

0x15,0x0E, 0x15,0x01, 0x19,0x04, 0x19,0x03,

0x17,0x04,

0x19,0x03, 0x1A,0x04, 0x15,0x0E, 0x15,0x03,

0x10,0x04,

0x15,0x0E, 0x15,0x03, 0x17,0x03, 0x16,0x15,

0x17,0x04,

0x17,0x03, 0x17,0x04, 0x17,0x03, 0x16,0x04,

0x17,0x04,

0x19,0x04, 0x19,0x03, 0x19,0x04, 0x19,0x03,

0x19,0x04,

0x19,0x04, 0x17,0x04, 0x17,0x03, 0x17,0x04,

0x17,0x03,

0x1B,0x04, 0x1F,0x0E, 0x1F,0x03, 0x1A,0x0D,

0x1A,0x04,

0x1A,0x03, 0x1B,0x04, 0x1F,0x04, 0x1B,0x03,

0x1A,0x04,

0x1A,0x04, 0x19,0x03, 0x17,0x04, 0x16,0x04,

0x17,0x03,

0x16,0x04, 0x17,0x03, 0x19,0x0E, 0x19,0x02,

0x16,0x03,

0x15,0x03, 0x15,0x04, 0x15,0x03, 0x10,0x0E,

0x10,0x03,

0x15,0x0D, 0x15,0x02, 0x00,0x00 };

//同一首歌

unsigned char code Music_Same[]={ 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,

0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02,

0x10,0x02,

0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02,

0x17,0x02,

0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02,

0x18,0x66,

0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03,

0x16,0x00,

0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70,

0x1A,0x03,

0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03,

0x1B,0x02,

0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66,

0x18,0x03,

0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D,

0x17,0x03,

0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03,

0x0F,0x0C,

0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01,

0x18,0x66,

0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03,

0x1B,0x03,

0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00,

0x1F,0x01,

0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01,

0x10,0x02,

0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D,

0x17,0x03,

0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02,

0x17,0x70,

0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03,

0x16,0x66,

0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03,

0x10,0x02,

0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03,

0x0F,0x0C,

0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03,

0x18,0x66,

0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03,

0x19,0x00,

0x00,0x00 };

//两只蝴蝶

unsigned char code Music_Two[] ={ 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,

0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03,

0x16,0x02,

0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03,

0x10,0x03,

0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03,

0x16,0x03,

0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03,

0x15,0x01,

0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D,

0x17,0x03,

0x16,0x01,

0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,

0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,

0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,

0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,

0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,

0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,

0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00,

0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03,

0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03,

0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,

0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03,

0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,

0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,

0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E,

0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03,

0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03,

0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03,

0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,

0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02,

0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01,

0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03,

0x1B,0x04,

0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E,

0x1B,0x04,

0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E,

0x1B,0x04,

0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03,

0x0F,0x02,

0x10,0x03, 0x15,0x00, 0x00,0x00 };

void main()

{

InitialSound();

while(1)

{

Play(Music_jimo,0,2,250);

Play(Music_Same,0,2,250);

Play(Music_Two,0,2,250);

}

}

方法2代码:

#include

#define uchar unsigned char

#define uint unsigned int

sbit fm=P2^3;//蜂鸣器连续的IO口

uchar count2;//歌曲标志

uchar timeh,timel,i;

//---------------------------简谱---------------------------------------

//编程规则:字节高位是简谱,低位是持续时间,

//代表多少个十六分音符

//1-7代表中央C调,8-E代表高八度,0代表停顿

//最后的0是结束标志

uchar code qnzl[]={ //千年之恋

0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x 08,

//前奏

0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,

//竹林的灯火到过的沙漠

0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,

//七色的国度不断飘逸风中

0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,

//有一种神秘灰色的旋涡

0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,

//将我卷入了迷雾中

0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,

//看不清的双手

0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02, //一朵花传来谁经过的温柔

0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,

//穿越千年的伤痛

0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,

//只为求一个结果

0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,

//你留下的轮廓指引我

0x42,0x63,0x83,0x83,0x91,0x91,

//黑夜中不寂寞

0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,

//穿越千年的哀愁

0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,

//是你在尽头等我

0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,

//最美丽的感动会值得

0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//结束标志

//用一生守候

};

uchar code jmszl[]={ //寂寞沙洲冷

0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,

//自你走后心憔悴

0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,

//白色油桐风中纷飞

0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28, //落花似人有情这个季节

0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,

//河畔的风放肆拼命地吹

0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,

//不断拨弄离人的眼泪

0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54, //那样浓烈的爱再也无法给

0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,

//伤感一夜一夜

0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,

//当记忆的线缠绕过往支离破碎

0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,

//是慌乱占据了心扉

0x31,0x81,0x81,0x81,0x61,0x91,0x82,

//有花儿伴着蝴蝶

0x51,0x51,0x51,0x51,0x31,0x61,0x53,

//孤雁可以双飞

0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,

//夜深人静独徘徊

0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,

//当幸福恋人寄来红色分享喜悦

0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,

//闭上双眼难过头也不敢回

0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,

//仍然捡尽寒枝不肯安歇微带着后悔

0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,

//寂寞沙洲我该思念谁

0xff};

uchar code sszy[]={//世上只有妈妈好

0x96,0x82,0x64,0x84,0xb4,0x92,0x82,0x94,0x04,0x64,0x82,0x92,

0x84,0x62,0x52,0x42,0x22,0x72,0x62,0x54,0x04,0x56,0x62,

0x84,0x82,0x92,0x66,0x52,0x44,0x04,0x86,0x62,0x54,0x42,0x22,0x42,0x14,0x04,0xff}; //----------------------------简谱音调对应的定时器初值---------------------------

//适合11.0592M的晶振

uchar code cuzhi[]={

0xff,0xff,//占位

0xFC,0x8E,//中央C调1-7

0xFC,0xED,

0xFD,0x43,

0xFD,0x6A,

0xFD,0xB3,

0xFD,0xF3,

0xFE,0x2D,

0xFE,0x47, //高八度1-7

0xFE,0x76,

0xFE,0xA1,

0xFE,0xC7,

0xFE,0xD9,

0xFE,0xF9,

0xFF,0x16

};

void delay1(uint z); //延时1MS

void delay(uint z); //延时165MS,即十六分音符void song();

void key();

main()

{

count2=3; //改值可变换歌曲(1-3)

EA=1;//开总中断

TMOD=0x01;//定时器0工作在方式1

TH0=0;

TL0=0;

ET0=1;

while(1)

{

song();

delay1(1000);

}

}

void timer0() interrupt 1 //用于产生各种音调{

TH0=timeh;

TL0=timel;

fm=~fm;

}

void song()

{

uint temp;

uchar jp;//jp是简谱

i=0;

while(1)

{

if(count2==0)

{

break;

}

if(count2==1) //选曲

temp=qnzl[i];

if(count2==2)

temp=jmszl[i];

if(count2==3)

temp=sszy[i];

if(temp==0xff)

break;

jp=temp/16; //取数的高4位

if(jp!=0)

{

timeh=cuzhi[jp*2];

timel=cuzhi[jp*2+1];

}

else

{

TR0=0;

fm=1;//关蜂鸣器

}

delay(temp%16); //取数的低4位

TR0=0; //唱完一个音停10MS

fm=1;

delay1(10);

TR0=1;

i++;

}

TR0=0;

fm=1;

}

void delay(uint z) //延时165MS,即十六分音符{ uint x,y;

for(x=z;x>0;x--)

for(y=19000;y>0;y--);

}

void delay1(uint z) //延时1MS

{ uint x,y;

for(x=z;x>0;x--)

for(y=112;y>0;y--);

}

基于51单片机两种音乐编码的比较及用法

基于51单片机的两种音乐编码方法的比较及用法 (建议对这方面有兴趣的朋友们要先看懂了解音乐简谱,包括高音、中音、低音,节拍、延时,及各个音调的频率,网上有很多资料) 1方法:用51单片机音乐编码器软件(Music encode) 输出十六进制数表示: 曲谱存贮格式unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important) (其实软件“关于”里的源代码有使用方法的介绍) 音高由三位数字组成: 个位是表示1~7 这七个音符 十位是表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。 音长最多由三位数字组成: 个位表示音符的时值,其对应关系是: |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位: 0-无符点,1-有符点 2方法:编码为十六进制(高四位表示音调编码,低四位表示节拍编码)(各音调频率及初值计算定时器初值网上有,在此不叙说) do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。 如0x24,表示低音LA、1拍。以此类推 表4.4简谱对应的简谱码、T值、节拍数 简谱发音简谱码T值节拍码节拍数 5 低音SO 1 64260 1 1/4拍 6 低音LA 2 64400 2 2/4拍 7 低音TI 3 64524 3 3/4拍 1 中音DO 4 64580 4 1拍 2 中音RE 5 64684 5 1又1/4拍 3 中音MI 6 64777 6 1又1/2拍 4 中音FA 7 64820 8 2拍 5 中音SO 8 64898 A 2又1/2拍 6 中音LA 9 64968 C 3拍 7 中音TI A 65030 F 3又3/4拍 1 高音DO B 65058 2 高音RE C 65110 3 高音MI D 65157 4 高音FA E 65178 5 高音SO F 65217

(完整版)基于51单片机的电子八音盒详细设计步骤

一、设计目的 利用8052单片机结合内部定时器设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。 二、设计要求 其基本功能为:1,使用LED显示器来显示目前演奏的歌曲编号;2,具有8个按键操作来选择演奏哪一首歌曲;3,内建8首歌曲旋律,按下单键可以演奏歌曲。 三、设计器材 T89C52单片机、晶振、八个按键、二位一体共阳极数码管、电阻电容若干、导线。 四、设计方案及分析 设计思路: (1)选择8052单片机,通过T0定时中断,并配合P2.0引脚输出音频频率。 (2)P2.0引脚输出接蜂鸣器。 (3)通过P0口接LED。 (4)P1口接键盘,输入歌曲号。 音符产生方法: 不同的音调有不同的频率。频率不同,音调也就不同。 利用定时器,使其工作在模式1,定时中断,然后控制P2.0引脚的输出每次取反,就可以在P2.0的引脚输出相应的方波频率。改变计数初值,就改变了频率。定时器的定时时间等于半个周期,定时时间到就输出脉冲取反,重复此过程,就可在P2.0引脚得到一音频的脉冲。 如:中音1的频率=523HZ,周期T=1/523=1912us; 定时器的定时时间为:T/2=1912/2us=956us; 计算得TH0,TL0的计数初值THTL=64580 下面是个音符计数初值

节拍产生方法: 音乐中的节拍用延时时间产生。假设1/4拍执行一次延时程序,这1/2拍就执行两次延时程序,所以只要求出1/4延时时间,其余的节拍就是他的倍数。为方便记谱,将节拍数也进行编码,如下: 建立曲谱编码表: 编谱用8位编码,高4位代表音符,低4位代表节拍。如5 6中音5,中音6,都是1/2拍,则编码为:82H 92H 程序清单: #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit SPEAK = P2^0;//接蜂鸣器管脚 uchar th0_f; uchar tl0_f;

基于51单片机数字音乐盒的设计

单片机实物设计 题目: 单片机音乐盒设计 班级: K0312416-17 姓名:湛俊朱斌杨裕庆 学号:K031241705 K031241632 K031241737

摘要 本设计是一个基于STC89C51RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。本音乐盒共有四首歌曲,用4个按键控制。播放歌曲时,蜂鸣器发出某个音调。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS 仿真软件对硬件进行仿真调试,节约了设计时间。 【关键词】STC89C51RC 按键蜂鸣器 LCD1602液晶

目录 前言 ................................................................................................................................. 第一章工作原理 .............................................................................................................. 1.1设计目标 ............................................................................................................... 第二章软件设计与分析................................................................................................... 2.1 软件设计的组成................................................................................................... 2.2 各部分软件分析 ................................................................................................. 2.2.1 延时165MS,即十六分音符子函数 .......................................................... 2.2.2 延时1MS子函数...................................................................................... 2.2.3 定时器0中断子函数 .............................................................................. 2.2.4 播放音乐子函数...................................................................................... 2.5 定时器1中断子函数.................................................................................. 2.6 按键扫描子函数 ......................................................................................... 2.2.7 主函数..................................................................................................... 2.3 总源程序 ............................................................................................................ 第三章软件仿真 .............................................................................................................. 3.仿真图...................................................................................................................... 3.1 元件清单 ............................................................................................................... 总结 ..................................................................................................................................... 参考文献..............................................................................................................................

基于51单片机的简易计算器制作

基于51单片机的简易计算器制作专业:电气信息班级:11级电类一班 姓名:王康胡松勇 时间:2012年7月12日 一:设计任务 本系统选用AT89C52单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下: (1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LED 显示数据和结果。 (2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LED上提示八个0;当除数为0时,计算器会在LED上会提示八个负号。 设计要求:分别对键盘输入检测模块;LED显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真 分析其设计结果。 二.硬件设计 单片机最小系统 CPU:A T89C52 显示模块:两个4位7段共阴极数码管 输入模块:4*4矩阵键盘 1.电路图

电路图说明 本电路图采用AT89C52作为中处理器,以4*4矩阵键盘扫描输入,用两个74HC573(锁存器)控制分别控制数码管的位于段,并以动态显示的方式显示键盘输入结果及运算结果。为编程方便,以一个一位共阴极数码管显示负号。 三,程序设计 #include #define Lint long int #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; //锁存器段选sbit wela=P2^7; sbit display_g=P2^0; //负号段选 sbit display_w=P2^1; //负号位选uchar code table[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3

51单片机蜂鸣器播放音乐代码

/*生日快乐歌曲*/ #include <> #define uint unsigned int #define uchar unsigned char sbit beep = P1^5; uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } void PlayMusic() { uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0) { //播放各个音符,SONG_LONG 为拍子长度 for(j=0;j // 这是单片机音乐代码生成器生成的代码 #define uchar unsigned char sbit beepIO=P1^5; // 输出为可以修改成其它 IO 口uchar m,n;

基于51单片机音乐盒程序设计

基于51单片机音乐盒程序设计基于51单片机音乐盒程序设计一、功能设计说明 1、电路设计 实物图 矩阵键盘部分电路图 2、运行流程图 程序开始 播放小苹果歌曲

否 判断任意按键是否按下继续播放小苹果歌曲是 否播放完成 进入电子琴模式 判断K16按键是否按下 是 3、电子琴模式按键对应发音设计 按键发音按键发音 低 1 中 2 K1 K9 低 2 中 3 K2 K10 低 3 中 4 K3 K11 低 4 中 5 K4 K12 低 5 中 6 K5 K13 按键发音按键发音 低 6 中 7 K6 K14 低 7 高 1 K7 K15 中 1 重新播放小苹果 K8 K16 二、硬件电路说明

1、程序下载电路 音乐盒电路图 ISP下载接口 本设计采用的单片机为AT89S52单片机,需使用ISP下载器进行下载程序,程序下载电路图如图中ISP1接口. 2、音乐发音电路 IO口P10发出不同频率的脉冲,则BUZZER产生各种不同的声音,本设计采用12MHZ 晶振,系统频率1MHZ,定时器计数一个1us,其对应关系如下表所示: 频率简谱码(T音符音符频率(HZ) 简谱码(T值) (HZ) 值) 低 1 DO 262 63628 # 4 FA# 740 64860 # 1 DO# 277 63731 中 5 SO 784 64898 低 2 RE 294 63853 # 5 SO# 831 64934 # 2 RE# 311 63928 中 6 LA 880

64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 # 5 SO# 1661 65235 # 2 RE# 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 # 6 1865 65268 中 4 FA 698 64820 高 7 SI 1967 65282 计算方法: 例如产生262HZ频率(发音DO), 周期T=1/262=3816 us,由于定时器中断使IO不停取反,故周期 T=3816/2=1908 us 定时器初值N=65536-1908=63628 TH0=63628/256 TL0=65536%256 三、程序代码说明 1 、脉冲产生 采用定时器0溢出中断产生脉冲,定时器初始化如下: TMOD = 0x01; //定时器0工作方式1 ,即十六位计数器计数 TR0 = 1; //启动定时器 ET0 = 1; //定时器0溢出中断使能

基于51单片机的计算器设计

目录 第一章引言 (3) 1.1 简述简易计算器 (3) 1.2 本设计主要任务 (3) 1.3 系统主要功能 (4) 第二章系统主要硬件电路设计 (4) 2.1 系统的硬件构成及功能 (4) 2.2 键盘电路设计 (5) 2.3 显示电路设计 (6) 第三章系统软件设计 (7) 3.1 计算器的软件规划 (7) 3.2 键盘扫描的程序设计 (7) 3.3 显示模块的程序设计 (8) 3.4 主程序的设计 (9) 3.5 软件的可靠性设计 (9) 第四章调试 (9) 第五章结束语 (10) 参考文献 (11) 附录源程序 (11)

第一章引言 1.1 简述简易计算器 近几年单片机技术的发展很快,其中电子产品的更新速度迅猛。计算器是日常生活中比较的常见的电子产品之一。如何才能使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器呢? 本设计是以AT89S52单片机为核心的计算器模拟系统设计,输入采用4×6矩阵键盘,可以进行加、减、乘、除9位带符号数字运算,并在LCD1602上显示操作过程。 科技的进步告别了以前复杂的模拟电路,一块几厘米平方的单片机可以省去很多繁琐的电路。现在应用较广泛的是科学计算器,与我们日常所用的简单计算器有较大差别,除了能进行加减乘除,科学计算器还可以进行正数的四则运算和乘方、开方运算,具有指数、对数、三角函数、反三角函数及存储等计算功能。计算器的未来是小型化和轻便化,现在市面上出现的使用太阳能电池的计算器, 使用ASIC设计的计算器,如使用纯软件实现的计算器等,未来的智能化计算器将是我们的发展方向,更希望成为应用广泛的计算工具。 1.2 本设计主要任务 以下是初步设定的矩阵键盘简易计算器的功能: 1.扩展4*6键盘,其中10个数字,5个功能键,1个清零 2.强化对于电路的焊接 3.使用五位数码管接口电路 4. 完成十进制的四则运算(加、减、乘、除); 5. 实现结果低于五位的连续运算; 6. 使用keil 软件编写程序,使用汇编语言; 7. 最后用ptoteus模拟仿真; 8.学会对电路的调试

51单片机实现的音乐闹钟程序代码

功能描述:产品可以显示时间和日期,时间格式为 hh mm ss 日期格式为 yy.mm.dd 时间和日期轮流显示。时间显示5S 日期显示3S。 可以设置5个闹铃,闹铃音乐可以设置两种:毛驴和童年。 三个按键对时间和闹铃进行设置,六个LED进行显示。 计时采用DS1307。继电时间不丢失,设置过的闹铃也不丢失。 闹铃音乐由单片机的两个定时器去产生频率实现。 部分程序如下: //************************************************* //************************************************ //*********************************************** //程序名:DS1307 时钟程序 //功能描述:用六个八段LED 轮流显示时间 // 和日期。有6个闹钟。上电时从DS1307中读出 // 当前时间、日期、闹钟。 // // // // // #include #include #define uchar unsigned char #define uint unsigned int #define LED P2 #define LEDBit P0 #define nop _nop_(>

#define LightCount 40 #define LightMax 80 sbit SCL=P3^1。 sbit SDA=P3^0。 sbit ModeKey=P1^0。 sbit UpKey=P1^1。 sbit DownKey=P1^2。 sbit Speak=P3^6。 code uchar LCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}。 //0x25, //uchar Clock[]={0x88,0x88,0x88}。 code uint Music_Sound_Long1[]={4,8,4,8,8,4,8,4,4,4, /*童年*/ 8,4,8,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 8,4,8,4,4,4,8,8,4,4, 4,4,4,4,4,4,4,4,4,16, 4,8,4,8,8,4,8,4,4,4, 8,4,8,4,4,4,4,4,16,4, 8,4,8,8,4,8,4,4,4,8, 4,8,4,4,4,4,4,16,0}, Music_Sound_Long2[]={4,4,4,4,4,4,4,4,4,4, /*小毛驴*/ 4,4,16,4,4,4,4,4,4 ,4, 4,4,4,4,4,8,4,4,4,4, 4,4,4,4,4,4,4,4,4,16, 4,4,4,4,2,2,2,2,4,4, 4,4,4,4,16,0}, Music_Sound_Tone1[]={379,379,379,379,425,477,477,477,425,477, 568,637,637,637,568,637, 425,379,477,719, 637,63 7,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,477,568,637,719, 637,637,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,568,477,851,318,

基于AT89C51单片机的带彩灯外观音乐盒设计

基于AT89C51单片机的带彩灯外观音乐盒设计

基于AT89C51单片机的带彩灯外观音乐盒设计 摘要 随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。本文设计的音乐盒是以AT89C51单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏音乐,功能多,外观效果多彩,配有彩灯,使用方便,本音乐盒有三个按键,key1控制彩灯,key2控制音乐,key3为总开关,可同时关闭音乐与彩灯。具有一定的商业价值。 关键字:AT89C51;音乐盒;按键;彩灯

Abstract Along with the development of human society, people of vision, hearing things put forward higher request. Small music box can bring good memories and improve people's spiritual culture. Traditional music box is heavy mechanical type, size, pronunciation and drab, cannot achieve batch production. Music box designed in this paper based on AT89C51 microcontroller as the core element of electronic music box, small size, light weight, can play music, multi-function, appearance and colorful, with a lantern,easy to use. The music box with three buttons , The key1 control Lantern, key2 control music, key3 total switch can turn off the music and lanterns. Have some commercial value. Keywords: AT89C51, music boxes, buttons, Lantern

基于51单片机的计算器设计程序代码汇编

DBUF EQU 30H TEMP EQU 40H YJ EQU 50H ;结果存放 YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放 ORG 00H START: MOV R3,#0 ;初始化显示为空MOV GONG,#0 MOV 30H,#10H MOV 31H,#10H MOV 32H,#10H MOV 33H,#10H MOV 34H,#10H MLOOP: CALL DISP ;PAN调显示子程序WAIT: CALL TESTKEY ; 判断有无按键JZ WAIT CALL GETKEY ;读键 INC R3 ;按键个数 CJNE A,#0,NEXT1 ; 判断就是否数字键 LJMP E1 ; 转数字键处理NEXT1: CJNE A,#1,NEXT2 LJMP E1 NEXT2: CJNE A,#2,NEXT3 LJMP E1 NEXT3: CJNE A,#3,NEXT4 LJMP E1 NEXT4: CJNE A,#4,NEXT5 LJMP E1 NEXT5: CJNE A,#5,NEXT6 LJMP E1 NEXT6: CJNE A,#6,NEXT7 LJMP E1 NEXT7: CJNE A,#7,NEXT8 LJMP E1 NEXT8: CJNE A,#8,NEXT9 LJMP E1 NEXT9: CJNE A,#9,NEXT10 LJMP E1 NEXT10: CJNE A,#10,NEXT11 ;判断就是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12 LJMP E2 NEXT12: CJNE A,#12, NEXT13 LJMP E2

用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 (P3.7)口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将不同的延时时间值t赋给延时程序即可实现。例:我门以440Hz的声音频率来计算,其对应的时间 t=1/2f=1/2*440=1136us 但在实际程序中常采用查表的方式来取的t 值,而为了节约存储器空间则将t值以字节来进行存储,由于大部分t值都大于256。所以,需将t值除以一个常数(t/x)使其小于256。那么,在查表取得t 值后就要再乘上该常数后再赋给延时程序。 以下为常用音符对应的频率和二分之一周期值t :

基于51单片机的蓝牙音乐盒

项目编号 西南交通大学峨眉校区大学生 科技创新基金项目 申请书 A、科技发展基金√ 项目类别(划√)B、基础科学研究基金 C、社会科学专项基金 项目名称:基于51单片机的蓝牙音乐盒 申请者:崔志斌 指导老师:王恪铭 起止年限:2014年5 月至2015年5月 申请日期:2014年4月7日

一、简表 项目名称基于51单片机的蓝牙音乐盒 申请经费0.1(万元)申请类别科技发 展基金 申请滚动资助 (划√) 是 否√ 申请者崔志斌性别男出生日期1993.7.3 学号20128403 班级测控一班所在系 (部) 计算机与通信工 程系 起止年限2014.05 项目组成员(不含申请者) 姓名学号所在系(部)项目分工本人签字 崔志斌20128403 计算机与通信工 程系 技术支持 计算机与通信工 程系 技术支持 计算机与通信工 程系 技术支持 项目研究内容提要(200字以内) 现如今随着科技的发展,人们生活水平的提高,越来越多的人们将注意力转移到了丰富自己的精神生活上。因而现在市场上出现了一些多媒体电子设备,例如MP3、MP4以及平板电脑等等。但是我们发现,这些多媒体设备大都在设备上面仅仅设计了物理按键而没有给出无线控制的解决方案,因此本小组想到了将现有的成熟无线通信技术——蓝牙技术作为我们的多媒体电子音乐盒的控制技术。它打破了传统的以物理按键控制多媒体设备的框架,转而使用现如今迅猛发展并且普及率极高的蓝牙无线通信技术,这样做既可以利用蓝牙将我们的传统多媒体设备上面的物理按键解放,又可以将消费者对于多媒体电子设备的操控体验提高一个层面,可以说是一举两得。用户容易接

受,而且美观大方。整个音乐盒看起来相当美观新颖,故还可作为室内装饰用。 二、项目设计论证 项目名称:基于51单片机的蓝牙音乐盒 1、项目意义、国内外研究概况、水平及发展趋势 现如今随着科技的发展,人们生活水平的提高,越来越多的人们将注意力转移到了丰富自己的精神生活上。因而现在市场上出现了一些多媒体电子设备,例如MP3、MP4以及平板电脑等等。但是我们发现,这些多媒体设备大都在设备上面仅仅设计了物理按键而没有给出无线控制的解决方案,因此本小组想到了将现有的成熟无线通信技术——蓝牙技术作为我们的多媒体电子音乐盒的控制技术。它打破了传统的以物理按键控制多媒体设备的框架,转而使用现如今迅猛发展并且普及率极高的蓝牙无线通信技术,这样做既可以利用蓝牙将我们的传统多媒体设备上面的物理按键解放,又可以将消费者对于多媒体电子设备的操控体验提高一个层面,可以说是一举两得。用户容易接受,而且美观大方。整个音乐盒看起来相当美观新颖,故还可作为室内装饰用。 国外已经有非常多的“创客”在科技小制作上面取得了非常多的成果,比如高仿真机器人、四轴飞行器等等。但是国内的科创发展之

基于51单片机的音乐盒的设计毕业论文

基于51单片机的音乐盒的 设计毕业论文 目次 目次 (3) 1 引言 (4) 1.1 音乐盒的意义 (4) 1.2 研究容 (5) 2.1系统总体框架图 (6) 2.2音乐盒的设计原理 (6) 2.3 单片机芯片概述 (7) 3 硬件电路设计 (8) 3.1 单片机最小系统原理图 (8) 3.1.1 复位电路 (8) 3.1.2 晶振电路 (9) 3.1.3时钟电路 (9) 3.2 LCD显示模块 (9) 3.3 继电器模块 (11) 3.3.1电磁继电器的工作原理和特性 (12)

3.3.2 固态继电器的工作原理和特性 (12) 3.3.3 继电器主要产品技术参数 (12) 3.4 按键模块 (13) 3.5 其它 (13) 4 软件设计 (14) 4.1 软件总体流程图 (14) 4.2播放/暂停子程序 (15) 4.3 LCD显示模块软件设计 (17) 4.3.1 LCD的初始化函数 (17) 4.3.2 LCD与继电器的函数 (18) 5 系统实现 (19) 5.1 硬件调试 (20) 5.1.1 按键控制的实现 (20) 5.1.2 LCD显示 (21) 5.1.3 其他 (21) 总结 (22) 致谢 (23) 参考文献 (24) 附录A 元器件清单 (25) 附录B 源程序 (26)

1 引言 在进入21世纪后,单片机产品的发展正朝着高性能和多品种方向,并且发展趋势是进一步朝着CMOS化、小体积、低功耗、大容量、高性能、低价格以及外围的电路装化等几个方面去发展。单片机的应用的重要意义还是在于它是从根本上改变了传统的控制系统设计思想和设计方法。过去必须要由模拟电路或者数字电路才可以实现的大部分的功能,现在已能完全可以用单片机通过软件的方法来实现了。这种由软件去代替硬件的控制技术也称之为微控制技术,这是传统控制技术的一次革命。单片机可以说渗透到了我们生活的各个方面,几乎难以找到哪个领域里没有单片机的踪迹。导弹中的导航装置,飞机里安装的各种仪表的控制,计算机里的网络通讯与数据传输方面,工业自动化过程中实时控制和数据处理方面,生活中被广泛使用的各种智能IC卡,民用的高档轿车的安全保障系统,摄像机、录像机、全自动洗衣机所涉及的控制方面,以及远程控制的玩具、电子宠物等等,这些全都是离不开单片机的。 而伴随着科学技术的不断进步和社会的持续发展,人类所接触的更种信息也在不断增加并且信息变得越来越复杂。面对着浩如烟海的繁杂信息,人们目前已经能利用计算机等工具快速、精准地对其进行快速处理,但要想将其处理完毕的信息及时、清晰地传递给其他人,还必须要寻找更加卓越的显示技术去实现它。而单片机技术与液晶显示技术的结合,恰恰使得信息的传输交流向着智能化可视化方向进行快速发展。

基于51单片机的数字计算器的设计

《单片机技术及其应用》课程设计报告 专业:通信工程 班级:09312班 姓名:某某某 学号:09031069 指导教师: 二0一二年六月十八日

目录 1设计目的 (1) 2 设计题目描述与要求 (1) 3 设计过程 (2) 4硬件总体方案及说明 (6) 5 软件总体方案及设计流程 (9) 6 调试与仿真 (13) 7 心得体会 (14) 8 指导老师意见 (15) 9 参考文献 (16) 附录一 (16) 附录二 (21)

基于51单片机的数字计算器的设计 1设计目的 简易计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用和单片机完整程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。单片机课程设计既巩固了课本学到的理论,还学到了单片机硬件电路和程序设计,简易计算器课程设计通过自己动手用计算机电路设计软件,编写和调试,最后仿真,来加深对单片机的认识,充分发挥我们的个人创新和动手能力,并提高我们对单片机的兴趣,同时学习查阅资料、参考资料的方法。 本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED 上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件选择AT89C51单片机和74ls164,输入用4×4矩阵键盘。显示用5位7段共阴极LED静态显示。软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。选用编译效率最高的Keil软件进行编程,并用proteus仿真。 2 设计题目描述与要求 基于AT89C51数字计算器设计的基本要求与基本思路: (1)扩展4*4键盘,其中10个数字,5个功能键,1个清零 (2)使用五位数码管接口电路

基于单片机的数字音乐盒

山东建筑大学 课程设计说明书 题目:基于单片机的数字音乐盒 课程:单片机原理及应用B课程设计院(部):信息与电气工程学院 专业:电子信息工程 班级: 学生姓名: 学号: 指导教师:高焕兵张君捧 完成日期: 2013年6月

目录 摘要 .................................................................... I 1 设计目的 (2) 2 设计要求 (2) 3 设计内容 (3) 3.1 设计原理 (3) 3.2 方案设计 (3) 3.3 电路各模块说明 (4) 3.4 器件选择 (6) 3.5.系统设计 (8) 3.6 软件设计 (8) 3.7 仿真调试及操作说明 (9) 总结与致谢 (10) 参考文献 (11) 附录 (12) 附录一:基于单片机的数字音乐盒总电路图 (12) 附录二:音乐程序 (12)

山东建筑大学信息与电气工程学院学院课程设计说明书 摘要 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。 本设计由由单片机AT80C51芯片和LCD显示器为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。本设计采用4*4键盘,用Protel99来画系统硬件图,采用C语言进行编程,编程后利用KEIL C51来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能得以正常实现。 关键词:单片机;音乐盒;电路;播放

基于51单片机的简易计算器设计

河南##############学校 毕业设计(论文) 基于51单片机的简易计算器 系部: 自动控制系 专业: 电气自动化 班级: 自083 姓名: 崔 # # 学号: 091415302 指导老师: 许 # 二零一二年五月八日

基于51单片机的简易计算器 摘要 工程实践教学环节是为了学生能够更好地巩固和实践所学专业知识而设置的,在本次工程实践中,我以《智能化测量控制仪表原理与设计》、《MCS-51系列单片微型计算机及其应用》课程中所学知识为基础,设计了简易计算器。本系统以MCS-51系列中的8051单片机为核心,能够实现多位数的四则运算。该系统通过检测矩阵键盘扫描,判断是否按键,经数据转换把数值送入数码管动态显示。本系统的设计说明重点介绍了如下几方面的内容:基于单片机简易计算器的基本功能,同时对矩阵键盘及数码管动态显示原理进行了简单的阐述;介绍了系统的总体设计、给出了系统的整体流程框图,并对其进行了功能模块划分及所采用的元器件进行了详细说明;对系统各功能模块的软、硬件实现进行了详细的设计说明。 关键词:MCS-51;8051单片机;计算器;加减乘除

Based on the simple calculator 51 SCM Abstract The engineering practice teaching is to students better to consolidate and practice have set up by the professional knowledge, in this engineering practice, I to the intelligent measurement control instrument principle and design ", "the MCS-51 series single chip computer and its application" course knowledge as the foundation, the design the simple calculator. This system to MCS-51 of the 8051 series single chip microcomputer as the core, can realize the connection arithmetic. The system through the test matrix keyboard scan, judge whether key, the data transfer the numerical into digital tube dynamic display. This system mainly introduced the design that the following aspects of content: based on single chip microcomputer simple calculator basic functions, and the matrix keyboard and a digital tube dynamic display of the principle of a simple expatiated; introduced the design of the whole system, the whole process of the system are discussed, and its function module partition and the components for a detailed explanation; the functional modules of the system hardware and software of the implementation of the detailed design instructions. Key words: MCS-51;8051 single chip microcomputer;Calculator;Add, subtract, multiply and divide:

相关主题
文本预览
相关文档 最新文档