资源描述
单片机系统课程设计报告
专 业: 光电信息科学与工程
学 生 姓 名:
学 号:
指 导 教 师:
完成日期:2016 年 5 月 20 日
目录
1 设计任务和要求 3
1.1 设计任务
1.2 设计要求
1.3 方案论证
1.4 模拟仿真结果
2 实际制作与调试 1
2.1 测试方法和测试仪器
2.2 软件调试
2.3 硬件调试
2.4 调试中的问题记录
3 发挥部分设计与调试 5
4 测试结果分析 8
5 课程设计总结 8
附录 程序清单............................................................................................................17
1.设计任务和要求
1.1 设计任务
简易音乐播放器
1.2 设计要求
基本要求:设计一个简易音乐播放器,要求能播放至少三首内置音乐曲目;用按键控制曲目的选择,音乐的播放和暂停,关闭音乐和系统复位;用数码管显示当前播放曲目编号.
扩展要求:用LCD代替数码管显示当前播放曲目的编号和名称,以及下一首即将播放的曲目的编号和名称;用按键控制三种不同播放状态之间的切换:顺序播放,随机播放,单曲循环。
1.3 方案论证
以AT89C52单片机为核心,通过对其定时器的设定来实现音乐的播放
,通过对键盘的设置可以实现人机对话,借助键盘可以向计算机系统输入程序,置数,送操作命令,控制程序的执行走向等,并最终通过LCD显示器显示出播放的乐曲.
系统方案:
1. 音乐播放器的组成
根据系统音乐播放器的功能要求,一个完整的音乐播放器电路相当于一个简单的单片机系统,改系统由按键开关,单片机,LCD显示电路,蜂鸣器控制电路4个方面构成
●52单片机。52单片机为整个系统的核心部分,是带动整个系统工作的重要部件.
●键盘输入。键盘输入用来控制输入指令,发出指令至单片机,使单片机按照指令工作。
●扬声器。扬声器作为输出部分按照键盘给单片机的指令发出乐曲。
●LCD显示电路。LCD显示器作为输出部分,按照键盘给单片机的指令,显示正在演奏的乐曲。
音乐播放的系统组成框图见下
系统总设计框图
理论计算
1. 音阶对应频率计算初值的计算
元器件确定
AT89C52 1
1K电阻 11
100u电容 1
8位开关 1
4位开关 1
74ls02 2
导线 若干 共阴极LCD 1
1.4 模拟仿真结果
2.实际制作与调试
2.1 测试方法和测试仪器
测试仪器:protuse.万用表
测试条件:仿真图
测试方法:通过仿真图进行测试.看是否能正常运行.连线中用万用表检测连线是否正确
2.2 软件调试
ORG 0000H
AJMP START;FOSC=12MHZ
ORG 000BH ;T0中断入口地址
AJMP INT_T0
ORG 001BH ;T1中断入口地址
AJMP INT_T1
START:
MOV SP,#60H
MOV TMOD,#11H
MOV IE,#8AH
MOV IP,#08H ; T1中断优先于T0
MOV TH1,#3CH
MOV TL1,#0BH ;初始化.T 60MS
W1:MOV P2,#10001110B ;等待提示'F'
LCALL GETKEY
CJNE A,#0FFH,W1
MOV A,B
CJNE A,#0AH,W2
LCALL KEY_A ;输入键是A。转KEY_A
SJMP W1
W2:CJNE A,#OBH,W3
LCALL KEY_B ;输入键是B。转KEY_B
W3:CJNE A,#0CH,W4
LCALL KEY_C ;输入键是C。转KEY_C
W4:CJNE A,#0DH,W5
LCALL KEY_D ;输入键是D。转KEY_D
SJMP W1
W5:SJMP W1
2.3硬件调试
并无任何波形
2.4 调试中的问题记录
在仿真与调试中的问题:
最初没有弄懂低音高音的选择.歌曲选择了低32H进行测试.导致歌曲一变成杂音使测试失败.
在选择数码管时因为极性问题.数码管无法显示
调试时因为开关需要按下弹起才算一个完整输出.导致在控制开关闭合上耗费大量的时间去揣摩
在实际接线与实际调试中的问题:
开关最开始选择错误导致无法进行切歌.后来换成8位开关解决了这个问题.
因为实验室没有共阳极的数码管.所以不得不临时改变仿真.加了一个非门使共阴极数码管工作
因为连线过程较为繁杂.所以出现了线接反的情况.导致数码管显示异常.
3.发挥部分设计与调试
单曲循环
KEY_C: ; 选择一首歌循环播放
T3:LCALL GETWORD
CJNE A,#0FFH,T3
MOV A,B
CJNE A,#00H,D1
SJMP E0
D1:CJNE A,#01H,D2
SJMP E1
D2:CJNE A,#02H,E3
SJMP E2
E0:LCALL MUSIC1
SJMP E0
E1:LCALL MUSIC2
SJMP E1
E2:LCALL MUSIC3
SJMP E2
E3:LCALL MUSIC4
SJMP E3
RET
顺序播放
KEY_A: ; 1-4顺序播放
LCALL MUSIC1 ;《精忠报国》
LCALL MUSIC2 ;《月亮代表我的心》
LCALL MUSIC3 ;《看我七十二变》
LCALL MUSIC4 ;《同一首歌》
RET
4.测试结果分析
测试的结果与我们理想设计的情况相同
与设计指标要求进行比较:
符合基本设计.并完成了扩展要求中的顺序播放及单曲循环.缺陷在于.没有实现扩展要求中的当前播放曲目名称,以及下一首即将播放的曲目的编号的名称.随机播放
5.课程设计总结
此次设计比较成功.团队之间合作密切.使得设计开展以及完成情况都非常不同.问题在于.很多时候一些细微的差错就让我们组耗费大量的时间.例如:数码管选择,开关选择.不然完成时间将会提前.并且很有可能有时间去完成剩下的扩展内容.但很可惜因为时间原因没能完成.为此次实验的遗憾.但收获颇多.对52单片机的了解与.程序的读写有了更深层次的印象
附录:程序清单
ORG 0000H
AJMP START;FOSC=12MHZ
ORG 000BH ;T0中断入口地址
AJMP INT_T0
ORG 001BH ;T1中断入口地址
AJMP INT_T1
START:
MOV SP,#60H
MOV TMOD,#11H
MOV IE,#8AH
MOV IP,#08H ; T1中断优先于T0
MOV TH1,#3CH
MOV TL1,#0BH ;初始化.T 60MS
W1:MOV P2,#10001110B ;等待提示'F'
LCALL GETKEY
CJNE A,#0FFH,W1
MOV A,B
CJNE A,#0AH,W2
LCALL KEY_A ;输入键是A。转KEY_A
SJMP W1
W2:CJNE A,#OBH,W3
LCALL KEY_B ;输入键是B。转KEY_B
W3:CJNE A,#0CH,W4
LCALL KEY_C ;输入键是C。转KEY_C
W4:CJNE A,#0DH,W5
LCALL KEY_D ;输入键是D。转KEY_D
SJMP W1
W5:SJMP W1
KEY_A: ; 1-4顺序播放
LCALL MUSIC1 ;《精忠报国》
LCALL MUSIC2 ;《月亮代表我的心》
LCALL MUSIC3 ;《看我七十二变》
LCALL MUSIC4 ;《同一首歌》
RET
KEY_B: ; 1-4循环播放
T11:LCALL KEY_A
SJMP T11
RET
KEY_C: ; 选择一首歌循环播放
T3:LCALL GETWORD
CJNE A,#0FFH,T3
MOV A,B
CJNE A,#00H,D1
SJMP E0
D1:CJNE A,#01H,D2
SJMP E1
D2:CJNE A,#02H,E3
SJMP E2
E0:LCALL MUSIC1
SJMP E0
E1:LCALL MUSIC2
SJMP E1
E2:LCALL MUSIC3
SJMP E2
E3:LCALL MUSIC4
SJMP E3
RET
KEY_D: ; 选择一首歌播到最后一首
T2:LCALL GETWORD
CJNE A,#0FFH,T2
MOV A,B
CJNE A,#00H,B1
SJMP C0
B1:CJNE A,#01H,B2
SJMP C1
B2:CJNE A,#02H,C3
SJMP C2
C0:LCALL MUSIC1 ;乐曲《精忠报国》
C1:LCALL MUSIC2 ;乐曲《月亮代表我的心》
C2:LCALL MUSIC3 ;乐曲《看我七十二变》
C3:LCALL MUSIC4 ;乐曲《同一首歌》
RET
MUSIC1:
MOV P2,#11111001B ; 显示1
MOV R5,#11111001B
MOV 52H,#HIGH TABLE10
MOV 32H,#LOW TABLE10
LCALL music
RET
MUSIC2:
MOV P2,#10100100B ; 显示2
MOV R5,#10100100B
MOV 52H,#HIGH TABLE20
MOV 53H,#LOW TABLE20
LCALL:music
RET
MUSIC3:
MOV P2,#10110000B ; 显示3
MOV R5,#10110000B
MOV 52H,#HIGH TABLE30
MOV 53H,#LOW TABLE30
LCALL music
RET
MUSIC4:
MOV P2,#10011001B ; 显示4
MOV R5,#10011001B
MOV 52H,#HIGH TABLE40
MOV 53H,#LOW TABLE40
LCALL music
RET
music:MOV R3,#00H ;音乐解码器
NEXT20:
MOV A,R3
MOV DPH,52H
MOV DPL,53H
MOVC A,@A+DPTR
MOV R2,A
JZ STOP
ANL A,#0FH
MOV R1,A
MOV A,R2
SWAP A
ANL A,#OFH
JNZ SING
CLR TR0
JMP W11
SING:
DEC A
MOV 22H,A
RL A
MOV DPTR,#TABLE00
MOVC A,@A+DPTR
MOV TH0,A
MOV 21H,A
MOV A,22H
RL A
INC A
MOVC A,@A+DPTR
MOV TL0,A
MOV 20H,A
SETB TR0
SETB TR1
W11:
LCALL DELAY3
INC R3
LJMP NEXT20
STOP:
CLR TR0
CLR TR1
RET
**************
定时器0中断子程序
**************
INT_T0:
CLR TR0
MOV TL0,20H
MOV TH0,21H
CPL P3.0
SETB TR0
RET1
**************
定时器1中断子程序
**************
INT_T1:
CLR TR1
CLR TR0
LCALL KEY_E
MOV TH1,#3CH
MOV TL1,#0BH
DJNZ 60H,OUT
MOV 60H,#20
OUT:
SETB TR1
RTEI
KEY_E:
JB P3.1,L2 ;中断键盘检测
LCALL DELAY2 ;消除抖动
JB P3.1,L2 ;如果是高电平就跳到L2
JNB P3.1,$ ;如果仍是低电平执行中断程序
MOV P2,#10000110B ;LED显示E
L3:JB P3.1,$ ;检测到低电平,直到低电平跳出该指令
LCALL DELAY2
JB P3.1,L3
JNB P3.1,$ ;如果再来一个高电平跳出指令
MOV P2,P5
L2:SETB TR0
RET
GETKEY: ; 读A,B,C,B键盘子程序
SA:JB P1.0,SB ;读A
LCALL DELAY2
JB P1.0,SA
JNB P1.0,$
MOV P2,#10001000B ;显示A
MOV R5,#10001000B
MOV A,#0FFH
MOV B,#0AH
RET
SB:JB P1.1,C11 ;读B
LCALL DELAY2
JB P1.1,SB
JNB P1.1,$
MOV P2,#10000011B ;显示B
MOV R5,#10000011B
MOV A,#0FFH
MOV B,#0BH
RET
C11:JB P1.2,ED1 ;读C
LCALL DELAY2
JB P1.2,C11
JNB P1.2,$
MOV P2,#11000110B ;显示C
MOV R5,#11000110B
MOV A,#0FFH
MOV B,#0CH
RET
ED1:
JB P1.3,L0 ;读D
LCALL DELAY2
JB P1.3,ED1
JNB P1.3,$
MOV P2,#10100001B ;显示D
MOV R5,#10100001B
MOV A,#0FFH
MOV B,#0DH
L0:RET
GETWORD: ; 读音乐序号子程序
S1:JB P1.4,S2 ;读1键
LCALL DELAY2
JB P1.4,S1
JNB P1.4,$
MOV P2,#11111001B ;显示1
MOV R5,#11111001B
MOV A,#0FFH
MOV B,#00H
RET
S2:JB P1.5,S3 ;读2键
LCALL DELAY2
JB P1.5,S2
JNB P1.5,$
MOV P2,#10100100B ;显示2
MOV R5,#10100100B
MOV A,#0FFH
MOV B,#01H
RET
S3:JB P1.6,S4 ;读3键
LCALL DELAY2
JB P1.6,S3
JNB P1.6,$
MOV P2,#10110000B ;显示3
MOV R5,#10110000B
MOV A,#0FFH
MOV B,#0AH
RET
S4:JB P1.7,l1 ;读4键
LCALL DELAY2
JB P1.7,S1
JNB P1.7,$
MOV P2,#10011001B ;显示4
MOV R5,#10011001B
MOV A,#0FFH
MOV B,#03H
RET
L1:RET
DELAY: ;延时子程序
PUSH 0 ;保存现场
PUSH 1
MOV 0,#0H
DELAY1:MOV 1,#0H
DJNE 1,$
DJNE 0,DELAY1
POP 1 ;恢复现场
POP 0
RET
DELAY2: ;延时子程序2
MOV 41H,#100
F1:MOV 42H,#250
DJNE 42H,$
DJNE 41H,F1
RET
DELAY3: ;延时子程序3
MOV R7,#2
W22:MOV R4,#125
W33:MOV R0,248
DJNZ R0,$
DJNZ R4,W33
DJNZ R7,W22
DJNE R1,DELAY3
RET
TABLE00:
DW 64260,64400,64524,64580 ;简码值 低音5,低音6,低音7.1
DW 64684,64777,64820,64898 ;简码值2,3,4,5
DW 64968,65030,65058,65110 ;简码值6,7,高音1,高音
DW 65157,65178,65217 ;简码值 高音3,高音4,高音5
;第一首《》
TABLE10:DB 66H,52H,36H,22H,12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H
DB 32H,52H,22H,42H,38H,66H,52H,36H,22H,12H,22H,22H,32H,98H
DB 24H,22H,32H,54H,52H,32H,92H,12H,92H,82H,98H,66H,52H,36H,22H
DB 12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H,32H,52H,22H,42H,38H
DB 66H,52H,36H,22H,12H,22H,22H,32H,98H,24H,22H,32H,54H,52H,32H
DB 22H,12H,92H,82H,98H,14H,24H,34H,44H,64H,0B4H,64H,32H,52H
DB 62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38H
DB 64H,0B4H,64H,32H,52H,62H,0B2H,62H,52H,38H,22H,22H,22H,32H,52H,52H
DB 52H,62H,7FH,74H,04H,58H,6FH
DB 00
;第二首《》
TABLE20:DB 02H,82H
DB 16H,32H,54H,02H,52H
DB 0A6H,32H,54H,02H,52H
DB 64H,74H,0B6H,64H
DB 52H,5CH,32H,22H
DB 16H,12H,14H,32H,22H
DB 16H,12H,14H,22H,32H
DB 26H,12H,94H,22H,32H
DB 2CH
DB 32H,52H
DB 36H,22H,14H,54H
DB 0ACH,92H,0A2H
DB 96H,0A2H,96H,82H
DB 3CH,54H
DB 36H,22H,14H,54H
DB 0ACH,92H,0A2H
DB 16H,12H,14H,22H,32H
DB 2CH,02H,82H
DB 16H,32H,56H,12H
DB 0A6H,32H,56H,52H
DB 66H,72H,0B6H,62H
DB 62H,52H,58H,32H,22H
DB 16H,12H,14H,32H,22H
DB 16H,12H,14H,22H,32H
DB 26H,92H,0A4H,12H,22H
DB 1CH
DB 00
;第三首《》
TABLE30:DB 0d4H,84H,94H,82H,92H
DB 12H,22H,82H,92H,02H,92H,82H,0d2H
DB 82H,92H,14H,84H,02H,0d1H,0d1H
DB 0c2H,0d2H,84H,0d2H,0d2H,82H,82H
DB 84H,82H,82H,94H,82H,0d2H
DB 82H,82H,82H,92H,02H,82H,82H,0d2H
DB 0c4H,84H,0d4H,92H,0d2H
DB 82H,0d2H,82H,92H,98H
DB 04H,94H,88H
DB 04H,94H,88H
DB 04H,94H,88H
DB 04H,94H,88H,04H
DB 32H,32H,22H,12H,02H,92H,12H,92H
DB 32H,32H,22H,12H,02H,92H,12H,92H
DB 32H,32H,22H,12H,02H,92H,12H,22H
DB 54H,44H,34H,12H,22H
DB 34H,22H,12H,02H,92H,12H,92H
DB 32H,32H,22H,12H,02H,92H,12H,92H
DB 32H,32H,22H,12H,02H,92H,12H,22H
DB 54H,44H,32H,22H,12H,92H
DB 00
;第四首《》
TABLE40:DB 88h,14h,24h,36H,42H,34H,14H,28H,14H,94H
DB 1fH,88H,14H,24H,34H,32H,42H,54H,14H
DB 46H,32H,54H,22H,32H,32H,22H,2CH,38H,54H,74H
DB 76H,62H,68H,54H,52H,62H,74H,62H,52H,3fH
DB 46H,42H,54H,64H,54H,42H,32H,28H,0a4H,0a2H
DB 92H,84H,94H,1fH,0b8H,68H,46H,52H,68H
DB 74H,72H,72H,74H,62H,52H,3fH,0b8H,68H
DB 46H,52H,68H,64H,62H,62H,64H,42H,32H,2fH
DB 58H,14H,24H,36H,42H,34H,12H,12H,26H,22H,24H,22H,12H
DB 94H,9cH,0a8H,0a6H,92H,84H,64H,54H,22H,22H,46H,42H,44H,32H,22H,5fH
DB 00
展开阅读全文