基于单片机的电子音乐盒 - 图文(6)

2019-06-05 11:43

将高四位移至低四位,并将其中唯一的0 变成1,其余为0 //对0~3行分别附加其初始值0,4,8,12 switch(tmp)

{case 1:k+=0; break; case 2:k+=4; break; case 4:k+=8; break; case 8:k+=12; break; default:return;}

keyno=k; //将k的值赋给keyno由数码管输出 }

//---------------------------简谱--------------------------------------- //编程规则:字节高位是简谱,低位是持续时间, //代表多少个十六分音符

//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,0x08,

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,

第 24 页 共 32 页

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 qizige[]={ //七子之歌

0x54,0x32,0x52,0x32,0x54,0x62,0x52,0x32,0x62,0x54, 0x14,0x12,0x22,0x34,0x52,0x32,0x02,0x32,0x58,

0x52,0x52,0x62,0x52,0x32,0x54,0x52,0x62,0x52,0x82,0x62,0x58, 0x14,0x52,0x32,0x22,0x12,0x24,0x32,0x54,0x2,0x22,0x34,0x1f,0x18,

0x04,0x54,0xa4,0x92,0x81,0x62,0x52,0x54,0x62,0x64,0x52,0x62,0x81,0xa2,0x82,0x9c,

0x02,0x52,0xa4,0x92,0x81,0x62,0x52,0x54,0x62,0x64,0x52,0x64,0xa2,0x92,0x9f, 0xa4,0x92,0x81,0x62,0x52,0x54,0x84,0x62,0x52,0x32,0x22,0x14, 0x04,0x22,0x32,0x58,0x58,0x04,0x52,0x62,0x8f, 0xff//结束标志 };

uchar code ganen[]={ //感恩的心

0x12,0x14,0x22,0x32,0x54,0x32,0x84,0x72,0x62,0x54, 0x02,0x62,0x62,0x52,0x54,0x12,0x22,0x32,0x28,

0x12,0x14,0x22,0x32,0x54,0x32,0x84,0x92,0x82,0x54, 0x32,0x24,0x21,0x61,0x54,0x22,0x32,0x12,0x18,

0x22,0x24,0x12,0x24,0x11,0x21,0x34,0x32,0x21,0x31,0x34,

0x12,0x22,0x22,0x22,0x11,0x21,0x22,0x64,0x52,0x52,0x32,0x38,

0x31,0x52,0x51,0x52,0x31,0x51,0x58,0x31,0x82,0x81,0x82,0x31,0x61,0x68, 0x62,0x62,0x62,0x51,0x61,0x64,0x61,0x82,0x61,0x9c,

0x52,0xa4,0x92,0xa4,0x32,0x84,0x72,0x64,0x62,0x94,0x82,0x94,

0x61,0x81,0x92,0x91,0x91,0x92,0x81,0xa1,0xa2,0x92,0x94, 0x52,0xa4,0x92,0xa4,0x32,0x84,0x72,0x64, 0x52,0x62,0x81,0x81,0x82,0x92,0xa2,0x94,0x82,0x72,0x82,0x88, 0xff//结束标志 };

//----------------------------简谱音调对应的定时器初值---------------------------

//适合11.0592M的晶振 uchar code cuzhi[]={ 0xff,0xff,//占位

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

第 25 页 共 32 页

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 beep();//蜂鸣器叫一声 void main() {

P0=0xbf; KK=0;

count2=0; //不唱歌 EA=1;//开总中断

EX0=1;//开外部中断0

IT0=1;//外部中断0下降沿触发方式 EX1=1;//开外部中断1

IT1=1;//外部中断1下降沿触发方式 TMOD=0x01;//定时器0工作在方式1 TH0=0; TL0=0; ET0=1; while(1) {

if(count2!=0) {

song();

delay1(1000); }

if(count2==0)

{ keys_scan(); //矩阵键盘无限扫描 P1=0xf0; if(P1!=0xf0) {

第 26 页 共 32 页

P0=DSY_table[keyno]; TR0=1; }

if(P1==0XF0) {TR0=0; }

delay_ms(2); } } }

void int0() interrupt 0 {

EA=0;//关总中断 delay1(1);//去抖 if(key1==0) {

count2=0; //暂停音乐 TR0=0; } EA=1; }

void int1() interrupt 2 {

TR0 = 0;

delay1(1);//去抖 if(key2==0) {

i=0;//从头开始唱 count2++; TR0=~TR0; if(count2==5) count2=0; } }

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

if(count2==0) {

TH0=tone_delay_table[keyno]/256; TL0=tone_delay_table[keyno]%6;

第 27 页 共 32 页

fm=~fm; }

if(count2!=0) {

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=jmszl[i]; if(count2==2)

temp=qnzl[i]; if(count2==3)

temp=qizige[i]; if(count2==4)

temp=ganen[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); //取数的低4位 TR0=0; //唱完一个音停10MS fm=1;

第 28 页 共 32 页


基于单片机的电子音乐盒 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:并联混合动力中型客车多能源动力优化控制策略

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: