单片机电子琴程序+详细注解.docx

上传人:b****6 文档编号:8152960 上传时间:2023-01-29 格式:DOCX 页数:15 大小:16.78KB
下载 相关 举报
单片机电子琴程序+详细注解.docx_第1页
第1页 / 共15页
单片机电子琴程序+详细注解.docx_第2页
第2页 / 共15页
单片机电子琴程序+详细注解.docx_第3页
第3页 / 共15页
单片机电子琴程序+详细注解.docx_第4页
第4页 / 共15页
单片机电子琴程序+详细注解.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单片机电子琴程序+详细注解.docx

《单片机电子琴程序+详细注解.docx》由会员分享,可在线阅读,更多相关《单片机电子琴程序+详细注解.docx(15页珍藏版)》请在冰豆网上搜索。

单片机电子琴程序+详细注解.docx

单片机电子琴程序+详细注解

#include

#include

#include

#include

sbitlie0=P2^3;

sbitlie1=P2^2;

sbitlie2=P2^1;

sbitlie3=P2^0;

sbitPWM1=P2^6;

unsignedchartemp;

unsignedcharkey;

unsignedcharSTH0,STL0;

unsignedcharjishi=0;

unsignedcharn=0;//n为节拍常数变量

unsignedchara[7]={00,59,19,3,4,8,10};//设置时间的初始值

unsignedcharb[7];//将所更新的时间放入数组b中

/***********1s延时程序***********/

voiddelay1s(void)

{

unsignedchari,k;

for(k=100;k>0;k--)

for(i=100;i>0;i--);

}

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

/******************定时器0中断*******************/

voidTIMER0(void)interrupt1

{

TH0=STH0;

TL0=STL0;

PWM1=~PWM1;

}

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

/******************定时器1中断*******************/

voidint0()interrupt3//采用中断3控制节拍节拍延时

{TH1=0xd8;

TL1=0xef;

n--;

}

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

/****************频率延时程序*******************/

voiddelay(unsignedcharm)//控制频率延时

{

unsignedi=3*m;

while(--i);

}

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

/***************************毫秒延时子程序**************************/

voiddelayms(unsignedchara)

{

while(--a);//采用while(--a)不要采用while(a--);

}

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

/**************************设置1-8曲调值*************************/

unsignedintcodetab[]={0xfc43,0xfd08,0,0,0xfd20,0xfd32,0,0,0xfd81,0xfdc7,0,0,0xfe05,0xfe21,0,0,};

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

/**************以下对应数码管0-f**************************/

unsignedcharcodetable[]={

0x03,0x9f,0x25,0x0d,

0x99,0x49,0x41,0x1f,

0x01,0x09,0x11,0xc1,

0x63,0x85,0x61,0x71,0xff};

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

/*********************第一首音乐老男孩***************************/

unsignedcharcodemusic_tab_1[]={

/*1*/

0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,

0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,

0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,

0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,

0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,

0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,

0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10,

0x2b,0x60,

/*2*/

0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,

0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,

0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,

0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,

0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,

0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,

0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10,

0x2b,0x60,

//1176711237755

0x30,0x40,0x18,0x20,0x19,0x20,0x1c,0x20,0x19,0x10,

0x18,0x10,0x18,0x20,0x2b,0x20,0x13,0x20,0x19,0x20,

0x19,0x20,0x20,0x10,0x20,0x10,

//63221117

0x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,

0x18,0x40,0x18,0x20,0x19,0x20,

//6711237755

0x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x15,0x20,

0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10,

//632211

0x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,

0x18,0x60,

//00000

0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60,

//1155555577755

0x18,0x10,0x18,0x10,0x10,0x20,0x10,0x10,0x10,0x10,

0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10,

0x19,0x20,0x20,0x10,0x20,0x10,

//55556511112

0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20,

0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10,

0x15,0x10,

//3244332443

0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,

0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,

//32443

0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,

//5511

0x10,0x40,0x10,0x20,0x18,0x10,0x18,0x10,

//55555577755

0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20,

0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10,

0x20,0x10,

//55556511112

0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20,

0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10,

0x15,0x10,

//3244332171

0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,

0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x20,0x19,0x10,

0x18,0x60,

0x01,0x40,0x01,0x40,

//第二次

/*3*/

0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,

0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,

0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,

0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,

0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,

0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,

0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10,

0x2b,0x60,

/*4*/

0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,

0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,

0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,

0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,

0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,

0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,

0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10,

0x2b,0x60,

//1176711237755

0x30,0x40,0x18,0x20,0x19,0x20,0x1c,0x20,0x19,0x10,

0x18,0x10,0x18,0x20,0x2b,0x20,0x13,0x20,0x19,0x20,

0x19,0x20,0x20,0x10,0x20,0x10,

//63221117

0x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,

0x18,0x40,0x18,0x20,0x19,0x20,

//6711237755

0x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x15,0x20,

0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10,

//632211

0x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,

0x18,0x60,

//33535

0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60,

//1155555577755

0x18,0x10,0x18,0x10,0x10,0x20,0x10,0x10,0x10,0x10,

0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10,

0x19,0x20,0x20,0x10,0x20,0x10,

//55556511112

0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20,

0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10,

0x15,0x10,

//3244332443

0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,

0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,

//32443

0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,

//5511

0x10,0x40,0x10,0x20,0x18,0x10,0x18,0x10,

//55555577755

0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20,

0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10,

0x20,0x10,

//55556511112

0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20,

0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10,

0x15,0x10,

//3244332171

0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,

0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x20,0x19,0x10,

0x18,0x60,

0x01,0x40,0x01,0x40,

//结尾

//321712133423342

0x13,0x20,0x15,0x20,0x18,0x30,0x19,0x10,0x18,0x10,0x15,0x10,

0x18,0x40,0x13,0x40,0x13,0x40,0x12,0x40,0x15,0x40,

0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60,

0x00

};

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

