单片机课程设计—电子琴_第1页
单片机课程设计—电子琴_第2页
单片机课程设计—电子琴_第3页
单片机课程设计—电子琴_第4页
单片机课程设计—电子琴_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录一 设计的内容、要求及目的 . 3 1 设计内容 . 3 2 设计要求 . 3 3 设计目的 . 3二 系统总体方案选择与说明 . 3 1 系统方案综述 . 3 2 系统设计思路 . 4三 系统方框图与工作原理 . 5 1 系统硬件电路设计框图 . 5 2 工作原理 . 5四 各部分方案选定、功能及计算 . 7 1 单片机选用 . 7 2 LED数码管显示模块的设计 . 8 3 按键模块的设计 . 8 4 扬声器模块的设计 . 9五 器件说明 . 10六 应用系统的程序设计 . 11 1 程序总框图 . 11 2 主函数设计 . 12 3 软件延时函数 . 12 4 频率设定函数 . 13

2、 5 定时器0中断函数 . 13 6 被检测到按键处理函数 . 13 7 被检测到按键释放处理函数 . 13 8 键盘扫描函数 . 14七 调试说明、使用说明 . 17 1 调试说明 . 17八 设计总结 . 18九 参考文献 . 19 1附录一 程序清单 . 20附录二 设计电路原理图 . 26一 设计的内容、要求及目的1 设计内容本课题以单片机为核心,设计和制作一个电子琴。要求由4X4组成16个按钮矩阵,设计成16个音,可随意弹奏想要表达的音乐2 设计要求1.设计方案要合理、正确;2.系统硬件设计;3.完成必要元器件选择;4.系统软件设计及调试;5.写出设计报告。3 设计目的本课题主要对使

3、用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。本系统是简易电子琴的设计,按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放器对应的音符。通过设计本系统可了解单片机的基本功能,对单片机的了解有一个小的飞跃。二 系统总体方案选择与说明1 系统方案综述从系统实现的功能上来看,简易电子琴的课程设计为手动弹奏乐曲,手动弹奏乐曲是根据具体的硬件键盘设置功能键实现低音、中音和高音.从系统硬件结构上来看,我们主要使用到51系列单片机、八

4、位七段数码管显示电路、矩阵4X4键输入电路、扬声器以及电源电路等等。将这些硬件电路有机地结合起来使之满足简易电子琴的实现硬件需要。从系统软件设计角度来看,将简易电子琴的课程设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、数码显示模块、音乐产生模块等等。此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲的功能。从音乐产生原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音乐的声音。用定时器来控制发音时间的长短。把音乐的音符变换为定时常数,作为数据表格存放在存储器中,由程序查表得到定时常数,分别用来控制定时

5、器产生的脉冲频率和发出该音频脉冲的持续时间。因此,我们可以综合上述的方案设计原理,从软件和硬件两部分进行有计划有步骤的系统分析和设计。2 系统设计思路1、手动弹奏乐曲用非编码的矩形键盘来实现,手动弹奏乐曲中矩阵键盘的16个键分别设置成不同的音符。2、八位LED数码管显示对应的各个音符。采用动态扫描输出。3、软件的设计主要包括矩形键盘键值的读取、LED动态扫描输出程序、和手动弹奏乐曲程序。三 系统方框图与工作原理1 系统硬件电路设计框图2 工作原理1、演奏音乐原理:通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音节的声音。把乐谱的音符变换为定时常数,作为数据表格

6、存放在存储器中,由程序到这些定时常数,用来控制定时器产生的脉冲频率。单片机晶振频率为12MHZ时,乐曲中的音符、频率及定时常数之间的对应关系可制成表格2、键盘扫描原理:先将4×4矩阵键盘的行和列全部置为高电平,然后再逐行置为低电平,当有键按下时P1口的值会发生相应的改变,通过与给定数的比较,判定是否有键按下和是否键已松开。并给定列号,根据所给的列号的值,一方面给LED送入确定好的数值,另一方面从TABLE表中取出相应的值,送入单片机转换成声音播出。四 各部分方案选定、功能及计算由于LK-51单片机实验、开发学习机的各功能模块已经设计好,在使用时只要设计模块间电路的连接,因此硬件电路的

