基于单片机的简易电子琴正确版
(完整版)基于51单片机的简易电子琴设计

(完整版)基于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.能够实现基本的琴键功能即每按下⼀个琴键,单⽚机能够检测到键盘的按键,并根据按键的位置,通过程序来控制,使蜂鸣器发出不同频率(⾳调)的声⾳,声⾳延迟⼀段时间,等到按键放开后,声⾳停⽌。
然后再继续扫描,看是否有键按下,如此循环下去,即可实现基本的琴键功能。
基于STC89C52单片机的简易电子琴

课程设计报告课程名称:微机原理课程设计题目:简易电子琴学院:环境与化学工程系:过程装备与测控工程专业:测控技术与仪器班级:测仪xxx班学号:学生姓名:起讫日期: 2013-12-27~2013-1-6指导教师:摘要单片机具有体积小、可靠性高、功能强、灵活方便等的优点,故广泛应用于国民经济的各个领域目前单片机已用于工业控制、机电一体化设备、仪器仪表、信号处理、现代兵器、交通能源、商用设备、医疗设备及家用电器等各个领域,随着单片机性能的不断提高,它的应用将会更加广泛。
单片机技术发展非常快,所以目前的产品都致力于在功能全面、技术先进、操作简便、安全可靠、价格合理等方面进行仔细研究,精心设计;及时掌握最新的单片机技术,在条件允许的情况下,尽可能地利用最新的单片机技术来研制其应用系统,再利用单片机体积小、价格低、功能强等特点,以保证所设计的产品在未来的一段时间内仍具生命力。
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器,使用经典的MCS-51内核。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
单片机又称微控制器,其中最基本的结构是将CPU和计算机外围功能单元,如储存器、I/O口、定时器/计数器、中断系统等集成在一个芯片上构成的。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的延时来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
本设计采用STC89C52芯片组成的最小系统,结合四位共阴数码管,八位独立按键,以及一位无源蜂鸣器构成的简易电子琴。
通过软件设置,使系统达到,按下控制按键,蜂鸣器发出Do,Re,Mi,Fa,So,La,Si,Do-H,八个简单的音调,同时数码管显示相应按键的标号,达到简易电子琴系统功能的实现。
基于51单片机的简易电子琴设计

基于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微秒。
基于单片机系统的简易电子琴的设计与实现

题目基于单片机系统的简易电子琴的设计与实现设计要求:1、能实现电子琴的基本功能,可以用弹奏出简单的乐曲。
手动演奏,且能手动演奏八度音的高低音,音色纯真。
2、演奏不同的音时,数码管有对应的显示。
3、功率不大于500mw,音质悦耳,无失真。
摘要随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。
我们都会抽空欣赏世界名曲,作为对精神的洗礼。
本论文设计一个基于单片机的简易电子琴。
我们对于电子琴如何实现其功能,如音色选择、声音强弱控制、节拍器、自动放音功能等等也很好奇。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
一、系统总体设计该设计要实现一种由单片机控制的电子琴,单片机工作频率为11.0592MHZ ,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号。
该设计具有16个音节的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。
由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。
如图1所示系统总体框图。
图1 系统总体框图键盘扫描AT89S52数码管显示扬声器播放音乐电源部分二、系统硬件设计(1)系统复位电路单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。
无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。
单片机课设设计论文:基于STC89C51单片机的简易电子琴设计

