项目音乐门铃和简易演奏器设计.docx
《项目音乐门铃和简易演奏器设计.docx》由会员分享,可在线阅读,更多相关《项目音乐门铃和简易演奏器设计.docx(20页珍藏版)》请在冰点文库上搜索。
项目音乐门铃和简易演奏器设计
工程四音乐门铃和简易演奏器设计
设计说明书
任务一音乐门铃
一、任务设计要求
1、实现“滴、滴”报警声
要求:
产生频率为500Hz,扬声器响0.25s,停0.25s,反复循环
2、实现“滴、滴”报警声实现“滴、滴”报警门铃
要求:
在1的基础上增加按钮动作。
按钮按下一次,“滴、滴”声持续约3秒。
3、技能提高
任选一首歌曲,编制歌谱表,由单片机演奏,实现音乐门铃。
4、计数器应用
设用内部定时器/计数器1的计数功能,工作在方式2,实现计数5次产生中断使P1.7所接发光二极管闪烁。
2、设计过程
1、实现“滴、滴”报警声
要求:
产生频率为500Hz,扬声器响0.25s,停0.25s,反复循环
1、设计方案确定
2、硬件电路设计
(实现“滴、滴”报警声)(实现“滴、滴”报警门铃)和(音乐门铃)的硬件电路设计
计数器的硬件电路设计
3、软件设计
实现“滴、滴”报警声
步骤1:
定时参数的计算
1)要产生频率为500Hz的方波信号,方波信号的周期为2ms。
电路采用12MHz的晶振,利用定时器T0的方式1,产生1ms的定时,在P1.7上输出周期为2ms的方波。
矚慫润厲钐瘗睞枥庑赖。
(a)T0的方式控制字TMOD:
M1M0=01,GATE=0,C/T=0,可取方式控制字为01H
(b)计算计数初值X
由于晶振为12MHz,机器周期T=
,要产生产生1ms的定时,计数初值为
X=65536-1000=64536=FC18H
将FCH、18H分别预置给TH0、TL0。
(1)
Yes
、绘制流程图聞創沟燴鐺險爱氇谴净。
开始
标志FLAG清0
计时计数值清0
设置定时器
标志位FLAG取反
计时计数值清0
定时1ms
启动定时器
等待中断
主程序流程图
中断程序流程图
2、实现“滴、滴”报警门铃
要求:
在1的基础上增加按钮动作。
按钮按下一次,“滴、滴”声持续约3秒
(2)、编写源程序:
共4个程序
程序一:
实现“滴、滴”报警声
TCOUNTEQU30H
FLAGBIT00H
ORG0000H
SJMPSTART。
跳转到主程序
ORG000BH。
T0的中断入口地址
LJMPINT_T0。
转向中断服务程序
START:
CLRFLAG。
标志位清零
MOVTCOUNT,#00H。
计时计数值清零
MOVTMOD,#01H。
置T0工作于方式1
MOVTH0,#(65536-1000)/256。
装入计数初值
MOVTL0,#(65536-1000)MOD256
MOVIE,#82H。
开中断
SETBTR0。
启动T0定时器
SJMP$。
。
等待中断
INT_T0:
MOVTH0,#(65536-1000)/256。
重新装入计数值
MOVTL0,#(65536-1000)MOD256
INCTCOUNT。
计时计数值+1
MOVA,TCOUNT
CJNEA,#250,I1。
是否计满0.25秒
CPLFLAG。
标志位FLAG取反
MOVTCOUNT,#00H。
计时计数值清零
I1:
JBFLAG,I2。
检查标志位
CPLP1.7。
声音输出
SJMPRETUNE
I2:
CLRP1.7。
关声音
RETUNE:
RETI。
中断返回
END
程序二:
按下门铃按键,发出“滴、滴”报警声
TCOUNTEQU30H
FLAGBIT00H
ORG0000H
SJMPSTART。
跳转到主程序
ORG000BH。
T0的中断入口地址
LJMPINT_T0。
转向中断服务程序
。
——————————————主程序———————————
START:
CLRFLAG。
标志位清零
MOVTCOUNT,#00H。
计时计数值清零
MOVTMOD,#01H。
置T0工作于方式1
MOVTH0,#(65536-1000)/256。
装入计数初值
MOVTL0,#(65536-1000)MOD256
MOVIE,#82H。
开中断
LOOP:
JBP1.0,STOP。
判断P1.0是否按下
SETBTR0。
启动T0定时器
ACALLDELAY。
等中断约3.2s
STOP:
CLRP1.7。
关声音
CLRTR0。
关闭T0定时器
SJMPLOOP。
。
反复
。
————————————T0中断服务程序————————
INT_T0:
MOVTH0,#(65536-1000)/256。
重新装入计数值
MOVTL0,#(65536-1000)MOD256
INCTCOUNT。
计时计数值+1
MOVA,TCOUNT
CJNEA,#250,I1。
是否计满0.25秒
CPLFLAG。
计时计数值取反
MOVTCOUNT,#00H。
计时计数值清零
I1:
JBFLAG,I2。
检查标志位
CPLP1.7。
声音输出
SJMPRETUNE
I2:
CLRP1.7。
关声音
RETUNE:
RETI。
中断返回
DELAY:
MOVR1,#0FFH。
延时约3.2秒
DEL1:
MOVR2,#0FFH
DEL2:
MOVR3,#09H
DEL3:
NOP
NOP
NOP
DJNZR3,DEL3
DJNZR2,DEL2
DJNZR1,DEL1
RET
END
3、技能提高
任选一首歌曲,编制歌谱表,由单片机演奏,实现音乐门铃。
《BABYDON’TCRY》
程序三:
ORG0000H
LJMPSTART
ORG000BH。
T0中断矢量
LJMPINT_T0
START:
MOVSP,#50H
MOVTMOD,#01H。
置T0工作于方式1
SETBET0
SETBEA。
开中断
MAIN:
CLRSPEAKER。
静音
NSP:
JBKEY,NSP。
如果按钮没按下,等待
LCALLDELY10MS。
10ms延时
JBKEY,NSP。
如果按钮没按下,等待
MOVDPTR,#SONG
LOOP:
CLRA
MOVCA,@A+DPTR
MOVR1,A。
音符定时值高位
INCDPTR
CLRA
MOVCA,@A+DPTR
MOVR0,A。
音符定时值低位
ORLA,R1
JZNEXT0。
如果是停止符00,到NEXT0
MOVA,R0
ANLA,R1
CJNEA,#0FFH,NEXT。
如果不是结束符FFH,到NEXT
CLRTR0
LJMPMAIN
NEXT:
MOVTH0,R1。
定时器初值
MOVTL0,R0
SETBTR0。
启动定时器T0
SJMPNEXT1
NEXT0:
CLRTR0。
停止定时器T0
CLRSPEAKER。
静音
NEXT1:
CLRA
INCDPTR
MOVCA,@A+DPTR
MOVR2,A。
节拍延时常数
。
节拍延时
LOOP1:
LCALLDELY25MS
DJNZR2,LOOP1
INCDPTR。
下一个音符的地址
LJMPLOOP。
演奏下一个音符
。
————————延时子程序————————————————
DELY25MS:
MOVR6,#50。
延时25ms
D1:
MOVR7,#245
DJNZR7,$
DJNZR6,D1
RET
DELY10MS:
MOVR6,#20。
延时10ms
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
RET
。
————————————T0中断服务程序—————————
INT_T0:
MOVTH0,R1。
定时器初值
MOVTL0,R0
CPLSPEAKER。
声音输出
RETI
。
——————————BABYDON`TCRY乐谱——————————SONG:
4、计数器应用
设用内部定时器/计数器1的计数功能,工作在方式2,实现计数5次产生中断使P1.7所接发光二极管闪烁。
程序四:
ORG0000H
LJMPMAIN
MAIN:
MOVTMOD,#60H:
采用T1方式2
MOVTH1,#0FBH:
装入初值
MOVTL1,#0FBH
SETBET1
SETBEA;允许中断
SETBTR1:
启动定时器
SJMP$:
等待中断
ORG001BH。
中断服务程序
MOVR0,#10H
MOVA,#0FEH;重新设置初值
LOOP:
MOVP1,A
ACALLDELAY
RLA
DJNZR0,LOOP
MOVP1,#0FFH
RETI
DELAY:
MOVR3,#250
D2:
MOVR4,#250
D1:
NOP
DJNZR4,D1
DJNZR3,D2
RET
END
4、软、硬件调试仿真(效果图)
(实现“滴、滴”报警声)和(实现“滴、滴”报警门铃)和(音乐门铃)的软、硬件调试仿真(效果图)
计数器的软、硬件调试仿真(效果图)
任务二简易演奏器
一、任务设计要求
1、基本要求
利用定时器的定时功能,分别产生三个声音的方波,驱动扬声器发音,由三个按键控制演奏DO、RE、MI三个声音。
残骛楼諍锩瀨濟溆塹籟。
二、设计过程
1、设计方案确定
2、硬件电路设计
3、软件设计
(1)、绘制流程图
(2)、编写源程序:
1个程序
ORG0000H
SJMPSTAR
DLY:
MOVR2,#20。
延时程序10ms--(去抖动处理)
D1:
MOVR3,#248
DJNZR3,$
DJNZR2,D1
RET
ORG0030H
STAR:
MOVTMOD,#1。
T0-方式1
MOVP3,#0FFH。
P3口置1
JNBP3.0,DOS。
P3.0按下,转移到DOS
ACALLDLY
JNBP3.1,RES。
P3.1按下,转移到ERS
ACALLDLY
JNBP3.2,MIS。
P3.2按下,转移到MIS
ACALLDLY
SJMPSTAR
DOS:
MOVTH0,#0FCH。
DO-定时器初值
MOVTL0,#44H
SETBTR0。
启动定时器
JNBTF0,$。
延时时间到否?
CLRTF0。
清中断标志位
CPLP2.7。
关声音
JNBP3.0,DOS。
再次判断-P3.0按下,转移到DOS
CLRTF0。
清中断标志位
SJMPSTAR。
返回主程序
RES:
MOVTH0,#0FCH。
RE-定时器初值
MOVTL0,#0ACH
SETBTR0
JNBTF0,$
CLRTF0。
清中断标志位
CPLP2.7。
关声音
JNBP3.1,RES。
再次判断-P3.0按下,转移到DOS
CLRTF0
SJMPSTAR
MIS:
MOVTH0,#0FDH。
MI-定时器初值
MOVTL0,#09H
SETBTR0
JNBTF0,$
CLRTF0。
清中断标志位
CPLP2.7。
关声音
JNBP3.2,MIS。
再次判断-P3.0按下,转移到DOS
CLRTF0
SJMPSTAR
END
4、软、硬件调试仿真(效果图)
3、设计总结
经过这次作业练习,使得我们更加熟练掌握51单片机的定时/计数器的内部结构、工作原理。
并且更掌握延时程序、发音程序的编写。
更学会运用定时器的几种工作方式编写延时程序,能用定时器查询方式和中断两种方式编写控制程序。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
酽锕极額閉镇桧猪訣锥。