单片机设计项目讲义.docx
《单片机设计项目讲义.docx》由会员分享,可在线阅读,更多相关《单片机设计项目讲义.docx(13页珍藏版)》请在冰豆网上搜索。
![单片机设计项目讲义.docx](https://file1.bdocx.com/fileroot1/2023-1/8/b1a29cdb-3598-493f-a6a6-8f8d70ed8850/b1a29cdb-3598-493f-a6a6-8f8d70ed88501.gif)
单片机设计项目讲义
单片机设计项目报告书
设计项目题目:
单片机奏乐
项目概述:
利用51单片机内部T0的溢出中断编程方法,编制一首乐曲,并播放。
设计思路:
1.工作原理
通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经放大后驱动蜂鸣器发出不同音节的声音。
用软件延时来控制发音时间的长短,控制节拍。
把乐谱中的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器当中,由程序得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该音脉冲的持续时间。
乐曲中的音符,频率及定时常数之间对应关系可制成表格,如表1-1所列。
2.音调和节拍的确定方法
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
在音乐中所谓“音调”,其实就是我们常说的“音高”。
在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz。
当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程,在音乐中1(do)与i……正好相差一个倍频程,在音乐学中称它相差一个八度音。
在一个八度音内,有12个半音。
以1—i八音区为例, 12个半音是:
1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。
这12个音阶的分度基本上是以对数关系来划分的。
如果我们知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。
知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?
一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。
那么怎样确定一个频率所对应的定时器的定时值呢?
以标准音高A为例:
A的频率f=440Hz,其对应的周期为:
T=1/f=1/440=2272μs
t=T/2=2272/2=1136μs
这个时间t也就是单片机上定时器应有的中断触发时间。
一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。
音符的节拍我们可以举例来说明。
在一张乐谱中,我们经常会看到这样的表达式,如1=C、1=G……等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,、就是用来表示节拍的。
以为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。
比如:
其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。
1、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。
那么一拍到底该唱多长呢?
一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms。
我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。
可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。
首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。
通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。
具体的实现方法为:
将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。
另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。
表1-1音符,频率及定时常数对应关系
C调音符
低1
低2
低3
低4
低5
低6
低7
频率
262
294
330
349
392
440
494
定时值
F894H
F95CH
FA1AH
FA6AH
FB00H
FB8CH
FC0EH
C调音符
1
2
3
4
5
6
7
频率
523
587
659
698
784
880
988
定时值
FC4AH
FCAEH
FD08H
FD30H
FD80H
FDC6H
FD02H
C调音符
高1
高2
高3
高4
高5
高6
高7
频率
1046
1175
1318
1397
1568
1760
1967
定时值
FE2AH
FE5CH
FE84H
FE98H
FEC0H
FEE8H
FF06H
实验器件:
1)PC机,WAVE6000仿真软件
2)单片机应用与仿真开发实验台
3)蜂鸣器放大器
软件设计:
本程序实现播放三首歌曲,并设有暂停键和复位键和选曲键。
spkbitP2.5;定义蜂鸣器编号
;********************************************
org0000h
sjmpstart
org0003h
sjmpint0
org000bh
sjmptime
org0030h
start:
movsp,#60h
movtmod,#01h;设定时器方式1
clrit0;外部中断电平触发
setbet0;开启T0计数器
setbex0;开外部中断
setbea;开总中断
mova,#0ffh
movp2,a
l1:
mova,p2
cjnea,#0ffh,l2
sjmpl1
l2:
jnbp2.0,l3;按下p2.0播放HappyBirthday
jnbp2.1,l4;按下p2.1播放Eyesonme
jnbp2.2,l5;按下p2.2播放北京欢迎你
sjmpstart
l4:
movdptr,#dat
sjmploop
l5:
movdptr,#tt
sjmploop
l3:
movdptr,#table;存表首地址
loop:
clra;清零
movca,@a+dptr;查表
movr1,a;定时器高8位存R1
incdptr;指针加一
clra;清零
movca,@a+dptr;查表
movr0,a;定时器低8位存r0
orla,r1;进行或运算
jznext1;如果为零则为休止符
mova,r0
anla,r1;进行与运算
cjnea,#0ffh,next;如果为FFH则乐曲结束
sjmpstart;从头开始循环演奏
next:
movth0,r1;装入高8位定时值
movtl0,r0;装入低8位定时值
setbtr0;启动定时器T0
sjmpnext2;转移至next2处
next1:
clrtr0 ;关闭定时器停止发声
next2:
clra;清零
incdptr ;指针加一
movca,@a+dptr ;查表(延时常数)
movr2,a ;延时常数存R2
loop1:
acalldelay;调用延时子程序
djnzr2,loop1 ;循环次数
incdptr;指针加一
jmploop ;转移至loop处
time:
movth0,r1 ;重装定时值
movtl0,r0
cplspk;反相输出
mova,p1
cpla
movp1,a
reti;中断返回
delay:
movr7,#02;延时187ms
d2:
movr6,#187
d3:
movr5,#248
djnzr5,$
djnzr6,d3
djnzr7,d2
ret
;********************************************
;外部中断程序,实现暂停功能
;********************************************
int0:
clrtr0
reti
;********************************************
;生日快乐
;********************************************
table:
db0fdh,80h,03h,0fdh,80h,01h
db0fdh,0c6h,04h,0fdh,80h,04h
db0feh,2ah,04h,0fdh,02h,04h
db00h,00h,04h
db0fdh,80h,03h,0fdh,80h,01h
db0fdh,0c6h,04h,0fdh,80h,04h
db0feh,5ch,04h,0feh,2ah,04h
db00h,00h,04h
db0fdh80h,03h,0fdh,80h,01h
db0feh,0c0h,04h,0feh,84h,04h
db0feh,2ah,04h,0feh,02h,04h
db0fdh,0c6h,04h
db0feh,98h,03h,0feh,98h,01h
db0feh,84h,04h,0feh,2ah,04h
db0feh,5ch,04h,0feh,2ah,04h
db00h,00h,04h
db0ffh,0ffh
;********************************************
;Eyesonme
;********************************************
dat:
db00h,00h,01h,0fbh,00h,04h
db0fch,4ah,04h,0fch,0aeh,04h
db0fdh,08h,04h,0fdh,80h,02h
db0fdh,08h,02h,0fdh,08h,04h,
db00h,00h,02h,00h,00h,02h
db00h,00h,02h,0fch,0aeh,02h
db0fdh,08h,02h,0fch,4ah,04h
db00h,00h,02h,0fbh,8ch,02h
db0fch,4ah,02h,0fch,4ah,02h
db0fch,0aeh,02h,0fch,0aeh,02h
db00h,00h,02h,0fbh,00h,02h
db0fch,4ah,04h,0fch,0aeh,04h
db0fdh,08h,04h,0fdh,80h,02h
db0feh,02h,02h,0feh,02h,03h
db00h,00h,03h,00h,00h,03h
db00h,00h,03h,0feh,02h,02h
db0feh,2ah,02h,0fdh,0c6h,03h
db0fdh,80h,02h,0fdh,0c6h,02h
db0fdh,80h,02h,00h,00h,03h
db00h,00h,03h,00h,00h,02h
db0fdh,80h,02h,0feh,2ah,04h
db0feh,2ah,04h,0feh,2ah,04h
db0feh,02h,03h,0fdh,0c6h,02h
db0fdh,0c6h,02h,0fdh,0c6h,02h
db0fdh,80h,02h,0fdh,80h,04h
db00h,00h,03h,0fdh,08h,03h
db0fdh,80h,03h,0fdh,0c6h,04h
db0fdh,0c6h,02h,0fdh,80h,04h
db0fdh,30h,04h,0fdh,30h,02h
db0fch,0aeh,02h,0fdh,08h,04h
db00h,00h,04h,00h,00h,02h
db0fdh,08h,02h,0fdh,08h,04h
db0fch,0aeh,02h,0fdh,08h,02h
db0fdh,30h,04h,0fdh,08h,02h
db0fch,0aeh,02h,0fch,0aeh,02h
db0fch,4ah,02h,0fch,4ah,04h
db00h,00h,04h,0fbh,8ch,02h
db0fch,4ah,02h,0fch,4ah,04h
db00h,00h,04h,0fch,4ah,02h
db0fch,0aeh,02h,0fdh,08h,02h
db0fdh,80h,03h,0fch,0aeh,04h
db00h,00h,04h,00h,00h,04h
db00h,00h,02h,0fdh,80h,02h
db0fdh,0c6h,04h,0fdh,0c6h,02h
db0fdh,80h,02h,0fdh,30h,02h
db0fch,4ah,02h,0fdh,08h,02h
db0fdh,08h,02h,0fch,0aeh,02h
db0fch,0aeh,04h,00h,00h,04h
db00h,00h,02h,0fbh,00h,02h
db0fch,4ah,04h,0fch,0aeh,04h
db0fdh,08h,02h,0fdh,30h,02h
db0fdh,80h,02h,0fdh,80h,04h
db00h,00h,04h,00h,00h,02h
db0fdh,80h,02h,0fdh,30h,02h
db0fch,4ah,02h,0fdh,80h,04h
db00h,00h,04h,00h,00h,04h
db0fch,0aeh,02h,0fch,4ah,02h
db0fch,4ah,04h,00h,00h,04h
db00h,00h,04h,00h,00h,04h
db00h,00h,04h,00h,00h,04h
db0fch,4ah,02h,0fdh,08h,02h
db0fdh,08h,02h,0fdh,80h,02h
db0feh,02h,04h,0fdh,0c6h,02h
db0fdh,0c6h,04h,00h,00h,04h
db0fdh,0c6h,04h,00h,00h,04h
db0fdh,0c6h,02h,0feh,02h,02h
db0feh,02h,02h,0feh,2ah,02h
db0fdh,0c6h,04h,0fdh,80h,01h
db0fdh,80h,04h,00h,00h,04h
db0fdh,0c6h,04h,00h,00h,04h
db00h,00h,02h,0fdh,08h,02h
db0fdh,08h,02h,0fdh,30h,02h
db0fdh,80h,04h,0fdh,30h,02h
db0fdh,30h,04h,00h,00h,04h
db0fdh,30h,04h,00h,00h,04h
db0fdh,30h,02h,0fdh,80h,02h
db0fdh,80h,02h,0fdh,0c6h,02h
db0fdh,0c6h,04h,0fdh,80h,02h
db0fdh,80h,04h,00h,00h,04h
db0ffh,0ffh
;********************************************
;北京欢迎你
;********************************************
tt:
db0fdh,08h,02h,0fdh,80h,02h
db0fdh,08h,02h,0fch,0aeh,02h
db0fdh,08h,02h,0fch,0aeh,02h
db0fdh,08h,04h
db0fdh,08h,02h,0fch,0aeh,02h
db0fbh,08ch,02h,0fch,04ah,02h
db0fdh,08h,02h,0fch,0aeh,04h
db00h,00h,01h
db0fch,0aeh,02h,0fch,4ah,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fch,0aeh,02h,0fdh,08h,02h
db0fdh,80h,02h,0fch,0aeh,02h
db0fdh,08h,02h,0fdh,0c6h,02h
db0fdh,80h,02h,0fbh,00h,02h
db0fch,0aeh,02h,0fch,4ah,02h
db00h,00h,03h
db0fch,0aeh,02h,0fch,4ah,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fch,0aeh,02h,0fdh,08h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,80h,02h,0fch,0aeh,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,08h,02h,0fdh,0c6h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,80h,02h,0fdh,80h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,08h,02h,00h,00h,03h
db0fbh,08ch,02h,0fch,4ah,02h
db0fch,0aeh,02h,0fdh,08h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fch,0aeh,02h,0fch,4ah,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,80h,02h,0fdh,0c6h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,08h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fbh,8ch,02h,0fdh,08h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,08h,02h,0fch,0aeh,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,08h,02h00h,00h,01h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,08h,02h,0fdh,80h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0feh2ah,02h,0fdh,80h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,0c6h,02h,00h,00h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,0c6h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,80h,02h,0fdh,08h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db00h,00h,03h
db0fdh,08h,02h,0fdh,80h,02h
db0fdh,80h,02h,0fdh,08h,02h
db0fdh,80h,02h,0fdh,0c6h,02h
db0feh2ah,02h,0feh,5ch,02h
db0fdh,80h,02h,0fdh,08h,02h
db0fch,0aeh,02h,0fdh,80h,02h
db0fdh,08h,02h,00h,00h,02h
db0fdh,08h,02h,0fdh,80h,02h
db0feh,2ah,02h,0fdh,80h,02h
db0fdh,0c6h,02h,0feh,2ah,02h
db0feh,5ch,02h,0feh,2ah,02h
db0fdh,80h,02h,0fdh,08h,02h
db0fdh,80h,02h,0feh,2ah,02h
db0fdh,0c6h,02h,00h,00h,02h
db0fdh,08h,02h,0fch,0aeh,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0fdh,08h,02h,0fdh,80h,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0feh84h,02h,0feh,5ch,02h
db0fbh,08ch,02h,0fch,4ah,02h
db0feh,5ch,02h,0feh,2ah,02h
db0fbh,08ch,02h,0fch,4ah,02h
db00h,00h,02h,0feh,2ah,02h
db0ffh,0ffh
end
流程图:
主程序:
中断程序:
硬件连接电路:
参考文献:
[1]周向红.51系列单片机应用与实践教程[M].航空航天大学出版社,2008
[2]马光.单片机原理及应用[C].北京:
机械工业出版社,2008.
[3]谢嘉奎主编,宣月清,冯军编。
电子线路(线性部分)[C].北京:
高等教育出版社,1999.6
[4]马家辰编。
MCS-51单片机原理及接口技术[C].哈尔滨:
哈尔滨工业大学出版社1999.6
实验结果: