基于51单片机电子琴音乐播放器
(仿真+程序+原理图+PCB+设计报告)
功能介绍
具体功能:
1.可以使用按键切换音乐播放模式和弹奏模式;
2.LED灯显示在使用哪种模式;
3.音乐播放模式播放音乐《两只老虎》;
4.弹奏模式可以切换低中高音;
5.数码管实时显示弹奏的音调;
演示视频:
基于51单片机低中高音7键电子琴音乐播放器
#include<reg51.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit SDA1=P0^2;//串行数据输入,对应595的14脚SER
sbit SCL1=P0^1;//移位寄存器时钟输入,对应595的11脚SCK
sbit SCL2=P0^0;//存储寄存器时钟输入,对应595的12脚RCK
sbit W1=P0^3;
sbit W2=P0^4;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit D1=P2^6;//播放音乐模式
sbit D2=P2^7;//弹奏模式
sbit k8=P3^2;//功能切换键
sbit k9=P3^3;//低音
sbit k10=P3^4;//中音
sbit k11=P3^5;//高音
sbit beep=P2^2;//蜂鸣器接口
uchar code table1[]={ 0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F,/*9*/0x37,/*N*///中音 0x38,/*L*///低音0x76,/*H*///高音0x79 /*E*/};//共阴极数码管
uchar code table2[]={ 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//中音0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,//低音的高8位0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};//音阶频率表 低八位
uchar code table3[]={ 0x8E,0xED,0x44,0x6B,0xB4,0xF4,0x2D,//中音0x21,0xDB,0x87,0xD7,0x68,0xE8,0x5B,//低音的低8位0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};
uchar code table4[]={1,2,3,1, 1,2,3,1, 3,4,5, 3,4,5, 5,6,5,4,3,1, 5,6,5,4,3,1, 1,12/*低音5*/,1, 1,12,1};
uchar code table5[]={4,4,4,4, 4,4,4,4, 4,4,8, 4,4,8, 2,1,2,1,4,4, 2,1,2,1,4,4, 4,4,6, 4,4,6};
uchar i;
uchar key,aa=0;
uchar bb,cc;
bit flag=0;
//延时子函数
void delay(uint z)
{uint x,y;for(x=z;x>0;x--)for(y=340;y>0;y--);
}
void in(uchar Data)
{uchar i;for(i=0;i<8;i++) //循环8次,刚好移完8位{Data<<=1;SCL1=CY;SDA1=1; //先将移位寄存器控制引脚置为低 _nop_();_nop_();SDA1=0;}
}
void out()
{SCL2=0; //先将存储寄存器引脚置为低_nop_(); SCL2=1; //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。_nop_(); SCL2=0;
}
//初始化子函数
void init()
{beep=0;D1=1;D2=0;EA=1;//开总中断TCON=0x01;//外部中断0设置为边沿触发EX0=1;//开外部中断0ET0=1;ET1=1;TMOD=0x11;//定时器0,1工作在定时状态,均为方式1
}
//数码管显示子函数
void display1()
{in(table1[aa]); //再传段码out();W1=0;;delay(1); //延迟时间2ms以内W1=1;in(table1[cc+1]); //再传段码out();W2=0;delay(1); //延迟时间2ms以内W2=1;
}
//高低音选择子函数
void yinjie()
{if(k10==0){ delay(5);if(k10==0){ aa=10;bb=0;//返回10为seg[10]显示C}}if(k9==0){ delay(5);if(k9==0){ aa=11;bb=1;//返回11为seg[11]显示L}}if(k11==0){ delay(5);if(k11==0){ aa=12;bb=2;//返回12为seg[12]显示H}}if(aa==0){aa=13;}
}
//播放音乐子函数
void display_music()
{ TH0=table2[table4[i]-1];TL0=table3[table4[i]-1];while(flag==0){ if(i<32){TR0=1;delay(57*table5[i]);i++;}if(i==32){i=0;}}
}
//演奏模式子函数
void display_play()
{TR0=0;TR1=0;yinjie();in(table1[aa]); //再传段码out();W1=0;;delay(1); //延迟时间2ms以内W1=1;if(aa!=13&&flag==1){ if(k1==0){ TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1; while(k1==0){ cc=0;display1();}}if(k2==0){ TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k2==0){ cc=1;display1();}} if(k3==0){ TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k3==0){ cc=2;display1();}}if(k4==0){TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k4==0){ cc=3;display1(); }}if(k5==0){ TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k5==0){cc=4;display1();}}if(k6==0){ TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k6==0){cc=5;display1(); }}if(k7==0){ TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1; while(k7==0){cc=6;display1(); }} }
}
硬件设计
使用元器件:
单片机:AT89C51;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
电阻 0.5欧;铝电解电容器 47uF;
74HC595驱动数码管模块;
晶振 12MHZ;瓷片电容器 30pF;
铝电解电容器 47uF;
发光二级管;蜂鸣器;
按键;单片机底座;
导线:若干;
结构图:
设计资料
01 仿真图
本设计使用proteus7.8和proteus8.9两个版本设计,向下兼容,无需担心!具体如图!
音乐模式
弹奏模式(低、中、高音)
02 原理图
本系统原理图采用Altium Designer19设计,具体如图!
03 程序
本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!
04 设计报告
八千字设计报告,具体如下!
05 设计资料
资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、pcb电路图,参考论文、元件清单等。具体内容如下,全网最全! !
资料获取请观看前面演示视频!
点赞分享一起学习成长。