单片机简易电子琴单片机课程设计Word格式.docx

上传人:b****5 文档编号:20431073 上传时间:2023-01-22 格式:DOCX 页数:17 大小:225.97KB
下载 相关 举报
单片机简易电子琴单片机课程设计Word格式.docx_第1页
第1页 / 共17页
单片机简易电子琴单片机课程设计Word格式.docx_第2页
第2页 / 共17页
单片机简易电子琴单片机课程设计Word格式.docx_第3页
第3页 / 共17页
单片机简易电子琴单片机课程设计Word格式.docx_第4页
第4页 / 共17页
单片机简易电子琴单片机课程设计Word格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机简易电子琴单片机课程设计Word格式.docx

《单片机简易电子琴单片机课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《单片机简易电子琴单片机课程设计Word格式.docx(17页珍藏版)》请在冰豆网上搜索。

单片机简易电子琴单片机课程设计Word格式.docx

0.3

总 

成 

教研室审核意见:

教研室主任签字:

教学系审核意见:

主任签字:

日 

摘要

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

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

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

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

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

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

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

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

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

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

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

关键词:

AT89C52芯片;

8255A芯片;

蜂鸣器;

矩阵键盘;

音节 

目录

摘要 

-1-

1概述 

-2-

1.1电子琴技术状况 

1.2任务与要求 

-3-

1.3主要芯片简介 

1.3.1AT89C52芯片介绍 

1.3.28255A芯片介绍 

-4-

2系统总体方案及硬件设计 

-5-

2.1系统总体方案 

2.2总体硬件组成框图 

-6-

2.2.1子系统模块一 

-7-

2.2.2子系统模块二 

2.2.3子系统模块三 

-8-

2.2.4AT89C51复位模块 

-9-

2.2.5AT89C52晶振模块 

3软件设计 

-10-

3.1软件设计总流程图流程 

3.2软件程序 

-11-

4课程设计体会 

5致谢 

-13-

参考文献 

-14-

附1 

源程序代码 

-15-

附2 

仪器清单 

-21-

附3 

系统原理图 

-22-

1概述

1.1电子琴技术状况

本次设计提出了用AT89C52单片机为核心控制元件,设计一个简易的电子琴.本方案以AT89C52单片机作为主控核心,与键盘、蜂鸣器等模块组成核心主控制模块在主控模块上设有4*4个按键和蜂鸣器。

根据使用者的操作随意弹奏想要表达的音乐。

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

1.2任务与要求

实现电子琴发声控制系统;

要求电路实现如下功能:

4*4键盘组成16个按钮,可以随意弹奏想要表达的音乐。

设置一个开始键,一个结束键,一个重复键,通过按重复键可以完成之前音乐的重放。

说明:

单片机的工作时钟频率为12MHz。

1.3主要芯片简介

1.3.1AT89C52芯片介绍

AT89C52(图1-1)为8位低功耗单片机,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。

功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和GND(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)定义为双向8位三态I/O接口,它既可以作为通用I/O接口,又可作为外部扩展时的数据总线及低8位地址总线的分时复用口;

P1端口(1~8脚)定义为准双向I/O接口,内部具有上拉电阻;

P2端口(21~28脚)定义为8位准双向I/O接口,内部具有上拉电阻,可直接连接外部I/O设备,同时与地址高8位复用;

P3端口(10~17)定义为8位准双向I/O接口,内部具有上拉电阻,它是双功能复用口,每个引脚可驱动4个TTL负载。

图1-1 

AT89C52 

图1-2 

8255A芯片

1.3.28255A芯片介绍

8255A(图1-2)是一片使用单一+5V电源的40脚双列直插式大规模集成电路。

它的通用性强,使用灵活,通过它CPU可直接与外设相连接。

8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种:

方式0:

基本的输入输出方式,即无须联络就可以直接进行的I/O方式。

其中A、B、C口的高四位或低四位可分别设置成输入或输出。

方式1:

选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.

方式2:

双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。

8255A是一个并行输入、输出器件,具有24个可编程设置的I/O口,包括3组8位的I/O为PA口、PB口、PC口,又可分为2组12位的I/O口:

A组包括A口及C口高4位,B组包括B口及C组的低4位。

2系统总体方案及硬件设计

本系统采用单片机AT89C52为电子琴的控制核心,系统主要包括按键弹奏模块、音乐播放模块。

下面对各模块的设计逐一进行论证比较。

总电路图见附页二。

2.1系统总体方案

2.1.1定时/计数器的设计和状态字定义:

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

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

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

