《数字音乐盒设计》由会员分享,可在线阅读,更多相关《数字音乐盒设计(25页珍藏版)》请在金锄头文库上搜索。
1、文理学院文理学院综合课程设计综合课程设计(一)(一)Integrated Curriculum DesignIntegrated Curriculum Design(1 1)所在院系专业名称班级题目指导教师成员完成时间信息工程系电子信息工程1001数字音乐盒设计2012.12.28一、设计任务及要求:设计任务:设计一个数字音乐盒程序.要求:预写 3 个曲子可以实现播放/暂停、上一曲/下一曲功能有开机欢迎词,播放曲目时LCD屏幕上显示曲目名称指导教师签名: 2012年 12月 28日二、指导教师评语:指导教师签名: 2012年 12月 28 日三、成绩验收盖章2012年 12月 28 日数字音乐
2、盒地设计1 1 设计目地设计目地(1)熟悉用于单片机C 语言地一些用法.(2)掌握单片机地基本功能.(3)了解程序是如何控制硬件.2 2 设计思路设计思路音乐部分用控制 I/O 口高低电平变化地快慢来改变发出音符地频率(即不同唱名地音)按键部分利用中断来控制播放/暂停、上曲/下曲功能3 3 设计过程设计过程3.13.1 方案论证方案论证该程序总体分为三个部分:音乐部分、按键部分、显示部分.音乐部分实现不用频率不同节拍地音构成完整曲目;按键部分实现播放/暂停(key1)、上曲/下曲功能;(key2/key3)显示部分实现开机问候语和曲目播放中曲名地显示;3.23.2 程序设计程序设计音符部分:w
3、hile(xuchar a)/此处 uchar a填地数决定音符响地时长,uint b填地数决定音符频率speaker=1。delayus(uint b)。speaker=0。delayus(uint b)x=0。按键部分(播放/暂停)void keyscan()if(key1= =0)delayms(10)。if(key1= =0)ET0=ET0。/通过控制中断开关 ET0来实现播放暂停上一曲/下一曲 部分void T0_time()interrupt 1LCD部分程序(显示歌曲状态为暂停)while(1)if(key1= = 0)delayms(10)。if (key1= =0)LCD 部
4、分程序break。void INT0_time()interrupt 0keyscan()。按键部分(上曲/下曲)key1 部分if(key2= =0)delayms(10)。if(key2= =0)n-。if(n= =0)n=3。if(key3= =0)delayms(10)。if(key3= =0)n+。if(n= =4)n=1。while(xuchar a)speaker=1。delayus(uint b)。if(n!=c)/c填地是曲目序号break。speaker=0。delayus(uint b)。if(n!=c)break。曲 目 1播 放 /曲目 1继续播放Y有键被按?N曲 1
5、 播完?Y曲 目 2 播 放 /曲目 2继续播放Nkey2?Nkey3?key1?NY暂停key1?NYY有键被按?key1?N曲 2 播完?key2?Nkey3?NN暂停key1?N曲 目 3 播 放 /曲目 3继续播放Y有键被按?key1?N曲 3 播完?key2?Nkey3?NN暂停key1?N4 4 程序调试与结果分析程序调试与结果分析4.14.1 程序调试程序调试在程序没有写完之前,如果前面声明了子函数,但是后面没有用到地话,会出现警告.只有程序写完整了警告才会不再出现;还有其中 key=1 和 key= =1 地意义不同,编译之后系统也判为警告,但实际上只能写作key= =1,写程
6、序时应注意.4.24.2 结果分析结果分析在程序只完成了音乐部分和按键部分时(即没有加入显示部分时),用proteus 仿真时反应速度较理想.在加入显示部分后,播放第一曲时按下“下一曲”键会过几秒才调到第二曲;播放曲目时按下“播放/暂停”键大概超过半秒才会暂停,而从暂停到继续播放时快速点击按键即可.上述情况仍存在,但不影响音乐盒基本功能.5 5 设计体会设计体会通过这次对数字音乐盒地设计与制作,我大概明白了设计一个具有一定功能地产品地部分基本步骤,了解到自己才刚起步,还有许多东西等着我去学习,我会在不断学习与实践中累积经验,向更高地目标迈进.参考文献参考文献( (至少至少 5 5 篇篇) )1
7、新概念 51单片机 C语言教程(郭天祥著)2互联网 3老师、同学地指导附件附件完整程序(分段显示程序)完整程序(分段显示程序)#include#define uchar unsigned char#define uint unsigned intuchar code table=WELCOME。uchar code table1=THE MUSIC BOX。uchar code table2=STA TE:ON。uchar code table3=STA TE:STOP。uchar code table4= 。uchar code table5=MUSIC NO.1。uchar code ta
8、ble6=MUSIC NO.2。uchar code table7=MUSIC NO.3。sbit speaker=P27。sbit key1=P20。sbit key2=P21。sbit key3=P22。sbit lcden=P34。sbit lcdrs=P35。uchar x,a,n=1,num,f,com。uint y。void delayus(uint)。void delayms(uint)。void musicalnotea(uchar,uint)。void musicalnoteb(uchar,uint)。void musicalnotec(uchar,uint)。void wr
9、ite_com(uchar com) lcdrs=0。 P1=com。 delayms(5)。 lcden=1。 delayms(5)。 lcden=0。void write_data(uchar date) lcdrs=1。 P1=date。 delayms(5)。 lcden=1。 delayms(5)。 lcden=0。void clean2() write_com(0x80+0x40)。 for(num=0。num16。num+) write_data(table4num)。 delayms(5)。 void clean1() write_com(0x80)。 for(num=0。nu
10、m16。num+) write_data(table4num)。 delayms(5)。 void keyscan()if(key1=0)delayms(10)。if(key1=0)ET0=ET0。if(key2=0)delayms(10)。if(key2=0)n-。if(n=0)n=3。if(key3=0)delayms(10)。if(key3=0)n+。if(n=4)n=1。void init() lcden=0。 write_com(0x38)。 write_com(0x0c)。 write_com(0x06)。 write_com(0x01)。 TMOD=0x11。 EA=1。 ET1
11、=1。 TR1=1。 ET0=0。 TR0=1。 IT0=1。 EX0=1。 x=0。void internationalsong()musicalnotea(3,269)。/低 Amusicalnotea(9,238)。/低 Bmusicalnotea(18,198)。/Ddelayus(1000)。x=0。musicalnotea(6,198)。/Dmusicalnotea(12,223)。/Cmusicalnotea(12,238)。/低 Bmusicalnotea(18,269)。/低 Amusicalnotea(6,238)。/低 Bdelayus(1000)。x=0。musical
12、notea(3,238)。/低 Bmusicalnotea(15,223)。/Cmusicalnotea(3,238)。/低 Bmusicalnotea(3,223)。/Cmusicalnotea(18,238)。/低 Bdelayus(1000)。x=0。musicalnotea(6,238)。/低 Bmusicalnotea(18,269)。/低 Adelayus(1000)。x=0。musicalnotea(6,269)。/低 Amusicalnotea(24,298)。/低 Gdelayms(600)。x=0。musicalnotea(12,198)。/Dmusicalnotea(18
13、,148)。/Gmusicalnotea(6,158)。/#Fmusicalnotea(6,133)。/Amusicalnotea(6,148)。/Gmusicalnotea(6,198)。/Dmusicalnotea(6,238)。/低 Bmusicalnotea(18,178)。/Edelayus(1000)。x=0。musicalnotea(6,178)。/Emusicalnotea(12,223)。/Cdelayms(300)。x=0。musicalnotea(6,178)。/Emusicalnotea(18,133)。/Amusicalnotea(6,148)。/Gmusicalno
14、tea(6,158)。/#Fmusicalnotea(6,178)。/Emusicalnotea(6,198)。/Dmusicalnotea(6,223)。/Cmusicalnotea(24,238)。/低 Bdelayms(600)。x=0。musicalnotea(12,198)。/Dmusicalnotea(18,148)。/Gmusicalnotea(6,158)。/#Fmusicalnotea(6,133)。/Amusicalnotea(6,148)。/Gmusicalnotea(6,198)。/Dmusicalnotea(6,238)。/低 Bmusicalnotea(18,178
15、)。/Edelayus(1000)。x=0。musicalnotea(6,178)。/Emusicalnotea(6,223)。/Cmusicalnotea(6,178)。/Emusicalnotea(6,133)。/Amusicalnotea(6,148)。/Gmusicalnotea(12,158)。/#Fmusicalnotea(12,133)。/Amusicalnotea(12,111)。/高 Cmusicalnotea(12,158)。/#Fmusicalnotea(30,148)。/Gdelayms(300)。x=0。musicalnotea(9,118)。/Bmusicalnot
16、ea(3,133)。/Amusicalnotea(24,158)。/#Fmusicalnotea(6,178)。/Emusicalnotea(6,158)。/#Fmusicalnotea(6,148)。/Gmusicalnotea(6,178)。/Emusicalnotea(24,158)。/#Fmusicalnotea(12,198)。/Dmusicalnotea(6,210)。/#Cmusicalnotea(6,198)。/Dmusicalnotea(18,178)。/Edelayus(1000)。x=0。musicalnotea(6,178)。/Emusicalnotea(18,133)
17、。/Amusicalnotea(6,148)。/Gmusicalnotea(30,158)。/#Fdelayms(300)。x=0。musicalnotea(12,133)。/Adelayus(1000)。x=0。musicalnotea(18,133)。/Amusicalnotea(6,158)。/#Fmusicalnotea(6,198)。/Ddelayus(1000)。x=0。musicalnotea(6,198)。/Dmusicalnotea(6,210)。/#Cmusicalnotea(6,198)。/Dmusicalnotea(24,118)。/Bmusicalnotea(6,14
18、8)。/Gmusicalnotea(6,178)。/Emusicalnotea(6,158)。/#Fmusicalnotea(6,148)。/Gmusicalnotea(12,158)。/#Fmusicalnotea(12,133)。/Amusicalnotea(12,148)。/Gmusicalnotea(12,178)。/Emusicalnotea(30,198)。/Ddelayms(300)。x=0。musicalnotea(9,118)。/Bmusicalnotea(3,133)。/Amusicalnotea(24,148)。/Gmusicalnotea(18,198)。/Dmusic
19、alnotea(6,238)。/低 Bmusicalnotea(24,178)。/Emusicalnotea(6,223)。/Cdelayms(300)。x=0。musicalnotea(9,133)。/Amusicalnotea(3,148)。/Gmusicalnotea(24,158)。/#Fmusicalnotea(12,178)。/Emusicalnotea(12,198)。/Ddelayus(1000)。x=0。musicalnotea(30,198)。/Ddelayms(300)。x=0。musicalnotea(12,198)。/Dmusicalnotea(24,118)。/Bm
20、usicalnotea(12,133)。/Amusicalnotea(12,198)。/Dmusicalnotea(24,148)。/Gmusicalnotea(18,158)。/#Fdelayus(1000)。x=0。musicalnotea(6,158)。/#Fmusicalnotea(18,178)。/Emusicalnotea(6,188)。/#Dmusicalnotea(12,178)。/Emusicalnotea(12,133)。/Adelayus(1000)。x=0。musicalnotea(30,133)。/Adelayms(300)。x=0。musicalnotea(9,11
21、8)。/Bmusicalnotea(3,133)。/Amusicalnotea(24,148)。/Gmusicalnotea(18,198)。/Dmusicalnotea(6,238)。/低 Bmusicalnotea(24,178)。/Emusicalnotea(6,223)。/Cdelayms(300)。x=0。musicalnotea(9,133)。/Amusicalnotea(3,148)。/Gmusicalnotea(24,158)。/#Fmusicalnotea(12,178)。/Emusicalnotea(12,198)。/Dmusicalnotea(36,118)。/Bdela
22、yus(1000)。x=0。musicalnotea(12,118)。/Bmusicalnotea(24,99)。/高 Dmusicalnotea(12,111)。/高 Cmusicalnotea(12,118)。/Bmusicalnotea(18,133)。/Amusicalnotea(6,118)。/Bmusicalnotea(12,111)。/高 Cdelayms(300)。x=0。musicalnotea(6,111)。/高 Cmusicalnotea(18,118)。/Bdelayus(1000)。x=0。musicalnotea(6,118)。/Bmusicalnotea(18,1
23、33)。/Adelayus(1000)。x=0。musicalnotea(6,133)。/Awhile(x1)n-。if(n1)n+。x=0。n+。void icegirl()delayms(800)。x=0。musicalnoteb(6,210)。/#Cmusicalnoteb(6,238)。/Bmusicalnoteb(4,210)。/#Cmusicalnoteb(16,178)。/Emusicalnoteb(4,423)。/低#Cmusicalnoteb(4,210)。/#Cmusicalnoteb(4,238)。/Bmusicalnoteb(4,210)。/#Cmusicalnoteb
24、(4,178)。/Emusicalnoteb(4,158)。/#Fmusicalnoteb(4,210)。/#Cmusicalnoteb(4,238)。/Bmusicalnoteb(6,210)。/#Cmusicalnoteb(6,238)。/Bmusicalnoteb(4,210)。/#Cmusicalnoteb(16,178)。/Emusicalnoteb(4,423)。/低#Cmusicalnoteb(4,210)。/#Cmusicalnoteb(4,238)。/Bmusicalnoteb(4,210)。/#Cmusicalnoteb(8,140)。/#Gmusicalnoteb(8,1
25、58)。/#Fmusicalnoteb(6,210)。/#Cmusicalnoteb(6,238)。/Bmusicalnoteb(4,210)。/#Cmusicalnoteb(16,178)。/Emusicalnoteb(4,538)。/低低 Amusicalnoteb(4,210)。/#Cmusicalnoteb(4,238)。/Bmusicalnoteb(4,210)。/#Cmusicalnoteb(4,178)。/Emusicalnoteb(4,158)。/#Fmusicalnoteb(4,210)。/#Cmusicalnoteb(4,238)。/Bmusicalnoteb(6,210)
26、。/#Cmusicalnoteb(6,238)。/Bmusicalnoteb(4,210)。/#Cmusicalnoteb(12,178)。/Emusicalnoteb(4,210)。/#Cmusicalnoteb(4,538)。/低低 Amusicalnoteb(4,210)。/#Cmusicalnoteb(6,140)。/#Gdelayus(1000)。x=0。musicalnoteb(6,140)。/#Gmusicalnoteb(4,158)。/#Fmusicalnoteb(2,269)。/低 Amusicalnoteb(2,238)。/低 Bmusicalnoteb(2,223)。/C
27、musicalnoteb(2,198)。/Dmusicalnoteb(4,448)。/低 Cmusicalnoteb(4,198)。/Dmusicalnoteb(4,178)。/Emusicalnoteb(8,398)。/低 Dmusicalnoteb(4,148)。/Gmusicalnoteb(4,158)。/#Fmusicalnoteb(4,198)。/Dmusicalnoteb(8,178)。/Emusicalnoteb(4,358)。/低 Emusicalnoteb(4,198)。/Dmusicalnoteb(4,398)。/低 Dmusicalnoteb(4,178)。/Emusic
28、alnoteb(4,158)。/#Fmusicalnoteb(4,148)。/Gmusicalnoteb(12,118)。/Bdelayus(1000)。x=0。musicalnoteb(4,118)。/Bmusicalnoteb(4,148)。/Gdelayus(1000)。x=0。musicalnoteb(2,148)。/Gmusicalnoteb(2,118)。/Bmusicalnoteb(4,148)。/Gmusicalnoteb(4,158)。/Fmusicalnoteb(20,178)。/Edelayus(1000)。x=0。musicalnoteb(4,178)。/Emusica
29、lnoteb(4,148)。/Gmusicalnoteb(4,118)。/Bmusicalnoteb(12,89)。/高 Edelayus(1000)。x=0。musicalnoteb(4,89)。/高 Emusicalnoteb(4,99)。/Ddelayus(1000)。x=0。musicalnoteb(2,99)。/高 Dmusicalnoteb(2,89)。/高 Emusicalnoteb(4,99)。/高 Dmusicalnoteb(4,133)。/Amusicalnoteb(24,118)。/Bmusicalnoteb(8,79)。/高#Fmusicalnoteb(12,74)。/
30、高 Gdelayus(1000)。x=0。musicalnoteb(4,74)。/高 Gmusicalnoteb(4,79)。/高#Fmusicalnoteb(4,74)。/高 Gmusicalnoteb(4,59)。/高 Bmusicalnoteb(4,79)。/高#Fmusicalnoteb(4,67)。/高 Amusicalnoteb(4,89)。/高 Emusicalnoteb(4,105)。/高#Cmusicalnoteb(4,67)。/高 Amusicalnoteb(4,89)。/高 Emusicalnoteb(4,105)。/高#Cmusicalnoteb(8,79)。/高#Fm
31、usicalnoteb(4,74)。/高 Gmusicalnoteb(4,89)。/高 Emusicalnoteb(4,118)。/高低 Bmusicalnoteb(4,74)。/高 Gmusicalnoteb(4,79)。/高#Fmusicalnoteb(4,99)。/高 Dmusicalnoteb(4,133)。/高低 Amusicalnoteb(4,79)。/高#Fdelayus(1000)。x=0。musicalnoteb(12,79)。/高#Fmusicalnoteb(4,89)。/高 Edelayus(1000)。x=0。while(x2)n-。if(n=2)n+。x=0。void
32、 unknown()x=0。musicalnotec(7,223)。/Cmusicalnotec(7,167)。/Fmusicalnotec(21,133)。/Adelayus(1800)。x=0。musicalnotec(7,133)。/Adelayus(1800)。x=0。musicalnotec(14,133)。/Amusicalnotec(7,148)。/Gmusicalnotec(7,133)。/Amusicalnotec(7,148)。/Gmusicalnotec(14,167)。/Fdelayus(1800)。x=0。musicalnotec(7,167)。/Fdelayus(1
33、800)。x=0。musicalnotec(14,167)。/Fmusicalnotec(7,223)。/Cmusicalnotec(7,167)。/Fmusicalnotec(14,133)。/Amusicalnotec(7,167)。/Fmusicalnotec(7,133)。/Amusicalnotec(14,111)。/高 Cmusicalnotec(7,126)。/#Amusicalnotec(7,133)。/Amusicalnotec(21,148)。/Gdelayus(1800)。x=0。musicalnotec(7,148)。/Gdelayus(1800)。x=0。musica
34、lnotec(14,148)。/Gmusicalnotec(7,111)。/高 Cmusicalnotec(7,126)。/#Amusicalnotec(14,133)。/Adelayus(1800)。x=0。musicalnotec(7,133)。/Amusicalnotec(7,148)。/Gmusicalnotec(14,167)。/Fmusicalnotec(7,148)。/Gmusicalnotec(7,133)。/Amusicalnotec(7,111)。/高 Cmusicalnotec(14,126)。/#Adelayus(1800)。x=0。musicalnotec(7,126
35、)。/#Adelayus(1800)。x=0。musicalnotec(14,126)。/#Amusicalnotec(7,198)。/Dmusicalnotec(7,210)。/#Cmusicalnotec(14,223)。/Cmusicalnotec(7,178)。/Emusicalnotec(7,167)。/Fmusicalnotec(14,148)。/Gmusicalnotec(7,133)。/Amusicalnotec(7,148)。/G while(x42)speaker=1。delayus(167)。if(n!=3)break。speaker=0。delayus(167)。if(
36、n!=3)break。if(n=3)n=1。ET0=1。x=0。void main() init()。 write_com(0x90)。 for(num=0。num7。num+) write_data(tablenum)。 delayms(5)。 write_com(0x90+0x40)。 for(num=0。num13。num+) write_data(table1num)。 delayms(5)。 for(num=0。num16。num+) write_com(0x1c)。 delayms(100)。 write_com(0x01)。 ET0=1。 while(1) while(n=1)
37、clean1()。 write_com(0x80)。 for(num=0。num10。num+) write_data(table5num)。 delayms(5)。 internationalsong()。 while(n=2) clean1()。 write_com(0x80)。 for(num=0。num10。num+) write_data(table6num)。 delayms(5)。 icegirl()。 while(n=3) clean1()。 write_com(0x80)。 for(num=0。num10。num+) write_data(table7num)。 delaym
38、s(5)。 unknown()。 void musicalnotea(uchar a,uint y)while(xa)speaker=1。delayus(y)。if(n!=1)break。speaker=0。delayus(y)。if(n!=1)break。x=0。void musicalnoteb(uchar a,uint y)while(xa)speaker=1。delayus(y)。if(n!=2)break。speaker=0。delayus(y)。if(n!=2)break。x=0。void musicalnotec(uchar a,uint y)while(x0) y-。 void
39、 delayms(uint yms) uint i,j。 for(i=yms。i0。i-) for(j=110。j0。j-)。void T0_time()interrupt 1 clean2()。 write_com(0x80+0x40)。 for(num=0。num10。num+) write_data(table3num)。 delayms(5)。 while(1)if(key1=0) delayms(10)。 if(key1=0) clean2()。 write_com(0x80+0x40)。 for(num=0。num8。num+) write_data(table2num)。 delayms(5)。 break。if(key2=0)n-。if(n=0)n=3。if(key3=0)n+。if(n=4)n=1。void T1_time()interrupt 3TH1=(65535-45872)/256。TL1=(65535-45872)%256。x+。void INT0_time()interrupt 0keyscan()。