《微机原理及应用》课程设计电子琴.docx

上传人:b****6 文档编号:5962744 上传时间:2023-01-02 格式:DOCX 页数:15 大小:208.40KB
下载 相关 举报
《微机原理及应用》课程设计电子琴.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

《微机原理及应用》课程设计电子琴

河北科技师范学院

《微机原理及应用》

课程设计说明书

 

题目:

电子琴

学院(系):

机电科学与工程

年级专业:

电气工程及其自动化1006

学号:

9310100724

学生姓名:

王雷涛

同组学生:

董允

指导教师:

刘士光

 

一、设计题目:

电子琴

二、设计目的:

(1)熟悉单片机的内部结构;

(2)掌握C51编程方法;

(3)掌握定时器与发声的关系;

(4)掌握交流蜂鸣器的发声原理和程序控制方法;

(5)掌握串行控制键盘键的识别方法;

(6)掌握声音频率的计算方法。

三、主要内容

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

综合应用了两项设计。

(1)能产生纯音,了解音调高低的控制方法。

(2)用键盘代替电子琴的键盘,控制演奏音乐。

(a)掌握串行控制键盘键的识别方法;

(b)根据键值控制发声。

(3)至少演奏一支乐曲。

四、音符频率与计数初值对照表:

音符

频率

计数处之

音符

频率

计数初值

音符

频率

计数初值

低音1

220

0xefa9

中音1

440

0xf7d8

高音1

880

0xfbef

低音2

247

0xf173

中音2

494

0xf8bd

高音2

988

0xfc62

低音3

277

0xf307

中音3

554

0xf987

高音3

1109

0xfcc7

低音4

294

0xf3c8

中音4

587

0xf9e4

高音4

1175

0xfcf6

低音5

330

0xf51e

中音5

659

0xfa90

高音5

1318

0xfd4b

低音7

370

0xf64c

中音6

740

0xfb29

高音6

1480

0xfd98

低音7

415

0xf75a

中音7

831

0xfbb1

高音7

1661

0xfddc

图1音符频率与计数初值对照表

五、定时/计数器原理

MCS-51单片机内部有2个16位的可编程定时/计数器,定时/计数器0由计数器TH0和TL0组成,定时/计数器1由计数器TH1和TL1组成,THX和TLX(X=0,1)分别为两个8位计数器,连接起来可组成16位计数器。

定时/计数器的工作方式由方式控制字TMOD选择,定时/计数器的启停由控制寄存器TCON控制,这两个寄存器均属于特殊功能寄存器。

定时/计数器的工作原理图如下:

其核心是一个加1计数器,加1计数器的脉冲有两个来源:

一个是外部脉冲源,另一个是系统的时钟振荡器。

当脉冲源为时钟振荡器(等间隔脉冲序列)时,由于计数器脉冲周期相同,所以脉冲数乘以脉冲周期就是定时时间,此时为定时功能。

当脉冲源为外部脉冲时,就是外部事件的计数器,此时为计数功能。

图2定时/计数器结构框图

5.1方式寄存器TMOD

D7D6D5D4D3D2D1D0

GATE

C/T

M1

M0

GATE

C/T

M1

M0

定时/计数器1方式字

定时/计数器0方式字

图35.1方式寄存器

GATE=0时,外部中断信号不参预控制,此时,只要控制位,TR0(TR1)为1时,定时/计数器就开始计数,而不管外部中断信号的电平为高还是为低。

C/T:

计数方式还是定时方式选择位,当为0时为定时方式,当为1时为计数方式。

M1和M0:

操作方式选择位。

对应4种操作方式,当系统发生复位时,TMOD各位为0。

操作方式选择如下图:

M1M0

操作方式

功能

00

方式0

13位计数器

01

方式1

16位计数器

10

方式2

可自动再装载的8位计数器

11

方式3

定时/计数器0分为两个独立计数器,

定时/计数器1为串行口波特率发生器

图4操作方式功能表

如:

若单片机晶振为12MHz,设定时/计数器1作定时器,以方式1工作,定时时间为5ms;定时/计数器0作计数器,以方式2工作,外界发生一次事件(一个负脉冲)即产生溢出。

解:

定时/计数器0的初值为:

X=28-1=255=FFH即:

FFH装入TH0,FFH装入TL0。

