基于51单片机的简易电子琴正确版
(完整版)基于51单片机的简易电子琴设计
![(完整版)基于51单片机的简易电子琴设计](https://img.taocdn.com/s3/m/5bd4426b30b765ce0508763231126edb6f1a7686.png)
(完整版)基于51单⽚机的简易电⼦琴设计基于51单⽚机的简易电⼦琴设计⼀.问题提出为什么选择简易电⼦琴设计?1.对于⾳乐的兴趣我们对⾳乐都有着浓厚的兴趣,喜欢听钢琴曲,如理查德·克莱德曼演奏的《思乡曲》《星空》《秋⽇的私语》等,⾳乐在我们的⽣活中扮演着很重要的⾓⾊。
有⼈曾说,喜欢⾳乐的⼈不会向恶。
以前不以为然,可是随着这些年来慢慢喜欢上阴郁,听了越来越多的钢琴曲之后,觉得这句话⾮常有道理。
⾳乐是⽤艺术家⽤⾳符记录世界,传达情感的⼀种艺术形式,⾳乐⾥有⼀种和谐之美,听⾳乐可以让⼈⼼情舒畅,与外界和谐统⼀。
⾳乐现在已经成为我⽣活中很重要的⼀部分,我们每周都会抽些时间去欣赏世界名曲,作为对精神的洗礼。
2.对于电⼦琴的好奇好奇是⼈的天性,⼈类对于⾃然的认识,对于科学的探索,⽆不始于好奇。
我们对电⼦琴如何实现其功能,如⾳⾊选择、声⾳强弱控制、节拍器、⾃动放⾳功能等等也很好奇,想通过学习单⽚机这个机会,深⼊了解电⼦琴的功能实现原理。
3.对于51单⽚机强⼤功能的信赖51单⽚机有基本特性:(1)⾯向控制的8位CPU和指令系统(2)4K字节的程序存储器(ROM或EPROM)(3)128字节的数据存储器(4)可编程的并⾏I/O⼝P0~P3,有32位双向输⼊/输出线(5)⼀个全双⼯串⾏⼝(6)两个16位定时器/计数器(7)五个中断源,两个优先级的中断结构(8)⼀个⽚内时钟振荡器和时钟电路(9)可以寻址64K字节的程序存储器和64K字节的外部数据存储器51单⽚机功能强⼤,性能⽇趋完善,在⼯业测控、智能仪器仪表、机电⼀体化产品、家电领域中应⽤⼴泛,因此基于51单⽚机设计简易的电⼦琴可⾏性⾮常⼤。
⼆.功能需求1.能够实现基本的琴键功能即每按下⼀个琴键,单⽚机能够检测到键盘的按键,并根据按键的位置,通过程序来控制,使蜂鸣器发出不同频率(⾳调)的声⾳,声⾳延迟⼀段时间,等到按键放开后,声⾳停⽌。
然后再继续扫描,看是否有键按下,如此循环下去,即可实现基本的琴键功能。
51单片机简易电子琴
![51单片机简易电子琴](https://img.taocdn.com/s3/m/16c00fc15fbfc77da269b130.png)
51单片机简易电子琴因本人初学单片机程序过于简陋请见谅程序:#include<reg51.h>sbit P2_0=P2^0;sbit P1_0=P1^0;//sbit P3_0=P3^0;unsigned char temp;unsigned int tone1;unsigned int tone2;unsigned char yinfu[]={0xfb,0xe9, //Do0xfc,0x5c, //Re0xfc,0xc1, //Mi0xfc,0xef, //Fa0xfd,0x45, //So0xfd,0x92, //La0xfd,0xd0, //Si0xfd,0xee, //Do#0xfa,0x14, //So低0xfa,0xb9, //La低0xfb,0x4d, //Si低0x00,0x00 //音符之间的间隔,只要间隔时间小于65ms时,//喇叭不会发出声音,用作拍子之间的短暂停顿};void delay500us(void) //延时五百US{unsigned char a,b;for(b=71;b>0;b--)for(a=2;a>0;a--);}void anjian(void) 按键//按键扫描程序{P1=0xf0;temp=P1;if(temp!=0xf0) //按键扫描{delay500us(); //消抖动temp = P1;if(temp!=0xf0){P1=0xfe;temp=P1;if((temp&0xf0)!=0xf0) {switch(temp){case 0xbe:tone1=yinfu[15];tone2=yinfu[16];TR0=1;break;case 0xde:tone1=yinfu[14];tone2=yinfu[15];TR0=1;break;case 0xee:tone1=yinfu[12];tone2=yinfu[13];TR0=1;break;case 0x7e:break;default:break;}}P1=0xfd;temp=P1;if((temp&0xf0)!=0xf0) {switch(temp){case 0xbd:tone1=yinfu[10];tone2=yinfu[11];TR0=1;break;case 0xdd:tone1=yinfu[8];tone2=yinfu[9];TR0=1;break;case 0xed:tone1=yinfu[6];TR0=1;break;case 0x7d:break;default:break;}}P1=0xfb;temp=P1;if((temp&0xf0)!=0xf0) {switch(temp){case 0xbb:tone1=yinfu[4];tone2=yinfu[5];TR0=1;break;case 0xdb:tone1=yinfu[2];TR0=1;break;case 0xeb:tone1=yinfu[0];tone2=yinfu[1];TR0=1;break;case 0x7b:break;default:break;}}P1=0xf7;temp=P1;if((temp&0xf0)!=0xf0) {switch(temp){case 0xd7:break;case 0x77:break;case 0xb7:case 0xe7: //清零按键break;default:break;}}}}P1=0xf0;while(P1!=0xf0){while(P1!=0xf0);//等待放开按键// delay500us();}// P2_0=0;TR0=0; //关闭定时计数器0// P3_0=0;}void time0(void) {TMOD=0X01; P2_0=0;TH0=tone1;TL0=tone2;EA=1;ET0=1;TR0=0;}void main() {P2_0=0;P3_0=0;time0();while(1){anjian();//else//{//tone1=0xfc;//tone2=0x5c;//}}}void timer0(void) interrupt 1 using 1 //产生矩形波驱动蜂鸣器{static unsigned char f=1;if(f==1){f=0;P2_0=1;}else{f=1;P2_0=0;}TH0=tone1;TL0=tone2;}原理图:。
基于51单片机的简单电子琴代码
![基于51单片机的简单电子琴代码](https://img.taocdn.com/s3/m/000275fb77a20029bd64783e0912a21614797ffd.png)
基于51单片机的简单电子琴代码#include <AT89X52.h>sbit P10=P1^0;//高音阶,红灯sbit P11=P1^1;//中音阶,黄灯sbit P12=P1^2;//低音阶,绿灯sbit P13=P1^3;//蜂鸣器控制端口sbit P31=P3^0;//低音阶按键行sbit P32=P3^1;//中音阶按键行sbit P33=P3^2;//高音阶按键行sbit P35=P3^4;//播放音乐按键unsigned int i,j,k=0,l=0;unsigned char count1=0xff,count0=0x50;/*********************************数码管码表(P0)***********************************/unsigned char Tab[]={0XBF,0X06,0X5B,0X4F,0X66,//数码管0~40X6D,0X7D,0X07,0X7F,0X6F,//数码管5~90X77,0X7C,0X39,0X5E,0X79,0X71,0X00};//数码管A~F/************************************音阶控制**************************************/music_data_high[]={0xf8,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,//数组0~6 低音0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,//数组7~13 中音0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff};//数组14~20 高音music_data_low[]= {0xf3,0xb8,0x15,0xb9,0x4a,0xcf,0x0c,//数组0~6 低音0x44,0xac,0x09,0x34,0x82,0xc8,0x05,//数组7~13 中音0x4c,0x6d,0x94,0xad,0xd2,0xf3,0x02};//数组14~20 高音/******************************************************函数名:delayms*参数:n 延时毫秒数*功能:延时N毫秒*****************************************************/void delayms(unsigned char n){unsigned char a,b;for(a=100;a>0;a--)for(b=10*n;b>0;b--);}/******************************************************函数名:key_check*参数:无*功能:扫描按键并运行对应功能*****************************************************/void key_check(void){P2=0xff;P3=0xfe;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=1;P11=1;P12=0;switch(P2){case0xfe:EA=1;count1=0xf8;count0=0xf3;P0=Tab[1];delayms(50);bre ak;case0xfd:EA=1;count1=0xf9;count0=0xb8;P0=Tab[2];delayms(50);br eak;case0xfb:EA=1;count1=0xfa;count0=0x15;P0=Tab[3];delayms(50);bre ak;case0xf7:EA=1;count1=0xfa;count0=0xb9;P0=Tab[4];delayms(50);bre ak;case0xef:EA=1;count1=0xfb;count0=0x4a;P0=Tab[5];delayms(50);bre ak;case0xdf:EA=1;count1=0xfb;count0=0xcf;P0=Tab[6];delayms(50);bre ak;case0xbf:EA=1;count1=0xfc;count0=0x0c;P0=Tab[7];delayms(50);bre ak;defaule:break;}}}//else {EA=0;P13=1;}P2=0xff;P3=0xfd;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=1;P11=0;P12=1;switch(P2){case0xfe:EA=1;count1=0xfc;count0=0x79;P0=Tab[1];delayms(50);bre ak;case0xfd:EA=1;count1=0xfc;count0=0xbc;P0=Tab[2];delayms(50);bre ak;case0xfb:EA=1;count1=0xfd;count0=0x09;P0=Tab[3];delayms(50);br eak;case0xf7:EA=1;count1=0xfd;count0=0x44;P0=Tab[4];delayms(50);bre ak;case 0xef:EA=1;count1=0xfd;count0=0xa2;P0=Tab[5];delayms(50);break;case0xdf:EA=1;count1=0xfd;count0=0xd8;P0=Tab[6];delayms(50);br eak;case0xbf:EA=1;count1=0xfe;count0=0x05;P0=Tab[7];delayms(50);br eak;// defaule:break;}}}//else {EA=0;P13=1;}P2=0xff;P3=0xfb;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=0;P11=1;P12=1;switch(P2){case0xfe:EA=1;count1=0xfe;count0=0x4c;P0=Tab[1];delayms(50);bre ak;case0xfd:EA=1;count1=0xfe;count0=0x6d;P0=Tab[2];delayms(50);br eak;case0xfb:EA=1;count1=0xfe;count0=0x9f;P0=Tab[3];delayms(50);bre ak;case0xf7:EA=1;count1=0xfe;count0=0xad;P0=Tab[4];delayms(50);bre ak;case0xef:EA=1;count1=0xfe;count0=0xd2;P0=Tab[5];delayms(50);bre ak;case0xdf:EA=1;count1=0xfe;count0=0xf3;P0=Tab[6];delayms(50);bre ak;case0xbf:EA=1;count1=0xff;count0=0x02;P0=Tab[7];delayms(50);bre ak;// defaule:break;}}}if(P2==0xff) {EA=0;P13=1;}/******************************************************函数名:play_music*参数:无*功能:播放音乐*****************************************************/ void play_music(void){count1=music_data_high[0];count0=music_data_low[0]; EA=1;delayms(50);EA=0;delayms(5);}/******************************************************函数名:TIM0_init*参数:无*功能:定时器0初始化*****************************************************/ void TIM0_init(void){TMOD=0x01;TH0=count1;TL0=count0;EA=1;ET0=1;TR0=1;}void timer0(void) interrupt 1 using 0{TH0=count1;TL0=count0;P13=!P13;/***************************************************** *函数名:main*参数:无*功能:开跑程序*****************************************************/ void main(void){ P35=1;TIM0_init();//play_music();//while(1){ if(P35==0) {delayms(20);P35=1;play_music();} key_check();}}。
基于51单片机bluesky开发板的电子琴程序
![基于51单片机bluesky开发板的电子琴程序](https://img.taocdn.com/s3/m/177c82b3b9f67c1cfad6195f312b3169a451eaa2.png)
#include<STC12C5A60S2.h>#include<LCD1602.h> //包含LCD1602的显示函数等#include<KEY_SCAN.h> //包含键值扫描函数,输出key_num#define FSCLK 11059200 //晶振频率sbit BEEP=P1^4; //蜂鸣器输出脚unsigned int fre[16]={100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1 400,1500,1600};//存好预定的频率值,可以设定任意想要的频率/********************************************************** ********************** 函数功能:延时函数,函数名Delay_ms() ** 函数说明:利用软件延时,占用CPU,经调试最小单位大约为1ms ** 入口参数:time:需要延时的时间,单位ms** 出口参数:无void Delay_ms(unsigned int time)unsigned int i,j;for(i = 0;i < time;i ++)for(j = 0;j < 930;j ++);** 函数功能:定时翻转跟蜂鸣器相连的引脚的电平,输出一定频率的脉冲信号** 函数说明:定时器0中断服务函数** 入口参数:无** 出口参数:无void time0() interrupt 1 //使用定时器0的工作方式2,定时器中断服务程序TH0 = (65536-FSCLK/(12*fre[piano]))/256; //每次中断,重新配置定时器的高8位TL0 = (65536-FSCLK/(12*fre[piano]))%256; //每次中断,程序配置定时器的低8位BEEP=!BEEP; //然后取反音乐输出,输出一个反电平} //短时间内多次取反则输出一定频率的脉冲/********************************************************** ********************** 函数功能:主函数** 入口参数:无** 出口参数:无void main()unsigned char piano=0,key=0; //初始值LCD_1602_Init(); //液晶显示前进行初始化TMOD = 0X01; //定时器使能TH0 = (65536-FSCLK/(12*fre[0]))/256; //配置定时器的高8位TL0 = (65536-FSCLK/(12*fre[0]))%256; //配置定时器的低8位ET0 = 1; //允许定时器0中断EA = 1; //打开总中断Write_1602_String("Welcome",0X80); //开机显示欢迎语:WelcomeWrite_1602_String("By 20192305007",0X80+0x40); //显示作者:20192305007Delay_ms(5000); //延时5s后开始进入正式程序LCD_1602_Init(); //液晶屏初始化Write_1602_String("Happy Play",0X80); //显示开始使用:Happy Playwhile(1){ //在这段函数中,不断扫描键值,每当键值不等于0时,说明有键被按下,//此时开始播放对应的音阶。
基于51单片机的简易电子琴设计
![基于51单片机的简易电子琴设计](https://img.taocdn.com/s3/m/0b7a3cf8988fcc22bcd126fff705cc1755275f3b.png)
基于51单⽚机的简易电⼦琴设计基于51单⽚机的简易电⼦琴设计⼀、设计任务及要求1、在该简易电⼦琴设计中,设置8个按键,8个按键可以发出do、re、mi、fa、sol、la、si、Do 8个⾳阶。
2、设计三个拨码开关,三个拨码开关可以调节⾼⾳、中⾳、低⾳三个⾳调。
3、画出电路的总体⽅框图和电路原理图。
⼆、设计原理⾳乐由许多不同的⾳阶组成的,⽽每个⾳阶对应着不同的频率,这样,我们就可以利⽤不同的频率组合,构成我们想要的⾳乐。
简易电⼦琴是摁下拨码开关时,单⽚机AT89C51会发出声⾳,声⾳从P1.0端⼝经过LM386,经过放⼤以后传⼊喇叭。
声⾳主要是经过单⽚机4×4矩阵键盘的按键产⽣,这⾥只⽤到8个按键来产⽣⾼中低的8个⾳阶,来产⽣do re mi fa sol la si Do。
下⾯是计数初值:三、设计⽅案本次设计的电⼦琴主要是利⽤AT89C51单⽚机为核⼼控制元件,同时还包括键盘、拨码开关和扬声器等控制模块,由键盘选择⼋个⾳阶。
1、电路原理图的总体设计总体电路需要c51单⽚机⼀⽚,⾳乐按键及喇叭等外围电路,要进⾏⾳调控制和⾳频放⼤,设计好的电路图如下图所⽰:2、键盘控制模块的设计矩阵按键部分由8个轻触按键按照2⾏4列排列,连接到P3端⼝。
将⾏线所接的单⽚机的I/O⼝作为输出端,⽽列线所接的I/O,则作为输⼊。
⾏线输出是低电平,有健按下,则输⼊线就会被拉低,这样,通过读输⼊线的状态就可得知是否有键按下。
3、键盘消抖当⽤⼿按下⼀个键时,如图所⽰,往往按键在闭合位置和断开位置之间跳⼏下才稳定到闭合状态的情况;在释放⼀个键时,也回会出现类似的情况。
这就是抖动。
抖动的持续时间随键盘材料和操作员⽽异,不过通常总是不⼤于10ms。
⽤软件⽅法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,此后再读⼊键盘码。
⼀个单⽚机⼯作于12M晶振,它的时钟周期是1/12(微秒)。
它的⼀个机器周期是12*(1/12)也就是1微秒。
(完整word版)基于C51的电子琴
![(完整word版)基于C51的电子琴](https://img.taocdn.com/s3/m/140ce959453610661ed9f4a3.png)
陕西国防工业职业技术学院单片机课程实训报告专业:班级:姓名:学号:指导老师:实训地点:成绩:一摘要介绍了用单片机实训微型电子琴的方法。
给出了电路、程序框图及程序。
本实训包括单片机学习的外设,如LED灯、独立键盘、矩阵键盘、蜂鸣器等。
关键词:单片机,电子琴,程序。
二实训要求实训一个简易电子琴。
(1)用喇叭发1、2、3、4、5、6、7、ⅰ。
(2)要求按下按键发声,松开延时一段时间停止。
(3)中间再按别的键则发另一音调的声音。
(4)键盘输入功能。
(5)按键同时对应指示灯点亮,按键结束,指示灯熄灭。
三方案实训1.音乐产生原理由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
本次实训中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T=216--5﹡105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数S6 中音la 68S7 中音xi 61S8 高音do 572.方案实训(1)方案一:采用CPLD外接扬声器、键盘、数码管等。
8个译码输出显示的数码管,以显示目标芯片的32 位输出信号,且8个发光管也能显示目标器件的8位输出信号。
时钟为50MHz ,输出接扬声器。
具体过程:主系统可由两个模块组成:当系统检测到有按键按下时,对应音符的频率由模块1获得,这是一个数控分频器。
由其clk端输入一具有较高频率的信号,分频后输出。
音符的持续时间须根据乐曲的速度及每个音符的节拍数决定,模块2的功能是为模块1提供决定所发音的分频预置值,而此数在模块1输入口停留的时间即为此音符的节拍值。
(2)方案二:采用单片机外接扬声器、键盘、数码管等。
基于51单片机学习板的简易电子琴__本科毕业设计论文
![基于51单片机学习板的简易电子琴__本科毕业设计论文](https://img.taocdn.com/s3/m/9fd707eac9d376eeaeaad1f34693daef5ef713ab.png)
中国矿业大学徐海学院技能考核培训姓名:申鹏飞学 号: 22120768专业:信息12-2班题目:基于单片机的技能考核专题:简易的电子琴制作,数据收发指导教师:有鹏设计地点:电工电子实验室时间: 2015 年 6 月通信系统综合设计训练任务书学生姓名 申鹏飞 专业年级 信息12-2班 学号 22120768设计日期: 2015 年 6 月 20 日 至 2015 年7 月3日设计题目:设计专题题目:设计主要内容和要求:1. 主要内容:(1)系统硬件设计及说明)系统硬件设计及说明)系统硬件设计及说明(2)系统硬件设计及说明)单片机学习板主要功能介绍(3)单片机学习板主要功能介绍)系统软件设计(4)系统软件设计2. 功能扩展要求(1)2.4GHz射频收发芯片nRF2401及其应用及其应用)简易的电子琴制作的步骤和功能(2)简易的电子琴制作的步骤和功能指导教师签字:摘要:随着电子技术的发展,电子技术与音乐的结合不断加深。
由此而产生的电子琴在这种形势下,因其体积小,易于携带,经济适用,是一般家庭都能承受得了的经济投入。
而且电子琴键盘操作直观易于掌握。
子琴键盘操作直观易于掌握。
这样对初学者,这样对初学者,尤其对识谱的人来说是很容易弹奏的,尤其对识谱的人来说是很容易弹奏的,一首简一首简单的曲子灵感好的人甚至不用很多的练习和教师的指导就能很快的弹奏出来。
这样就强烈地激发了学习者的学习兴趣,迅速地提高了电子琴的普及率。
激发了学习者的学习兴趣,迅速地提高了电子琴的普及率。
关键词:关键词:5151单片机,电子琴单片机,电子琴 ,数据收发,数据收发目录第一章第一章 前言前言 .............................................. 6 1.1 系统开发背景系统开发背景 ...................................... 6 1.2 系统开发意义系统开发意义 ...................................... 6 第二章第二章 设计任务及要求设计任务及要求设计任务及要求 ................................... 7 第三章第三章 系统硬件设计及说明系统硬件设计及说明 ................................ 8 3.1系统组成及总体框图系统组成及总体框图 ................................. 8 第四章第四章 单片机学习板主要功能介绍单片机学习板主要功能介绍 .......................... 9 4.1AT89S52简介简介 ....................................... .......................................9 4.1.1功能特性:功能特性: ................................... 10 4.1.2主要性能主要性能..................................... ..................................... 11 4.1.3管脚说明管脚说明..................................... ..................................... 11 4.2 LED 数码管数码管 ....................................... ....................................... 12 4.3显示电路显示电路 ......................................... ......................................... 13 4.4键盘扫描模块电路图键盘扫描模块电路图 ................................ 13 4.5数码管显示模块电路原理图数码管显示模块电路原理图 .......................... 14 4.6电源模块电路原理图电源模块电路原理图 ............................... 15 第5章 系统软件设计系统软件设计 ..................................... 16 5.1音乐相关知识音乐相关知识...................................... ...................................... 16 5.2如何用单片机实现音乐的节拍如何用单片机实现音乐的节拍 ........................ 16 5.3如何用单片机产生音频脉冲如何用单片机产生音频脉冲 .......................... 16 5.4系统总体功能流程图系统总体功能流程图 (18)第六章2.4GHz 射频收发芯片nRF2401 模块介绍模块介绍 ............... 20 6.1芯片结构芯片结构 ......................................... ......................................... 21 6.2引脚说明引脚说明 ......................................... ......................................... 21 6.3工作模式工作模式 ......................................... .........................................23 6.3.1收发模式收发模式..................................... ..................................... 23 6.3.2直接收发模式直接收发模式 ................................. 24 6.3.3配置模式配置模式..................................... ..................................... 25 6.3.4空闲模式空闲模式..................................... ..................................... 25 6.3.5关机模式关机模式..................................... ..................................... 25 6.4.6.4.器件配置器件配置器件配置 ......................................... 25 6.5.6.5.应用电路应用电路应用电路 ......................................... 26 6.6无线音频系统无线音频系统...................................... ...................................... 27 第七章第七章 51 51单片机与NRF24L01模块融合模块融合 ..................... 28 第八章第八章 收获与总结收获与总结收获与总结 ...................................... 29 第九章第九章 参考文献参考文献 ......................................... 30 附录一附录一.................................................. 31 附录二附录二 .. (42)第一章 前言1.1 1.1 系统开发背景系统开发背景随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。
基于51单片机的电子琴完整版
![基于51单片机的电子琴完整版](https://img.taocdn.com/s3/m/d2332ad5763231126fdb11df.png)
基于51单片机的电子琴完整版#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit feng = P0^7; // 蜂鸣器uint FTemp;uint code tab[] = { //定时半周期的初始值64021,64103,64260,64400, //低音3 4 5 664524,64580,64684,64777, //低音7,中音1 2 364820,64898,64968,65030, //中音4 5 6 765058,65110,65157,65178}; //高音1 2 3 4//用扫描法读P1 外接4×4 键盘uchar Keyscan(void){uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7};for(j = 0; j < 4; j++) //循环四次,扫描四行{P1 = Buffer[j]; //在低四位分别输出一个低电平_nop_();temp = 0x80; //计划先读出P1.7位for(i = 0; i < 4; i++) //循环四次,检查四列{if(!(P1& temp)) //从高四位,截取1位{return (i + j * 4); //返回取得的按键值}temp >>= 1; //换右边一位}}return 16; //没有键按下就返回16}void Main(void){uchar Key_Value = 16, Key_Temp1, Key_Temp2;//读出的键值 TMOD = 0x01; //T0定时方式1ET0 = 1; //允许T0中断EX0 = 1; //允许INT0中断EA = 1;//开总中断while(1){TR0 = 0; //T0工作停,暂不发音Key_Temp1 = Keyscan(); //第一次读入按键if(Key_Temp1 != 16){ //有键按下Key_Temp2 = Keyscan(); //再读一次if (Key_Temp1 == Key_Temp2) //两次相等{Key_Value = Key_Temp1; //就确认下来FTemp = tab[Key_Value]; //根据键值,取出定时半周期的初始值TR0 = 1; //启动定时器T0,发音while (Keyscan() < 16); //等待释放feng = 1; //停止发音}}}}//========================================================= =====void T0_INT(void) interrupt 1{TL0 = FTemp; //载入定时半周期的初始值TH0 = FTemp >> 8;feng = ~feng; //发音。
基于51单片机的简易电子琴汇编程序实验报告
![基于51单片机的简易电子琴汇编程序实验报告](https://img.taocdn.com/s3/m/f063f035998fcc22bdd10d25.png)
单片机应用课程设计报告——简易电子琴电子信息科学与技术2013-2xxx单片机应用课程设计报告——简易电子琴xxx摘要本设计是一个基于AT89C52系列单片机的简易电子琴,通过硬件电路制作以及软件编译,设计制作出一个由按键电路、复位电路、数码管显示电路,定时器及蜂鸣器组成简易的电子琴。
通过键盘按键确定键号送去显示以及产生对应的频率的方波。
本次实验的难点是键盘的扫描程序设计,因为本次实验实用的键盘是通过P3.4-P3.7端口输入测试信号,从P3.0-P3.3端口进行检测的,涉及到端口的读入写出原理等问题,后来通过先送出F0数值使低四位处于读入状态,高四位处于输出状态等方法实现。
还有一个问题是如何使单片机产生确定频率的波形,后来利用定时器计时结束后的溢出信号,控制信号反转实现。
关键词:电子琴扫描式键盘数码管1、设计任务和要求1.1设计任务利用AT89C52单片机以及各种元器件自行设计编程制作一个简易电子琴。
1.2任务要求基本要求:利用查询式键盘,数字键1、2、3、4、5、6、7作为电子琴的按键,按键按下时发出Do、Re、Mi、Fa、So、La、Xi的声音。
在弹奏音乐的同时将音符显示在数码管上。
扩展要求:具备存储播放所弹奏的音乐的功能,用三个功能键进行切换状态:按一下按键控制是否进入存储状态。
;按键二控制是否进入演奏状态;按键三为复位键。
1.3方案论证(1)如何产生一定频率的方波信号首先我们知道,每一个音符都有一个固定的频率,当蜂鸣器根据不同频率的方波信号便会震动产生对应的音符。
其次要产生音频脉冲,只要算出某一音频的周期(1/f),然后将此周期除以2,即为半周期的时间,由于使用的是12MHz的晶振,所以每一个计数的脉冲长度为1us,脉冲的个数用半周期时间除以1us,用65536减去脉冲的个数便可以得到计数初值。
利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
基于51单片机实现简易电子琴
![基于51单片机实现简易电子琴](https://img.taocdn.com/s3/m/025bc7b455270722182ef707.png)
2012年-2013年第二届“萌芽计划”报告题目名称:简易电子琴2013年3月目录一.问题重述 (3)二.方案比较 (3)1.方案说明 (3)2.方案比较 (3)三.原理简述 (4)1.用单片机产生音频脉冲 (4)2.音频功放 (4)四.电路原理图和说明以及主要元件说明 (5)1.硬件结构框图 (5)2.仿真电路原理图及说明 (5)3.主要元件及说明 (6)1).STC89C52单片机 (6)2).LM386 (7)3).矩阵式键盘 (8)4.软件设计 (8)五.实现的功能 (9)六.附件 (11)一.问题重述(一)任务设计一个简易的电子琴,实现发不同音调的功能。
(1)采用555做振荡器。
(2)通过扬声器(喇叭)发出不同频率的声音。
(二)要求二.方案比较1.方案说明方案一.用NE555做振荡器,产生不同频率发声。
方案二.用51单片机产生音频脉冲,通过扩音器发声;a.用独立链接式键盘做发声的按键;b.用矩阵式键盘做发声的按键;c.用三极管8050做音频功放电路;d.用LM386做音频功放电路;e.用蜂鸣器发声;f.用喇叭发声。
2.方案比较对于方案一,如果用555振荡器,则实现不了许多发挥的功能。
对于方案二,单片机功能强大,能实现许多的功能,再加上本身也在学习单片机知识,所以我们就选择了方案二而在是用独立链接是键盘还是用矩阵式键盘上,我们看到,独立链接是键盘需要占据单片机的I/O口数量多,而且不好排版,考虑到矩阵式键盘只需接单片机8个I/O口,而且有16个按键,可以实现的音调较多,所以我们选择了用矩阵式键盘在用8050还是用LM386的问题上,刚开始还没有很清晰的决定。
但是我们倾向于用LM386,虽然用8050做功放电路相对于LM386来说电路相对简单,但是用8050三极管不是太了解,再网上搜索资料后,我们感觉,用LM386显得高端一些,而且功放的电压增益在20~200V之间,可供选择的空间大,所以我们选择了用LM386.对于是用蜂鸣器发声还是用喇叭发声,之前买的开发板上有蜂鸣器,感觉那个声音太难听了,所以我们就选用了音色好一点的喇叭。
基于51单片机的液晶显示电子琴设计
![基于51单片机的液晶显示电子琴设计](https://img.taocdn.com/s3/m/126ab8f1b8f67c1cfad6b89e.png)
基于51单片机的液晶显示电子琴设计摘要单片机是一种集成电路芯片,是把中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、中断系统和定时器/计数器等集成到一块硅片上构成一个小而完善的微型计算机系统。
单片机具有体积小、功耗低、速度快、控制能力强、扩展灵活和使用方便等优点,已渗透到我们生活的各个领域,广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制的领域。
音乐现在也成了人们生活的一部分,生活的压力,学习的压力,工作的压力,一切的不顺利可以在音乐声中放松下来,让人们心情舒畅,听着音乐放松心情,让我们提高生活质量。
本次课程设计是基于51单片机的简易电子琴系统设计。
电子琴是现代电子科技与音乐结合的产物,是一种键盘乐器。
本系统以STC89C52为主芯片,4*4矩阵键盘、1602液晶显示屏、扬声器等电路组成,完成显示输入信息、播放相应音符等基本功能。
关键词:STC89C52;LCD1602;电子琴系统Design Of Liquid Crystal Display Keyboard Based On51Single-chip MicrocomputerABSTRACTMCU is an integrated circuit chip,is the CPU,RAM,ROM,I/O interface, interrupt system and timer/counter,etc.integrated into a silicon chip to form a small and perfect micro-computer system.SCM has a small size,low power consumption,speed,control,strong,flexible and easy to expand and other advantages,has infiltrated all areas of our lives,widely used in instrumen -tation,household appliances,medical equipment,aerospace,special equipment of the intelligent management and process control areas.Music is now also a part of people's lives,the pressure of life,the pressure of learning,work pressure,everything is not smooth can relax in the music,let people feel comfortable,listening to music relax,let us improve the quality of life.This course design is based on the 51 single-chip simple keyboard system design.Keyboard is a combination of modern electronic technology and music products,is a keyboard instrument.This system is mainly composed of STC89C52 chip, 4*4 matrix keyboard,1602 LCD screen,speaker and other circuits to complete the display input information,play the corresponding notes and other basic functions.Keyword: STC89C52, LCD1602, keyboard system目录第一章引言 ........................................................................................................... - 1 -1.1 课题设计目的及其意义 ......................................................................... - 1 -1.2 课题设计的任务与主要内容 ................................................................. - 2 - 第二章系统总体方案设计.................................................................................. - 3 -2.1 系统设计要求 ......................................................................................... - 3 -2.2 系统电路框图 ......................................................................................... - 3 - 第三章硬件设计.................................................................................................. - 5 -3.1 STC89C52芯片 ....................................................................................... - 5 -3.2 1602LCD .................................................................................................. - 6 -3.3 矩阵键盘 ................................................................................................. - 7 -3.4 振荡电路 ................................................................................................. - 8 -3.5 复位电路 ................................................................................................. - 9 -3.6 扬声器模块 ........................................................................................... - 10 - 第四章软件设计与调试.................................................................................... - 11 -4.1 使用AltiumDesigner绘制电路图........................................................ - 11 -4.2 程序调试 ............................................................................................... - 11 - 第五章总结与致谢............................................................................................ - 13 -5.1 总结 ....................................................................................................... - 13 -5.2 致谢 ....................................................................................................... - 14 - 参考文献................................................................................................................ - 15 - 附录........................................................................................................................ - 17 - 附录A 实物图............................................................................................. - 17 - 附录B 程序代码......................................................................................... - 18 -第一章引言1.1 课题设计目的及其意义单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。
基于51单片机简易电子琴设计报告
![基于51单片机简易电子琴设计报告](https://img.taocdn.com/s3/m/7e26f7fe26fff705cc170a36.png)
创新制作报告简易电子琴设计摘要本设计主要研究基于STC90C51单片机地简易电子琴设计.它是以单片机作为主控核心,键盘、电脑音响、led等外围器件构成;本设计硬件部分主要由最小系统,按键系统模块、led显示模块和发声模块组成.其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序.(1)最小系统:它是单片机应用系统地设计基础.它包括单片机地选择、时钟系统设计、复位电路设计等.(2)按键系统模块:本设计采用24个按键,其中21个按键用来显示21个音调,其它3个按键可以进行功能地切换.(3)LED显示模块:八个LED,七个红色LED来显示音符,1个绿色LED指示.(4)发声模块:此电子琴发音是用现成地电脑音响.本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件地程序,最后进行软硬件地调试运行.并且从原理图,主要芯片,各模块地原理和各个模块地程序调试来阐述.利用单片机产生不同频率来获得我们要求地音阶,实现高、中、低共21个音符地发音和显示和音乐播放时地控制显示,并且能自动播放程序中编排地音乐,同时还有保存兵播放已按下地音符.系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠.目录1.概述41.1设计背景41.2设计意义41.3 设计任务42.系统总体方案及硬件设计42.1总体设计42.2硬件设计62.3单片机地最小工作系统62.4电源设计:2.5按键设计:2.6LED灯设计:2.7发声模块:3.系统软件地地编写 73.1电子琴基本原理 73.2主程序 93.3播放音乐模块 163.4录音模块 204.1硬件调试 234.2软件调试 235课程设计体会附1 源程序代码241.概述1.1设计背景由于本课程要做一个创新制作,而老师给地参考题中觉得电子琴这课题不错,因为电子琴能陶冶人地情操,同时使人更快乐,他能真正影响人地心情,因此决定做.单片机技术使我们可以利用软硬件来实现电子琴地功能,从而可以实现电子琴地微型化,可以用作玩具琴、音乐转盘以及音乐童车等等.并且可以进行一定地功能扩展.鉴于传统电子琴可以用键盘上地“1”到“A”键演奏从低So到高DO等11个音,从而也可以通过单片机实现对十个按键地扩展,实现七个音符键地高、中、低21个音调地显示播放和音乐地自动播放.1.2设计意义①可以了解音乐地基本知识;②加深对单片机地使用;③学会自己做工程;1.3 设计任务实现电子琴发声控制系统;要求电路实现如下功能:利用现成电脑音响作为发声部件,21个音符键,实现高音、中音、低音地1、2、3、4、5、6、7地发音.并在存储几首歌曲地内容,可以实现自动播放.2.系统总体方案及硬件设计2.1总体设计音乐是有由不同地音阶组成地,而不同地音阶又是由不同地频率发出地,那么产生不同地频率,就可以发出不同地音乐了.而利用单片机就可以产生不同地频率地方波,因此选择单片机为为主来设计.通过程序编写实现单片机输出不同地频率,输出地方波信号再通过接口给电脑音响,让其发声.同时电子琴加入led用来显示.本设计地主要工作是程序编写,通过程序让电子琴实现音乐演奏,歌曲播放以及记录已按下地音符,并播放,最后实现led显示.而硬件主要有单片机最小系统,键盘模块,发声模块,还有一个电源模块.总体框图22.2硬件设计电路图1注:本系统有主控单片机、键盘、led 显示模块、发声模块以及电源组成.2.2.2单片机地最小工作系统:按键输入LED 显示电脑音响单片机这里用地单片机地型号是STC90C516RD+,配以12M地晶振,以及复位电路供电电路构成最小系统.2.2.3电源设计:这里电源直接用直流5v电源;2.2.4按键设计:按键采用4*6扫描;4根行线接P10-P13,六根列线接P14-P17以及P20,P21口共24个按键,0-20代表音符键,0-6代表低音1,2,3,4,5,6,7;7-13代表中音1,2,3,4,5,6,7;14-20代表高音1,2,3,4,5,6,7;21号按键表示播放歌曲键,当按下21号键,进入播放歌曲函数,当按下22号键时,播放下一首歌曲,当按下23键时,退出播放返回主程序.而在主程序中时,代表演奏状态,当按下23号键时,进入录音状态,此时有个绿色地指示灯会亮.而进入录音后,再按一次23键,指示灯灭,退出录音状态,返回主程序.2.2.5LED灯设计:七个红色地LED代表按键地音符DO,RE,MI...分别接到P0口地各个I端口音符DO时,一个LED亮,音符MI时,2个LED亮...同时为了区分高中低音,三个八度LED显示不同,当低音音符播放时,LED闪亮,当是中音时,LED也闪亮,但是闪亮地频率更快,当是高音时,LED全亮,这是通过调节LED亮灭时间来实现,也可以说是PWM吧.还有一个绿色LED指示当前状态,当电子琴处于录音时,LED亮,否则,灭;2.2.6发声模块:这里没有自己做功放,而是使用电脑地音响.3系统软件地地编写3.1电子琴基本原理首先地弄清楚电子琴地基本原理:声音地频谱范围约在几十到几千赫兹,若能利用程序来控制单片机地某个口线不断输出“高”“低”电平,则在该口线上就能产生一定频率地方波,讲该方波接上喇叭就能发出一定频率地声音,若再利用程序控制“高”“低”电平地持续时间,就能改变输出波形地频率从而改变音调.乐曲中,每个音符对应着确定地频率,下表给出各音符频率.如果单片机某个口线输出“高”“低”电平地频率和某个音符地频率一样,那么将此口线接上喇叭就可以发出此音符地声音.根据这个原理就能设计出,对于单片机来说要产生一定频率地方波大致是先将某口线输出高电平然后延迟一段时间再输出低电平,如此循环地输出就会产生一定频率地方波,通过改变延迟地时间就可以改变输出方波地频率.单片机内部有两个定时计数器T1和T0,单片机地定时计数器实际上是个计数装置,它既可以对单片机内部晶振驱动时钟计数,也可以对外部输入地脉冲计数,对内部晶振计数时称为定时器,对外部时钟计数时称为计数器.当对单片机内部晶振驱动时钟计数时,每个机器周期定时计数器地计数值就加,当计数值达到计数最大值时计数完毕并通知单片机.音乐中各个音符地频率表如下:音符频率表3弄懂后开始程序地实现3.2主程序模块主程序框图参数计算发音原理若要产生音频脉冲,只要算出某一音频地周期(1/频率),再将此周期除以2,即为半周期地时间.利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相.就可在P1.0引脚上得到此频率地脉冲.利用AT89C51地内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率地方法产生不同音阶.计算举例例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz).计数脉冲值与频率地关系式是:N=fi÷2÷fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生地频率.其计数初值T地求法如下:T=65536-N=65536-fi÷2÷fr 例如:设K=65536,fi=1MHz,求中音DO(261Hz).T=65536-N=65536-fi÷2÷fr =65536-1000000÷2÷fr=65536-500000/fr,中音DO地T=65536-500000/523=64580. 3.2.3计算结果(1)单片机12MHZ晶振,中音符与计数T0相关地计数值如表所示:采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表地方式来获得相应地数据:低音0-19之间,中音在20-39之间,高音在40-59之间.用单片机播放音乐,或者弹奏电子琴,实际上是按照特定地频率,输出一连串地方波.为了输出合适地方波,首先应该知道音符与频率地关系.(2)音调数据表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms 上表中地频率数值,有些过多,去掉不常用地黑键频率,只是把白键对应地数据存放在单片机中,即可满足绝大部分地应用需求.定义音调数据表地程序如下:DW 63628,63835,64021,64103,64260,64400,64524 。
基于c51单片机的电子琴设计
![基于c51单片机的电子琴设计](https://img.taocdn.com/s3/m/56627739b90d6c85ec3ac679.png)
设计任务:1利用MCS-51单片机设计音乐演奏的硬件电路2利用C51或者汇编语言实现软件设计。
3利用proteus进行仿真具体功能:1.按键发音(eg:按下1,发出do的音,按下2,发出re的音……)2.按下功能键X,自动播放诸如《生日快乐》等简易歌曲(选做)#include<reg52.h>#define uchar unsigned char#define uint unsigned intuint code tab[]={64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65010,65058,65110,65157,65178,};uchar code shuzhi[4][4]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};sbit P20=P2^0;uchar STH0;uchar STL0;void delay(void){uchar x;for (x=300;x>0;x--);}/*uchar getkey(void){uchar scancode,tmpcode;if((P1&0xf0)==0xf0)return(0);scancode=0xfe;while((scancode&0x10)!=0){P1=scancode;if((P1&0xf0)==0xf0){tmpcode=(P1&0xf0)|0x0f;return((~scancode)+(~tmpcode));}else scancode=(scancode<<1)|0x01;}} */uchar getkey(void){uchar temp,temp1,i,j;/*delay(100);*/P1=0xf0;temp=P1;temp=temp&0xf0;if(temp!=0xf0){switch(temp){case 0xe0:i=0;break;case 0xd0:i=1;break;case 0xb0:i=2;break;case 0x70:i=3;break;}P1=0x0f;temp1=P1;temp1=temp1&0x0f;switch(temp1){case 0x0e:j=0;break;case 0x0d:j=1;break;case 0x0b:j=2;break;case 0x07:j=3;break;}return(shuzhi[i][j]);}}void time0_int(void) interrupt 1 using 0 {TH0=STH0;TL0=STL0;P20=~P20;}void main(){uchar key,k;TMOD=0x01;ET0=1;EA=1;while(1){P1=0xf0;if((P1&0xf0)!=0xf0){delay();if((P1&0xf0)!=0xf0){key=getkey();switch(key){case 0x11:k=0;break;case 0x21:k=1;break;case 0x41:k=2;break;case 0x81:k=3;break;case 0x12:k=4;break;case 0x22:k=5;break;case 0x42:k=6;break;case 0x82:k=7;break;case 0x14:k=8;break;case 0x24:k=9;break;case 0x44:k=10;break;case 0x84:k=11;break;case 0x18:k=12;break;case 0x28:k=13;break;case 0x48:k=14;break;case 0x88:k=15;break;default:break;}P20=~P20;STH0=tab[k]/256; STL0=tab[k]%256; TR0=1;P1=0xf0;while((P1&0xf0)!=0xf0){P1=0xf0;}TR0=0;}}}}。
(完整版)基于51单片机的电子琴毕业设计论文
![(完整版)基于51单片机的电子琴毕业设计论文](https://img.taocdn.com/s3/m/80fbf35d69eae009591bec17.png)
摘要本设计是基于AT89S52单片机的简易电子琴设计。
主要组成是以51单片机最小系统为核心,通过键盘获取按键信息,通过运用单片机定时器等部件实现蜂鸣器发声同时用数码管同步显示。
本系统具有播放歌曲及选取按键输入高、中、低音的功能。
本设计的特点是:大部分功能通过软件实现,使电路简单明了,系统稳定性好。
电子琴是电子科技与音乐结合的产物是一种新型的键盘乐器。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
关键字:AT89S52,按键,数码管,蜂鸣器,音阶。
(要求宋体、小四号,行间距为固定值22磅。
字数500字以上。
介绍你所作设计的主要内容及主要方法和取得的结果,是整个报告的概括性内容,不要超过一页面)目录(小三号居中,加粗)1 概述………………………………………………………………………………1.1 51系列单片机简介89系列单片机是ATMEL公司的8位FLASH单片机系列。
89系列单片机是以8031为核心构成的,它和8051系列单片机外部端子是一样的、兼容的,其最大特点是片内含有FLASH存储器。
AT89S52单片机是一种低功耗、高性能、内含4KB的闪速存储器(Flash Memory)的8位微控制器。
片内闪速存储器的程序代码或数据可在线写入,也可通过常规的编程器编程。
(宋体、小四,行间距固定值18磅。
以下相同要求)……………………1.2 电子琴简介电子琴为键盘乐器,采用半导体集成电路,对乐音信号进行放大,通过扬声器产生音响。
电子琴有多种类型,为业余型和专业型。
使用五线谱,多为高低音双行记谱。
有时也用中音谱。
电子琴又称作电子键盘,属于电子乐器,发音音量可以自由调节。
音域较宽,和声丰富,甚至可以演奏出一个管弦乐队的效果,表现力极其丰富。
(完整word版)基于51单片机的电子琴设计
![(完整word版)基于51单片机的电子琴设计](https://img.taocdn.com/s3/m/84ea7f25b14e852459fb572c.png)
摘要随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。
我们都会抽空欣赏世界名曲,作为对精神的洗礼。
本论文设计一个基于单片机的简易电子琴。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经融入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高,具有一定的实用和参考价值。
关键词:AT89C51单片机;数码管;电子琴目录1 系统方案设计 (1)1.1 设计指标 (1)1.2 系统方案综述 (1)1.3 系统设计思路 (1)2 硬件设计 (2)2.1 电路图 (2)2.2 单片机AT89C51简介 (2)2.3 单片机的工作过程 (4)2.4 键盘电路 (5)2.5 显示电路 (6)2.6 声音电路 (7)3 系统软件设计 (8)3.1延时程序设计 (9)3.2定时器初始化及其中断函数 (10)3.3示例音乐播放程序 (10)3.4单独按键中断处理函数 (11)4 实验结果与分析 (11)4.1 Proteus软件简介 (11)4.2仿真调试 (12)5 设计心得 (14)6 参考文献 (14)附录 (15)附录A 元件清单、器件识别与检测 (15)附录B 程序源代码 (16)1 系统方案设计1.1 设计指标①设计一个简易的八音符电子琴,它可通过按键输入来控制音响。
②演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存曲目,并且在演奏完已存曲目后可自动复位。
1.2系统方案综述从系统实现的功能上来看,电子琴的设计主要利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出八个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键再发出另外一种音调的声音。
基于51单片机的电子琴
![基于51单片机的电子琴](https://img.taocdn.com/s3/m/6d639e275a8102d276a22f1c.png)
酒泉职业技术学院课程设计2014 级电气自动化专业题目:基于51单片机简易电子琴设计设计时间:2015.12.14——2015.12.18学生姓名:xxx指导教师:xxx班级:14电气(1)班2015年12月18日目录一、设计要求 (1)(一)系统基本设计思路 (1)(二)各部分说明 (1)(三)系统工作过程 (2)二、硬件设计 (2)(一)主体方案 (2)(二)最小系统设计 (2)(三)时钟电路 (3)(四)复位电路 (4)(五)按键控制模块 (4)(六)播放模块 (5)(七)LED显示模块 (5)(八)原理图 (6)(九)实物图 (7)三、软件设计 (8)(一)程序框图 (7)(二)音乐相关知识 (9)(三)程序 (12)(四)使用说明 (20)四、调试 (20)(一)硬件调试 (20)(二)软件调试 (20)五、总结 (22)参考文献 (23)基于51单片机简易电子琴设计摘要:本论文设计一个基于单片机的简易电子琴。
我们对于电子琴如何实现其功能,如音色选择、声音强弱控制、节拍器、自动放音功能等等也很好奇。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用ST89S51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
关键词:ST89S51单片机;电路;程序;电子琴一、设计要求(一)系统基本设计思路此设计是在LED小灯上显示灯光的变换,扬声器播放弹奏的曲子。
电路包括:键盘、单片机及LED显示电路,声音电路。
本电子琴就是从单片机STC89C51切入,通过使用STC89C51的内部的可编程定时器/计数器,结合对外接晶振的调节来确定一个合适的振荡周期,从而确定出内部的机器周期。
完整版基于51单片机简易电子琴设计
![完整版基于51单片机简易电子琴设计](https://img.taocdn.com/s3/m/8167249af46527d3250ce07e.png)
中国信息大学设计(论文)说明书第1页共14页电子琴的设计1课题背景单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它拥有高性能、高速度、体积小、价格廉价、牢固可靠、应用广泛的特点。
他的应用必然以致传统的控制技术从根本上发生改革。
因此,单片机的开发应用已成为高科技和工程领域的一项重要课题。
电子琴是现代电子科技与音乐结合的产物,是一种新式的键盘乐器。
它在现代音乐扮演重要的角色,单片机拥有富强的控制功能和灵便的编程实现特点,它已经溶入现代人们的生活中,成为不可以取代的一部分。
本文的主要内容是用 AT89S52单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有 8 个按键,和一个复位按键。
主要对使用单片机设计简单电子琴进行了解析,并介绍了鉴于单片机电子琴硬件的组成。
利用单片机产生不同样频率来获得我们要求的音阶,最后可随意弹奏要表达的音符。
而且分别从原理图,主要芯片,个模块原理及各莫奎的程序的调试来详细阐述。
一首音乐是好多不同样的音阶组成的,而每个音阶对应着不同样的频率,这样我们就可以利用不同样的频率的组合,组成我们想演奏的那首曲目。
自然对于单片机来产生不同样的频率特别方便,我们可以利用单片机的准时 / 计数器 T0 来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。
一 .任务要求与整体设计方案设计任务与要求利用所给键盘的 1,2,3,4,5,6,7,8 八个键,可以发出 7 个不同样的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按其余键则发别的一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,尔后单片机的准时器启动,发出必然频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。
若是在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。
基于51单片机的电子琴设计
![基于51单片机的电子琴设计](https://img.taocdn.com/s3/m/52b478af0875f46527d3240c844769eae009a334.png)
基于51单片机的电子琴设计随着科技的不断发展,单片机技术已经成为了现代电子设备中的重要组成部分。
51单片机作为一种广泛应用的单片机系列,具有高性能、低功耗、高集成度等特点,被广泛应用于各种嵌入式系统开发中。
本文将介绍一种基于51单片机的电子琴设计。
一、系统硬件设计1、单片机选择本设计选用AT89C51单片机作为主控制器,AT89C51是一种低功耗、高性能的8位单片机,具有4K字节的可编程存储器和128字节的RAM,同时具有丰富的外设接口,如UART、SPI、I2C等。
2、电子琴设计电子琴采用8×8 LED点阵作为输出设备,通过单片机控制点阵的亮灭状态来展示音乐波形。
具体实现方式是将音频信号通过一个运放放大器放大,然后将其输入到LED点阵中,通过控制点阵的亮灭状态来展示音乐的波形。
3、存储模块设计为了实现电子琴曲目的存储和播放,本设计选用了一块AT24C02 EEPROM芯片作为存储设备。
AT24C02是一种串行E2PROM存储器,容量为256字节,可以通过I2C总线与单片机进行通信。
将曲目信息存储在AT24C02中,可以实现曲目的存储和播放功能。
4、按键模块设计本设计采用4×4矩阵键盘作为输入设备,通过扫描按键状态来实现音符的选择和节奏控制。
矩阵键盘的行线连接到单片机的P1口,列线连接到P2口,通过检测行列组合的变化来确定按下的键位。
二、系统软件设计1、音符解码本设计采用MIDI音符编码方式来存储和播放曲目信息。
在解码过程中,根据音符的频率和持续时间计算出对应的音高和节奏信息,然后将其用于驱动电子琴的输出设备展示音乐的波形。
2、演奏控制为了实现节奏控制,本设计采用了一种基于时间间隔的演奏方式。
在演奏过程中,单片机根据设定的节奏间隔时间来触发音符输出,从而实现对节奏的控制。
同时,为了实现曲目的停止和播放功能,我们需要在软件中加入相应的控制逻辑。
3、存储和播放在软件设计中,我们需要实现将曲目信息存储到AT24C02中以及从AT24C02中读取曲目信息的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//简易电子琴#include<reg52.h> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚unsigned char keyval; //定义变量储存按键值sbit sound=P3^6; //将sound位定义为P3.7unsigned int C; //全局变量,储存定时器的定时常数unsigned int f; //全局变量,储存音阶的频率//以下是C调低音的音频宏定义#define l_dao 262 //将“l_dao”宏定义为低音“1”的频率262Hz#define l_re 286 //将“l_re”宏定义为低音“2”的频率286Hz#define l_mi 311 //将“l_mi”宏定义为低音“3”的频率311Hz#define l_fa 349 //将“l_fa”宏定义为低音“4”的频率349Hz#define l_sao 392 //将“l_sao”宏定义为低音“5”的频率392Hz#define l_la 440 //将“l_a”宏定义为低音“6”的频率440Hz#define l_xi 494 //将“l_xi”宏定义为低音“7”的频率494Hz //以下是C调中音的音频宏定义#define dao 523 //将“dao”宏定义为中音“1”的频率523Hz#define re 587 //将“re”宏定义为中音“2”的频率587Hz#define mi 659 //将“mi”宏定义为中音“3”的频率659Hz#define fa 698 //将“fa”宏定义为中音“4”的频率698Hz#define sao 784 //将“sao”宏定义为中音“5”的频率784Hz#define la 880 //将“la”宏定义为中音“6”的频率880Hz#define xi 987 //将“xi”宏定义为中音“7”的频率53//以下是C调高音的音频宏定义#define h_dao 1046 //将“h_dao”宏定义为高音“1”的频率1046Hz #define h_re 1174 //将“h_re”宏定义为高音“2”的频率1174Hz #define h_mi 1318 //将“h_mi”宏定义为高音“3”的频率1318Hz#define h_fa 1396 //将“h_fa”宏定义为高音“4”的频率1396Hz #define h_sao 1567 //将“h_sao”宏定义为高音“5”的频率1567Hz #define h_la 1760 //将“h_la”宏定义为高音“6”的频率1760Hz #define h_xi 1975 //将“h_xi”宏定义为高音“7”的频率1975Hz /************************************************************** 函数功能:软件延时子程序**************************************************************/ void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/*******************************************函数功能:节拍的延时的基本单位,延时200ms******************************************/void delay(){unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/*******************************************函数功能:输出音频入口参数:F******************************************/void Output_Sound(void){C=(46083/f)*10; //计算定时常数TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR0=1; //开定时T0delay(); //延时200ms,播放音频TR0=0; //关闭定时器sound=1; //关闭蜂鸣器keyval=0xff; //播放按键音频后,将按键值更改,停止播放}/*******************************************函数功能:主函数******************************************/void main(void){EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1; //定时器T1中断允许TR1=1; //定时器T1启动,开始键盘扫描TMOD=0x10; //分别使用定时器T1的模式1,T0的模式0TH1=(65536-500)/256; //定时器T1的高8位赋初值TL1=(65536-500)%256; //定时器T1的高8位赋初值while(1) //无限循环{switch(keyval){case 1:f=dao; //如果第1个键按下,将中音1的频率赋给fOutput_Sound(); //转去计算定时常数break;case 2:f=l_xi; //如果第2个键按下,将低音7的频率赋给fOutput_Sound(); //转去计算定时常数case 3:f=l_la; //如果第3个键按下,将低音6的频率赋给f Output_Sound(); //转去计算定时常数break;case 4:f=l_sao; //如果第4个键按下,将低音5的频率赋给f Output_Sound(); //转去计算定时常数break;case 5:f=sao; //如果第5个键按下,将中音5的频率赋给f Output_Sound(); //转去计算定时常数break;case 6:f=fa; //如果第6个键按下,将中音4的频率赋给f Output_Sound(); //转去计算定时常数break;case 7:f=mi; //如果第7个键按下,将中音3的频率赋给f Output_Sound(); //转去计算定时常数break;case 8:f=re; //如果第8个键按下,将中音2的频率赋给f Output_Sound(); //转去计算定时常数break;case 9:f=h_re; //如果第9个键按下,将高音2的频率赋给f Output_Sound(); //转去计算定时常数break;case 10:f=h_dao; //如果第10个键按下,将高音1的频率赋给f Output_Sound(); //转去计算定时常数break;case 11:f=xi; //如果第11个键按下,将中音7的频率赋给f Output_Sound(); //转去计算定时常数break;case 12:f=la; //如果第12个键按下,将中音6的频率赋给f Output_Sound(); //转去计算定时常数case 13:f=h_la; //如果第13个键按下,将高音6的频率赋给fOutput_Sound(); //转去计算定时常数break;case 14:f=h_sao; //如果第14个键按下,将高音5的频率赋给fOutput_Sound(); //转去计算定时常数break;case 15:f=h_fa; //如果第15个键按下,将高音4的频率赋给fOutput_Sound(); //转去计算定时常数break;case 16:f=h_mi; //如果第16个键按下,将高音3的频率赋给fOutput_Sound(); //转去计算定时常数break;}}}/**************************************************************函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波**************************************************************/void Time0_serve(void ) interrupt 1 using 1{TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法sound=!sound; //将P3.7引脚取反,输出音频方波}/**************************************************************函数功能:定时器T1的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time1_serve(void) interrupt 3 using 2 //定时器T1的中断编号为3,使用第2组寄存器{TR1=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下{delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=1; //可判断是S1键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=2; //可判断是S2键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=3; //可判断是S3键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=5; //可判断是S5键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=6; //可判断是S6键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=7; //可判断是S7键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=9; //可判断是S9键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=10; //可判断是S10键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=11; //可判断是S11键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=12; //可判断是S12键被按下P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=13; //可判断是S13键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=14; //可判断是S14键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=15; //可判断是S15键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=16; //可判断是S16键被按下}}TR1=1; //开启定时器T1TH1=(65536-500)/256; //定时器T1的高8位赋初值TL1=(65536-500)%256; //定时器T1的高8位赋初值}。