加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

基于51單片機(jī)的7鍵電子琴音樂播放器proteus

07/31 09:04
2437
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

本設(shè)計(jì)僅供參考
基于51單片機(jī)的7鍵電子琴音樂播放器proteus(仿真+源碼+原理圖
原理圖:Altium Designer
仿真圖proteus 7.8
程序編譯器:keil 4/keil 5
編程語(yǔ)言:C語(yǔ)言
編號(hào)C0036

設(shè)計(jì)介紹:

本次設(shè)計(jì)首先對(duì)單片機(jī)設(shè)計(jì)簡(jiǎn)易電子琴仔細(xì)分析,接著制作硬件電路和編寫軟件的程序,最后進(jìn)行軟硬件的調(diào)試運(yùn)行。并且從原理圖,主要芯片,各模塊的原理和各個(gè)模塊的程序調(diào)試來(lái)闡述。利用單片機(jī)產(chǎn)生不同頻率來(lái)獲得我們要求的音階,實(shí)現(xiàn)高、中、低共21個(gè)音符的發(fā)音和顯示和音樂播放時(shí)的控制顯示,并且能自動(dòng)播放程序中編排的音樂。

系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點(diǎn)是硬件電路簡(jiǎn)單,軟件功能完善,控制系統(tǒng)可靠,性價(jià)比高等,具有一定的使用和參考價(jià)值。

設(shè)計(jì)思路:

用獨(dú)立式鍵盤的7個(gè)按鍵分別對(duì)應(yīng)相應(yīng)的音符,當(dāng)按下某一個(gè)按鍵時(shí),產(chǎn)生一個(gè)相應(yīng)音符,操作者按一定的節(jié)奏、規(guī)律進(jìn)行輸入時(shí),信號(hào)經(jīng)過單片機(jī)處理,然后經(jīng)音頻放大后經(jīng)揚(yáng)聲器輸出音頻信號(hào),產(chǎn)生樂曲。本次設(shè)計(jì)有一個(gè)創(chuàng)新,就是預(yù)先存放一段音樂程序在芯片內(nèi),整個(gè)設(shè)計(jì)既可以作電子琴用又可以作音樂盒用,且?guī)э@示功能。

仿真圖(提供源文件):

在這里插入圖片描述

原理圖:

硬件設(shè)計(jì)分析

電源的設(shè)計(jì)
系統(tǒng)電源使用直流5伏。
由電腦USB接口提供電源。
USB是通用串行總線(Universal Serial Bus)接口的簡(jiǎn)稱。它是目前使用比較廣泛的電腦接口之一,主要版本有1.0、1.1和最新的2.0三種版本。根據(jù)USB總線的工業(yè)標(biāo)準(zhǔn),它可以提供額定功率為5V/500mA的電源供USB設(shè)備使用。
在這里插入圖片描述

單片機(jī)最小系統(tǒng)

51單片機(jī)是對(duì)目前所有兼容intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。該系列單片機(jī)的始祖是intel的8031單片機(jī),后來(lái)隨著技術(shù)的發(fā)展,成為目前廣泛應(yīng)用的8為單片機(jī)之一。單片機(jī)是在一塊芯片內(nèi)集成了CPU、RAM、ROM、定時(shí)器計(jì)數(shù)器和多功能I/O口等計(jì)算機(jī)所需要的基本功能部件的大規(guī)模集成電路,又稱為MCU。51系列單片機(jī)內(nèi)包含以下幾個(gè)部件:

一個(gè)8位CPU;一個(gè)片內(nèi)振蕩器時(shí)鐘電路;
4KB的ROM程序存儲(chǔ)器;
一個(gè)128B的RAM數(shù)據(jù)存儲(chǔ)器;
尋址64KB外部數(shù)據(jù)存儲(chǔ)器和64KB外部程序存儲(chǔ)空間的控制電路;
32條可編程的I/O口線;
兩個(gè)16位定時(shí)/計(jì)數(shù)器;
一個(gè)可編程全雙工串行口;
5個(gè)中斷源、兩個(gè)優(yōu)先級(jí)嵌套中斷結(jié)構(gòu)。

顯示系統(tǒng)

顯示系統(tǒng)采用2位數(shù)碼管來(lái)顯示,LED顯示屏作為大型顯示設(shè)備的一種,具有亮度高、價(jià)格低、壽命長(zhǎng)、維護(hù)簡(jiǎn)便等優(yōu)點(diǎn)。LED數(shù)碼管的結(jié)構(gòu)簡(jiǎn)單,分為七段和八段兩種形式,也有共陽(yáng)和共陰之分。以八段共陽(yáng)管為例,它有8個(gè)發(fā)光二極管(比七段多一個(gè)發(fā)光二極管,用來(lái)顯示sP,即點(diǎn)),每個(gè)發(fā)光二極管的陽(yáng)極連在一起,如圖(圖3-3)所示。