单片机课程设计论文题目:基于单片机的简易电子琴设计学院:机电工程学院专业:电气工程及其自动化姓名: ### ### ###指导教师:完成日期: 2012-12-27目录摘要 (1)绪论 (2)1方案论证 (3)1.1原理图 (3)1.2主体方案 (3)1.3系统方案设计绍 (4)1.3.STC89C51简介 (5)1.3.1单片机工作原理 (8)1.3.2数码管 (13)2实现过程 (14)2.1.1 程序设计内容 (14)2.1.2 I/O并行口直接驱动LED显示 (14)2.2 音乐产生的方法 (15)2.2.1 原理 (15)2.2.2 程序框图 (16)3全文总结 (17)3.1结束语 (18)参考文献 (19)附录 (20)1.电路原理图 (20)2.程序框图 (21)3.系统流程图 (22)4.语言源程序 (23)摘要在现代各种生活中,电子琴作为一种音乐型玩具,广泛用于与人们的日常生活中。
市场上有各种各样的电子琴。
特别是日本产的,音质优美,它是有专门的音乐控制芯片制造的。
由于其价格较贵,无法大面积普及,且功能单一。
用89c51作为主控中心,研制一种简易的微型电子琴,尽可能地体现较好的音质来,是一种可做的尝试。
以单片机为核心设计的简易电子琴系统,由按键扫描电路、声音产生驱动电路、复位电路、等模块组成的,是一种比较实用、廉价的电子玩具。
本论文所设计的简易电子琴,它分为两大部分,硬件电路的设计和软件的设计。
硬件电路的设计以AT89S51单片机为控制主板,辅以外围的扩展设备蜂鸣器、矩阵键盘、共阳数码管,形成一个可被控制的显示系统。
软件设计通过控制单片机内部的定时器T0来产生不同频率的方波,驱动喇叭发出不同音节的声音.再利用延迟来控制发音时间的长短,即可控制音调中的节拍.把乐谱中的音符对应的频率转换为定时常数,把相应的节拍变换为定时常数,然后作成表格存放在储存器中,由程序查表得到定时常数和延时常数,分别用以控制定时器产生方波的频率和该频率方波的持续时间.当延迟常数到时,再查下一个音符的定时常数和延迟常数.依次进行下去,就可演奏悦耳动听的音乐.主要实现 1》能够发出1.2.3.4.5.6.7等七个音符。
基于51单片机的简单电子琴代码

