APP下载

基于Proteus和Keil的单片机演奏乐曲的仿真

2014-09-23符晓玲

电子设计工程 2014年14期
关键词:昌吉原理图音符

王 超,符晓玲

(昌吉学院 物理系,新疆 昌吉 831100)

基于Proteus和Keil的单片机演奏乐曲的仿真

王 超,符晓玲

(昌吉学院 物理系,新疆 昌吉 831100)

针对乐曲演奏在单片机实践教学中实现的不足,介绍了基于Proteus和Keil联调的单片机演奏乐曲的设计方法,通过对乐谱的音符和节拍进行编码,实现了乐曲演奏的功能。仿真结果表明:该方法电路简单、调试方便,只需简单的修改程序就可实现其它歌曲的演奏。

Proteus;Keil;单片机;乐曲

在用单片机实现乐曲演奏的课程实践教学中,多是通过开发板与仿真器或者实验箱来完成,这种调试过程由于硬件设备固定,难以有更多的扩展和创新,借助Proteus和Keil软件可极大的克服上述不足。通过搭建虚拟仿真平台,使用虚拟测试仪器,根据需要可随时更换原器件和修改程序,完成乐曲播放的功能。

1 Proteus仿真软件及Keil软件简介

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC、AVR、ARM、8086和MSP430等,近两年,又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器[1-2]。

Keil是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,是优秀的第三方软件,它提供了丰富的库函数和功能强大的开发调试工具,是众多单片机应用开发软件中最优秀的软件之一[3-4]。

Proteus仿真软件由3种调试方法,分别是:扩展名为HEX文件、源代码级调试和KeilC 与Proteus联合调试3种。

在联合调试方式中,Keil中执行程序,在Proteus原理图中显示变化情况,两种软件分工合作、各负其责,可充分发挥各自的优势。

2 仿真举例

以单片机控制音乐“南泥湾”为例,详细介绍歌曲演奏原理和仿真调试过程。

2.1 单片机实现歌曲演奏的原理

单片机演奏音乐基本都是单音频率,不包含相应幅度的谐波频率,也就是说不能像电子琴那样能演奏出各种音色的声音,音调和节拍是单片机奏乐的两个重要概念,音调表示了一个音符唱多高的频率,节拍表示一个音符唱多长的时间。只需要用程序控制单片机的某个I/O口,按照一定频率输出对应的矩形波形,就可实现歌曲的演奏[5]。

2.1.1 T值计算方法

利用T=65 536-Fi÷2÷Fr就可以计算出给定频率下的定时器计数初值,其中,Fi为单片机晶振频率,一般取12 MHz,Fr为要产生的频率。对51单片机来说,可以使用其提供的两个定时器T0,T1,常将定时器工作模式设置为方式1,可以实现的最大计数为65 636。

表1 C调音符频率与T值对照表Tab. 1 Table of note frequency and T values for C tune

2.1.2 不同音符T值得求取

2.1.3 确定节拍

节拍表示一个音符唱多长时间,在一张乐谱中,经常会有这样的表达,1=C(4/4),1=E(3/4)……,这里C、E表示乐谱的曲调,4/4表示以四分音符为节拍,每小节有四拍,假设1/4拍为延时为1DELAY,则1拍为4个DELAY,只要求得1/4拍的DELAY,其余的节拍就是它的倍数[6-7]。在软件编程中,倍数就是延时循环的次数。

2.2 演奏歌曲的T值及节拍确定

2.2.1 T值得求取

南泥湾,为1=E(2/4),即E调,以四分音符为节拍,每小节有二拍。该歌曲为E调,要在C调对应音符中向后顺推4位即可确定此歌曲的曲调,比如,本歌曲中低音5的T值可在C调表中低音5向后顺推4位,即为64 524(FC0CH),其余音符以此类推,按照低音、中音和高音的顺序可以列出T值表,如表2所示。

表2 T值表Tab. 2 Table of T values

2.2.2 确定节拍

根据歌谱确定音符的节拍。本例是2/4拍,该调1/4拍的时间是125 ms,因此每个音符发音时间的长短是125毫秒的整数倍,但是采用125 ms听起来歌曲与传统唱法相比显得快,所以选为187 ms,延长符“.”和“-”一般要与前面的发音一致,根据简谱码和音符的节拍确定发音的计数值放在程序的TABLE中。简谱码(音符)为高四位,节拍数为低四位。本例中第一个音符“5”占一拍,用62H表示,6表示低音“5”在T值表中的顺序,2代表2/4拍,00表示歌曲结束。节拍与节拍码对照表如表3所示。

表3 节拍与节拍码对照表Tab. 3 Comparison table of beats and beats code

建立的简谱码表如下所示:

2.2.3 单片机仿真

1)绘制原理图

打开proteus软件,在文件/新建设计/选择模板下绘制如图1所示的电路原理图。

2)KeilC 与Proteus调试前的设置步骤

步骤1 安装vdmagdi.exe链接文件

图1 电路原理图Fig.1 Schematic diagram of circult

步骤2 启动Proteus,打开仿真工程文件,单击“调试”下的“使用远程调试监控”

步骤3 调出编辑AT89C51属性对话框,将其程序文件设置为空

步骤4 打开Keil C,建立工程,选中“Target 1”,单击右键,选择“Options for Target ‘Target 1’”,在此对话框下将“Use”单选按钮选中,将其后的内容选择为“Proteus VSM Simulator”

步骤5 单击“Settings”按钮,将“Host”设置为127.0.0.1。

3)Keil C 与 Proteus联合调试

图2 Keil与Proteus联调界面Fig.2 Joint debugging interface for Keil and Proteus

