可演奏的电子琴Word下载.docx

上传人:b****5 文档编号:20946112 上传时间:2023-01-26 格式:DOCX 页数:20 大小:566.06KB
下载 相关 举报
可演奏的电子琴Word下载.docx_第1页
第1页 / 共20页
可演奏的电子琴Word下载.docx_第2页
第2页 / 共20页
可演奏的电子琴Word下载.docx_第3页
第3页 / 共20页
可演奏的电子琴Word下载.docx_第4页
第4页 / 共20页
可演奏的电子琴Word下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

可演奏的电子琴Word下载.docx

《可演奏的电子琴Word下载.docx》由会员分享,可在线阅读,更多相关《可演奏的电子琴Word下载.docx(20页珍藏版)》请在冰豆网上搜索。

可演奏的电子琴Word下载.docx

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

//共阳数码管编码

UcharcodeDSY_Table[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,//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=;

i<

120;

i++);

}

//键盘矩阵扫描子程序

VoidKeys_Scan()

ucharTmp,k;

//高四位置0,放入四行

P1=0x0F;

DelayMS

(2);

//按键后将变成0000XXXX,X中1个为0,3个任为1

//下面的异或操作会把3个1变成0,唯一的0变成1

Tmp=P1^0x0F;

//判断按键发生于0~3列中哪一列

Switch(Tmp)

case1:

k=0;

break;

case2:

k=1;

case4:

k=2;

case8:

k=3;

default:

return;

//无键按下

//低四位置0,放入四列

P1=0XF0;

//按键后将变成XXXX0000,X中1个为0,3个任为1

//下面的表达式会将高四位移至低四位,并将其中唯一的0变为1,其余为0

Tmp=(P1>

>

4)^0X0F;

//对0~3行分别附加起始值0,4,8,12

k+=0;

k+=4;

k+=8;

k+=12;

KeyNo=k;

//定时器0中断程序,不同频率的声音由该中断产生

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)

//发送扫描码

If(P1!

=0XF0)//如果有键按下

Keys_Scan();

//扫描键盘矩阵

P0=DSY_Table[KeyNo];

//显示按键

TR0=1;

//启动定时器,根据KeyNo发音

Else

TR0=0;

//停止播放

第4章芯片资料

4.1AT89C51简介

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

外形及引脚排列如下图所示。

4.1.2管脚功能

VCC:

供电电压。

GND:

接地。

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

第5章其他硬件

5.1矩阵式键盘的识别和显示

5.1.1.矩阵式键盘的按键识别方法

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

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

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

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

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

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

其方法是:

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

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

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

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

(1)去抖动:

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

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

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

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

(2)防串键:

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

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

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

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

(3)被按键识别:

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

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

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

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

(4)键码产生:

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

用AT89C51的并行口P0接4×

4矩阵键盘,以P0.0-P0.3作输入线,以P0.4-P0.7作输出线;

在数码管上显示每个按键的“0-F”序号。

5.2LED数码管

图3-3LED数码管

【数码管的分类】

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);

按能显示多少个“8”可分为1位、2位、4位等等数码管;

按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

图3-3为2位数码管。

【数码管的驱动方式】

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

【习题中LED模块】

利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源。

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

5.3扬声器

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

第6章软件分析

6.1整体程序处理流程图

图4-1整体程序处理流程图

在电子琴开始工作时,系统默认电子琴处于弹奏状态,歌曲选择功能键的目的是赋予矩阵键盘第二功能,即对系统内置的歌曲进行选择,在放歌时能且只能通过弹奏/停止键来结束放歌,选歌时必须先按下歌曲选择功能键,在通过矩阵键盘来选择和切换曲目。

6.2I/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

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

0x71

高6LA

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

P2=DSY_CODE[k]

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

6.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÷

fr

式中,N是计数值;

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

fr是想要产生的频率。

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

T=65536-N=65536-fi÷

fr

例如:

设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。

fr=65536-÷

=65536-/fr

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

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

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

单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表4-1所示

表4-1音符频率表

音符

频率(HZ)

简谱码(T值)

休止

698

64820

低1DO

262

63628

784

64898

低2RE

294

63835

880

64968

低3M

330

64021

988

65030

低4FA

349

64103

1046

65058

392

64260

1175

65110

440

64400

1318

65157

494

64524

1397

65178

523

64580

1568

65217

587

64684

1760

65252

659

64777

高7SI

1967

65283

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

uintcodetab[]=

{

0,63628,63835,64021,64103,64260,64400,64524,

64580,64684,64777,64820,64898,64968,65030,

65058,65110,65157,65178,65217,65252,65283

音乐的音拍,一个节拍为单位(C调)(如表4-2所示)

表4-2曲调值表

曲调值

DELAY

调4/4

125ms

62ms

调3/4

187ms

94ms

调2/4

250ms

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

在这个程序中用到了两个定时/计数器来完成的。

其中T0用来产生音符频率,T1用来产生音拍。

图4-3音频播放流程图

6.4放歌子程序流程图

图4-2放歌子程序流程图

该程序实现的是单首曲目循环播放,无法在程序内部实现歌曲的切换。

只能通过外部功能键来实现曲目及功能的切换,是该电子琴设计的一个缺憾。

相信如果有更多的时间来进行调试和设计,这个设计会更加好。

第7章调试

7.1Proteus简介

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

该软件的特点:

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

②具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS-232动态仿真、C调试器、SPI调试器、键盘和LCD系统仿真的功能;

有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

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

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

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

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

7.2keil简介

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

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

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

当前位置:首页 > 农林牧渔 > 林学

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

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