基于AT89C51的简易电子琴单片机课程设计.doc

上传人:聆听****声音 文档编号:709416 上传时间:2023-04-29 格式:DOC 页数:20 大小:456.04KB
下载 相关 举报
基于AT89C51的简易电子琴单片机课程设计.doc_第1页
第1页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第2页
第2页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第3页
第3页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第4页
第4页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第5页
第5页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第6页
第6页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第7页
第7页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第8页
第8页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第9页
第9页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第10页
第10页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第11页
第11页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第12页
第12页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第13页
第13页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第14页
第14页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第15页
第15页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第16页
第16页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第17页
第17页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第18页
第18页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第19页
第19页 / 共20页
基于AT89C51的简易电子琴单片机课程设计.doc_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于AT89C51的简易电子琴单片机课程设计.doc

《基于AT89C51的简易电子琴单片机课程设计.doc》由会员分享,可在线阅读,更多相关《基于AT89C51的简易电子琴单片机课程设计.doc(20页珍藏版)》请在冰点文库上搜索。

基于AT89C51的简易电子琴单片机课程设计.doc

单片机课程设计

题目名称:

基于单片机的可演奏电子琴设计

专业班级:

学生姓名:

学号:

指导教师:

成绩:

评语:

指导老师签名:

日期:

摘要

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

本文的主要内容是用AT89c51单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。

本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。

Abstract

Electronicorganisamodernelectronicmusictechnologyandtheproductisanewtypeofkeyboardinstruments.Itplayedanimportantroleinmodernmusic.SCMhaspowerfulcontrolfunctionsandflexibleprogrammingcharacteristics.Ithasconvergedwithmodernpeople'slives,becomeanirreplaceablepart.ThemaincontentisAT89C51controlofthecorecomponents,designofaelectronicorgan.SCMasahosttothecore,withthekeyboard,speakerandothercoremodules.Inthemaincontrolmodulehas16keysandaspeaker.Thesystemissteady,itssimplehardwarecircuits,softwarefunctions,reliabilityofcontrolsystemandhighcostperformanceisitsadvantages.Italsohascertainpracticalandreferencevalue.

目录

摘要 1

Abstract 1

1系统概述 3

1.1课程设计的目的和意义 3

1.2本系统主要研究内容 3

1.3本系统主要研究目标 4

1.4主要芯片简介 4

2方案论证 4

2.1控制模块选择方案 4

2.2按键模块选择方案 5

3方案的实现 5

3.1系统实现的具体措施 5

3.2系统硬件设计 6

3.2.1系统硬件总体设计 6

3.2.2子系统(模块)一 6

3.2.3子系统(模块)二 7

3.2.4子系统(模块)三 8

3.3系统软件设计 9

3.3.1系统软件总体设计 9

3.3.2子程序(模块)一:

LED显示 9

3.3.3子程序(模块)二:

扬声器 10

3.3.4子程序(模块)三:

矩阵键盘 11

4系统调试 12

4.1Proteus简介 12

4.2keil简介 12

4.3Proteus和Keil的联调 13

5设计心得 14

参考文献 15

附录1:

16

1系统概述

1.1课程设计的目的和意义

单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。

它的应用必定导致传统的控制技术从根本上发生变革。

因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。

本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。

利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。

并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。

本系统是简易电子琴的设计,按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放器对应的音符。

通过设计本系统可了解单片机的基本功能。

对单片机的了解有一个小的飞跃。

1.2本系统主要研究内容

本系统设计制作一个可演奏的电子琴。

综合应用了两项设计。

(1)键盘矩阵识别。

即矩阵扫描,显示当前按键。

(2)不同频率音符播放。

可以通过按键控制16种发音。

1.3本系统主要研究目标

本系统的设计是为了实现按下矩阵键盘中的按键会使数码管显示当前按键,扬声器播放对应音符的目标。

1.4主要芯片简介

AT89c51简介

AT89c51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89c51可为许多嵌入式控制应用系统提供高性价比的解决方案。

   AT89c51具有如下特点:

40个引脚(引脚图如图1-2所示),4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

此外,AT89c51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。

空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。

同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

2方案论证

2.1控制模块选择方案

方案一:

用可控硅制作电子琴。

将220V交流电经变压器降压,再经过整流、滤波,获得+13.5V直流电压。

将单向可控硅SCR和电阻、电容组成驰张振荡器电路。

但该设计方案制作成本高且复杂。

方案二:

采用AT89C51单片机进行控制,由于其性价比高,完全满足了本作品智能化的要求,它的内部程序存储空间达到4K,使软件设计有足够的内部使用空间并且方便日后系统升级,使用方便,抗干扰性能提高。

选择方案:

鉴于上述对比与分析,AT89C51单片机设计微型电子琴的方法,仅需AT89C51最小系统,扩展一组矩阵键盘,再接一组发光二极管用来指示电子琴的工作状态。

所以,本设计采用方案二。

2.2按键模块选择方案

传统电子琴可以用键盘上的“1”到“A”键演奏从低SO到高DO等11音。

该设计有16个按钮矩阵,设计成16个音,可以实现音阶在低音4---高音5之间。

比传统音阶范围大,弹奏效果好。

3方案的实现

3.1系统实现的具体措施

键盘接口必须具有的4个基本功能。

(1)去抖动:

每个按键在按下或松开时,都会产生短时间的抖动。

抖动的持续时间与键的质量相关,一般为5—20mm。

所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。

去抖问题可通过软件延时或硬件电路解决。

(2)防串键:

防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。

常用的方法有双键锁定和N键轮回两种方法。

双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。

N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。

(3)被按键识别:

如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。

常用的方法有行扫描法和线反转法两种。

行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。

线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。

(4)键码产生:

为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。

用AT89C51的并行口P0接4×4矩阵键盘,以P0.0-P0.3作输入线,以P0.4-P0.7作输出线;在数码管上显示每个按键的“0-F”序号。

3.2系统硬件设计

3.2.1系统硬件总体设计

本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符。

硬件总体设计图如下:

图1

3.2.2子系统(模块)一

LED显示模块如图2-2所示,利用AT89c51单片机的P0端口的P0.0-P0.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源。

矩阵扫描显示当前按键模块如下:

图2

3.2.3子系统(模块)二

矩阵扫描扬声器发出对应音符模块如下:

图3

3.2.4子系统(模块)三

矩阵键盘模块如下:

图4

矩阵式键盘的结构与工作原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

  矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。

这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。

行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。

具体的识别及编程方法如下所述。

3.3系统软件设计

3.3.1系统软件总体设计

本系统的软件总的流程图如下:

图5

系统总程序见附录1.

3.3.2子程序(模块)一:

LED显示

I/O并行口直接驱动LED显示

把“AT89C51”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到一位数码管的a-h端口上;要求:

P2.0/A8与a相连,P2.1/A9与b相连,P2.2/A10与c相连,……,P2.7/A15与h相连。

表1:

表1字形码表及对应的音符

1

0x3f

低5SO

9

0x7f

中6LA

2

0x06

低6LA

A

0x6f

中7SI

3

0x5b

低7SI

b

0x77

高1DO

4

0x4f

中1DO

C

0x7c

高2RE

5

0x66

中2RE

D

0x39

高3M

6

0x6d

中3M

E

0x5e

高4FA

7

0x7d

中4FA

F

0x79

高5SO

8

0x07

中5SO

0

0x71

高6LA

在本设计中,数码管的显示通过

P2=DSY_CODE[k]

这句语言来查表并输出,实现音符的显示。

具体程序见附录1

3.3.3子程序(模块)二:

扬声器

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。

利用定时器计时半周期时间,每当计时终止后就将P3.7反相,然后重复计时再反相。

就可在P3.7引脚上得到此频率的脉冲。

利用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)、中音DO(523Hz)、高音DO(1046Hz)的计数值。

T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr

=65536-500000/fr

低音DO的T=65536-500000/262=63628

中音DO的T=65536-500000/523=64580

高音DO的T=65536-500000/1046=65058

我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数据:

uintcodeTone_Delay_Table[]=

{64021,64103,64260,64400,64524,64580,64684,64777,

64820,64898,64968,65030,65058,65110,65157,65178};

具体程序见附录1

3.3.4子程序(模块)三:

矩阵键盘

矩阵式键盘的按键识别方法:

确定矩阵式键盘上何键被按下介绍一种“行扫描法”。

  行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

  1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

  2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。

其方法是:

依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。

在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。

若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

具体程序见附录1

4系统调试

4.1Proteus简介

Proteus的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。

 该软件的特点:

 ①全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。

 ②具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS-232动态仿真、C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

 ③目前支持的单片机类型有:

68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

 ④支持大量的存储器和外围芯片。

总之该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大,可仿真51、AVR、PIC。

4.2keil简介

单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。

机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。

运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。

掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

4.3Proteus和Keil的联调

使用步骤:

1、打开keil,建立工程,输入程序

2、编译和生成hex文件。

3、打开Proteus,设计硬件电路图。

4、导入hex文件。

将鼠标置于电路图中AT89C51器件上,右击后再左击,在出现的窗口中找到如下图所示的ProgramFile对话框,并填入hex文件对应的路径。

图6

5、点击面板左下角的,开始调试。

6、按下任意键,扬声器发出对应的声音,并在数码管上显示出键值,例如,按下KF按键,仿真结果如下:

图7

7、按下另外一个K9键,仿真结果如下:

图8

其他的同理。

5设计心得

将程序导入AT89C51芯片,调试成功后,可任意弹奏自己想要的旋律。

本课题通过制作电子琴,将几个模块很好的融合起来,对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。

利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。

说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大,同时通过显示模块来确知自己所弹的音符。

通过这次课程设计,我感觉收获了很多:

首先,通过实践,加深对单片机系列知识及其系统的认识。

这个设计题目并不是新的,但从中能体现到一个系统开发设计的过程,足于让我们受益。

第二,通过设计学习到了很多软件的使用。

本次设计,软件部分用到了proteus进行硬件设计,用keil4进行程编译。

第三,提高了自己的动手能力。

动手在一定程度上反映了一个人的能力,作为当代大学生,社会要求的我们不是只能说而不能做的人才;三能人才标准更让我们清醒地认识到,实际动手能力无比重要。

从这次实物制作中,我的动手能力提高了。

感谢学院给了我们这次实践动手的机会,更感谢我们的郭老师教会了我们单片机相关知识。

本设计还可以扩展其他功能,比如记忆功能,即可以存储弹奏者所弹奏的音乐且保存,待弹奏完后播放给弹奏者听。

还可以做得更加娱乐一点,增加一些彩灯使彩灯随着音调变化而产生不同的样式。

参考文献

[1]谭浩强编著.C程序设计.北京:

清华大学出版社,2002.

[2]王东峰等.单片机C语言应用100例[M].电子工业出版社,2009.

[3]李平等.单片机入门与开发[M].机械工业出版社,2008.

[4]周润景等.Proteus在MCS-51&ARM7系统中的应用百例[M].电子工业出版社,200.

[5]冯博琴.微型计算机原理与接口技术.清华大学出版社,2004.

[6]张晓丽等.数据结构与算法.北京:

机械工业出版社,2002.

[7]黄鑫,马善农,赵永科.基于CPLD的电子琴研究与设计[J].科技广场,2007(5).

[8]赵辉,刘印华.PROTEL99电子线路CAD.北京邮电大学出版社,2008.

[9]求是科技.单片机典型模块设计实例导航.北京:

人民邮电出版社,2005.

[10]马忠梅,籍顺心等.单片机的C语言应用程序设计[H].北京:

北京航空航天大学出版社,2007.

附录1:

//名称:

可演奏的电子琴

//本例在矩阵键盘上模拟演奏电子琴,数码管显示按键号

#include

#defineucharunsignedchar

#defineuintunsignedint

//共阳极数码管编码

ucharcodeDSY_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,-

//各音符对应的延时

uintcodeTone_Delay_Table[]=

{64021,64103,64260,64400,64524,64580,64684,64777,

64820,64898,64968,65030,65058,65110,65157,65178};

sbitBEEP=p3^0;//蜂鸣器

ucharKeyNo;//按键序号

//-------------------------

//延时

//-------------------------

voidDelayMS(ucharx)

{

uchari;

while(x--)for(i=0;i<120;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2