片单机课程设计电子音调发生器大学论文.docx
- 文档编号:27892986
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:22
- 大小:298.61KB
片单机课程设计电子音调发生器大学论文.docx
《片单机课程设计电子音调发生器大学论文.docx》由会员分享,可在线阅读,更多相关《片单机课程设计电子音调发生器大学论文.docx(22页珍藏版)》请在冰豆网上搜索。
片单机课程设计电子音调发生器大学论文
单片机课程设计
设计报告
电子音调发生器
2016年4月29日
目录
1课程设计总体目标-2-
1.1课题的意义-2-
1.2系统的主要功能-2-
1.3本人所做的工作-2-
2实验原理及设计思路-3-
2.1乐曲的音调与节拍-3-
2.2红外检测原理-3-
3硬件电路设计及描述-4-
3.1硬件连接图-4-
3.2单片机系统-5-
3.3数码管显示电路-6-
3.4蜂鸣器电路-6-
4软件设计流程及描述-7-
4.1蜂鸣器发单音-7-
4.2蜂鸣器唱歌-7-
4.3数码管动态显示-7-
4.4程序框图-8-
4.5源程序代码及注释-9-
5实验结果-26-
1总体设计
1.1课题的意义
(1)通过这个实际的课题,熟悉51单片机的开发环境,熟悉JD-51的硬件电路图,并能通过三种调试模式来调试程序,为日后进行一些基于单片机的系统开发打下基础;
(2)掌握使用常用的汇编指令进行51单片机的程序设计,建立严谨的逻辑思维来编写程序,学会画程序框图来帮助编程。
(3)通过使用蜂鸣器来产生相应音调的声音,进一步巩固课上学到的定时器初始化、赋初值、通过查询方式来产生一定频率方波的编程方法;
(4)掌握使数码管扫描显示数字的方法,并同时让LED灯亮或灭,学会如何让蜂鸣器发出不同频率的声音;
(5)了解NEC协议下的红外编码格式,能够使用单片机来解码收到的红外信号,并读取信号中相应的信息。
1.2系统的主要功能
电子音调发生器
(1)利用JD51开发板上的按键S1~S4进行音调选择,即按下不同的开关产生不同的音调,依次按动S1~S4及组合按键,蜂鸣器发出1234567i八个音调;并在数码管上显示。
(2)编写2支歌曲,并可进行选择播放。
1.3本人所做的工作
通过学习课程平台上给出的红外和电子音调发生器这两个程序,将电子音调发送器中关于按键扫描的部分换为对接收到的32位红外信号数据中数据码的反码进行按键判断跳转相应歌曲或音调子程序。
2实验原理及设计思路
2.1乐曲的音调与节拍
①音调由不同频率的方波产生,音调与频率的关系如下表所示。
要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。
在JD-51单片机上,产生方波的I/O脚选用P2.4,P2.4口与蜂鸣器相连,这样通过P2.4口输出不同频率的方波就能控制蜂鸣器发出不同音调的声音。
②音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。
只要设定延时时间,就可求得节拍的时间。
延时作为基本延时时间,节拍值只能是它的整数倍。
音调
1
2
3
4
5
6
7
I
频率/Hz
262
294
330
349
392
440
494
523
X
F921
F9E1
FA8C
FAD8
FB68
FBE9
FC5B
FC8F
表1音调和发音频率及定时器初值X的对应
在定时器工作在工作方式1时每个音节相应的定时器初值x可按下法计算
(1/2)×(1/f)=(12/fosc)×(216-x)
x=216-(fosc/24f)
(1)
其中,f是音调频率,JD-51单片机的晶振fosc=11.0592Mhz。
曲调值
DELAY
调4/4
125ms
调3/4
187ms
调2/4
250ms
表2各节拍延时时间对应关系
3硬件电路设计及描述
3.1硬件连接图
系统的硬件连接图包括,晶振电路,复位电路,数码管显示电路,红外发送和接收电路,蜂鸣器电路,硬件连接如下图所示:
图4红外高级电子琴硬件连接图
3.2单片机系统
ATMEL公司生产的AT89S52单片机是硬件电路的核心部分,时钟电路晶振使用12MHz,复位电路采取按键复位方式。
具体连接如下:
图5单片机系统的时钟电路
图6单片机系统的复位电路
3.3数码管显示电路
显示电路采用4个共阳极数码管,P0口作为数码管的输入,P2.0、P2.1、P2.2、P2.3分别控制四个数码管的亮与不亮,P0口控制数码管亮的是数字几。
图7数码管连接图
3.4蜂鸣器电路
我们用的蜂鸣器是直流蜂鸣器,驱动简单,一旦在引脚上加入直流电源它就会发出一定频率的声音,此时声音的音调和音量是固定的,它与单片机的连接方式如下图所示。
Buzzer与P2.4相连,P2.4输出不同频率的方波信号,蜂鸣器就会发出不同的声音。
如果控制输出信号的频率和音长,蜂鸣器则会发出音乐。
图8蜂鸣器电路图
4软件设计流程及描述
4.1蜂鸣器发单音
根据不同音调的频率值算出该给定时器赋的初值,利用定时溢出后P2.4口电平的翻转来产生和音调频率相同的方波,虽然不是正弦波,听起来有点不自然,但也能听出1234567i这8个音调。
4.2蜂鸣器播放歌曲
蜂鸣器播放歌曲是基于节拍表和音符表的基础上的,其基本原理与发出单个频率的声音类似,只不过确定了单个频率发声的时长即节拍长,和不同频率发声的顺序,可以通过查表的方式来使定时器产生不同频率的方波,加入设定好的节拍,就相当于延时,便可以听到音乐。
4.3数码管动态显示
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
对于每一位显示器来说,每隔一段时间点亮一次。
显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。
通过调时间参数,可以既保证亮度,又保证显示。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的资源,而且功耗更低。
4.4程序框图
图9电子音调发生器流程图
4.5源程序代码及注释
/*-------------------------------------------------------------------
==================================
电子音调发生器
==================================
******************************程序功能说明***************************
通过s1,s2,s3,s4四个按键组合,根据按键组合值让蜂鸣器播放1234567i相应的音调,以及两首歌
********************************************************************/
ORG0000H
LJMPKEYP0
KEYP0:
MOVR0,#00H;
CLRTR0;
SETBP2.4;关蜂鸣器
CLRP2.0
CLRP2.1
CLRP2.2
CLRP2.3;关用于表示音调的数码管
SETBP2.0;关用于表示模式的数码管
WU:
MOVR0,P3;扫描键盘输入
CJNER0,#0FFH,KEYPO1;有输入时跳转
JMPKEYP0
KEYPO1:
CJNER0,#0FBH,KEYPO2;
SETBP2.4;蜂鸣器置于高电平
MOVR3,#200
MAIN01:
MOVTMOD,#01H;初始化,工作方式1
MOVTL0,#21H;写入计数初值
MOVTH0,#0F9H
SETBTR0;启动计数
WAIT1:
JNBTF0,WAIT1
CLRTF0
CPLP2.4;蜂鸣器响
CLRP2.3;数码管显示1
MOVA,#11111001B
MOVP0,A
DJNZR3,MAIN01
LJMPKEYP0;返回程序KEYP0
KEYPO2:
CJNER0,#0F7H,KEYPO3;
SETBP2.4;蜂鸣器置于高电平
MOVR3,#200
MAIN02:
MOVTMOD,#01H
MOVTL0,#0E1H;写入计数初值
MOVTH0,#0F9H
SETBTR0
WAIT2:
JNBTF0,WAIT2
CLRTF0
CPLP2.4;蜂鸣器响
CLRP2.3;
MOVA,#10100100B
MOVP0,A
DJNZR3,MAIN02
LJMPKEYP0
KEYPO3:
CJNER0,#0EFH,KEYPO4;
SETBP2.4;蜂鸣器置于高电平
MOVR3,#200
MAIN03:
MOVTMOD,#01H
MOVTL0,#08CH
MOVTH0,#0FAH
SETBTR0
WAIT3:
JNBTF0,WAIT3
CLRTF0
CPLP2.4
CLRP2.3
MOVA,#10110000B
MOVP0,A
DJNZR3,MAIN03
LJMPKEYP0
KEYPO4:
CJNER0,#0DFH,KEYPO5;
SETBP2.4
MOVR3,#200
MAIN04:
MOVTMOD,#01H
MOVTL0,#0D8H
MOVTH0,#0FAH
SETBTR0
WAIT4:
JNBTF0,WAIT4
CLRTF0
CPLP2.4
CLRP2.3
MOVA,#10011001B
MOVP0,A
DJNZR3,MAIN04
LJMPKEYP0
KEYPO5:
CJNER0,#0F3H,KEYPO6;
SETBP2.4
MOVR3,#200
MAIN05:
MOVTMOD,#01H
MOVTL0,#068H
MOVTH0,#0FBH
SETBTR0
WAIT5:
JNBTF0,WAIT5
CLRTF0
CPLP2.4
CLRP2.3
MOVA,#10010010B
MOVP0,A
DJNZR3,MAIN05
LJMPKEYP0
KEYPO6:
CJNER0,#0E7H,KEYPO7;
SETBP2.4
MOVR3,#200
MAIN06:
MOVTMOD,#01H
MOVTL0,#0E9H
MOVTH0,#0FBH
SETBTR0
WAIT6:
JNBTF0,WAIT6
CLRTF0
CPLP2.4
CLRP2.3
MOVA,#10000010B
MOVP0,A
DJNZR3,MAIN06
LJMPKEYP0
KEYPO7:
CJNER0,#0CFH,KEYPO8;
SETBP2.4
MOVR3,#200
MAIN07:
MOVTMOD,#01H
MOVTL0,#05BH
MOVTH0,#0FCH
SETBTR0
WAIT7:
JNBTF0,WAIT7
CLRTF0
CPLP2.4
CLRP2.3
MOVA,#11111000B
MOVP0,A
DJNZR3,MAIN07
LJMPKEYP0
KEYPO8:
CJNER0,#0DBH,KEYPO9;
SETBP2.4
MOVR3,#200
MAIN08:
MOVTMOD,#01H
MOVTL0,#08FH
MOVTH0,#0FCH
SETBTR0
WAIT8:
JNBTF0,WAIT8
CLRTF0
CPLP2.4
CLRP2.3
MOVA,#10000000B
MOVP0,A
DJNZR3,MAIN08
LJMPKEYP0
KEYPO9:
CJNER0,#0EBH,KEYPO10;跳转到第一首歌程序
LJMPMUSTART1
KEYPO10:
CJNER0,#0D7H,JIELI;跳转到第二首歌程序
LJMPMUSTART2
JIELI:
JMPKEYP0;返回主程序
MUSTART1:
;播放第一首歌
MOVR0,#00H;将节拍表指针置零
MOVR1,#00H;将音符表指针置零
RTAB:
MOVA,R0
MOVDPTR,#RYTH
MOVCA,@A+DPTR;利用查表法将一个节拍数据取出放R2计数器中
MOVR2,A
TTAB:
MOVA,R1
MOVDPTR,#TONE
MOVCA,@A+DPTR
MOVR3,A;取出音符表高8位
INCR1;指针加1
MOVA,R1
MOVDPTR,#TONE
MOVCA,@A+DPTR
MOVR4,A;取出音符表低8位
SETBP2.4;输出相应音调的方波
LOOP:
MOVR5,#3BH
MAIN:
MOVTMOD,#01H
MOVTL0,R4
MOVTH0,R3
SETBTR0
WAIT:
JNBTF0,WAIT
CLRTF0
CPLP2.4
MAYA:
JBP3.2,MAYB;判断P3.2口是否有为1
JBP3.4,MAYB;判断P3.4口是否有为1
LJMPRA;P3.4口为0则跳转到程序RA
MAYB:
JBP3.3,JIELI;判断P3.3口是否有为1
JBP3.5,JIELI;判断P3.5口是否有为1
LJMPMUSTART2;P3.5口为0则放第二首歌
RA:
DJNZR5,MAIN;无打断则继续放第一首歌
DJNZR2,LOOP
INCR0;两个表的指针都加1
INCR1
CJNER1,#88,RTAB;判断是否取完
LJMPKEYP0
TONE:
DB0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FH
DB0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68H
DB0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68H
DB0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BH
DB0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFH
RYTH:
DB04,04,04,04,04,04,04,04,04,04
DB04,05,04,04,04,04,04,04,04,04
DB04,04,04,06,04,04,04,07,04,04
DB04,04,04,06,04,04,04,07,04,04
DB04,04,04,04
MUSTART2:
MOVR0,#00H
MOVR1,#00H
RTAB2:
MOVA,R1
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOVR2,A
TTAB2:
MOVA,R1
MOVDPTR,#TONE2
MOVCA,@A+DPTR
MOVR3,A
INCR1
MOVA,R1
MOVDPTR,#TONE2
MOVCA,@A+DPTR
MOVR4,A
SETBP2.4
LOOP2:
MOVR5,#9BH
MAIN2:
MOVTMOD,#01H
MOVTL0,R4
MOVTH0,R3
SETBTR0
WAITR:
JNBTF0,WAITR
CLRTF0
CPLP2.4
MAYA1:
JBP3.3,MAYB1
JBP3.5,MAYB1
LJMPRB
MAYB1:
JBP3.2,BACK
JBP3.4,BACK
LJMPMUSTART1
BACK:
LJMPJIELI
RB:
DJNZR5,MAIN2
DJNZR2,LOOP2
INCR0
INCR1
CJNER1,#64,RTAB2
LJMPKEYP0
TONE2:
DB0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FH
DB0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68H
DB0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68H
DB0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BH
DB0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFH
TABLE1:
DB04,04,04,04,04,04,04,04,04,04
DB04,05,04,04,04,04,04,04,04,04
DB04,04,04,06,04,04,04,07,04,04
DB04,04,04,06,04,04,04,07,04,04
DB04,04,04,04
END
【电子音调发生的部分C语言程序】
/******键盘输入函数******/
ucharkeyscan(ucharkey){
if(K1==1&&K2==1&&K3==1&&K4==1)
{//初始化
delay(20);
if(K1==1&&K2==1&&K3==1&&K4==1)
{
key=0;
}
}
if(K1==0&&K2==1&&K3==1&&K4==1)
{//1音,SB1按下
delay(20);
if(K1==0&&K2==1&&K3==1&&K4==1)
{
key=1;
}
}
if(K1==1&&K2==0&&K3==1&&K4==1){//2音,SB2按下
delay(20);
if(K1==1&&K2==0&&K3==1&&K4==1){
key=2;
}
}
if(K1==1&&K2==1&&K3==0&&K4==1){//3音,SB3按下
delay(20);
if(K1==1&&K2==1&&K3==0&&K4==1){
key=3;
}
}
if(K1==1&&K2==1&&K3==1&&K4==0){//4音,SB4按下
delay(20);
if(K1==1&&K2==1&&K3==1&&K4==0){
key=4;
}
}
if(K1==0&&K2==0&&K3==1&&K4==1){//5音,SB1和SB2按下
delay(20);
if(K1==0&&K2==0&&K3==1&&K4==1){
key=5;
}
}
if(K1==1&&K2==0&&K3==0&&K4==1){//6音,SB2和SB3按下
delay(20);
if(K1==1&&K2==0&&K3==0&&K4==1){
key=6;
}
}
if(K1==1&&K2==1&&K3==0&&K4==0){//7音,SB3和SB4按下
delay(20);
if(K1==1&&K2==1&&K3==0&&K4==0){
key=7;
}
}
if(K1==0&&K2==1&&K3==1&&K4==0){//i音,SB1和SB4按下
delay(20);
if(K1==0&&K2==1&&K3==1&&K4==0){
key=8;
}
}
if(K1==0&&K2==1&&K3==0&&K4==1){//第一首歌,SB1和SB3按下
delay(20);
if(K1==0&&K2==1&&K3==0&&K4==1){
key=9;
}
}
if(K1==1&&K2==0&&K3==1&&K4==0){//第二首歌,SB2和SB4按下
delay(20);
if(K1==1&&K2==0&&K3==1&&K4==0){
key=10;
}
}
return(key);
}
/******延时函数******/
voiddelay(uintt){
uinti,j;
for(i=0;i for(j=0;j<250;j++); } } 5实验结果 电子音调发生器: 下图是我按下S4时数码管显示“4”,蜂鸣器发出音调“4”,按下其它按键或按键组合出现类似结果。 图11电子音调发生器运行图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单机 课程设计 电子 音调 发生器 大学 论文