7、设计及实现相对简单。硬件电路由LED数码管显示模块、按键模块、发光二极管电路和蜂鸣器模块、复位电路和电源电路部分组成。1 单片机选用根据设计方案的分析,可以选择带有EPROM的单片机,应用程序直接存储在片内,不用在外部扩展程序存储器,电路可以简化。ATMEL公司生产的AT89CXX系列单片机,AT89CXX系列与MCS-51系列单片机相比,有两大优势:第一,片内程序存储器采用闪速存储器,使程序的写入更方便;第二,提供了更小尺寸的芯片,使整个硬件电路的体积更小。它以较小的体积、良好的性能价格比倍受青睐。本次课程设计采用89C51单片机。AT89C52单片机的接口图如图所示:P0口作为显示的段码,

8、 P1口作为4×4矩阵键盘的4个列的扫描端口,P1.0P1.3作为4×4矩阵键盘的4个行的扫描端口,P1.4-P1.7作为4×4矩阵键盘的4个列的扫描端口,P3.0-P3.7作为显示位码,P2.1作为扬声器接口。2 LED数码管显示模块的设计本系统的八位LED显示器采用动态扫描的方法进行显示,即循环地点亮各位显示器。用单片机的P0口来控制LED显示器的字形输入(段控),此外,为了实现位控,以P3口作为输出位控线 。3 按键模块的设计下图为硬件系统的16键4×4的矩阵式键盘电路逻辑图,键盘的行线连接到P1.0-P1.3口上,列线连接到P1.4-P1.7口上

9、,单片机通过逐行扫描的方法对键盘进行扫描,读取判断有无键被按下以及按键的位置。为了判断有没有键被按下,可先经输出口向所有列线输出高电平然后在输出各行状态。若行线状态皆为高电平则表明无键被按下;若行线状态中有低电平就表示有键被按下,然后再根据接通的行线和列线判定按键的位置。当经扫描表明有键被按下后,紧接着就是进行去抖动处理,抖动时间的长短与键的机械特性有关,一般为10-20ms。4 扬声器模块的设计电磁式扬声器由振荡器、电磁线圈、磁铁振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。本系统设计的扬声

10、器通过驱动电路与单片机的P2.1连接,单片机就可以通过P2.1的输出信号频率就行控制。五 器件说明AT89C51单片机 1片 11.0592MHZ的晶振 1片 电容 1个 4X4矩阵键盘 1个 电阻 1八位LED显示器 1扬声器 1 个 个 个六 应用系统的程序设计1 程序总框图2 主函数设计主程序的的功能,主要是定时器的初始化和不同功能的调用,这里使用到不同的子程序,先调用显示子程序,再弹奏和音乐播放功能。主程序流程图如图1所示:主程序的源程序如下:void main()TMOD=0x01;EA=1;ET0=1;while(1)key_scan();3void delayms(uint xm

11、s)uint i,j;for(i=xms;i>0;i-)for(j=110;j>0;j-);软件延时函数 124 频率设定函数void set_T0(uint x_TH0,uint y_TL0)TH0=x_TH0;TL0=y_TL0;T0_value_a=x_TH0;T0_value_b=y_TL0;TR0=1;5 定时器0中断函数void Freq_T0() interrupt 1TH0=T0_value_a;TL0=T0_value_b;p21=p21;6 被检测到按键处理函数void key_deal(uchar dis,uint freq)set_T0(freq/256,f

12、req%256);/设置中断频率P0=(8=dis)?(table_p0dis-1+0x80):(table_p0dis-1);/数码管段选 P3=table_p3dis-1;/数码管位选7 被检测到按键释放处理函数void key_relea() TR0=0;/关中断 p21=1;/消音 dis_stop/消影(宏定义)8 键盘扫描函数void key_scan()P1=0XFE;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(1,

13、freq_table0);/dis,freq break;case 0xd0:key_deal(2,freq_table1);/dis,freq break;case 0xb0:key_deal(3,freq_table2);/dis,freq break;case 0x70:key_deal(4,freq_table3);/dis,freq break;default:break;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XFd;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&am