利用AT89C52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系式是:

N=fi÷

fr,式中,N是计数值;

fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);

fr是想要产生的频率。

其计数初值T的求法如下:

T=65536-N=65536-fi÷

fr

例如:

设K=65536,fi=1MHz,求中音DO(261Hz)。

fr=65536-1000000÷

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

单片机12MHZ晶振,中音符与计数T0相关的计数值如表所示:

音符

频率(HZ)

简谱码(T值)

中1 

DO

262

63628

中5SO

740

64860

中2

RE

277

63731

中6LA

784

64898

中3

MI 

294

63835

中7XI

831

64934

中4

FA

311

63928

高1DO

880

64968

用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。

为了输出合适的方波,首先应该知道音符与频率的关系。

2.2总体硬件组成框图

按键控制模块

键盘弹奏

按键发声

蜂鸣器

中心控制模块

AT89C52

停止键

开始键

播放键

音乐播放

图2-1 

总体硬件组成框图

实验中每按下一个琴键,单片机能够检测到键盘的按键,并根据按键的位置,通过程序来控制,使喇叭发出不同频率(音调)的声音,声音延迟一段时间,等到按键放开之后,声音停止。

然后再继续扫描,看是否有键按下。

如此循环,即可实现基本的琴键功能。

2.2.1子系统模块一

琴键模块如图2-2所示,利用AT89C52单片机的P0端口及P2端口与8255连接。

图2-2 

键盘电路图

2.2.2子系统模块二

播放模块是蜂鸣器构成。

蜂鸣器是一种一体化结构的电子讯响器,采用直流

图2-3 

发声模块电路图

电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子

设备、电话机、定时器等电子产品中作发声器件。

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。

而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。

2.2.3子系统模块三

电子琴设有8个按键,分别代表8个音符,包括中音段的全部音符。

通过软硬件设计,按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。

然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现各种琴键的声音。

矩阵键盘模块图如下:

图2-4 

矩阵键盘模块

2.2.4AT89C51复位模块

此复位电路是上电/按键复位,按下按键,电源对电容C充电,使RST端快速到达高电平;

松开按键,电容向芯片的内阻放电,恢复为低电平,从而使单片机可靠复位,既可上电复位,又可按键复位。

图2-5 

复位电路

2.2.5AT89C52晶振模块

XTAL1脚为片内振荡电路的输入端,XTAL2脚为片内振荡电路的输入端。

8952的时钟有两种方式:

一种是片内时钟振荡方式,但需在18和19脚外接石英晶体(频率为1.2~12MHZ)和振荡电容,振荡电容值一般取10~30pf,典型值为30pf;

另一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入。

下面为方式一电路图。

图2-6 

晶振模块

3软件设计

软件是该电子琴控制系统的重要组成部分,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。

KEILC51µ

Vision2集成开发环境是KEILSoftware,Inc/KEILelectronikGmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。

3.1软件设计总流程图流程

N

图3-1 

软件设计总流程图

3.2软件程序

本系统的上位机软件主要是编辑电子琴播放状态的内容,在设计中采用C语言编写了电子琴控制系统控制和播放内容的程序。

见附录一。

4课程设计体会

微型计算机的出现和大量使用将人类社会带入一个新的时代,单片微型计算机(简称单片机)在其中扮演着十分重要的角色。

虽然它没有常见的PC那样大的体积和重量,不会在办公桌或控制台上占据一个显要的位置,但它就像小小的螺丝钉一样,镶嵌在人们工作、生活中需要计算、控制、测量等智能活动的各个角落。

自20世纪70年代问世以来,单片机以其体积小、可靠性高、控制功能强、使用方便、性能价格比高、容易产品化等特点,在智能仪表、机电一体化、实时控制、分布式多机系统、家用电器等各个领域得到了广泛应用,对各个行业的技术改造和产品的更新换代起着重要的推动作用,对人们生活质量的提高产生了深刻的影响。

作为21世纪的工科大学生,学好单片机,一方面可以加深对计算机原理和结构的认识,另一方面也为自身在专业上的深入发展构筑了一个很好的平台其重要性怎么强调都不为过。

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

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

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

思考:

可弹奏的音符数较少,只能在一定范围内满足用户需要。

可通过改进键盘识别模块和发生模块来增加其复杂度。

音色不可调,只有一种波形的频率输出。

可以在外围电路设计滤波电路,接在不同的输出口,通过软件实现不同端口的输出,从而接入不同的滤波电路,输出不同的波形,从而获得不一样的音色。