基于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){case 0xfe:EA=1;count1=0xf8;count0=0xf3;P0=Tab[1];delayms(50);break; case 0xfd:EA=1;count1=0xf9;count0=0xb8;P0=Tab[2];delayms(50);break; case 0xfb:EA=1;count1=0xfa;count0=0x15;P0=Tab[3];delayms(50);break; case 0xf7:EA=1;count1=0xfa;count0=0xb9;P0=Tab[4];delayms(50);break; case 0xef:EA=1;count1=0xfb;count0=0x4a;P0=Tab[5];delayms(50);break; case 0xdf:EA=1;count1=0xfb;count0=0xcf;P0=Tab[6];delayms(50);break; case 0xbf:EA=1;count1=0xfc;count0=0x0c;P0=Tab[7];delayms(50);break;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){case 0xfe:EA=1;count1=0xfc;count0=0x79;P0=Tab[1];delayms(50);break; case 0xfd:EA=1;count1=0xfc;count0=0xbc;P0=Tab[2];delayms(50);break; case 0xfb:EA=1;count1=0xfd;count0=0x09;P0=Tab[3];delayms(50);break; case 0xf7:EA=1;count1=0xfd;count0=0x44;P0=Tab[4];delayms(50);break; case 0xef:EA=1;count1=0xfd;count0=0xa2;P0=Tab[5];delayms(50);break;case 0xdf:EA=1;count1=0xfd;count0=0xd8;P0=Tab[6];delayms(50);break; case 0xbf:EA=1;count1=0xfe;count0=0x05;P0=Tab[7];delayms(50);break; // 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){case 0xfe:EA=1;count1=0xfe;count0=0x4c;P0=Tab[1];delayms(50);break; case 0xfd:EA=1;count1=0xfe;count0=0x6d;P0=Tab[2];delayms(50);break; case 0xfb:EA=1;count1=0xfe;count0=0x9f;P0=Tab[3];delayms(50);break; case 0xf7:EA=1;count1=0xfe;count0=0xad;P0=Tab[4];delayms(50);break; case 0xef:EA=1;count1=0xfe;count0=0xd2;P0=Tab[5];delayms(50);break; case 0xdf:EA=1;count1=0xfe;count0=0xf3;P0=Tab[6];delayms(50);break; case 0xbf:EA=1;count1=0xff;count0=0x02;P0=Tab[7];delayms(50);break; // 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单片机学习板的简易电子琴__本科毕业设计论文

中国矿业大学徐海学院技能考核培训姓名:申鹏飞学 号: 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单片机的电子琴完整版#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单片机的简易电子琴汇编程序实验报告

单片机应用课程设计报告——简易电子琴电子信息科学与技术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脚上得到此频率的脉冲。
基于AT89C52单片机的简易电子琴设计

本设计主要研究基于AT89C52单片机的简易电子琴设计。
它是以单片机作为主控核心,设置键盘、蜂鸣器等外围器件;另外还用到一些简单器件如:两位数码管,和NPN型三极管及电阻等。
利用按键实现音符和音调的输入;两位的数码管进行被操作的按键显示;用NPN型三极管8550实现低音频功率放大;最后用蜂鸣器进行播放“送别”。
本设计硬件部分主要由最小系统,按键系统模块、数码管显示模块和蜂鸣器模块组成。
其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序。
(1)最小系统:它是单片机应用系统的设计基础。
它包括单片机的选择、时钟系统设计、复位电路设计、简单的I/O口扩展、掉电保护等。
(2)按键系统模块:本设计采用10个按键,其中7个按键用来显示7个音调,其它3个按键可以进行高低中音的切换,并自动播放已存歌曲。
(3)数码管显示模块:SM420562段选端接在单片机的P0口,两个位选端分别接在P2^0和P2^1。
(4)蜂鸣器模块:此电子琴发音电路是通过三极管驱动蜂鸣器发音,经过上拉电阻提高驱动能力。
本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。
并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。
利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共21个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐。
系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比高等,具有一定的使用和参考价值。
1.概述 (4)1.1设计背景 (4)1.2设计意义 (4)1.3设计任务 (4)2.系统总体方案及硬件设计 (5)2.1总体设计 (5)2.2单片机选型 (6)2.3单片机的最小工作系统 (6)2.3.1 时钟电路 (6)2.3.2复位电路 (7)2.4原理框图 (7)2.5显示部分设计 (8)2.5.1数码显示方式 (8)2.5.2八位数码管的结构 (8)2.6按键部分设计 (9)2.6.1操作键设计 (9)2.6.2键盘设计 (9)2.6.3去抖动 (10)2.7发音部分设计 (11)3.系统软件设计 (12)3.1系统分析 (12)3.1.1系统软件的组成 (12)3.1.2 系统总体功能流程图 (13)3.2参数计算 (14)3.2.1发音原理 (14)3.2.2 计算举例 (14)3.2.3 计算结果 (14)3.3程序设计 (16)3.3.1 判断音阶(高中低音)子程序 (16)3.3.2 播放子程序(包括自动播放存储音乐和按键发音) (17)4. PROTEUS软件仿真 (19)4.1硬件调试 (19)4.2软件调试 (19)4.3仿真结果(任举一例) (20)4.4结果分析 (20)5. 课程设计体会 (21)参考文献 (22)附1 源程序代码 (23)附2 系统原理图 (32)1.概述1.1设计背景随着电子科学技术的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们带来更多的生活乐趣。
基于单片机的简易电子琴的设计正文

第一章设计要求1.1 基本要求1.设计一简易电子琴,要求能够发出1,2,3,4,5,6,7等7个音符,具有一般演奏功能。
2.具有自动重载歌曲功能1.2 电子琴的基本介绍1.按键模块:利用按键是否按下控制P口的是否为高低电平,从而驱动单片机系统发出相应频率的响声。
2.轰鸣器模块:利用P口与放大器连接,从而放大信号,放大的信号通过轰鸣器发出相应频率的声音。
3.自动重载模块:利用P口与按键连接,通过高低电平判断按键是否按下,从而实现将频率加载到定时器TH0和TL0。
1.3 电子琴设计原理电子琴由以下几个部件组成:单片机89C51、电源、按钮、音频放大模块、复位模块,数码管,LED显示模块、晶振模块。
第二章系统组成及工作原理2.1 系统组成框图简易电子琴由独立按键模块、自动加载音乐模块、轰鸣器模块、复位模块等几部分功能模块组成,每一个模块完成特定的模块功能。
在把每个模块有机的结合在一起组成一个单片机系统。
单片机系统框图如2-1所示:图2-1 单片机系统框图2.2 工作原理及分析一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P0.0反相,然后重复计时再反相。
就可在P0.0引脚上得到此频率的脉冲。
利用AT89S51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
完整版基于51单片机简易电子琴设计

中国信息大学设计(论文)说明书第1页共14页电子琴的设计1课题背景单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它拥有高性能、高速度、体积小、价格廉价、牢固可靠、应用广泛的特点。
他的应用必然以致传统的控制技术从根本上发生改革。
因此,单片机的开发应用已成为高科技和工程领域的一项重要课题。
电子琴是现代电子科技与音乐结合的产物,是一种新式的键盘乐器。
它在现代音乐扮演重要的角色,单片机拥有富强的控制功能和灵便的编程实现特点,它已经溶入现代人们的生活中,成为不可以取代的一部分。
本文的主要内容是用 AT89S52单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有 8 个按键,和一个复位按键。
主要对使用单片机设计简单电子琴进行了解析,并介绍了鉴于单片机电子琴硬件的组成。
利用单片机产生不同样频率来获得我们要求的音阶,最后可随意弹奏要表达的音符。
而且分别从原理图,主要芯片,个模块原理及各莫奎的程序的调试来详细阐述。
一首音乐是好多不同样的音阶组成的,而每个音阶对应着不同样的频率,这样我们就可以利用不同样的频率的组合,组成我们想演奏的那首曲目。
自然对于单片机来产生不同样的频率特别方便,我们可以利用单片机的准时 / 计数器 T0 来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。
一 .任务要求与整体设计方案设计任务与要求利用所给键盘的 1,2,3,4,5,6,7,8 八个键,可以发出 7 个不同样的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按其余键则发别的一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,尔后单片机的准时器启动,发出必然频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。
若是在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。
基于单片机的简易电子琴设计(汇编语言)

任务书1.1 课程设计目的本课程设计目的在于培养学生运用已学的单片机原理及应用的基础知识和基本理论,加以综合运用,进行单片机系统设计的初等训练,掌握运用单片机进行系统控制设计的原则、设计内容和设计步骤,为从事单片机相关的毕业设计或今后的工作需要打下良好的基础。
1.2 课程设计内容本次课程设计的主要内容是以单片机为核心控制元件,设计一个电子琴。
以单片机作为主控制核心,与键盘、发光二极管、扬声器等模块组成,其功能是实现单独演奏和自动播放歌曲,主要分为:1.2.1 单独演奏模块通过按键,利用所给键盘的1,2,3,4,5,6,7七个键,能够发出7个不同的音调,即按下按键1、2、3、4、5、6、7,扬声器发出相应音调DO、RE、MI、FA、SO、LA、SI,每当有按键按下时,按键对应的LED灯对应点亮,可以用来演奏不同的歌曲。
1.2.2 自动放歌模块通过按键可以进行单独演奏/自动放歌的选择,利用所给的键盘的第8个按键,能够使电子琴自动播放一首歌曲(歌曲自选,歌曲乐谱通过软件编程实现),自动放歌时,同时配有发光二极管作流水灯显示,达到歌曲与灯同步动作。
1.3 课程设计原则1、尽可能地满足控制系统的的控制要求;2、在满足控制的前提下,力求使控制系统简单、经济;3、保证控制系统运行稳定、可靠;4、考虑到对系统的改进,在选择单片机芯片功能时,应适当留有余量,以便用作扩展功能。
1.4 课程设计步骤1、对设计系统的任务和要求作深入的调查研究,明确控制任务和实现功能;2、选择和确定单片机芯片、音频发声器件和串口下载芯片;3、确定系统整体设计方案;4、电子琴系统仿真设计;5、整体系统的软件设计;6、联机调试;7、撰写设计报告。
1.5 时间安排1.6 基本要求(一)课程设计报告1.系统流程图一张;2.系统仿真图一张;3.系统软件程序清单一张;4.撰写报告一份,包括以下内容:1)写出设计计划和基本步骤。
2)写出系统要求并设计流程图。
- 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的模式0 TH1=(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(); //转去计算定时常数break;case 3:f=l_la; //如果第3个键按下,将低音6的频率赋给fOutput_Sound(); //转去计算定时常数break;case 4:f=l_sao; //如果第4个键按下,将低音5的频率赋给fOutput_Sound(); //转去计算定时常数break;case 5:f=sao; //如果第5个键按下,将中音5的频率赋给fOutput_Sound(); //转去计算定时常数break;case 6:f=fa; //如果第6个键按下,将中音4的频率赋给fOutput_Sound(); //转去计算定时常数break;case 7:f=mi; //如果第7个键按下,将中音3的频率赋给fOutput_Sound(); //转去计算定时常数break;case 8:f=re; //如果第8个键按下,将中音2的频率赋给fOutput_Sound(); //转去计算定时常数break;case 9:f=h_re; //如果第9个键按下,将高音2的频率赋给fOutput_Sound(); //转去计算定时常数break;case 10:f=h_dao; //如果第10个键按下,将高音1的频率赋给fOutput_Sound(); //转去计算定时常数break;case 11:f=xi; //如果第11个键按下,将中音7的频率赋给fOutput_Sound(); //转去计算定时常数break;case 12:f=la; //如果第12个键按下,将中音6的频率赋给fOutput_Sound(); //转去计算定时常数break;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位赋初值 }。