51单片机课程设计.docx
《51单片机课程设计.docx》由会员分享,可在线阅读,更多相关《51单片机课程设计.docx(11页珍藏版)》请在冰豆网上搜索。
51单片机课程设计
河北工业大学计算机硬件技术基础(MCS-51)2009年综合实验报告
学院能环班级热能073姓名杨超学号070635成绩
一、题目:
简易电子琴的设计-B(10)
二、问题的提出
1.目的:
(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。
(2)熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。
(3)实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。
(4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
2.基本要求:
(1)要按任务书的要求认真分析问题,并解决问题;
(2)要求用MCS-51单片机知识完成程序的设计;
(3)在实验室利用现有的设备,完成题目的设计与调试。
三、总体设计
1、分析问题的功能
用DP-51PROC的按键K1~K8作为电子琴的按键,控制蜂鸣器能够发出do、re、mi、fa、so、la、xi等七个音符和播放生日歌。
2、系统总体结构设计
1)硬件设计:
根据问题确定单片机、I/O接口、定时器、I/O设备、中断等;
单片机:
DP-51PROC模拟器
I/O接口:
P1口
定时器:
定时器/计数器T/C0
I/O设备:
DP-51PROC的按键K1~K8、蜂鸣器
中断:
外部中断INT1
2)软件设计:
按问题功能分模块,简述各模块功能。
程序流程图:
四、详细设计:
1、硬件详细设计:
1)画出电路图;
2)进行硬件资源分配。
I/O口地址:
P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6、P1.7、P3.3
所用存储单元:
A:
数据中转
R0:
记录p1.x对应值
R5、R6:
分别记录歌曲音节延时和频率
30H、31H:
存储要输出访波频率的高低位
2、设计中的主要困难及解决方案
在这部分论述设计中遇到的主要困难及解决方案。
1)困难1:
do、re、mi、fa、so、la、xi等七个音符的简谱代码及歌曲的简谱。
解决方案:
从任务书及相关资料中查得音符简码,并根据歌曲播放顺序设置编码次序,依次放入数据库,播放时依次从数据库中查值并赋予30h、31h依次发声播放。
2)困难2:
按键与音符的对应问题。
解决方案:
将p1.x八位全部置1,根据按键的不同应用cjne判断按键并在所在按键中对30h、31h赋值,实现对应按键与音符的发声。
3)设计创新放音
解决方案:
参照学习网上建立音节数据库的方法,建立低中高音数据库可见任意输入歌曲,控制节奏
五、程序清单
BUZZEQUP3.3
ORG8000H
LJMPMAIN
ORG800BH
LJMPINT_T0
ORG8100H
MAIN:
MOVSP,#60H;初始化堆栈向量
MOV30H,#00;定时器初值清零
MOV31H,#00
MOVP1,#0FFH;设置P1口为输入模式
MOVTMOD,#01H;设置定时器0为工作模式1
SETBET0;开定时器0中断
SETBEA;开总中断
CLRTR0;关闭定时器0
START:
MOVR0,P1
CJNER0,#0FFH,KEY1;键盘扫描
CLRTR0
SJMPSTART
KEY1:
CJNER0,#0FEH,KEY2;K1键按下
MOV30H,#0FEH;设置音阶高音do
MOV31H,#22H
LJMPSET_TIMER
KEY2:
CJNER0,#0FDH,KEY3;K2键按下
MOV30H,#0FEH;设置音阶高音re
MOV31H,#56H
LJMPSET_TIMER
KEY3:
CJNER0,#0FBH,KEY4;K3键按下
MOV30H,#0FEH;设置音阶高音mi
MOV31H,#85H
LJMPSET_TIMER
KEY4:
CJNER0,#0F7H,KEY5;K4键按下
MOV30H,#0FEH;设置音阶高音fa
MOV31H,#9AH
LJMPSET_TIMER
KEY5:
CJNER0,#0EFH,KEY6;K5键按下
MOV30H,#0FEH;设置音阶高音so
MOV31H,#0C1H
LJMPSET_TIMER
KEY6:
CJNER0,#0DFH,KEY7;K6键按下
MOV30H,#0FEH;设置音阶高音la
MOV31H,#0E4H
LJMPSET_TIMER
KEY7:
CJNER0,#0BFH,KEY8;K7键按下
MOV30H,#0FFH;设置音阶高音xi
MOV31H,#03H
LJMPSET_TIMER
KEY8:
CJNER0,#7FH,NOKEY;K8键按下
LJMPSTART1;播放洋娃娃和小熊跳舞
SET_TIMER:
SETBTR0;发音
WAIT1:
MOVA,P1
CPLA
JNZWAIT1
NOKEY:
CLRTR0
LJMPSTART;无键按下
START1:
MOVDPTR,#MUSIC;取生日歌发生顺序的表头
CONT:
CLRA;查表将歌曲播放次序代码输入给A
MOVCA,@A+DPTR
CJNEA,#00,CHK;判断是否为停止不是则跳转查音
AJMPNOKEY;是停止则跳回
CHK:
PUSHACC;往后移动指针查表
INCDPTR
CLRA
MOVCA,@A+DPTR
MOVR4,A
POPACC
CHK1:
CJNEA,#01,CHK2;根据A值选择发声音节
ACALLDOL
CHK2:
CJNEA,#02,CHK3
ACALLREL
CHK3:
CJNEA,#03,CHK4
ACALLMIL
CHK4:
CJNEA,#04,CHK5
ACALLFAL
CHK5:
CJNEA,#05,CHK6
ACALLSOL
CHK6:
CJNEA,#06,CHK7
ACALLLAL
CHK7:
CJNEA,#07,CHK11
ACALLSIL
CHK11:
CJNEA,#11,CHK12
ACALLDO
CHK12:
CJNEA,#12,CHK13
ACALLRE
CHK13:
CJNEA,#13,CHK14
ACALLMI
CHK14:
CJNEA,#14,CHK15
ACALLFA
CHK15:
CJNEA,#15,CHK16
ACALLSO
CHK16:
CJNEA,#16,CHK17
ACALLLA
CHK17:
CJNEA,#17,CHK21
ACALLSI
CHK21:
CJNEA,#21,CHK22
ACALLDOH
CHK22:
CJNEA,#22,CHK23
ACALLREH
CHK23:
CJNEA,#23,CHK24
ACALLMIH
CHK24:
CJNEA,#24,CHK25
ACALLFAH
CHK25:
CJNEA,#25,CHK26
ACALLSOH
CHK26:
CJNEA,#26,CHK27
ACALLLAH
CHK27:
CJNEA,#27,CHK0
ACALLSIH
CHK0:
CJNEA,#00,CONT2
ACALLNON
CONT2:
INCDPTR
AJMPCONT
DOL:
MOVR6,#254;给每个音节定音频率和发声时长
MOVR5,#16
AJMPOUTPUT
REL:
MOVR6,#226
MOVR5,#18
AJMPOUTPUT
MIL:
MOVR6,#201
MOVR5,#21
AJMPOUTPUT
FAL:
MOVR6,#190
MOVR5,#22
AJMPOUTPUT
SOL:
MOVR6,#170
MOVR5,#25
AJMPOUTPUT
LAL:
MOVR6,#150
MOVR5,#28
AJMPOUTPUT
SIL:
MOVR6,#134
MOVR5,#31
AJMPOUTPUT
DO:
MOVR6,#126
MOVR5,#33
AJMPOUTPUT
RE:
MOVR6,#113
MOVR5,#37
AJMPOUTPUT
MI:
MOVR6,#100
MOVR5,#41
AJMPOUTPUT
FA:
MOVR6,#95
MOVR5,#44
AJMPOUTPUT
SO:
MOVR6,#85
MOVR5,#49
AJMPOUTPUT
LA:
MOVR6,#75
MOVR5,#55
AJMPOUTPUT
SI:
MOVR6,#67
MOVR5,#62
AJMPOUTPUT
DOH:
MOVR6,#63
MOVR5,#65
AJMPOUTPUT
REH:
MOVR6,#56
MOVR5,#73
AJMPOUTPUT
MIH:
MOVR6,#50
MOVR5,#82
AJMPOUTPUT
FAH:
MOVR6,#47
MOVR5,#88
AJMPOUTPUT
SOH:
MOVR6,#42
MOVR5,#98
AJMPOUTPUT
LAH:
MOVR6,#37
MOVR5,#110
AJMPOUTPUT
SIH:
MOVR6,#33
MOVR5,#124
AJMPOUTPUT
NON:
MOVR6,#33
MOVR5,#124
AJMPOUTPUT;输出R4*R5周的方波
OUTPUT:
PUSH05
LOOP:
CJNEA,#00,SOUND
AJMPMUTE
SOUND:
CLRP3.3
MUTE:
ACALLDELAY
SETBP3.3
ACALLDELAY
DJNZR5,LOOP
POP05
DJNZR4,OUTPUT
REST:
MOVR6,#170
MOVR5,#30
WAIT:
ACALLDELAY
DJNZR5,WAIT
RET
DELAY:
MOVB,R6;延时半周期t=15us*R6+9us
DL:
MOVR7,#6
DJNZR7,$
DJNZR6,DL
MOVR6,B
RET
MUSIC:
DB21,02,22,02,23,02,24,02,25,02,25,02,25,01,24,01,23,02
DB24,01,24,01,24,02,23,02,22,02,21,02,23,02,25,04
DB26,02,26,02,26,01,25,01,24,01,25,02,25,02,25,01,
DB24,01,23,01,24,02,24,02,24,01,23,01,22,01
DB21,02,23,02,21,02,00,04
INT_T0:
;T0中断服务程序
MOVTH0,30H;定时器附初值
MOVTL0,31H
CPLBUZZ;输出方波
RETI
END
六、调试程序的方法
1)硬件调试方法
编译一个程序(按一个健,相应指示灯变亮),确定按键功能完好;编辑另外一个发声程序确定蜂鸣器可以发出声音。
2)软件调试方法
连接好线,打开单片机电源,将自己的设计一个程序编译运行,确定keil软件完好。
七、你所设计的程序最终完成的功能
1)说明你编制的程序能完成的功能;
用DP-51PROC的按键K1~K8作为电子琴的按键,控制蜂鸣器能够分别发出do、re、mi、fa、so、la、xi等七个音符和播放歌曲。
2)准备的测试数据,并记录运行结果。
do、re、mi、fa、so、la、xi等七个音符和播放洋娃娃和小熊跳舞。
七音的初值为:
65058、65110、65157、65178、65217、65252、65283。
歌曲频率及发声时长顺序见源程序。
八、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
此程序实现了设计任务书的基本要求,声音比较准,音调响亮。
但是,此设计仅有八个按键可以应用,所以只是指完成了高音部分的发音。
2、对课题提出更完善的方案。
将双排键应用到设计中,以完成低、中、高所有音符的发音。
日期:
2009年1月1日