不能以和弦形式演奏,只能单个键按下输出单个的音阶。

这次课程设计论文能够得以顺利完成,是所有曾经指导过我的老师,帮助过我的同学,帮助和鼓励的结果。

我要在这里对他们表示深深的谢意!

首先,要特别感谢我的指导老师——谭周文老师。

谭老师在我设计出现问题时给予我耐心的帮助,为我排忧解难,为我的课程设计的完成提供了一定的帮助指导。

老师的严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,朴实无华、平易近人的人格魅力对我影响深远。

不仅使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。

其次,要感谢所有我们通控系的任课老师,老师们教会我的不仅仅是专业知识,更多的是对待学习、对待生活的态度。

最后对老师,同学和家人再次致以我最衷心的感谢!

教导过我的老师,你们的人格魅力永记我心间。

身边的同学和朋友,有你们,我的大学才算完整。

寝室的好友,你们的天赋犹如上天恩赐,有了你们我的生活更加精彩。

5致谢

本次单片机课程设计历时两个星期,在这了两个星期中我们深深体会到了课程设计的苦与乐。

当程序调试出现问题时,我们就一步步调试,一步步查看,修改,这过程确实很枯燥,也很辛苦,但是,当程序调试成功并且能够下载到单片机中运行时,有说不出的高兴,感觉我们所有的付出都是值得的。

总的来说,这次课程设计,让我们领悟到理论与实践结合的重要性。

懂得拥有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从中得到收获,从而提高自己的实际动手能力和独立思考的能力,做到全面发展,这样才能真正为社会服务。

因为这是第一次做单片机课程设计,所以我们遇到过各种各样的问题,面对这些难题,我们没有妥协,以求学的心态去解决,从中发现了自己的不足之处,正是这些难题让我们看到了自己的不足,对以前所学过的知识理解得不够深刻,基础掌握得不够牢固。

只学到了表面的知识,并没有深入了解知识的内涵。

所以很庆幸有这次课程设计,它教会了我们到底要学些什么知识,给我们以后的学习指明了一个方向,促使我们更加努力的学习,补充自己的不足。

这次课程设计终于顺利完成了,其中离不开老师的耐心指导和同学们的热心帮助,在此表示衷心的感谢,另外特别感谢指导老师谭老师的耐心指导,他的讲解让我们有豁然开朗的感觉,让我们得以顺利完成这次课程设计。

参考文献

[1]余发山、王福忠.单片机原理及应用技术.中国矿业大学出版社.2008年6月第1版

[2]杨凌霄.微型计算机原理与应用,中国矿业大学出版社.2008年8月第一版

[3]康华光.电子技术基础(数字部分),高等教育出版社.第五版

[4]邓红.单片机实验与应用设计教程 

出版日期:

2004年05月第1版

[5]以及其他的网上资源

源程序代码

#include<

reg52.h>

//头文件

absacc.h>

//8255引脚定义文件

#defineuintunsignedint 

//宏定义

#defineucharunsignedchar

#definePA 

XBYTE[0xD0FF] 

//8255引脚地址定义

#definePB 

XBYTE[0xD2FF]

#definePC 

XBYTE[0xD4FF]

#defineCON 

XBYTE[0xD6FF]

uintw,z,key,qidong,num1,num0,count=0,changge;

sbitbeep=P3^3;

//蜂鸣器位

uinttemp[42]={0};

//保存key值数组

uinta[]={64580,64684,64777,64820,64898,64968,65030,65058};

//八个音节

voiddelay(uint);

//延时函数

voidjianpan();

//键盘扫描函数

voidkaishi();

//开始键

voidchongfu();

main()

CON=0X80;

//8255方式设定

TMOD=0X01;

//定时器0设置

EA=1;

ET0=1;

PA=0XFF;

//关数码管

EX0=1;

//外部中断0设置

IT0=1;

PT0=1;

//定时器0优先

while

(1)

kaishi();

jianpan();

}

}

voidjianpan()

if(qidong==1)

PC=0XF7;

//第一排

w=PC;

//读PC口

w=w&

0xf0;

//获取最高位

if(w!

=0xf0)

{

delay(10);

switch(w)

case0xe7:

key=0;

break;

case0xd7:

key=1;

case0xb7:

key=2;

case0x77:

key=3;

beep=~beep;

TH0=a[key]/256;

TL0=a[key]%256;

TR0=1;

while(w!

=0xf0) 

//松手判断

TR0=0;

temp[count++]=a[key];

PC=0XFB;

//第二排

case0xeb:

key=4;

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

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1