這樣,一個(gè)LED數(shù)碼管就有I根位選線和8根段選線,要想顯示一個(gè)數(shù)值,就要分別對(duì)它們的高低電平來(lái)加以控制。為方便起見,本文主要討論共陰八段LED數(shù)碼顯示管,其他類形的顯示管與其類似。

LED 燈的顯示原理:通過同名管腳上所加電平的高低來(lái)控制發(fā)光二極管是否點(diǎn)亮而顯示不同的字形,如 H,G,F,E,D,C,B,A全亮顯示為8,采用共陰極連接驅(qū)動(dòng)代碼,代碼表如下表(表2-2-2)所示。

在這里插入圖片描述

程序:

#include<reg51.h>
#include<intrins.h>
typedef unsigned int  uint;   
typedef unsigned char uchar;
sbit SDA1=P0^2;//串行數(shù)據(jù)輸入,對(duì)應(yīng)595的14腳SER
sbit SCL1=P0^1;//移位寄存器時(shí)鐘輸入,對(duì)應(yīng)595的11腳SCK
sbit SCL2=P0^0;//存儲(chǔ)寄存器時(shí)鐘輸入,對(duì)應(yīng)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*/
					};//共陰極數(shù)碼管
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;
//延時(shí)子函數(shù)
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++)   //循環(huán)8次,剛好移完8位
	{
      	Data<<=1;
	  	SCL1=CY;
	  	SDA1=1;        //先將移位寄存器控制引腳置為低    
      	_nop_();
	  	_nop_();
      	SDA1=0;
	}
}
void out()
{
	SCL2=0;   //先將存儲(chǔ)寄存器引腳置為低
	_nop_(); 
	SCL2=1;    //再置為高,產(chǎn)生移位時(shí)鐘上升沿,上升沿時(shí)移位寄存器的數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲(chǔ)寄存器,更新顯示數(shù)據(jù)。
	_nop_(); 
	SCL2=0;
}
//初始化子函數(shù)
void init()
{
	beep=0;
	D1=1;
	D2=0;
	EA=1;//開總中斷
	TCON=0x01;//外部中斷0設(shè)置為邊沿觸發(fā)
	EX0=1;//開外部中斷0
	ET0=1;
	ET1=1;
	TMOD=0x11;//定時(shí)器0,1工作在定時(shí)狀態(tài),均為方式1
}
//數(shù)碼管顯示子函數(shù)
void display1()
{
	in(table1[aa]);  //再傳段碼
	out();
	W1=0;;
	delay(1);             //延遲時(shí)間2ms以內(nèi)
	W1=1;
	in(table1[cc+1]);  //再傳段碼
	out();
	W2=0;
	delay(1);             //延遲時(shí)間2ms以內(nèi)
	W2=1; 
}
//高低音選擇子函數(shù)
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;
	}
}
//播放音樂子函數(shù)
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;
		}
	}	
}
//演奏模式子函數(shù)
void display_play()
{
	TR0=0;
	TR1=0;
	yinjie();
	in(table1[aa]);  //再傳段碼
	out();
	W1=0;;
	delay(1);             //延遲時(shí)間2ms以內(nèi)
	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();	
			}
		}		
	}
}
//主函數(shù)
void main()
{
	init();
	while(1)
	{	
		if(flag==0)
			display_music();
		else
			display_play();
	}
}
//外部0中斷子函數(shù)
void wb0() interrupt 0 
{
	if(k8==0)
	{
		delay(5);
		while(k8==0);
		flag=~flag;
		D1=~D1;
		D2=~D2;
	}		
}

在這里插入圖片描述

設(shè)計(jì)報(bào)告:

在這里插入圖片描述

  • 設(shè)計(jì)資料獲取聯(lián)系方式.doc

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
MKL25Z128VLH4 1 Freescale Semiconductor RISC MICROCONTROLLER

ECAD模型

下載ECAD模型
$6.94 查看
STM32F207ZGT6TR 1 STMicroelectronics High-performance Arm Cortex-M3 MCU with 1 Mbyte of Flash memory, 120 MHz CPU, ART Accelerator, Ethernet

ECAD模型

下載ECAD模型
$13.88 查看
AT89C51CC03UA-RDTUM 1 Atmel Corporation Microcontroller, 8-Bit, FLASH, 8051 CPU, 60MHz, CMOS, PQFP64, GREEN, VQFP-64

ECAD模型

下載ECAD模型
$9.5 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