定时/计数器1的初值为:

X=216-5ms/1μs=EC78H即:

ECH装入TH1,78H装入TL1。

方式寄存器TMOD=00010110B=16H。

5.2启/停控制寄存器TCON

定时/计数器的控制寄存器也是一个8位的特殊功能寄存器,字节地址为88H,可以位寻址。

其格式如下:

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

TF1(TF0):

定时/计数器1(0)溢出标志。

当定时/计数器1(0)产生溢出时,由硬件置1,可向CPU发中断请求。

CPU响应中断后被硬件自动清0,也可以由程序查询后清0.

TR1(TR0):

定时/计数器1(0)启/停控制位,由软件置1或置0来启动或关闭定时/计数器1工作。

六、中断控制

6.1TCON用于中断请求

TF1

TF0

IE1

IT1

IE0

IT0

IT0:

外部中断请求触发方式。

当IT0=0时,低电平触发;当IT0=1时,下降沿触发。

IT1外部中断请求触发方式。

作用同IT0。

IE0:

外部中断请求标志位。

当发中断请求时,置1,否则置0。

IE1:

外部中断请求标志位。

作用同IE0。

TF0:

片内定时/计数器0的溢出请求标志位,定时/计数器0溢出时,置1,否则置0.

TF1:

片内定时/计数器1的溢出中断请求标志位,作用同TF0.

6.2中断允许寄存器IE

EA

ES

ET1

EX1

ET0

EX0

EA:

开中断标志位。

当EA=1时,CPU开中断;EA=0时,CPU关中断。

ES:

串行口的中断允许位。

当ES=1时,串行口允许中断;ES=0时,则不允许中断。

ET0(ET1):

定时/计数器0

(1)的中断允许位。

当ET0=1,定时/计数器0

(1)溢出,允许中断,否则不允许。

EX0(EX1):

̄͞INTO的中断允许位,当EX0=1时,允许中断,否则,不允许。

七、系统分析:

7.1系统组成

本系统由矩阵键盘、扬声器、LED显示管模块一起组合而成。

如下:

图7.1系统组成

7.2系统工作原理

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

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

编码键盘:

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

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

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

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

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

(1)去抖动:

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

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

(2)防串键:

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

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

(3)被按键识别:

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

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

(4)键码产生:

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

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

八、系统硬件设计

8.1系统硬件总体设计

本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符,最终还要完整的演唱一首歌曲。

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

利用AT89C52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。

8.2LED显示模块

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

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

图8.2矩阵扫描显示当前按键模块

8.3扬声器模块

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

图8.3矩阵扫描扬声器发出对应音符模块

8.4子系统(模块)电路图

8.4.1共阳极电路图

图8.4.1共阳极电路图

8.4.2上位开关

图8.4.2上位开关

9.系统软件设计

9.1系统软件总体设计

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

图9.1系统的软件流程图

 

9.2本系统总体代码如下:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitBEEP=P1^7;

sbitSDA=P1^0;

sbitCLK=P1^1;

sbitP12=P1^2;

sbitP13=P1^3;

uintflag,t0,n;

ucharm,q;

codeucharTable[8]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};//数码管显示数据

Code[music]={0xfbef,0xfbef,0xfd4b,0xfd4b,0xfd98,0xfd98,0xfd4b,0,0,0,0xfcf6,0xfcf6,0xfcc7,0xfcc7,0xfc62,0xfc62,0xfbef,0,0,0,0xfd4b,0xfd4b,0xfcf6,0xfcf6,0xfcc7,0xfcc7,0xfc62,0,0,0,0xfd4b,0,0};//乐谱

Codeuintfreq[21]={0xefa9,0xf173,0xf307,0xf3c8,0xf51e,0xf64c,0xf75a,0xf7d8,0xf8bd,0xf987,0xf9e4,0xfa90,0xfb29,0xfbb1,0xfbef,0xfc62,0xfcc7,0xfcf6,0xfd4b,0xfd98,0xfddc};//低中高音的频率

voiddelay()//延时函数

{

uinti;

for(i=0;i<5000;i++);

}

timer0()interrupt1//发声函数

{

TH0=t0/256;

TL0=t0%256;

BEEP=~BEEP;

}

timer1()interrupt3

