单片机电子琴方案
- 格式:doc
- 大小:240.00 KB
- 文档页数:16
单片机电子琴的设计单片机电子琴的设计随着科技的发展,单片机技术在电子领域的应用已经非常广泛。
其中,单片机电子琴是一种非常受欢迎的DIY 电子产品。
通过使用单片机,我们可以实现各种各样的功能,比如手风琴、钢琴、鼓等模拟音乐乐器。
那么,本文将详细讲解单片机电子琴的设计方法和实现过程。
一、硬件设计1.主板设计在单片机电子琴的设计中,主板是最核心的部件,因为它能够控制整个电子琴的运转。
主板设计所需要的元器件如下:(1)单片机:根据需要,选择一款传统型单片机或者ARM 处理器。
(2)输入输出模块:据需要选择合适的硬件平台,比如DAC/ADC、芯片集成的PWM 或外加的DAC 等。
(3)显示模块:可以选用LCD 模块或其它显示模块。
(4)驱动模块:选择一款合适的驱动模块,比如H 桥驱动器、音频功率放大器等。
2.键盘设计键盘设计是单片机电子琴中最为重要的元部件,因为它是与用户进行交互的部分。
键盘设计可能有不同的方法,但是本文所展示的方法采用的是与传统钢琴相似的电容式设计方式。
电容式键盘设计思路是这样的:在钢琴键盘下方安装一组与钢琴键盘平行的电容板。
当按下钢琴键时,会压缩键盘下方的电容板,导致电容板之间的电容值发生变化,这样就可以识别每个键位的编号。
作为键盘电容板有很多种选择,但选择正确的条件是符合设计条件。
在这里,我们用金属箔板作为电容板,每个键位产生的电容值被电路板上面的片式电容器取样。
所以,我们使用红外线LED 与光敏二极管来驱动键盘,金属箔板放在二者之间。
在不按键的情况下,光敏二极管可以检测到被金属箔板反射的红外线,导致电容板上的电容值稳定。
当按下键时,电容板之间的电容值发生变化,此时光敏二极管检测到的红外线信号也将会变化,通过这个变化可以确定该键是否被按下。
3.音频输出在单片机电子琴的设计中,音频输出也是非常重要的。
音频输出通常使用功率放大器和喇叭来完成,我们也可以通过DAC/ADC 或PWM 来实现音频输出。
单片机简易电子琴课程设计简易电子琴实验一、课程设计目的与要求1、掌握蜂鸣器的使用方法;2、掌握蜂鸣器的不同发音的方法;3、通过本次课程设计加深对单片机课程的认识和掌握,对单片机的应用做进一步了解。
二、课程设计设备STAR 序列试验仪一套、PC 机一台三、课程设计内容1、简易电子琴原理(1)蜂鸣器输入不同频率的方波,会发出不同的声音;(2)通过按键,由单片机控制产生不同频率的方波,从而发出不同的声音。
2、课程设计过程(1)通过单片机,是G6区的1-7号键由低到高发出1-7的音阶。
四、课程设计原理图1234567P1.0P1.1P1.2P1.3P1.4P1.5P1.6VccBuzzerLS12KR15.1KR28550Q60.01uFC40Ctrl100R11P1.7五、课程设计框图主程序:节拍1子程序(手动按键时用) 节拍2子程序(手动按键时用)0FFH->P1 开始 播放一段音乐 P1.0=0调用节拍1子程序 N Y 调用节拍2子程序 Y调用节拍3子程序Y 调用节拍4子程序 调用节拍5子程序 调用节拍6子程序 调用节拍7子程序P1.1=0P1.2=0N P1.3=0Y Y Y P1.4=0P1.5=0N P1.6=0Y N N N 0->P1.7 延时180us 1->P1.7 延时190us开始 返回0->P1.7 延时200us 1->P1.7 延时200us开始 返回节拍3子程序(手动按键时用)节拍4子程序(手动按键时用)开始0->P1.7延时180us1->P1.7延时170us返回开始0->P1.7延时160us1->P1.7延时160us返回节拍5子程序(手动按键时用)节拍6子程序(手动按键时用)开始0->P1.7延时150us1->P1.7延时150us返回开始0->P1.7延时140us1->P1.7延时140us返回节拍7子程序(手动按键时用)节拍1子程序(自动放音时用,时间约0.2s )节拍2子程序(自动放音时用,时间约0.2s ) 节拍3子程序(自动放音时用,时间约0.2s )0->P1.7 延时220us 计数器-1 1->P1.7 延时210us 1100->计数器 N计数器-1=0返回Y 0->P1.7 延时130us 1->P1.7 延时130us开始 返回开始节拍4子程序(自动放音时用,时间约0.2s ) 节拍5子程序(自动放音时用,时间约0.2s )节拍6子程序(自动放音时用,时间约0.2s ) 节拍7子程序(自动放音时用,时间约0.2s )NY 0->P1.7 延时170us 计数器-1 1->P1.7 延时170us开始 1300->计数器 计数器-1=0返回Y N0->P1.7 延时180us 计数器-1 1->P1.7 延时180us 开始 1250->计数器 计数器-1=0返回0->P1.7 延时185us 计数器-1 1->P1.7 延时180us开始 1200->计数器 Y N计数器-1=0返回NY 0->P1.7 延时190us 计数器-1 1->P1.7 延时190us 开始 1150->计数器 计数器-1=0返回六、课程设计步骤1、主机连线说明D1区:Ctrl — A3区:P1.7 G6区:JP74 —A3区:JP51(P1口)2、运行程序,按G6区的1-7号键,输出7种音阶。
方案设计1电子琴设计框图图1电子琴设计框图2 总体设计2.1 硬件部分采用AT89S52 单片机作为主控制部件,AT89S52 用上电自动复位,12MHZ 地晶振和两个电容形成晶振电路. 面键,用于输入音符.2.2 软件部分软件部分采用汇编语言编写程序,单片机汇编语言程序设计步骤如下:第一步:分析问题.第二步:画出程序地基本轮廓.第三步:实现该程序.2.3 软硬件调试使用KEIL 软件,将程序输入进行编译,编译通过后,则将制作地电路进行联机仿真,检测功能和设计任务能不能实现. 如果不能达到预期效果,则必须重新检查硬件或修改程序.2.4 程序固化经过调试,实现了预期地成果和功能,就可以开始程序固化了. 将程序烧录到AT89S52 内部ROM 中,然后将单片机放入到电路中,再进行观察.一.相关技术简介用电子琴可以演奏出各种美妙地音乐,而音乐是有音符组成地.不同地音符是由相应频率地振动产生不同频率地声音电信号经扬声器发音后,人耳所听到地便是不同地声音,换言之,只要向扬声器中输入不同频率地电信号就可以产生不同地声音.若将不同地音节于不同地节拍组合在一起便形成一定地曲调,因此一个单片机I/O口,通过软件,控制其输出不同频率地信号,就可以产生8个基本音节,将音节以一定地节拍进行组合,便可以产生歌曲.乐曲中每一音符对应着确定地频率,表1 给出C 调时各音符频率.如果单片机某个口线输出“高”“低”电平地频率和某个音符地频率一样,那么将此口线接上喇叭就可以发出此音符.二.硬件设计1. AT89S52单片机图2 AT89S52单片机(1)简介AT89S52 是一种低功耗、高性能CMOS8 位微控制器,具有8K 在系统可编程Flash 存储器.使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容.片上Flash 允许程序存储器在系统可编程,亦适于常规编程器.在单芯片上,拥有灵巧地8 位CPU 和在系统可编程Flash,使得AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效地解决方案.AT89S52 具有以下标准功能:8k 字节Flash,256 字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路.另外,AT89S52 可降至0Hz 静态逻辑操作,支持 2 种软件可选择节电模式.空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作.掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止.(2).引脚功能1.VCC : 电源2.GND: 地3.P0 口:P0 口是一个8 位漏极开路地双向I/O 口.作为输出口,每位能驱动8 个TTL 逻辑电平.对P0 端口写“1”时,引脚用作高阻抗输入.当访问外部程序和数据存储器时,P0 口也被作为低8 位地址/数据复用.在这种模式下,P0 具有内部上拉电阻.在flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节.程序校验时,需要外部上拉电阻.4.P1 口:P1 口是一个具有内部上拉电阻地8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平.对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用.作为输入使用时,被外部拉低地引脚由于内部电阻地原因,将输出电流(IIL).此外,P1.0 和P1.2 分别作定时器/计数器 2 地外部计数输入(P1.0/T2)和时器/计数器2地触发输入(P1.1/T2EX),具体如下表所示.在flash 编程和校验时,P1 口接收低8 位地址字节.表1P1引脚功能5.P2 口:P2 口是一个具有内部上拉电阻地8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平.对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用.作为输入使用时,被外部拉低地引脚由于内部电阻地原因,将输出电流(IIL).在访问外部程序存储器或用16 位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址.在这种应用中,P2 口使用很强地内部上拉发送 1.在使用8 位地址(如MOVX @RI)访问外部数据存储器时,P2 口输出P2 锁存器地内容.在flash 编程和校验时,P2 口也接收高8 位地址字节和一些控制信号.6.p3 口:P3 口是一个具有内部上拉电阻地8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平.对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用.作为输入使用时,被外部拉低地引脚由于内部电阻地原因,将输出电流(IIL).P3 口亦作为AT89S52 特殊功能(第二功能)使用,如下表所示.在flash 编程和校验时,P3 口也接收一些控制信号.表2P3引脚功能7.RST: 复位输入.晶振工作时,RST 脚持续2 个机器周期高电平将使单片机复位.看门狗计时完成后,RST 脚输出96 个晶振周期地高电平.特殊寄存器AUXR(地址8EH)上地DISRTO 位可以使此功能无效.DISRTO 默认状态下,复位高电平有效.8.ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址地输出脉冲.在flash 编程时,此引脚(PROG)也用作编程输入脉冲.在一般情况下,ALE 以晶振六分之一地固定频率输出脉冲,可用来作为外部定时器或时钟使用.然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过.如果需要,通过将地址为8EH 地SFR 地第0 位置“1”,ALE 操作将无效.这一位置“1”,ALE 仅在执行MOVX 或MOVC 指令时有效.否则,ALE 将被微弱拉高.这个ALE 使能标志位(地址为8EH 地SFR 地第0 位)地设置对微控制器处于外部执行模式下无效.9.PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号.当AT89S52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活.10.EA/VPP:访问外部程序存储器控制信号.为使能从0000H 到FFFFH地外部程序存储器读取指令,EA 必须接GND.为了执行内部程序指令,EA 应该接VCC.在flash 编程期间,EA 也接收12 伏VPP电压.11.XTAL1:振荡器反相放大器和内部时钟发生电路地输入端.12.XTAL2:振荡器反相放大器地输出端.2.蜂鸣器图3 蜂鸣器蜂鸣器是一种一体化结构地电子讯响器,采用直流电压供电,广泛应用于计算机,打印机,复印机,报警器,电子玩具,汽车电子设备,电话机,定时器等电子产品中做发声器件.3.键盘图4 键盘本设计键盘模块采用4*4 矩阵键盘,原理图如图4所示.在键盘中按键数量较多时,为了减少I/O 口地占用,通常将按键排列成矩阵形式,如图 4 所示. 在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接. 这样,一个端口(如P1 口)就可以构成4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20 键地键盘,而直接用端口线则只能多出一键(9 键).由此可见,在键盘中按键数量较多时,为了减少I/O 口地占用,通常将按键排列成矩阵形式.4. 时钟电路(1)振荡电路AT89S52内部有一个用于构成振荡器地可控高增益反向放大器,两个引脚XTAL1和XTAL2分别是该放大器地输入端和输出端,其中匹配电容C11和C12要根据石英晶体振荡器地要求选取,一般选用20-30PF地瓷片电容.振荡频率根据实际要求地工作速度,从几百KHZ-24MHZ中适当选取.(2)时钟电路图5定时电路5 .LED数码管图6 LED显示显示模块是利用AT89S52 单片机地P0 端口地P0.0-P0.7 连接到一个共阳数码管地a-h 地笔段上.在数码管上循环显示0-7 数字,时间间隔0.2 秒.LED 显示模块七段LED 数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管地极管地接线形式,可分成共阴极型和共阳极型.LED 数码管地七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗地组合就能形成不同地字形,这种组合称之为字形码,表3给出了共阴极LED 数码管地字形码表.表3共阳极LED 数码管地字形码表三.软件设计图7主程序流程图1.发声程序表4音符频率表图8 发声程序流程图. 2.定时中断图9定时中断程序框图中断是单片机适时地处理内部或外部事件地一种内部机制,当某种内部或外部事件发生时,单片机中断系统将迫使CPU暂停正在执行地程序,转而去进行中断事件地处理,中断处理完毕后,又返回被中断程序处,继续向下执行.AT89S52 有6 个中断源:两个外部中断(INT0 和INT1),三个定时中断(定时器0、1、2)和一个串行中断.每个中断源都可以通过置位或清除特殊寄存器IE 中地相关中断允许控制位分别使得中断源有效或无效.IE 还包括一个中断允许总控制位EA,它能一次禁止所有中断.如表 5 所示,IE.6 位是不可用地.对于AT89S52,IE.5 位也是不能用地.用户软件不应给这些位写 1.它们为AT89 系列新产品预留.定时器2 可以被寄存器T2CON 中地TF2 和EXF2 地或逻辑触发.程序进入中断服务后,这些标志位都可以由硬件清0.实际上,中断服务程序必须判定是否是TF2 或EXF2 激活中断,标志位也必须由软件清0.定时器0 和定时器 1 标志位TF0 和TF1 在计数溢出地那个周期地S5P2 被置位.它们地值一直到下一个周期被电路捕捉下来.然而,定时器 2 地标志位TF2 在计数溢出地那个周期地S2P2 被置位,在同一个周期被电路捕捉下来.表5中断允许控制寄存器五设计感受这次专业设计结束了,我对于52单片机又有了一个全新地认识,原来以前地学习还差很多,在对于学科和未来地工作上,我还有很长地一段路要走.学海无涯,这句话虽然有点老生常谈,但却是我现在最真实地心理感受,电子琴地设计其实难度并不大,而如今如此吃力地原因值得我好好反思.最后,感谢老师对于我们专业设计无私地指导和帮助.六附录//简易电子琴#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(); //转去计算定时常数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位赋初值}七参考文献[1] 龙威林,杨冠声,胡山.单片机应用入门:AT89S51 和 AVR[M].北京:化学工业出版社,2008.[2] 黄鑫,马善农,赵永科.基于 CPLD 地电子琴研究与设计[J].科技广场,2007(5).[3] 赵亮,侯国锐.单片机 C 语言编程与实例[M].北京:人民邮电出版社,2003.[4] 杨恢先,黄辉先.单片机原理及应用[M].北京:人民邮电出版社,2006.[5] 张虹.单片机原理及应用[M].北京:中国电力出版社,2009.[6] 李云钢,邹逢兴,龙志强. 单片机原理与应用系统计[J].北京:中国水利水电出版社,2008.版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.V7l4j。
基于单片机的电子琴设计一、引言二、总体设计方案(一)设计目标设计一款基于单片机的电子琴,能够实现基本的音符演奏、音色切换、节奏控制等功能,并且具有良好的音质和稳定性。
(二)系统组成本电子琴系统主要由单片机控制模块、键盘输入模块、音频输出模块、显示模块和电源模块等部分组成。
1、单片机控制模块选用 STM32 系列单片机作为控制核心,负责处理键盘输入信号、生成音频信号、控制显示等功能。
2、键盘输入模块采用矩阵键盘,通过扫描键盘获取用户的按键操作,将其转换为对应的音符编码发送给单片机。
3、音频输出模块使用DAC 芯片将单片机生成的数字音频信号转换为模拟音频信号,再通过放大器和扬声器输出声音。
4、显示模块采用液晶显示屏,用于显示当前的演奏状态、音色选择、节奏模式等信息。
5、电源模块为整个系统提供稳定的电源供应,可采用电池供电或外接电源适配器。
三、硬件设计(一)单片机最小系统STM32 单片机的最小系统包括时钟电路、复位电路和电源电路。
时钟电路为单片机提供工作时钟,复位电路用于系统初始化,电源电路为单片机提供稳定的电源。
(二)键盘电路矩阵键盘由行线和列线组成,通过逐行扫描的方式检测按键状态。
将键盘的行线和列线分别连接到单片机的 GPIO 引脚,通过编程实现键盘扫描和按键识别。
(三)音频输出电路选用高性能的 DAC 芯片,如 PCM1794,将单片机输出的数字音频信号转换为模拟音频信号。
为了提高音频输出的质量,还需要添加放大器和滤波电路,以增强信号的功率和去除噪声。
(四)显示电路液晶显示屏通过 SPI 接口或 I2C 接口与单片机连接,单片机通过发送指令和数据来控制显示屏的显示内容。
(五)电源电路根据系统的工作电压和电流需求,选择合适的电源芯片,如LM7805 等,将输入电源转换为所需的电压,并通过滤波电容等元件提高电源的稳定性。
四、软件设计(一)主程序流程主程序首先进行系统初始化,包括单片机初始化、键盘初始化、音频输出初始化、显示初始化等。
基于单片机的微型电子琴建模引言随着科技的不断发展,电子琴已经成为了音乐爱好者们的最爱之一。
传统的电子琴大多采用单片机和其他电子元件来实现各种音效和功能,但是这种电子琴通常比较大而且价格昂贵。
为了满足人们对小巧便携且质量优良的需求,我们打算通过使用单片机来设计一种微型电子琴。
本文将介绍该微型电子琴的设计思路、具体实现方法以及未来的发展方向。
一、微型电子琴的设计思路1. 硬件设计我们打算采用STM32F103C8T6单片机作为微型电子琴的核心处理器。
这款单片机具有较高的性能和丰富的外设资源,能够满足我们对音乐输出和按键输入的需求。
我们还会使用一块音频解码芯片来解码各种音色样本,并通过单片机进行控制和输出。
在按键方面,我们打算使用一组多功能按键来实现琴键的弹奏和功能的选择。
为了提高音质和音量,我们还会加入一组功放电路和扬声器。
2. 软件设计在软件设计方面,我们将会使用C语言来编写单片机的驱动程序和控制程序。
通过对按键输入的检测和音频解码芯片的控制,我们能够实现琴键的弹奏和音色的切换。
我们还会对整个系统进行优化,以确保微型电子琴的稳定性和响应速度,并且可以支持各种音乐演奏模式。
二、微型电子琴的具体实现方法1. 硬件实现我们需要搭建一套原型系统来验证我们的设计方案。
我们会使用原型板来连接单片机、音频解码芯片、按键和功放电路,并且通过软件调试来保证各部分的正常工作。
一旦原型系统稳定运行,我们就可以进行电路的PCB设计和制作,以便于后期的小批量生产。
在PCB设计中,我们需要注意每个电子元件的布局和连线,以减少信号干扰和提高整个系统的可靠性。
2. 软件实现在软件实现方面,我们需要编写音频解码程序、按键检测程序和功放控制程序。
通过音频解码程序,我们能够实现各种音色样本的解码和播放,以满足不同演奏需求。
通过按键检测程序,我们能够实现琴键的弹奏和功能的选择。
通过功放控制程序,我们能够控制扬声器的音量和音质,以提供更好的音乐体验。
单片机课程设计 电子琴一、课程目标知识目标:1. 让学生理解单片机的基本原理,掌握单片机在电子琴设计中的应用。
2. 使学生掌握电子琴的基本结构,能运用单片机编程实现电子琴的基本功能。
3. 帮助学生了解电子琴音调产生原理,掌握音调与频率的关系。
技能目标:1. 培养学生运用单片机进行电子琴设计与编程的能力,能独立完成一个简单的电子琴项目。
2. 培养学生动手实践能力,提高焊接、调试和故障排除等技能。
3. 培养学生团队协作和沟通能力,能在项目过程中进行有效分工与合作。
情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,提高学习积极性。
2. 培养学生勇于尝试、不断探索的精神,增强克服困难的信心。
3. 引导学生关注科技发展,认识到所学知识在现实生活中的应用,培养创新意识。
分析课程性质、学生特点和教学要求,本课程目标具体、可衡量,有助于学生和教师在教学过程中明确预期成果。
将目标分解为具体学习成果,为后续教学设计和评估提供依据。
在教学过程中,注重理论与实践相结合,充分调动学生的积极性,提高学生的实践能力。
二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理,重点讲解CPU、内存、I/O口等部分的功能与应用。
教材章节:第一章单片机基础2. 电子琴结构与原理:讲解电子琴的基本结构,音调产生原理,键盘与发音电路的连接方式。
教材章节:第三章电子乐器原理3. 单片机编程:以C语言为基础,讲解单片机编程方法,重点掌握延时、中断、I/O口控制等编程技巧。
教材章节:第二章单片机编程基础、第五章中断与定时器4. 电子琴设计与制作:结合单片机知识,指导学生进行电子琴设计,包括硬件电路设计、程序编写、调试与优化。
教材章节:第四章单片机应用实例、第六章电子琴设计与制作5. 实践操作:安排学生进行电子琴硬件焊接、程序烧写、调试与测试,培养动手实践能力。
教材章节:第七章实践操作教学内容安排与进度:第一周:单片机基础知识学习,完成CPU、内存、I/O口等功能的学习。
单片机电子琴课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理和功能,掌握电子琴的基本构造和演奏方法。
2. 帮助学生掌握单片机编程的基本技巧,学会使用相关软件进行程序设计。
3. 使学生了解音乐理论中音阶、音符的基本知识,并将其应用于电子琴演奏。
技能目标:1. 培养学生动手操作单片机的能力,学会连接电子琴硬件并进行调试。
2. 培养学生编写简单电子琴程序的能力,实现不同音符的播放和乐曲演奏。
3. 提高学生团队协作和沟通能力,能够共同分析和解决在电子琴制作过程中遇到的问题。
情感态度价值观目标:1. 培养学生对单片机及电子琴制作的兴趣,激发学生探究精神,养成自主学习的好习惯。
2. 培养学生具有创新意识,敢于尝试,勇于实践,面对失败保持积极的心态。
3. 增强学生的环保意识,培养节约资源、爱护设备的良好习惯。
课程性质:本课程为实践性较强的课程,结合理论知识,培养学生的动手操作能力和实际应用能力。
学生特点:学生具备一定的电子知识和编程基础,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的积极性,提高学生的实践能力和创新能力。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 理论知识:- 单片机原理:介绍单片机的基本结构、工作原理和功能。
- 音乐理论:讲解音阶、音符、音长等基本音乐知识。
- 编程基础:回顾C语言基本语法,学习单片机编程方法和技巧。
2. 实践操作:- 电子琴硬件连接:学习电子琴硬件的组成,进行电路连接和调试。
- 程序编写:编写程序实现电子琴基本功能,如按键识别、音符播放等。
- 歌曲演奏:设计程序,实现简单乐曲的演奏。
3. 教学大纲:- 第一周:单片机原理学习,音乐理论知识回顾。
- 第二周:编程基础复习,电子琴硬件连接与调试。
- 第三周:编写电子琴程序,实现基本功能。
基于单片机的电子琴设计电子琴是一种常见的乐器,通过电子元件和技术实现各种声音效果和音调的变化。
基于单片机的电子琴设计,使用单片机作为核心控制芯片,可以实现各种音色的生成、乐曲演奏和音调调整等功能。
一、基本原理1.音源生成:通过单片机的计算和控制,生成各种音色的数字波形信号。
可以使用PWM波形发生器,通过控制占空比实现不同音调的发声。
2.按键输入:通过按键进行音符的选择和演奏,按键可以通过矩阵键盘或编码器等方式实现,通过单片机的GPIO口读取按键输入信号。
3.音量控制:通过调节音量电阻或数字控制器,调整输出音量大小。
4.音色调整:通过改变生成波形的参数和算法,实现不同音色效果的切换和调整。
二、硬件设计1.单片机:选择合适的单片机,如STC89C52或ATmega328P等,作为控制核心。
2.键盘:选择合适的键盘结构和按键数量,如矩阵键盘或编码器。
3.音源:可以选择合适的音源模块或芯片,如AD9833,用于生成各种音色的波形信号。
4.音量控制:将数字音频信号通过运放进行放大,通过音量电位器或数字控制器调节输出音量大小。
5.音箱:选择合适的音箱,用于放大和放出音频信号。
三、软件设计1.按键扫描:通过单片机的GPIO口读取按键输入信号,实现按键的扫描和检测。
2.音符和音调处理:将按键输入映射为相应的音符号,通过生成不同的波形并控制频率实现不同音调的发声。
3.音量控制:通过改变音源模块的输出幅度或控制运放的增益,实现音量的调节。
4.音色调整:通过改变生成音色的参数和算法,实现不同音色效果的切换和调整。
5.乐曲演奏:通过编写相应的乐曲和音符的编码和播放算法,实现各种乐曲的演奏功能。
6.界面显示:可以通过液晶显示屏或LED显示器,实现界面的显示和操作。
四、功能扩展1.录音和播放:在单片机上添加存储模块(如SD卡或FLASH芯片),实现录音和播放功能,可以录制和回放演奏的音乐。
2.MIDI接口:添加MIDI接口,通过MIDI合成音源模块,实现与其他乐器和设备的互联。
基于51单片机的电子琴设计课程设计单片机原理》课程设计前言本课程设计旨在通过基于51单片机的电子琴设计,加深学生对单片机原理的理解和应用。
在本设计中,我们将介绍电子琴的设计要求、所用设备及软件以及总体设计方案。
随后,我们将详细介绍系统硬件设计中琴键控制电路、音频功放电路、时钟-复位电路和LED显示电路的设计。
第1章基于51单片机的电子琴设计1.1 电子琴的设计要求在电子琴的设计中,我们需要考虑琴键数量、音频输出质量、电源电压和外部接口等因素。
在本设计中,我们将采用25个琴键,保证音频输出质量和电源电压稳定,并提供外部接口以便于扩展和调试。
1.2 电子琴设计所用设备及软件在本设计中,我们将使用51单片机、琴键、音频功放、时钟、LED显示器等设备,并使用Keil C51编译器进行软件开发。
1.3 总体设计方案在总体设计方案中,我们将采用按键扫描方式实现琴键控制,使用PWM技术实现音频输出,使用外部晶振提供时钟信号,并使用LED显示器显示琴键状态。
第2章系统硬件设计2.1 琴键控制电路在琴键控制电路中,我们将采用矩阵按键扫描方式,通过51单片机的IO口进行扫描和检测。
同时,我们还将使用电容式触摸开关来实现琴键的触发。
2.2 音频功放电路在音频功放电路中,我们将采用TDA7297芯片作为功放,通过PWM技术实现音频输出,并通过滤波电路滤除杂音和谐波。
2.3 时钟-复位电路在时钟-复位电路中,我们将采用12MHz晶振作为时钟源,并使用复位电路确保系统在上电时能够正确运行。
2.4 LED显示电路在LED显示电路中,我们将采用MAX7219芯片实现LED点阵显示,并通过SPI接口与51单片机进行通信。
同时,我们还将使用CD4511芯片实现数码管显示琴键状态。
通过本课程设计,我们可以深入理解单片机原理的应用,掌握电子琴的设计和制作技术,提高自身的实践能力和创新能力。
2.5 整体电路本章将介绍电子琴的整体电路设计。
单片机电子琴课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解其内部结构和功能。
2. 使学生了解电子琴的基本工作原理,掌握单片机控制电子琴的方法。
3. 帮助学生掌握编程语言,如C语言,用于编写单片机控制程序。
技能目标:1. 培养学生动手搭建单片机电子琴硬件电路的能力。
2. 培养学生运用编程语言编写单片机程序,实现电子琴的基本功能。
3. 提高学生分析问题和解决问题的能力,使学生能够独立调试和优化单片机电子琴程序。
情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发学生创新意识和探索精神。
2. 培养学生团队协作意识,提高沟通与交流能力。
3. 引导学生关注单片机技术在现实生活中的应用,认识到科技对社会发展的推动作用。
分析课程性质、学生特点和教学要求:本课程为单片机电子琴课程设计,旨在让学生将所学理论知识与实际应用相结合,提高学生的动手实践能力。
针对初中年级学生,课程内容需符合学生的认知水平和兴趣。
在教学过程中,注重引导学生主动参与,培养其独立思考和解决问题的能力。
课程目标分解:1. 知识目标:通过讲解、示范和练习,使学生掌握单片机原理、电子琴工作原理及编程方法。
2. 技能目标:通过动手实践,培养学生搭建硬件电路、编写程序和调试设备的能力。
3. 情感态度价值观目标:通过课程学习,激发学生对电子技术的兴趣,培养其团队协作意识和创新能力。
二、教学内容1. 单片机原理及内部结构:讲解单片机的组成、工作原理、I/O口功能等基础知识,对应教材第3章内容。
2. 电子琴工作原理:介绍电子琴的基本构成、音阶产生原理、键盘扫描方法等,对应教材第5章内容。
3. C语言编程基础:讲解C语言的基本语法、数据类型、运算符、控制语句等,对应教材第2章内容。
4. 单片机编程与控制:结合实例,讲解如何使用C语言编写单片机程序,实现电子琴功能,对应教材第4章内容。
5. 硬件电路搭建:介绍电子琴硬件电路的组成、元件选型及连接方法,对应教材第6章内容。
单片机简易电子琴设计方案大全(六款模拟电路设计原理图详解)单片机简易电子琴设计方案(一)设计一简易电子琴,要求能够发出1、2、3、4、5、6、7等七个音符。
原理:由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T=216--5﹡105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下表所示:通过单片机实现电子琴演奏,实质就是将不同按键和特定频率的方波信号对应起来,以方波信号驱动蜂鸣器发出乐音。
下面简单介绍一下乐音的特性。
乐音实际上是有固定频率的信号。
在音乐理论中,把一组音按音调高低的次序排列起来就成为音节,也就是1、2、3、4、5、6、7和高音1。
高音1的频率正好是中音1频率的2倍,而且音节中各音的频率跟1的频率之比都是整数之比。
为了发出某一特定频率的乐音,可以控制单片机的一个I/O口产生该频率的方波信号,经过电流放大后驱动蜂鸣器发出该乐音。
对于方波的产生,可以启用单片机的一个定时器进行计时,产生溢出中断。
中断发生时,将输出引脚的电平取反,然后重新载入计数器初始值。
因此,正确的设置定时器的工作模式和初始计数值是发出乐音的基础。
例如中音l,其频率是523Hz,则周期为T=l/523=1912s,半个周期为956s。
根据单片机计数器计数的机器周期,就可以算出计数器的预置初始值应为多少。
例如,假设采用的单片机的一个计数周期需要12个时钟周期,当采用12MHz晶振时,一个计数周期即ls。
要定时956s,只需设置其计数初值为计数最大计数值减去956。
基于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中读取曲目信息的功能。
毕业论文基于单片机STC52的电子琴设计电子琴是一种能够模拟真实乐器声音的电子音乐乐器,它使用数字信号处理技术来模拟不同音调和音色的声音。
在这篇毕业论文中,我们将基于STC52单片机设计一个电子琴。
首先,我们需要了解电子琴的基本原理和工作方式。
电子琴主要由白键和黑键组成,每个键对应一个音调。
当用户按下一些键时,电子琴会发出相应音调的声音。
为了模拟各种音调和音色,电子琴还需要使用合成器来生成声音波形。
在本设计中,我们将使用STC52单片机作为主控芯片。
这款单片机具有强大的计算和处理能力,并且易于编程和控制。
我们将使用C语言编程来实现电子琴的功能。
首先,我们需要设计一个按键矩阵来接收用户的按键输入。
按键矩阵将通过电子琴的键盘连接到STC52单片机的I/O口。
当用户按下一些键时,相应的I/O口将被触发,并且可以通过编程来检测并响应按键动作。
接下来,我们将设计一个音频输出电路来输出电子琴的声音。
音频输出电路将连接到STC52单片机的PWM输出口。
通过调节PWM输出的频率和占空比,我们可以生成不同频率和音量的声音波形。
然后,我们需要设计一个合成器来生成不同音调和音色的声音波形。
合成器可以通过不同的算法和参数来模拟不同乐器的声音。
我们可以使用数字信号处理技术,如傅里叶变换和滤波器设计,来实现合成器的功能。
最后,我们需要编写软件程序来控制和管理电子琴的功能。
我们可以使用STC52单片机的开发环境和编程工具来编写程序。
程序需要实现按键检测、声音生成和处理等功能。
通过编程,我们可以实现不同音调、音色和演奏效果的电子琴。
在设计实现过程中,我们还需要考虑到电子琴的硬件和电路布局、电源供应、按键和音频接口等方面的问题。
同时,我们还需要进行测试和调试,以保证电子琴的正常工作和良好的声音质量。
通过以上的设计和实现,我们可以制作一个基于STC52单片机的电子琴。
这款电子琴具有丰富的音调和音色选择,可以模拟不同乐器的声音,同时具有简单易用的操作和良好的音质。
基于单片机的电子琴设计资料电子琴是一种电子乐器,通过电子回路和单片机控制,可以模拟出多种乐器的声音。
下面是一个基于单片机的电子琴设计资料,包括硬件设计和软件编程。
硬件设计:1.材料准备:选择一个适当大小的键盘,通常有8个到16个键位,每个键位可以连接到一个按钮开关。
2.连接按钮开关:将按钮开关连接到单片机的GPIO引脚上,通过读取引脚状态来检测按键的按下与释放。
3.音频输出:将单片机的数字音频输出连接到扬声器上,以发出相应的声音。
4.电源供应:提供适当的电源电压和电流给单片机和其他电子元件使用。
软件编程:1.初始化:在程序开始时,初始化单片机的GPIO引脚以及其他必要的外设,设置合适的时钟频率和中断设置。
2.按键扫描:通过循环遍历GPIO引脚,检测按钮开关的状态。
当检测到按键按下时,记录下按键对应的音符。
3.声音发生器:根据按键记录的音符,生成相应的音频信号。
可以使用一组预设的音符频率和振幅值,或者使用数学公式生成声音波形。
4.声音输出:将生成的音频信号发送到数字音频输出引脚,输出到扬声器上。
5.多音同步:为了更好的音乐体验,可以通过增加多音同步功能,使得按下多个按键时可以同时发出多个音符。
设计注意事项:1.硬件连接:确保正确连接按钮开关、声音输出和电源供应等元件,避免短路或其他电路问题。
2.音频信号处理:可以通过数字信号处理(DSP)算法对音频信号进行增强、滤波等处理,提高音质和音效。
3.功耗优化:在编程时,可以考虑使用低功耗模式以延长电子琴的电池寿命。
4.隔音材质:适当在琴身上加入隔音材质,减少按键和扬声器震动传递到外部的噪音。
总结:基于单片机的电子琴设计包括硬件连接和软件编程两个方面,硬件连接主要涉及键盘、按钮开关、扬声器和电源供应等元件的连接,软件编程则负责按键扫描、音频发生和音频输出等功能。
在设计过程中需注意硬件连接的正确性和优化声音效果,使得电子琴能够发出优美的音乐。
总体概述本设计采用AT89S52单片机作为整个系统的控制核心,具有:音乐琴, 电子钟, LED阵列扫描显示, 液晶字符显示, 循环彩灯五个模块。
音乐琴采用4X4矩阵键盘为输入键盘,共有十六个基本音, 并与其他功能组合, 具有一定的实用性与趣味性, 较好的完成题目要求。
关键词:单片机矩阵键盘频率。
一、音乐琴系统。
1. 电路原理图2.系统板硬件连线1.把“单片机系统”区域中的P1.0 端口用导线连接到“音频放大模块”区域中的SPK IN 端口上;2.把“单片机系统“区域中的P3.0 -P3.7 端口用8 芯排线连接到“4X4 行列式键盘”区域中的C1 -C4 R1 -R4 端口上;3.相关程序内容音乐产生的方法;一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/ 计数器T0 来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
现在以单片机12MHZ 晶振为例,例出高中低音符与单片机计数T0 相关的计数值如下表所示下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据低音0 -19 之间,中音在20 -39 之间,高音在40 -59 之间TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0DW 0,63731,63928,0,64185,64331,64463,0,0,0DW 0,64580,64684,64777,64820,64898,64968,65030,0,0DW 0,64633,64732,0,64860,64934,64994,0,0,0DW 0,65058,65110,65157,65178,65217,65252,65283,0,0DW 0,65085,65134,0,65198,65235,65268,0,0,0DW 02 、音乐的音拍,一个节拍为单位(C 调)对于不同的曲调我们也可以用单片机的另外一个定时/ 计数器来完成。
方案设计1电子琴设计框图图1电子琴设计框图2 总体设计2.1 硬件部分采用AT89S52 单片机作为主控制部件,AT89S52 用上电自动复位,12MHZ 的晶振和两个电容形成晶振电路。
面键,用于输入音符。
2.2 软件部分软件部分采用汇编语言编写程序,单片机汇编语言程序设计步骤如下:第一步:分析问题。
第二步:画出程序的基本轮廓。
第三步:实现该程序。
2.3 软硬件调试使用KEIL 软件,将程序输入进行编译,编译通过后,则将制作的电路进行联机仿真,检测功能和设计任务能不能实现。
如果不能达到预期效果,则必须重新检查硬件或修改程序。
2.4 程序固化经过调试,实现了预期的成果和功能,就可以开始程序固化了。
将程序烧录到 AT89S52 内部ROM 中,然后将单片机放入到电路中,再进行观察。
一.相关技术简介用电子琴可以演奏出各种美妙的音乐,而音乐是有音符组成的。
不同的音符是由相应频率的振动产生不同频率的声音电信号经扬声器发音后,人耳所听到的便是不同的声音,换言之,只要向扬声器中输入不同频率的电信号就可以产生不同的声音。
若将不同的音节于不同的节拍组合在一起便形成一定的曲调,因此一个单片机I/O口,通过软件,控制其输出不同频率的信号,就可以产生8个基本音节,将音节以一定的节拍进行组合,便可以产生歌曲。
乐曲中每一音符对应着确定的频率,表1 给出C 调时各音符频率。
如果单片机某个口线输出“高”“低”电平的频率和某个音符的频率一样,那么将此口线接上喇叭就可以发出此音符。
二.硬件设计1. AT89S52单片机图2 AT89S52单片机<1)简介AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有8K 在系统可编程 Flash 存储器。
使用 Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
<2).引脚功能1.VCC : 电源2.GND: 地3.P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。
作为输出口,每位能驱动 8 个 TTL 逻辑电平。
对 P0 端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。
在这种模式下,P0 具有内部上拉电阻。
在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
4.P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个TTL 逻辑电平。
对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚因为内部电阻的原因,将输出电流<IIL)。
此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入<P1.0/T2)和时器/计数器 2的触发输入<P1.1/T2EX),具体如下表所示。
在 flash 编程和校验时,P1 口接收低 8 位地址字节。
表1P1引脚功能5.P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个TTL 逻辑电平。
对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚因为内部电阻的原因,将输出电流<IIL)。
在访问外部程序存储器或用 16 位地址读取外部数据存储器<例如执行 MOVX @DPTR)时,P2 口送出高八位地址。
在这种应用中,P2 口使用很强的内部上拉发送 1。
在使用8 位地址<如 MOVX @RI)访问外部数据存储器时,P2 口输出 P2 锁存器的内容。
在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。
6.p3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱动 4 个TTL 逻辑电平。
对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚因为内部电阻的原因,将输出电流<IIL)。
P3 口亦作为 AT89S52 特殊功能<第二功能)使用,如下表所示。
在 flash 编程和校验时,P3 口也接收一些控制信号。
表2P3引脚功能7.RST: 复位输入。
晶振工作时,RST 脚持续 2 个机器周期高电平将使单片机复位。
看门狗计时完成后,RST 脚输出 96 个晶振周期的高电平。
特殊寄存器 AUXR(地址 8EH>上的 DISRTO 位可以使此功能无效。
DISRTO 默认状态下,复位高电平有效。
8.ALE/PROG:地址锁存控制信号<ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。
在 flash 编程时,此引脚<PROG)也用作编程输入脉冲。
在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。
如果需要,通过将地址为 8EH 的 SFR 的第 0 位置“1”,ALE 操作将无效。
这一位置“1”,ALE 仅在执行 MOVX 或 MOVC 指令时有效。
否则,ALE 将被微弱拉高。
这个 ALE 使能标志位<地址为 8EH 的 SFR 的第 0 位)的设置对微控制器处于外部执行模式下无效。
9.PSEN:外部程序存储器选通信号<PSEN)是外部程序存储器选通信号。
当 AT89S52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。
10.EA/VPP:访问外部程序存储器控制信号。
为使能从 0000H 到 FFFFH 的外部程序存储器读取指令,EA 必须接 GND。
为了执行内部程序指令,EA 应该接 VCC。
在 flash 编程期间,EA 也接收 12 伏 VPP电压。
11.XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
12.XTAL2:振荡器反相放大器的输出端。
2.蜂鸣器图3 蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机,打印机,复印机,报警器,电子玩具,汽车电子设备,电话机,定时器等电子产品中做发声器件。
3.键盘图4 键盘本设计键盘模块采用 4*4 矩阵键盘,原理图如图4所示。
在键盘中按键数量较多时,为了减少I/O 口的占用,通常将按键排列成矩阵形式,如图4 所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口<如P1 口)就可以构成4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20 键的键盘,而直接用端口线则只能多出一键<9 键)。
由此可见,在键盘中按键数量较多时,为了减少I/O 口的占用,通常将按键排列成矩阵形式。
4. 时钟电路<1)振荡电路AT89S52内部有一个用于构成振荡器的可控高增益反向放大器,两个引脚XTAL1和XTAL2分别是该放大器的输入端和输出端,其中匹配电容C11和C12要根据石英晶体振荡器的要求选取,一般选用20-30PF 的瓷片电容。
振荡频率根据实际要求的工作速度,从几百KHZ-24MHZ中适当选取。
<2)时钟电路图5定时电路5 .LED数码管图6 LED显示显示模块是利用 AT89S52 单片机的 P0 端口的 P0.0-P0.7 连接到一个共阳数码管的a-h 的笔段上。
在数码管上循环显示0-7 数字,时间间隔0.2 秒。
LED 显示模块七段LED 数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。
LED 数码管的七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,表3给出了共阴极LED 数码管的字形码表。
表3共阳极 LED 数码管的字形码表显示字符共阳极段选码显示字符共阳极段选码0C0H 880H1F9H 990H2A4H A88H三.软件设计图7主程序流程图1.发声程序表4音符频率表图 8 发声程序流程图。
2.定时中断图9定时中断程序框图中断是单片机适时的处理内部或外部事件的一种内部机制,当某种内部或外部事件发生时,单片机中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断程序处,继续向下执行。
AT89S52 有 6 个中断源:两个外部中断<INT0 和 INT1),三个定时中断<定时器0、1、2)和一个串行中断。
每个中断源都可以通过置位或清除特殊寄存器IE 中的相关中断允许控制位分别使得中断源有效或无效。
IE 还包括一个中断允许总控制位 EA,它能一次禁止所有中断。
如表 5 所示,IE.6 位是不可用的。
对于AT89S52,IE.5 位也是不能用的。
用户软件不应给这些位写1。
它们为 AT89 系列新产品预留。
定时器 2 可以被寄存器 T2CON 中的TF2 和 EXF2 的或逻辑触发。
程序进入中断服务后,这些标志位都可以由硬件清0。
实际上,中断服务程序必须判定是否是TF2 或EXF2 激活中断,标志位也必须由软件清0。
定时器 0 和定时器 1 标志位 TF0 和 TF1 在计数溢出的那个周期的 S5P2 被置位。
它们的值一直到下一个周期被电路捕捉下来。
然而,定时器2 的标志位TF2 在计数溢出的那个周期的 S2P2 被置位,在同一个周期被电路捕捉下来。
表5中断允许控制寄存器五设计感受这次专业设计结束了,我对于52单片机又有了一个全新的认识,原来以前的学习还差很多,在对于学科和未来的工作上,我还有很长的一段路要走。
学海无涯,这句话虽然有点老生常谈,但却是我现在最真实的心理感受,电子琴的设计其实难度并不大,而如今如此吃力的原因值得我好好反思。