首先启动Proteus软件和Keil C软件,进行相应的设置后,在Keil C软件下对软件进行编译调试运行后的界面如图2所示。Keil C调试系统初始启动的调试界面的代码窗口为汇编、C51和机器码的混合体,通过单击“View”“Disassembly Windows”切换为C51代码窗口,两种调试界面各有优势,通过混合体更易观察每条指令的汇编代码、地址分配和指令细节,而C51代码窗口则更容易观察程序调试的过程。

在程序运行时可能需要观察某个量的值,可在窗口下面的“Watch #1”、“Watch #2”等窗口中将要观察的量输入。如此窗口没打开时,可选“View”“Watch & Call stack window”打开观察窗口。输入变量的方法是,选中窗口中的“type F2 to edit”,按F2,即可输入,它后面就是该变量的值。变量的值也是可以手动改的,同样的方法,选要改的值,按F2,输入想设的值即可。若要观察某个地址单元的内容是可以在“存储窗口”完成,选“View”“Memory windows”,即可打开存储器窗口,如图3所示,要观察简谱码的值,从“Watch #1”窗口中按F2键输入TABLE和TABLE1,其后就显示了它的地址值,在“存储窗Address”后输入“C:0x007D ”即可观察简谱码的值。

图3 观察窗口Fig.3 Observation window

在调试过程中,软硬件不可能一次性正确,需要使用单步运行键来检查错误,如果要观察每步运行情况,可以按下F10键和F11键,F10键是跳出函数键,F11键是单步运行键,两者结合使用可加快程序调试进程。另外,当涉及到延时程序时,跟踪太慢可以让它“运行到光标处”。当遇到复杂程序时,可以设断点,程序每运行到断点处,就会停下来,此时可以观察程序运行到此处的值,方便检查错误。

在Proteus原理图仿真画面中,也可以打开寄存器窗口、特殊寄存器窗口和内部存储器窗口,以便观察程序的运行结果,借助虚拟示波器,可以观察到通过P3.7I/O输出的频率的波形,如图4所示。

2.3 软件流程图

软件由主程序和中断程序两部分组成,中断程序根据查到的T值更改定时器的设定值,从而改变了音符的频率,节拍的延时由基本的循环时间187 ms确定,只需要根据查找到的节拍确定循环次数即可。

图4 Proteus仿真调试界面Fig.4 Debugging interface of Proteus simulation

图5 程序流程图Fig.5 Flow chart of the program

3 结束语

采用Proteus和Keil联调的方法具有调试方便,效果明显,借助调试手段可直观查看程序执行过程,只需要将程序中的简谱码表和T值表更换就能实现任意一首歌曲的播放,具有通用性强可移植性等特点。

[1] 杜树春.基于Proteus和KeilC51的单片机设计与仿真[M].北京:电子工业出版社,2012.

[2] 邱少嗳. Proteus 仿真软件在单片机教学中的应用[J].电子制作,2014(1):120-121.

QIU Shao-yuan.Applicationof proteus software in MCU teaching[J]. Practical Electronics,2014(1):120-121.

[3] 张新. 51单片机应用开发25例[M].北京:电子工业出版社,2013.

[4] 王超,杨莲红,杨奇. 基于 Multisim 10 和 Keil C51 的单片机仿真[J].高师理科学刊,2012,32(2):46-48.

WANG Chao,YANG Lian-hong,YANG Qi.Simulation of MCU based on multisim 10 and keil c51[J].Journal of Science of Teachers' College and University,2012,32(2):46-48.

[5] 于永泉. 单片机唱歌任我行[J].电子元器件应用,2011(9):36-39.

YU Yong -quan. SCM singing random[J]. Practical Electronics,2011(9):36-39.

[6] 远飞. 基于单片机的音乐播放器的仿真与制作[J].电子元器件应用,2010,12(12):47-49.

YUAN Fei.Simulation and production of music player based on MCU[J]. Electronic Component & Device Applications,2010,12(12):47-49.

[7] 胡继胜. 单片机音乐编程设计与仿真[J].微计算机信息,2010,26(12-2):95-97.

HU Ji-sheng.Music program design and simulation based on MCU[J]. Microcomputer Information. 2010,26(12-2),95-97.

Simulation of MCU’s music playing based on Proteus and Keil

WANG Chao,FU Xiao-ling
(Department of Physics,Changji University,Changji 831100,China)

According to shortage of the music playing in MCU practical teaching, the design method of MCU’s music playing based on the joint of Proteus and Keil is introduced, and it can achieve music playing function by the coding of notes and beats of music. The result of simulation shows that the method of design is simple, easily debugging and has achieved other song’s playing for simple modification program.

Proteus;Keil ;MCU ; music

TN710.9

A

1674-6236(2014)14-0103-04

2014-02-09 稿件编号:201402018

教育部“本科教学工程”地方高校专业综合改革试点项目(ZG0550);昌吉学院科研基金资助项目(2011SSQD019)

王 超(1979—),男,新疆昌吉人,硕士,讲师。研究方向:自动化技术、计算机仿真等。

猜你喜欢

昌吉原理图音符
适宜在昌吉春麦区种植的早熟高产春小麦品种筛选
浅谈STM32核心板原理图设计
电路原理图自动布图系统的设计与实现
基于Protel DXP 2004层次原理图的设计
美妙音符
春天的音符
以十九大精神为指引 展现新作为新气象,开创昌吉学院发展新局面
在昌吉,我们品尝到了丰收的味道——新疆昌吉汉和7S店无人机飞防作业小记
关于EDA教学中Quartus II原理图输入法的探讨
Five Major Religions and Its Influence on People’s Behavior