网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于51单片机数字音乐盒的设计.

单片机实物设计 题 目: 单片机音乐盒设计 班 级: K0312416-17 姓 名: 湛俊 朱斌 杨裕庆 学号:K031241705 K031241632 K031241737 摘 要 本设计是一个基于STC89C51RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。本音乐盒共有四首歌曲,用4个按键控制。播放歌曲时,蜂鸣器发出某个音调。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。 【关键词】STC89C51RC 按键 蜂鸣器 LCD1602液晶 目录 前 言 第一章 工作原理 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设计目标 1.1.1基本功能 具体要求是:以单片机为核心,设计一个数字音乐盒: 利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少3首乐曲,每首不少于30s)。 采用LCD显示信息。 a. 开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。 b. 可通过功能键选择乐曲、暂停、播放。 第二章 软件设计与分析 2.1 软件设计的组成 该系统由延时165MS,即十六分音符子函数、延时1MS子函数、按键扫描子函数、播放音乐子函数、定时器1中断子函数、定时器0中断子函数、主函数和数据定义这几部分组成。 2.2 各部分软件分析 2.2.1 延时165MS,即十六分音符子函数 //延时165MS,即十六分音符子函数 void delay1(uint z) { uint x,y; for(x=z;x0;x--) for(y=19000;y0;y--); } 2.2.2 延时1MS子函数 //延时1MS子函数 void delay2(uint z) { uint x,y; for(x=z;x0;x--) for(y=110;y0;y--); } 2.2.3 定时器0中断子函数 //定时器0中断子函数 void t0() interrupt 1 //用于产生各种音调 { TH0=a; TL0=b; BEEP=~BEEP; } 2.2.4 播放音乐子函数 //播放音乐子函数 void song() { uint temp; uchar aa;//aa是简谱 c=0; while(1) { if(count2==0) { break; } if(count2==1) //选曲 temp=table1[c]; if(count2==2) temp=table2[c]; if(count2==3) temp=table3[c]; if(count2==4) temp=table4[c]; if(temp==0xff) break; aa=temp/16; //取数的高4位 if(aa!=0) { a=cuzhi[aa*2]; b=cuzhi[aa*2+1]; } else { TR1=0; BEEP=1;//关蜂鸣器 } delay1(temp%16); //取数的低4位 TR1=0; //唱完一个音停10MS BEEP=1; delay2(10); TR1=1; c++; } TR1=0; BEEP=1; } 2.2.5 定时器1中断子函数 //定时器1中断子函数 void t1() interrupt 3 //用于产生各种音调 { key(); } 2.2.6 按键扫描子函数 void key() { if(k3==0) { delay2

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档