基于单片机数字音乐盒的设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

精心整理

单片机实物设计

题目:单片机音乐盒设计

班级:K0312416-17

通过

个按

1.1设计目标................................................................................................

第二章软件设计与分析 .......................................................................................

2.1软件设计的组成 ....................................................................................

2.2各部分软件分析 ....................................................................................

2.2.1延时165MS,即十六分音符子函数.............................................

2.2.2延时1MS子函数.........................................................................

2.2.3定时器0中断子函数.................................................................

精心整理

2.2.4播放音乐子函数 .........................................................................

2.5定时器1中断子函数 .....................................................................

2.6按键扫描子函数.............................................................................

2.2.7主函数 ........................................................................................

2.3总源程序 ................................................................................................ 第三章软件仿真 ...................................................................................................

3.仿真图.......................................................................................................

3.1

总结

第一章工作原理

1.1设计目标

具体要求是:以单片机为核心,设计一个数字音乐盒:

利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从

2.2各部分软件分析

2.2.1延时165MS,即十六分音符子函数

//延时165MS,即十六分音符子函数

voiddelay1(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=19000;y>0;y--); }

2.2.2延时1MS子函数

2.2.4播放音乐子函数

//播放音乐子函数

voidsong()

{

uinttemp;

ucharaa;//aa是简谱

c=0;

while(1)

{

if(count2==0)

{

break;

else

{

TR1=0;

BEEP=1;//关蜂鸣器

}

delay1(temp%16);//取数的低4位

TR1=0; //唱完一个音停10MS

BEEP=1;

delay2(10);

TR1=1;

c++;

}

TR1=0;

BEEP=1;

{

num1++;

if(num1==1)

{

TR1=0;

aa=count2;

count2=0;

}

if(num1==2)

{

num1=0;

count2=aa;

TR1=1;

}

write_date('l'); write_com(0x80+3); write_date('c'); write_com(0x80+4); write_date('o'); write_com(0x80+5); write_date('m');

write_com(0x80+6);

write_date('e');

write_com(0x80+7);

write_date('');

write_com(0x80+8);

write_date('t');

write_com(0x80+9);

IT1=1;//下降沿时触发中断EX0=1;//开外部中断0

IT0=1;//下降沿时触发中断count2=0;//唱第一首歌LCD1602_init();

while(1)//大循环

相关文档
最新文档