当前位置: 首页 > >

数字音乐盒设计

发布时间:

文理学院 综合课程设计 (一) Integrated Curriculum Design(1)

所在院系 专业名称 班级 题目 指导教师 成员 完成时间

信息工程系 电子信息工程 1001 数字音乐盒设计

2012.12.28

一、设计任务及要求: 设计任务: 设计一个数字音乐盒程序. 要 求: 预写 3 个曲子 可以实现播放/暂停、上一曲/下一曲功能 有开机欢迎词,播放曲目时 LCD 屏幕上显示曲目名称 指导教师签名: 2012 年 12 月 28 日 二、指导教师评语:

指导教师签名: 2012 年 12 月 28 日 三、成绩

验收盖章 2012 年 12 月 28 日

数字音乐盒地设计

1 设计目地
(1)熟悉用于单片机 C 语言地一些用法. (2)掌握单片机地基本功能. (3)了解程序是如何控制硬件.

2 设计思路
音乐部分用控制 I/O 口高低电*变化地快慢来改变发出音符*德剩床煌 音) 按键部分利用中断来控制播放/暂停、上曲/下曲功能

3 设计过程
3.1 方案论证
该程序总体分为三个部分:音乐部分、按键部分、显示部分. 音乐部分实现不用频率不同节拍地音构成完整曲目; 按键部分实现播放/暂停(key1)、上曲/下曲功能;(key2/key3) 显示部分实现开机问候语和曲目播放中曲名地显示;

