基于51单片机的7键电子琴音乐播放器proteus

这篇具有很好参考价值的文章主要介绍了基于51单片机的7键电子琴音乐播放器proteus。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本设计仅供参考
基于51单片机的7键电子琴音乐播放器proteus(仿真+源码+原理图)
原理图:Altium Designer
仿真图proteus 7.8
程序编译器:keil 4/keil 5
编程语言:C语言
编号C0036

有需要学习可以点击下方链接下载
资料下载链接

设计介绍:

本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共21个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐。系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比高等,具有一定的使用和参考价值。
设计思路:
用独立式键盘的7个按键分别对应相应的音符,当按下某一个按键时,产生一个相应音符,操作者按一定的节奏、规律进行输入时,信号经过单片机处理,然后经音频放大后经扬声器输出音频信号,产生乐曲。本次设计有一个创新,就是预先存放一段音乐程序在芯片内,整个设计既可以作电子琴用又可以作音乐盒用,且带显示功能。

仿真图(提供源文件):

基于51单片机的7键电子琴音乐播放器proteus

原理图:

硬件设计分析

电源的设计
系统电源使用直流5伏。
由电脑USB接口提供电源。
USB是通用串行总线(Universal Serial Bus)接口的简称。它是目前使用比较广泛的电脑接口之一,主要版本有1.0、1.1和最新的2.0三种版本。根据USB总线的工业标准,它可以提供额定功率为5V/500mA的电源供USB设备使用。
基于51单片机的7键电子琴音乐播放器proteus

单片机最小系统

51单片机是对目前所有兼容intel 8031指令系统的单片机的统称。该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。51系列单片机内包含以下几个部件:
一个8位CPU;一个片内振荡器及时钟电路;
4KB的ROM程序存储器;
一个128B的RAM数据存储器;
寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;
32条可编程的I/O口线;
两个16位定时/计数器;
一个可编程全双工串行口;
5个中断源、两个优先级嵌套中断结构。

显示系统

显示系统采用2位数码管来显示,LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示sP,即点),每个发光二极管的阳极连在一起,如图(图3-3)所示。这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。为方便起见,本文主要讨论共阴八段LED数码显示管,其他类形的显示管与其类似。
LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如 H,G,F,E,D,C,B,A全亮显示为8,采用共阴极连接驱动代码,代码表如下表(表2-2-2)所示。

基于51单片机的7键电子琴音乐播放器proteus

程序:

#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;//开外部中断0
	ET0=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();	
			}
		}		
	}
}
//主函数
void main()
{
	init();
	while(1)
	{	
		if(flag==0)
			display_music();
		else
			display_play();
	}
}
//外部0中断子函数
void wb0() interrupt 0 
{
	if(k8==0)
	{
		delay(5);
		while(k8==0);
		flag=~flag;
		D1=~D1;
		D2=~D2;
	}		
}

基于51单片机的7键电子琴音乐播放器proteus

设计报告:

基于51单片机的7键电子琴音乐播放器proteus文章来源地址https://www.toymoban.com/news/detail-509208.html

到了这里,关于基于51单片机的7键电子琴音乐播放器proteus的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Proteus仿真--基于51单片机的可演奏电子琴设计(仿真文件+程序)

    本文主要介绍基于51单片机的可演奏电子琴设计(完整仿真源文件及代码见文末链接) 仿真图如下 其中通过矩阵键盘可以实现不同的音乐播放 仿真运行视频 Proteus仿真--基于51单片机的可演奏电子琴设计(仿真文件+程序) 附完整Proteus仿真资料+代码资料 百度网盘链接: https:

    2024年02月06日
    浏览(45)
  • 基于单片机的电子琴设计

    摘 要 读书、看电影、听音乐,都是最常见的丰富内心世界的良剂。听音乐,作为陶冶情操、提升境界最便捷的方式,正受到越来越多人们的欢迎。音乐可以很轻松的融入各种场合,给人们带来很轻松的氛围,只有真正的接触它,才可以真正的感受到它的魅力。 本次设计正是

    2024年03月18日
    浏览(46)
  • 基于AT89C52单片机的简易电子琴设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87853299?spm=1001.2014.3001.5503 源码获取 主要内容: 本设计是基于51系列的单片机进行的设计,利用所给键盘的八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间

    2024年02月04日
    浏览(50)
  • 【Proteus仿真】【Arduino单片机】简易电子琴

    本项目使用Proteus8仿真Arduino单片机控制器,使用无源蜂鸣器、按键等。 主要功能: 系统运行后,按下K1-K7键发出不同音调。 B站演示视频:https://space.bilibili.com/444388619 视频地址:https://space.bilibili.com/444388619/video 专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网

    2024年02月06日
    浏览(49)
  • 基于51单片机的数字电子钟

    目录 摘  要 1.课程设计任务 1.1课程设计题目 1.2设计的要求  2.设计总体方案 2.1初步设计方案 2.2芯片的选型 2.2.1时钟芯片的选择 2.2.2温度传感器的选择 2.2.3显示电路的选择 2.2.4输入按键的选择 2.2.5控制电路芯片的选择 2.3总体方案 3.单元模块设计 3.1显示模块 3.2按键模块 3.3蜂

    2024年02月12日
    浏览(53)
  • 基于51单片机的电子秤设计

    电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。 电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计

    2024年02月02日
    浏览(50)
  • 基于51单片机的电子密码锁

    主要功能: 1、6位密码开锁 可以修改用户密码和管理员密码 断电记忆 3次错误报警锁住键盘

    2024年02月11日
    浏览(47)
  • 基于51单片机带显示器的音乐盒设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87512938?spm=1001.2014.3001.5503 源码获取 摘 要 单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。他的

    2024年02月06日
    浏览(48)
  • 基于51单片机的电子血压脉搏计

    大三上的设计,分享给大家 diy单片机设计蓝牙脉搏血压计_哔哩哔哩_bilibili 设计采用的是拐点法测量,蓝牙模块可以删去,有按钮测量开关 1.1 基于单片机的电子血压计简介 1.1.1 基于单片机的电子血压计的介绍 该产品重量轻,便携,可放入医生护士口袋。无水银,增强环保性

    2023年04月14日
    浏览(36)
  • 基于51单片机的电子时钟(原理图,代码)

    所需要使用的元器件:  代码:(使用的是keil5) #include reg52.h             //调用单片机头文件 #define uchar unsigned char  //无符号字符型 宏定义    变量范围0~255 #define uint  unsigned int     //无符号整型 宏定义    变量范围0~65535   //数码管段选定义      0     1    2    

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包