51单片机作业WORD_第1页
51单片机作业WORD_第2页
51单片机作业WORD_第3页
51单片机作业WORD_第4页
51单片机作业WORD_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、文档可能无法思考全面,请浏览后下载! 单片机原理及开发大作业设计题目:基于单片机的可演奏电子琴设计系 别: 专 业: 年 级: 学 号: 学 生 姓 名: 评 阅 人 : 提 交 时 间: 年 月 日评 阅 时 间: 年 月 日10 / 11一、 系统功能电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89c51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键

2、和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。本系统设计制作一个可演奏的电子琴。综合应用了两项设计。(1)键盘矩阵识别。即矩阵扫描,显示当前按键。(2)不同频率音符播放。可以通过按键控制16种发音。二、 硬件设计本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符。硬件总体设计图如下:LED显示模块如图所示,利用AT89c51单片机的P0端口的P0.0P0.7连接到一个七段数码管的ah的笔段上,数码管的公共端接电源。矩阵扫描显示当前按键模块如下:矩阵扫描扬声器发出对应音符模块如下

3、:矩阵键盘模块如下:三、 软件设计本系统的软件总的流程图如下:系统总程序:#include <reg51.h>#define uchar unsigned char#define uint unsigned int/共阳极数码管编码uchar code DSY_Table = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,ox80, /0,1,2,3,4,5,6,7,8 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF ; /9,A,B,C,D,E,F,-/各音符对应的延时 uint code Tone_Delay_T

4、able = 64021,64103,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178 ; sbit BEEP = p30; /蜂鸣器uchar KeyNo; /按键序号/-/延时/-void DelayMS(uchar x) uchar i; while ( x- ) for(i = 0;i < 120; i+); /-/键盘矩阵扫描子程序/-void Keys_Scan() uchar Tmp,k; /高四位置0,放入四行 p1 = 0x0F; DelayMS(2)

5、; /按键后00001111将变成0000XXXX,X中1个为0,3个仍为1 /下面的异或操作会把3个1变成0,唯一的0变成1 Tmp = p1 0x0F; /判断按键发生于03列中的哪一列 switch (Tmp) case 1: k = 0;break; case 2: k = 1;break; case 4: k = 2;break; case 8: k = 3;break; default:return; /无键按下 /低四位置0,放入四列 p1 = 0xF0; DelayMS(2); /按键后11110000将变成XXXX0000,X中1个为0,3个仍为1 /下面的表达式会将高四位移

6、至低四位,并将其中唯一的0变为1,其余为0 Tmp = (p1 >> 4)0x0F; /对03行分别附加起始值0,4,8,12 switch (Tmp) case 1: k += 0; break; case 2: k += 4; break; case 4: k += 8; break; case 8: k += 2; break; default:return; KeyNo = k; /-/定时器0中断程序,不同频率的声音由该中断产生/-void Play_Tone() interrupt 1 TH0 = Tone_Delay_Table KeyNo / 256; TL0 =

7、Tone_Delay_Table KeyNo % 256; BEEP = BEEP; /-/主程序/-void main() p0 = 0xBF; /初始显示“-” TMOD = 0x01; IE = 0x82; while(1) p1 = 0xF0; /发送扫描码 if (p1 != 0xF0) /如果有键按下 Keys_Scan(); /扫描键盘矩阵 p0 = DSY_Table KeyNo ; / 显示按键 TR0 = 1; /启动定时器,根据KeyNo发音 else TR0 = 0; /停止播放 DelayMS(2); I/O并行口直接驱动LED显示把“AT89C51”区域中的P2.0

8、/A8P2.7/A15端口用8芯排线连接到一位数码管的ah端口上;要求:P2.0/A8与a相连,P2.1/A9与b相连,P2.2/A10与c相连,P2.7/A15与h相连。在本设计中,数码管的显示通过 P2=DSY_CODEk 这句语言来查表并输出,实现音符的显示。 表1 字形码表及对应的音符10x3f低 5 SO90x7f中 6 LA20x06低 6 LAA0x6f中 7 SI30x5b低 7 SIb0x77高 1 DO40x4f中 1 DOC0x7c高 2 RE50x66中 2 RED0x39高 3 M60x6d中 3 ME0x5e高 4 FA70x7d中 4 FAF0x79高 5 SO8

9、0x07中 5 SO00x71高 6 LA扬声器:一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P3.7反相,然后重复计时再反相。就可在P3.7引脚上得到此频率的脉冲。利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,

10、改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。 计数脉冲值与频率的关系式是: Nfi÷2÷fr 式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。其计数初值T的求法如下: T65536N65536fi÷2÷fr例如:设K65536,fi1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。 T65

11、536N65536fi÷2÷fr655361000000÷2÷fr 65536500000/fr低音DO的T65536500000/26263628中音DO的T65536500000/52364580高音DO的T65536500000/104665058我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数据:uint code Tone_Delay_Table = 64021,64103,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157

12、,65178 ; 矩阵键盘的按键识别方法:确定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。1、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检

13、测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。四、 设计总结将程序导入AT89C51芯片,调试成功后,可任意弹奏自己想要的旋律。本课题通过制作电子琴,将几个模块很好的融合起来,对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大,同时通过显示模块来确知自己所弹的音符。通过这次课程设计,我感觉收获了很多:首先,通过实践,加深对单片机系列知识及其系统的认识。这个设计题目并不是新的,但从中能体现到一个系统开发设计的过程,足于让我们受益。第二,通过设计学习到了很多软件的使用。本次设计,软件部分用到了proteus进行硬件设计,用keil4进行程编译。第三,提高了自己的动手能力。动手在一定程度上反映了一个人的能力,作为当代大学生,社会要

温馨提示

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

评论

0/150

提交评论