{

n++;

TH1=0xd8;//定时50010*50=500

TL1=0xf0;//65536-10ms/1us=55536--->0xd8fo

if(n==50)

{n=0;

q++;

TR0=0;

TR1=0;

}

}

voidsend(uchara)//串并转换函数

{

ucharj;

for(j=0;j<8;j++)

{

if(_crol_(a,j)&0x80)

SDA=1;

elseSDA=0;

CLK=0;

CLK=1;

}

}

voidmain(void)//主函数

{

ucharkey8_count,com,i,a,j;

key8_count=0;

n=0;

TMOD=0x11;//定时/计数器0和定时/计数器1工作与方式1

EA=1;//cpu开中断

ET0=1;//定时/计数器0开中断

ET1=1;//定时/计数器1开中断

TH1=0xd8;//65536-10000=55536->0xd8f0

TL1=0xf0;//th1=0xd8

TR0=0;//thl=0xf0

TR1=0;

BEEP=1;

q=0;

m=0;

while

(1)

{

//歌曲自动循环播放

if(q>=33){

q=1;

m=0;

}

//自动播放音乐

if(key8_count==3&&q>m){

t0=music[m++];

if(t0==0){

delay();

q++;

}else{

TH0=t0/256;

TL0=t0%256;

TH1=0xd8;

TL1=0xf0;

TR0=1;

TR1=1;

}

}else

{

delay();

flag=0;

//快速扫描

a=0x00;

P13=1;

send(a);

if(P12==0)

{

m=q=0;

com=0xfe;

for(i=0;i<8;i++)

{

P13=1;

send(com);

if(P12==0){

flag=1;

P13=1;

send(Table[i]);

delay();

P13=0;

break;

}else

com=_crol_(com,1);

}

if(flag==1)

{

for(j=0;j<5;j++){

delay();

}

TR1=0;

TR0=0;

if(i==7)

{key8_count++;

key8_count=key8_count%4;

//由频率判断按键音或者播放歌曲

if(key8_count==3)

{

q++;

}

}

else

{

switch(key8_count)

{

case0:

t0=freq[i];

TH0=t0/256;

TL0=t0%256;

TH1=0xd8;

TL1=0xf0;

TR1=1;

TR0=1;break;

case1:

t0=freq[i+7];

TH0=t0/256;

TL0=t0%256;

TH1=0xd8;

TL1=0xf0;

TR1=1;

TR0=1;break;

case2:

t0=freq[i+14];

TH0=t0/256;

TL0=t0%256;

TH1=0xd8;

TL1=0xf0;

TR1=1;

TR0=1;break;

case3:

q++;break;

}

}

}

}

}

}

}

十、课程设计成果:

课程设计结果和要求一样,能实现

(1)能产生纯音;

(2)用键盘代替电子琴的键盘,控制演奏音乐,并根据键值控制发声;(3)演奏一支乐曲。

十一、个人总结:

通过两周的课程设计,我学到了很多,这些不仅仅局限于巩固复习了课本上知识点,还锻炼了自己分析问题以及动手实际操作的能力,将以前学过的零散的知识串到一起冰学以致用。

小组两个人长时间的讨论以及调试,本系统基本上实现了按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放对应的音符,同时单个程序也能播放歌曲,不足之处在于不能将按键和播放音乐的程序不能完美融合,只能在一定范围内满足按键或播放歌曲一种需要。

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

首先硬件方面,更加熟悉了51单片机的结构以及它的实用,基本了解了电子产品的开发流程和所要做的工作。

基本掌握了C51并设计了一个单片机最小系统。

通过C语言编程的过程,使我对C语言的编程能力和C51单片机的功能有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,键盘等,并且我学会了遇到问题要分析问题及解决问题的能力,加深了对所学理论知识的理解和运用。

我的动手能力得到了很大的提高,尤其是团队合作和沟通交流能力得到明显锻炼。

每次实际的经历都会给自己带来很多技能的提升,虽然现在的自己还仅仅是一名学生,可也就是学生的不断学习和创新,一个又一个创新和进步带来了生活的丰富,把握实践,成就将来,感谢老师的辛勤给我带来的收获,以后更加努力。

参考文献:

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

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

西安电子科技大学,2002年

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

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

 

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

当前位置:首页 > 外语学习 > 日语学习

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

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