单片机课程设计电子琴.docx

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

单片机课程设计电子琴.docx

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

单片机课程设计电子琴.docx

单片机课程设计电子琴

可演奏的电子琴

摘要:

随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。

我们都会抽空欣赏世界名曲,作为对精神的洗礼。

本论文设计一个基于单片机的简易电子琴。

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

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

本系统是以51系列单片机AT89C51为主控制器,附有矩阵键盘、LED显示管、扬声器组成。

系统完成显示输入信息、播放相应音符等基本功能。

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

关键词:

AT89C51,矩阵键盘,LED显示管,扬声器。

1引言

1.1目的和意义

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

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

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

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

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

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

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

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

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

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

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

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

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

1.2本系统主要研究内容

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

综合应用了两项设计。

(1)键盘矩阵识别。

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

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

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

1.3主要芯片简介

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

   AT89S51具有如下特点:

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

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

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

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

2系统分析

2.1系统组成

本系统只要以51单片机为主控核心,与矩阵键盘、扬声器、LED显示管模块一起组合而成。

具体如下:

2.2系统工作原理

本系统扫描键盘矩阵、显示按键、扬声器发出对应音符。

4X4行列式键盘识别及显示原理如下:

组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。

目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。

编码键盘:

键盘本身带有实现接口主要功能所需的硬件电路。

不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII码)送往CPU。

所以,编码键盘接口简单、使用方便。

但由于硬件电路较复杂,因而价格较贵。

非编码键盘:

键盘只简单地提供按键开关的行列矩阵。

有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。

目前微机系统中,一般为了降低成本大多数采用非编码键盘。

键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。

(1)去抖动:

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

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

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

去抖问

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

(2)防串键:

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

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

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

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

(3)被按键识别:

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

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

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

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

(4)键码产生:

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

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

总体电路具体原理如下:

3系统硬件设计

3.1系统硬件总体设计

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

硬件总体设计图如下:

3.2子系统(模块)一

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

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

3.3子系统(模块)二

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

3.4子系统(模块)三

矩阵键盘模块图如下:

4系统软件设计

4.1系统软件总体设计

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

4.2子系统一

七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。

LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。

本系统按键显示模块软件流程图如下:

4.3子系统二

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

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

   计数脉冲值与频率的关系式(如式2-1所示)是:

                        N=fi÷2÷fr                        2-1

式中,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-÷2÷fr=65536-/fr

   低音DO的T=65536-/262=63627

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

   高音DO的T=65536-/1046=65059

本系统按键发出对应音符模块软件流程图如下:

5系统使用说明

5.1系统安装及配置说明

5.1.1系统运行环境

WINDOWSXPPROTEUS7.1SP2Keiluv32.12

5.1.2系统安装及配置

安装Protues和keiluVsision3。

5.2系统操作说明 

(1)Keil下编译,产生目标HEX文件,Proteus下ProgrammeFiles选择产生的HEX文件,点击运行开始模拟。

(2)开启本系统,数码管显示“-”。

(3)按任意键盘,数码管显示所按下的键盘数,扬声器发出相应的音符。

6结论

通过这次课程设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。

经过我长时间的设计及调试,本系统基本能实现按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放对应的音符。

但由于仿真系统原因,本设计音频效果不是很好。

不足之处有:

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

可通过改进键盘识别模块和发生模块来增加其复杂度2.音量不可调。

我的综合设计主要涉及硬件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。

首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。

基本掌握了Protel99SE原理图的方法,并设计了一个单片机最小系统。

通过开发板的设计和硬件搭建的过程,使我对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,键盘等。

并且我学会了分析问题解决问题的能力,加深了对所学理论知识的理解和运用。

我的动手能力得到了很大的提高,创新意识得到了锻炼。

参考文献

[1]彭伟.单片机C语言程序设计实训100例.电子工业出版社.2009年

[2]吴运昌.模拟电子线路基础.广州:

华南理工大学出版社,2004年

[3]阎石.数字电子技术基础.北京:

高等教育出版社,1997年

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

机械工业出版社,2002年

[5]马忠梅等.ARM&Linux嵌入式系统教程.北京:

北京航空航天大学出版社,2004年

[6]李建忠.单片机原理及应用.西安:

西安电子科技大学,2002年

[7]韩志军等.单片机应用系统设计[M].机械工业出版社,2004

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

[9]马忠梅等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2006

[10]刘树中,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现[J].微计算机信息,2007

附录

本系统总体代码如下:

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeDSY_Table[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,

0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF};

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;i++);

}

voidKeys_Scan()

{

ucharTmp,k;

P1=0x0F;

DelayMS

(2);

Tmp=P1^0x0F;

switch(Tmp)

{

case1:

k=0;break;

case2:

k=1;break;

case4:

k=2;break;

case8:

k=3;break;

default:

return;

}

P1=0xF0;

DelayMS

(2);

Tmp=(P1>>4)^0x0F;

switch(Tmp)

{

case1:

k+=0;break;

case2:

k+=4;break;

case4:

k+=8;break;

case8:

k+=12;break;

default:

return;

}

KeyNo=k;

}

voidplay_Tone()interrupt1

{

TH0=Tone_Delay_Table[KeyNo]/256;

TL0=Tone_Delay_Table[KeyNo]%256;

BEEP=~BEEP;

}

voidmain()

{

P0=0xBF;

TMOD=0x01;

IE=0x82;

while

(1)

{

P1=0xF0;

if(P1!

=0xF0)

{

Keys_Scan();

P0=DSY_Table[KeyNo];

TR0=1;

}

else

{

TR0=0;

}

DelayMS

(2);

}

}

摘要1

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

当前位置:首页 > 初中教育 > 理化生

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

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