/*******************第二首音乐机器猫**************************/

unsignedcharcodemusic_tab_2[]={0x40,0x20,0x39,0x10,0x30,0x20,0x26,0x10,0x1c,0x20,0x26,0x20,0x20,0x40,

0x20,0x20,0x1c,0x10,0x20,0x20,0x26,0x10,0x24,0x20,0x26,0x10,0x2b,0x40,

0x39,0x20,0x2b,0x10,0x2b,0x20,0x24,0x10,0x19,0x20,0x19,0x10,0x1c,0x20,

0x20,0x10,0x24,0x40,0x24,0x20,0x26,0x20,0x39,0x40,0x33,0x40,0x30,0x40,

0x2b,0x40,

0x40,0x20,0x39,0x10,0x30,0x20,0x26,0x10,0x1c,0x20,0x26,0x20,0x20,0x40,

0x20,0x20,0x1c,0x10,0x20,0x20,0x26,0x10,0x24,0x20,0x26,0x10,0x2b,0x40,

0x39,0x20,0x2b,0x10,0x2b,0x20,0x24,0x10,0x19,0x20,0x19,0x10,0x1c,0x20,

0x20,0x10,0x24,0x40,0x24,0x20,0x26,0x20,0x33,0x40,0x2b,0x40,0x30,0x40,

0x1c,0x40,0x1c,0x20,0x20,0x20,0x24,0x20,0x20,0x10,0x1c,0x10,0x20,0x40,

0x2b,0x20,0x26,0x10,0x24,0x20,0x2b,0x10,0x20,0x40,

0x1c,0x40,0x20,0x40,0x24,0x40,0x2b,0x40,0x19,0x20,0x1c,0x10,0x20,0x20,

0x1c,0x10,0x20,0x20,0x24,0x20,0x20,0x20,0x1c,0x20,0x26,0x40,0x2b,0x20,

0x30,0x40,0xff};

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

/*******************以下为主函数部分**************************/

voidmain(void)

{

unsignedcharp,m;//m为频率常数变量

unsignedchari=0;

TMOD=0x11;//设置定时器模式都为模式1

IE=0x8a;//中断使能

TH1=0xd8;

TL1=0xef;

P2=0xa0;

P3=0x0f;

I2CCON=0xE8;

SetTime(a);//设置时间

SwitchRTC

(1);

LCDInitialize();//液晶初始化

while

(1)

{

P1=0xf0;

P2=0xbf;

lie0=0;//扫描第一列以下以此类推

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

delay1s();//去键盘抖动

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

switch(temp)

{

case0x0e:

key=0;

break;

case0x0d:

key=4;

break;

case0x0b:

key=8;

break;

case0x07:

key=12;

break;

}

P0=table[key];

STH0=tab[key]/256;

STL0=tab[key]%256;

TR0=1;

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

}

TR0=0;

}

}

P1=0xf0;

P2=0xbf;

lie1=0;

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

delay1s();

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

switch(temp)

{

case0x0e:

key=1;

break;

case0x0d:

key=5;

break;

case0x0b:

key=9;

break;

case0x07:

key=13;

break;

}

P0=table[key];

STH0=tab[key]/256;

STL0=tab[key]%256;

TR0=1;

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

}

TR0=0;

}

}

P1=0xf0;

P2=0xbf;

lie2=0;

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

delay1s();

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

switch(temp)

{

case0x0e:

key=2;

break;

case0x0d:

key=6;

break;

case0x0b:

key=10;

break;

case0x07:

key=14;

break;

}

P0=table[key];

}

}

P1=0xf0;

P2=0xbf;

lie3=0;

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

delay1s();

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

switch(temp)

{

case0x0e:

key=3;

break;

case0x0d:

key=7;

break;

case0x0b:

key=11;

break;

case0x07:

key=15;

break;

}

P0=table[key];

}

}

switch(key)

{case0,4,8,12,1,5,9,13,8,7,10,11,15:

break;

case2:

{

play_1:

{

a_1:

p=music_tab_1[i];

if(p==0x00){i=0,delayms(1000);gotoplay_1;}//如果碰到结束符,延时1秒,回到开始再来一遍

elseif(p==0xff){i=i+1;delayms(100),TR1=0;gotoa_1;}//若碰到休止符,延时100ms,继续取下一音符

else{m=music_tab_1[i++],n=music_tab_1[i++];}//取频率常数和节拍常数

TR1=1;//开定时器1

while(n!

=0)PWM1=~PWM1,delay(m);//等待节

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1