14、p;0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(1,freq_table4);/dis,freq break;case 0xd0:key_deal(2,freq_table5);/dis,freq break;case 0xb0:key_deal(3,freq_table6);/dis,freq break;case 0x70:key_deal(4,freq_table7);/dis,freq break;default:break;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XFb

15、;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(5,freq_table8);/dis,freq break;case 0xd0:key_deal(6,freq_table9);/dis,freq break; case 0xb0:key_deal(7,freq_table10);/dis,freq break;case 0x70:key_deal(8,freq_table11);/dis,freq break;default:br

16、eak;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XF7;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0) switch(temp) case 0xe0: key_deal(5,freq_table12);/dis,freq break; case 0xd0: key_deal(6,freq_table13);/dis,freq break; case 0xb0: key_deal(7,freq_table14);/dis,freq br

17、eak; case 0x70: key_deal(8,freq_table15);/dis,freq break; default: break; while(temp!=0xf0) temp=P1&0xf0; key_relea();七 调试说明、使用说明1 调试说明1用protus画好电路原理图,将hex文件加载到单片机里面,进行仿真,依次按下16个键位,观察其结果是否与预想中的一样,若一样,则进行硬件调试。2. 利用单片机学习板,将keil所建工程所生成的hex文件下载到单片机 17里面,直接按下矩阵键盘上的16个按键就可以弹奏16种音符并且八位数码显示器上显示键值。八 设计总结

18、通过这次的设计使我认识到我对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子琴设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。九 参考文献1 王迎旭. 单片机原理及应用M. 机械工业出版社.2 郭天祥. 新概念51单片机C语言教程入门、提高、开发、拓展

19、M .电子工业出版社.附录一 程序清单#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define dis_stop P0=0XFF;P3=0X00; sbit p21=P21;uint T0_value_a,T0_value_b;/用来存放T0的初值 uint temp;/*音符频率表*/ uint code freq_table=64580,64684,64777,64820,65058,65110,65157,65178,64898,64968,65030,65128,65217,65

20、252,65283,65300;/*数码管段译码表*/ uchar code table_p0=0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xf9;/*数码管位译码表*/ uchar code table_p3=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;void delayms(uint);void key_scan();void key_deal(uchar,uint);void set_T0(uint,uint);void key_relea();void Freq_T0() interrupt 1TH0=T0_value_

21、a;TL0=T0_value_b;p21=p21; void main()TMOD=0x01;EA=1;ET0=1;while(1)key_scan();void key_scan()P1=0XFE;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(1,freq_table0);/dis,freq break;case 0xd0:key_deal(2,freq_table1);/dis,freq break;case 0xb0:key_

22、deal(3,freq_table2);/dis,freq break;case 0x70:key_deal(4,freq_table3);/dis,freq break;default:break;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XFd;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(1,freq_table4);/dis,freq break;case 0xd0:

23、key_deal(2,freq_table5);/dis,freq break;case 0xb0:key_deal(3,freq_table6);/dis,freq break;case 0x70:key_deal(4,freq_table7);/dis,freq break;default:break;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XFb;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(5,freq_table8);/dis,freq break;case 0xd0:key_deal(6,freq_table9);/dis,freq break; case 0xb0:key_deal(7,freq_table10);/dis,freq break;case 0x70:key_deal(8,freq_table11);/dis,freq break;defau

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论