单片机课程设计—电子音调发生器

更新时间:2023-04-04 22:15:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机课程设计报告

题目:电子音调发生器

指导老师:付文秀

李昆鹏 08223010

完成日期:2010年12月17日

单片机课程设计—电子音调发生器

- 1 -

一、设计要求

1. 利用开关K0~K7及蜂鸣器设计电子音调发生器,通过单片机P1.7输出不同频率的脉冲信号驱动蜂鸣器发出不同频率的音调。拨动开关K0~K7,蜂鸣器依次发出1234567i 音调;

2. 编程实现两首音乐,并可进行选择播放;

3. 编写程序实现当拨打开关时,数码管显示当前音符。

二、设计目的

了解计算机发出不同音调的编程方法。

三、设计原理

1. 音节由不同频率的方波产生,音节与频率的关系如表(1)所示。要产生音频方波,只要计算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器及时此半周期,每当计时到后就将输出方波的I/O 反相,然后重复计时次半周期时间再对I/O 反相,就可在I/O 脚得到此频率的方波。在ZKS-03试验仪上,产生方波的I/O 脚选用P1.7,通过跳线选择器JP1将P87C52X2的P1.7与蜂鸣器的驱动电路相连,这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。

2. 音乐的节拍是由延时实现的,如果1拍的时间为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时实现基本延时时间,节拍值只能是它的整数倍。

3. 每个音节相应的定时器初值X 可按下法计算:

16

1112()2f 2X fosc

*=*- 即:16

242

fosc

X f

=

-

*

其中,f 是音调频率。当晶振fosc=11.0592MHz 时,音节“1”相应的定时器初值为x ,则可得到x=63777D=F921H ,其它的可同样求得。

表(1) 音节与频率的关系

音调 频率(Hz) X(HEX) 音调 频率(Hz) X(HEX) 1 262 F921 5 392 FB68 2 294 F9E1 6 440 FBE9 3

330

FA8C

7

494

FC5B

单片机课程设计—电子音调发生器

4 349 FAD8 i 523 FC8F

四、硬件电路设计及描述

按键发音电路如下图所示:

实验电路图

电路描述:在ZKS-03实验仪上,将开关通过缓冲器74LS244与单片机的P0口相连,片选线选择CS1,相应的地址为F100。产生的方波由P1.7口输出,通过跳线与蜂鸣器的驱动电路相连,随着方波频率的变化,便可产生不同频率的音调。

五、设计方案及思路

在设计中,先分别编写出按键发音程序和选择播放音乐程序,利用转移命令进行控制,将两程序合成完整的程序,再适当的精简结构,使程序更加简洁。在完成这两项基本功能后,添加进数码显示程序。

六、软件设计流程及描述

- 2 -

单片机课程设计—电子音调发生器

程序设计流程图

七、实验源程序及注释

----------单片机课程设计----------

----------电子音调发生器----------

ORG 4000H

LJMP START

ORG 400BH ;计时器T0中断程序入口地址 LJMP INT_T0

ORG 4030H;

- 3 -

单片机课程设计—电子音调发生器

START:

SETB P3.1

SETB P3.2

SETB P1.4

SETB P1.5

SETB P1.6

CLR P1.3 ;用P1.3口驱动相应数码管显示音调 MOV TMOD,#01H ;T0方式1

CLR TR0 ;关T0

SETB ET0

SETB EA ;开中断

;按键查询程序

KEYS:

JNB P3.1,YINYUE

JNB P3.2,YINYUE ;音乐1,2控制开关开则转移到音乐程序 MOV R7,#0 ;无音乐时默认节拍为0

MOV DPTR, #0F100H ;开关输入口地址

MOVX A, @DPTR ;读开关状态

MOV B, A ;存开关结果

LCALL DL10 ;延时10MS

MOVX A, @DPTR ; 再读开关

CJNE A, B, KEYS ;是否相同,不同重新读取

MOV R0,#08H ;置计数器初值,用于查找音调

MOV A,#01H ;置比较初值 00000001B

KEY:

ANL A,B ;与开关结果相与

JZ SOUND ;结果为零则跳转到发声

RL A ;不为零则改变比较值

- 4 -

单片机课程设计—电子音调发生器

DJNZ R0,KEY ;重新比较

CLR TR0 ;开关未拨,不发声

SJMP KEYS;

SOUND:

DEC R0;

MOV A,R0;

ADD A,R0;(R0-1)*2 ;产生表格偏移量

MOV R0,A;

;按键发音程序

MOV A,R0

MOV DPTR,#PINLV ;置表格起始值

MOVC A,@A+DPTR; ;查表

MOV 21H,A ;查表结果暂存于21H单元

MOV A,R0

INC A ;A+1

MOVC A,@A+DPTR;

MOV 20H,A ;查表,将结果存入地址20H

SETB TR0 ;T0允许计时

LCALL DELAY ;调用节拍延时子程序;

JNB P3.1,BEAT

JNB P3.2,BEAT ;如果是音乐程序则跳到节拍程序 SJMP KEYS ;不是则跳到按键查询程序

INT_T0:

CLR TR0 ;T0关闭计时

CPL P1.7 ;产生波形

MOV TH0,21H

MOV TL0,20H ;重载定时器

- 5 -

单片机课程设计—电子音调发生器

SETB TR0 ;T0允许计时

RETI ;中断返回

;音乐程序

YINYUE:

MOV 35H,#00H ;产生表格偏移量

MUSIC:

MOV A,35H ;设置偏移初值

JNB P3.2,MUSIC2 ;音乐2开关开则跳到音乐2播放程序 AJMP MUSIC1 ;否则跳到音乐1播放程序

MUSIC2: MOV DPTR,#TABLE2 ;置表格2起始值

AJMP MUSIC3 ;跳过1

MUSIC1: MOV DPTR,#TABLE1 ;置表格1起始值

MUSIC3: MOVC A,@A+DPTR ; 查表

JZ STOP ;为0则跳到停止

MOV R1,A ;存取值

ANL A,#0FH ;取低四位

MOV R7,A ;存到节拍中

MOV A,R1 ;再取取值

SWAP A ;交换高四位和低四位

ANL A,#0FH ;取高四位

MOV R0,A ;存到音调中

JNZ SOUND ;跳到发音程序

CLR TR0

AJMP STOP ;为0则停止

BEAT: INC 35H ;偏移加1

AJMP MUSIC ;继续

STOP: CLR TR0 ;停止计数

MOV R7,#4

LCALL DELAY

- 6 -

单片机课程设计—电子音调发生器 AJMP START ;停止后延时0.5S重查开关

;10ms延时子程序

DL10: MOV R4, #50

DEL1: MOV R3, #100

DEL2: DJNZ R3, DEL2

DJNZ R4, DEL1

RET

;节拍延时子程序,(125*R7)ms

DELAY:

MOV R6, #250

DEL3: MOV R5, #250

DEL4: DJNZ R5, DEL4

DJNZ R6, DEL3

DJNZ R7, DELAY

RET

;音调频率表

PINLV:

DB 0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H ;i,7,6,5 DB 0FAH,0D8H,0FAH,8CH,0F9H,0E1H,0F9H,21H ;4,3,2,1

;显示数字编码表

PLAY:

DB 4FH,00H,0F8H,00H,82H,00H,92H,00H ;i,7,6,5 DB 99H,00H ,0B0H,00H,0A4H,00H,0CFH,00H ;4,3,2,1

;音乐1:祝你平安(4/4拍)

- 7 -

单片机课程设计—电子音调发生器

TABLE1:

DB 62H,82H,82H,61H,81H,84H,04H

DB 62H,42H,42H,21H,41H,44H,04H

DB 62H,82H,82H,92H,84H,04H

DB 52H,82H,51H,61H,54H,04H

DB 62H,42H,42H,21H,61H,64H,12H,12H,22H

DB 62H,42H,42H,21H,61H,64H,04H

DB 62H,51H,51H,52H,41H,21H,61H,51H,52H,54H

DB 12H,81H,81H,52H,62H,44H,04H

DB 74H,84H,94H,0A4H

DB 0B2H,0B2H,62H,82H,84H,62H,62H

DB 00H

;音乐2:祝你生日快乐(3/4拍)

TABLE2:

DB 82H,01H,81H,94H,84H ;节拍表

DB 0B4H,0A4H,04H

DB 82H,01H,81H,94H,84H

DB 0C4H,0B4H,04H

DB 82H,01H,81H,0F4H,0D4H

DB 0B4H,0A4H,94H

DB 0E2H,01H,0E1H,0D4H,0B4H

DB 0C4H,0B4H,04H

DB 00H

END

八、实验过程

1. 将P1.0、P1.1、P1.3、P1.4、P1.7的跳线接相应的位。拔掉不用的数据线。插好电源,插好通信线,打开实验仪电源开关,在实验上将开关拨到“LOAD”一档,并进行复位操作。然后启动DPFlash,单击“编程”,在弹出的窗口中选中“编程MON51”,按“确定”,将程序下载到单片机的

- 8 -

单片机课程设计—电子音调发生器

Flash中。

2. 关闭DPFlash,启动Keil,新建一个工程,然后选择芯片;

3. 设置工作环境;

4. 编写汇编语言程序,保存并加载,然后进行编译。

5. 将实验仪上的开关拨到mon位置,设置开关全部置高电平,调试、运行程序,拨动开关,观察实验现象,是否与理论一致。

6. 现象与理论不一致,分析原因,进行调试。

九、实验总结及体会

本次研究型题目,极大地锻炼了我们的实验与程序设计能力,以及单片机应用的基本素质。从方案的选择,再到设计与实现。在这个过程中学习到了很多在课本上不能学习到的知识,对一个产品也有了一个新的认识,以前我都很简单的认为这样的东西很容易就做出来了,现在我知道了每一步需要很复杂的工序。我们总结了一下经验:

1.耐心分析,解决问题。设计与实现的过程中我们会遇到一些困难这是很正常的事,但是不能一遇到问题就慌了,要耐心的分析问题并解决,这次课程设计的时候我就遇到了这样的情况。

2.团队合作,不懂请教。这次课程设计培养了团队合作,有些时候我们也需要别人的帮助,比如说当我们程序的细节出错的时候,自己一个人很难找到错误,就需要别人帮忙,无形中培养了团队合作的精神。有的时候可能遇到一些问题自己不能解决,这时我们应该虚心像同学请教,只能这样才能更好的解决问题。

十、参考文献

1.戴胜华,蒋大明,杨式武,赵俊慧.单片机原理与应用.北京:清华大学出版社,北京交通大学出版社,2005

- 9 -

本文来源:https://www.bwwdw.com/article/zril.html

Top