3.2 程序设计
音符部分: while(x<uchar 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 1 { LCD 部分程序(显示歌曲状态为暂停)

while(1) {if(key1= = 0) { delayms(10)。 if (key1= =0) } LCD 部分程序 break。 } }

void INT0_time()interrupt 0 { keyscan()。 }

按键部分(上曲/下曲) { 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(x<uchar 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 播完? Y 曲目2播放/ 曲目 2 继续播放 N key2? N key3? key1? N Y 暂停 key1? N Y

Y 有键被按? key1? N 曲 2 播完? key2? N key3? N N 暂停 key1?

N

曲目3播放/ 曲目 3 继续播放

Y 有键被按? key1? N 曲 3 播完? key2? N key3? N N 暂停 key1?

N

4 程序调试与结果分析
4.1 程序调试
在程序没有写完之前,如果前面声明了子函数,但是后面没有用到地话,会出现警告.只 有程序写完整了警告才会不再出现;还有其中 key=1 和 key= =1 地意义不同,编译之后系 统也判为警告,但实际上只能写作 key= =1,写程序时应注意.

4.2 结果分析
在程序只完成了音乐部分和按键部分时(即没有加入显示部分时),用 proteus 仿真时反 应速度较理想.在加入显示部分后,播放第一曲时按下“下一曲”键会过几秒才调到第二曲; 播放曲目时按下“播放/暂停”键大概超过半秒才会暂停,而从暂停到继续播放时快速点击按 键即可.上述情况仍存在,但不影响音乐盒基本功能.

5 设计体会
通过这次对数字音乐盒地设计与制作,我大概明白了设计一个具有一定功能地产品地 部分基本步骤,了解到自己才刚起步,还有许多东西等着我去学*,我会在不断学*与实 践中累积经验,向更高地目标迈进.

参考文献(至少 5 篇)
[1]新概念 51 单片机 C 语言教程(郭天祥著) [2]互联网 www.baidu.com [3]老师、同学地指导

附件

完整程序(分段显示程序)
#include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[]="WELCOME"。 uchar code table1[]="THE MUSIC BOX"。 uchar code table2[]="STATE:ON"。 uchar code table3[]="STATE:STOP"。 uchar code table4[]=" "。 uchar code table5[]="MUSIC NO.1"。 uchar code table6[]="MUSIC NO.2"。 uchar code table7[]="MUSIC NO.3"。 sbit speaker=P2^7。 sbit key1=P2^0。 sbit key2=P2^1。 sbit key3=P2^2。 sbit lcden=P3^4。 sbit lcdrs=P3^5。 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 write_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。num<16。num++) { write_data(table4[num])。 delayms(5)。 } } void clean1() { write_com(0x80)。 for(num=0。num<16。num++) { write_data(table4[num])。 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=1。 TR1=1。 ET0=0。 TR0=1。

IT0=1。 EX0=1。 x=0。 } void internationalsong() { musicalnotea(3,269)。//低 A musicalnotea(9,238)。//低 B musicalnotea(18,198)。//D delayus(1000)。 x=0。 musicalnotea(6,198)。//D musicalnotea(12,223)。//C musicalnotea(12,238)。//低 B musicalnotea(18,269)。//低 A musicalnotea(6,238)。//低 B delayus(1000)。 x=0。 musicalnotea(3,238)。//低 B musicalnotea(15,223)。//C musicalnotea(3,238)。//低 B musicalnotea(3,223)。//C musicalnotea(18,238)。//低 B delayus(1000)。 x=0。 musicalnotea(6,238)。//低 B musicalnotea(18,269)。//低 A delayus(1000)。 x=0。 musicalnotea(6,269)。//低 A musicalnotea(24,298)。//低 G delayms(600)。 x=0。 musicalnotea(12,198)。//D musicalnotea(18,148)。//G musicalnotea(6,158)。//#F musicalnotea(6,133)。//A musicalnotea(6,148)。//G musicalnotea(6,198)。//D musicalnotea(6,238)。//低 B musicalnotea(18,178)。//E delayus(1000)。 x=0。 musicalnotea(6,178)。//E

musicalnotea(12,223)。//C delayms(300)。 x=0。 musicalnotea(6,178)。//E musicalnotea(18,133)。//A musicalnotea(6,148)。//G musicalnotea(6,158)。//#F musicalnotea(6,178)。//E musicalnotea(6,198)。//D musicalnotea(6,223)。//C musicalnotea(24,238)。//低 B delayms(600)。 x=0。 musicalnotea(12,198)。//D musicalnotea(18,148)。//G musicalnotea(6,158)。//#F musicalnotea(6,133)。//A musicalnotea(6,148)。//G musicalnotea(6,198)。//D musicalnotea(6,238)。//低 B musicalnotea(18,178)。//E delayus(1000)。 x=0。 musicalnotea(6,178)。//E musicalnotea(6,223)。//C musicalnotea(6,178)。//E musicalnotea(6,133)。//A musicalnotea(6,148)。//G musicalnotea(12,158)。//#F musicalnotea(12,133)。//A musicalnotea(12,111)。//高 C musicalnotea(12,158)。//#F musicalnotea(30,148)。//G delayms(300)。 x=0。 musicalnotea(9,118)。//B musicalnotea(3,133)。//A musicalnotea(24,158)。//#F musicalnotea(6,178)。//E musicalnotea(6,158)。//#F musicalnotea(6,148)。//G musicalnotea(6,178)。//E musicalnotea(24,158)。//#F musicalnotea(12,198)。//D

musicalnotea(6,210)。//#C musicalnotea(6,198)。//D musicalnotea(18,178)。//E delayus(1000)。 x=0。 musicalnotea(6,178)。//E musicalnotea(18,133)。//A musicalnotea(6,148)。//G musicalnotea(30,158)。//#F delayms(300)。 x=0。 musicalnotea(12,133)。//A delayus(1000)。 x=0。 musicalnotea(18,133)。//A musicalnotea(6,158)。//#F musicalnotea(6,198)。//D delayus(1000)。 x=0。 musicalnotea(6,198)。//D musicalnotea(6,210)。//#C musicalnotea(6,198)。//D musicalnotea(24,118)。//B musicalnotea(6,148)。//G musicalnotea(6,178)。//E musicalnotea(6,158)。//#F musicalnotea(6,148)。//G musicalnotea(12,158)。//#F musicalnotea(12,133)。//A musicalnotea(12,148)。//G musicalnotea(12,178)。//E musicalnotea(30,198)。//D delayms(300)。 x=0。 musicalnotea(9,118)。//B musicalnotea(3,133)。//A musicalnotea(24,148)。//G musicalnotea(18,198)。//D musicalnotea(6,238)。//低 B musicalnotea(24,178)。//E musicalnotea(6,223)。//C delayms(300)。 x=0。 musicalnotea(9,133)。//A

musicalnotea(3,148)。//G musicalnotea(24,158)。//#F musicalnotea(12,178)。//E musicalnotea(12,198)。//D delayus(1000)。 x=0。 musicalnotea(30,198)。//D delayms(300)。 x=0。 musicalnotea(12,198)。//D musicalnotea(24,118)。//B musicalnotea(12,133)。//A musicalnotea(12,198)。//D musicalnotea(24,148)。//G musicalnotea(18,158)。//#F delayus(1000)。 x=0。 musicalnotea(6,158)。//#F musicalnotea(18,178)。//E musicalnotea(6,188)。//#D musicalnotea(12,178)。//E musicalnotea(12,133)。//A delayus(1000)。 x=0。 musicalnotea(30,133)。//A delayms(300)。 x=0。 musicalnotea(9,118)。//B musicalnotea(3,133)。//A musicalnotea(24,148)。//G musicalnotea(18,198)。//D musicalnotea(6,238)。//低 B musicalnotea(24,178)。//E musicalnotea(6,223)。//C delayms(300)。 x=0。 musicalnotea(9,133)。//A musicalnotea(3,148)。//G musicalnotea(24,158)。//#F musicalnotea(12,178)。//E musicalnotea(12,198)。//D musicalnotea(36,118)。//B delayus(1000)。 x=0。

musicalnotea(12,118)。//B musicalnotea(24,99)。//高 D musicalnotea(12,111)。//高 C musicalnotea(12,118)。//B musicalnotea(18,133)。//A musicalnotea(6,118)。//B musicalnotea(12,111)。//高 C delayms(300)。 x=0。 musicalnotea(6,111)。//高 C musicalnotea(18,118)。//B delayus(1000)。 x=0。 musicalnotea(6,118)。//B musicalnotea(18,133)。//A delayus(1000)。 x=0。 musicalnotea(6,133)。//A while(x<24) //G { speaker=1。 delayus(148)。 if(n!=1) break。 speaker=0。 delayus(148)。 if(n!=1) break。 } if(n>1) n--。 if(n<1) n++。 x=0。 n++。 }

void icegirl() { delayms(800)。 x=0。

musicalnoteb(6,210)。//#C musicalnoteb(6,238)。//B musicalnoteb(4,210)。//#C musicalnoteb(16,178)。//E musicalnoteb(4,423)。//低#C musicalnoteb(4,210)。//#C musicalnoteb(4,238)。//B musicalnoteb(4,210)。//#C musicalnoteb(4,178)。//E musicalnoteb(4,158)。//#F musicalnoteb(4,210)。//#C musicalnoteb(4,238)。//B musicalnoteb(6,210)。//#C musicalnoteb(6,238)。//B musicalnoteb(4,210)。//#C musicalnoteb(16,178)。//E musicalnoteb(4,423)。//低#C musicalnoteb(4,210)。//#C musicalnoteb(4,238)。//B musicalnoteb(4,210)。//#C musicalnoteb(8,140)。//#G musicalnoteb(8,158)。//#F musicalnoteb(6,210)。//#C musicalnoteb(6,238)。//B musicalnoteb(4,210)。//#C musicalnoteb(16,178)。//E musicalnoteb(4,538)。//低低 A musicalnoteb(4,210)。//#C musicalnoteb(4,238)。//B musicalnoteb(4,210)。//#C musicalnoteb(4,178)。//E musicalnoteb(4,158)。//#F musicalnoteb(4,210)。//#C musicalnoteb(4,238)。//B musicalnoteb(6,210)。//#C musicalnoteb(6,238)。//B musicalnoteb(4,210)。//#C musicalnoteb(12,178)。//E musicalnoteb(4,210)。//#C musicalnoteb(4,538)。//低低 A musicalnoteb(4,210)。//#C musicalnoteb(6,140)。//#G delayus(1000)。 x=0。

musicalnoteb(6,140)。//#G musicalnoteb(4,158)。//#F musicalnoteb(2,269)。//低 A musicalnoteb(2,238)。//低 B musicalnoteb(2,223)。//C musicalnoteb(2,198)。//D musicalnoteb(4,448)。//低 C musicalnoteb(4,198)。//D musicalnoteb(4,178)。//E musicalnoteb(8,398)。//低 D musicalnoteb(4,148)。//G musicalnoteb(4,158)。//#F musicalnoteb(4,198)。//D musicalnoteb(8,178)。//E musicalnoteb(4,358)。//低 E musicalnoteb(4,198)。//D musicalnoteb(4,398)。//低 D musicalnoteb(4,178)。//E musicalnoteb(4,158)。//#F musicalnoteb(4,148)。//G musicalnoteb(12,118)。//B delayus(1000)。 x=0。 musicalnoteb(4,118)。//B musicalnoteb(4,148)。//G delayus(1000)。 x=0。 musicalnoteb(2,148)。//G musicalnoteb(2,118)。//B musicalnoteb(4,148)。//G musicalnoteb(4,158)。//F musicalnoteb(20,178)。//E delayus(1000)。 x=0。 musicalnoteb(4,178)。//E musicalnoteb(4,148)。//G musicalnoteb(4,118)。//B musicalnoteb(12,89)。//高 E delayus(1000)。 x=0。 musicalnoteb(4,89)。//高 E musicalnoteb(4,99)。//D

delayus(1000)。 x=0。 musicalnoteb(2,99)。//高 D musicalnoteb(2,89)。//高 E musicalnoteb(4,99)。//高 D musicalnoteb(4,133)。//A musicalnoteb(24,118)。//B

musicalnoteb(8,79)。//高#F musicalnoteb(12,74)。//高 G delayus(1000)。 x=0。 musicalnoteb(4,74)。//高 G musicalnoteb(4,79)。//高#F musicalnoteb(4,74)。//高 G musicalnoteb(4,59)。//高 B musicalnoteb(4,79)。//高#F musicalnoteb(4,67)。//高 A musicalnoteb(4,89)。//高 E musicalnoteb(4,105)。//高#C musicalnoteb(4,67)。//高 A musicalnoteb(4,89)。//高 E musicalnoteb(4,105)。//高#C musicalnoteb(8,79)。//高#F musicalnoteb(4,74)。//高 G musicalnoteb(4,89)。//高 E musicalnoteb(4,118)。//高低 B musicalnoteb(4,74)。//高 G musicalnoteb(4,79)。//高#F musicalnoteb(4,99)。//高 D musicalnoteb(4,133)。//高低 A musicalnoteb(4,79)。//高#F delayus(1000)。 x=0。 musicalnoteb(12,79)。//高#F musicalnoteb(4,89)。//高 E delayus(1000)。 x=0。 while(x<14) { speaker=1。 delayus(89)。

if(n!=2) break。 speaker=0。 delayus(89)。 if(n!=2) break。 } if(n>2) n--。 if(n==2) n++。 x=0。 } void unknown() { x=0。 musicalnotec(7,223)。//C musicalnotec(7,167)。//F musicalnotec(21,133)。//A delayus(1800)。 x=0。 musicalnotec(7,133)。//A delayus(1800)。 x=0。 musicalnotec(14,133)。//A musicalnotec(7,148)。//G musicalnotec(7,133)。//A musicalnotec(7,148)。//G musicalnotec(14,167)。//F delayus(1800)。 x=0。 musicalnotec(7,167)。//F delayus(1800)。 x=0。 musicalnotec(14,167)。//F musicalnotec(7,223)。//C musicalnotec(7,167)。//F musicalnotec(14,133)。//A musicalnotec(7,167)。//F musicalnotec(7,133)。//A musicalnotec(14,111)。//高 C musicalnotec(7,126)。//#A musicalnotec(7,133)。//A musicalnotec(21,148)。//G

delayus(1800)。 x=0。 musicalnotec(7,148)。//G delayus(1800)。 x=0。 musicalnotec(14,148)。//G musicalnotec(7,111)。//高 C musicalnotec(7,126)。//#A musicalnotec(14,133)。//A delayus(1800)。 x=0。 musicalnotec(7,133)。//A musicalnotec(7,148)。//G musicalnotec(14,167)。//F musicalnotec(7,148)。//G musicalnotec(7,133)。//A musicalnotec(7,111)。//高 C musicalnotec(14,126)。//#A delayus(1800)。 x=0。 musicalnotec(7,126)。//#A delayus(1800)。 x=0。 musicalnotec(14,126)。//#A musicalnotec(7,198)。//D musicalnotec(7,210)。//#C musicalnotec(14,223)。//C musicalnotec(7,178)。//E musicalnotec(7,167)。//F musicalnotec(14,148)。//G musicalnotec(7,133)。//A musicalnotec(7,148)。//G while(x<42) { speaker=1。 delayus(167)。 if(n!=3) break。 speaker=0。 delayus(167)。 if(n!=3) break。 }

if(n==3) {n=1。 ET0=1。} x=0。 }

void main() { init()。 write_com(0x90)。 for(num=0。num<7。num++) { write_data(table[num])。 delayms(5)。 } write_com(0x90+0x40)。 for(num=0。num<13。num++) { write_data(table1[num])。 delayms(5)。 } for(num=0。num<16。num++) { write_com(0x1c)。 delayms(100)。 } write_com(0x01)。 ET0=1。 while(1) { while(n==1) { clean1()。 write_com(0x80)。 for(num=0。num<10。num++) { write_data(table5[num])。 delayms(5)。 }

internationalsong()。 } while(n==2) { clean1()。 write_com(0x80)。 for(num=0。num<10。num++) { write_data(table6[num])。 delayms(5)。 } icegirl()。 } while(n==3) { clean1()。 write_com(0x80)。 for(num=0。num<10。num++) { write_data(table7[num])。 delayms(5)。 } unknown()。 } } } void musicalnotea(uchar a,uint y) { while(x<a) { 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(x<a) { 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(x<a) { speaker=1。 delayus(y)。 if(n!=3) break。 speaker=0。 delayus(y)。 if(n!=3) break。 } x=0。 } void delayus(uint y) { while(y>0) { y--。 } } void delayms(uint yms) { uint i,j。 for(i=yms。i>0。i--) for(j=110。j>0。j--)。 }

void T0_time()interrupt 1

{ clean2()。 write_com(0x80+0x40)。 for(num=0。num<10。num++) { write_data(table3[num])。 delayms(5)。 } while(1) { if(key1==0) { delayms(10)。 if(key1==0) { clean2()。 write_com(0x80+0x40)。 for(num=0。num<8。num++) { write_data(table2[num])。 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 3 { TH1=(65535-45872)/256。 TL1=(65535-45872)%256。 x++。 }

void INT0_time()interrupt 0 { keyscan()。 }




友情链接: