单片机课程设计基于at89s52单片机的数码管显示音乐盒的设计内容摘要:

ROM、键盘、马达、 LED、 AD/DA、部分 SPI 器件、部分 IIC 器件等)。 软件编译采用 KEIL C51 软件, Keil C51 是美国 Keil Software 公司出品的 51系列兼容单片机 C 语言软件开发系统,与汇编相比, C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 用过汇编语言后再使用 C 来开发,体会更加深刻。 Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 仿真结果 按照上面设计的电路在 proteus 软件内画图 , 打开单片机软件开发 12 系统 Keil,选择 89c51 单片机 ,在其中编写程序 ,运行生成一个后缀名为hex 的文件 ,然后将该文件下载到 proteus 中的 AT89c51 单片机中进行仿真 ,观察实验现象。 仿真能实现播放音乐,按键选择曲目,暂停,播放功能。 仿真成功后,安装好实验板 ,然后将音乐程序下载到电路板内 ,观察结果。 能实现播放音乐,按键换曲等功能。 系统调试 程序调试中出现的问题及解决的办法: ( 1) 有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的 RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。 ( 2) 程序中的跳转指令的运用很重要,为保险起见,都用 LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。 当用 JNZ 指令时,跳转范围比较少,这时要用一个标号中转。 ( 3) 编程时要注意,在程序开始时,要写入各定时器中断的入口地址。 ( 4) 编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。 ( 5) 编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着 MP3 的工作方式列写流程图。 ( 6) LCD 计时正常显示的解决办法: 两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器 1设定在方式 3,计 250us,由于定时中断过于频繁,使 CPU 负载过大,导致音乐不能正常播放,时间不能正常显示。 解决办法:将定 时器 1设定在工作方式 1, 16 位计数,计 50ms,效果有很大改观。 但还有问题。 改进方案:若采用可以定时时间更长的单片机,可以避免所有问题。 13 结束语 本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。 本设计特点有 :( 1) 与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。 (2) 电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。 (3)基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。 (4)根据存储容量的大小,可以尽可能多的存储歌曲 ;( 5) 可以设计 彩灯外观效果,使音乐盒的功能更加丰富。 但由于 AT89C51 分辨率不是太高,音乐有点单调,另外,由于时间关系具体电路还有的地方不尽完善之处。 ( 6)因容量问题无法容纳五首歌曲 14 /***************************************************** Header: 单片机 :数码管显示音乐播放 File Name: 数码管显示音乐播放 Author: 戴启盛 Date: 2020/01/03 ******************************************************/ include define uchar unsigned char define uint unsigned int void delay(uint time) { //delay 一次即延时约 20ms uint i。 while(time) for(i=0。 i2580。 i++)。 //约 20ms } uint code timer[]={0x0000, //各音 符频率对应定时器初值 // timer[]为基本音符对应定时器初值, timerup[]为升音音符对应定时器初值。 // 1 2 3 4 5 6 7 0xf88c, 0xf95c, 0xfa15, 0xfa68, 0xfb05, 0xfb90, 0xfc0c, 0xfc44, 0xfcad, 0xfd0a, 0xfd32, 0xfd83, 0xfdc8, 0xfe06, 0xfe22, 0xfe57, 0xfe85, 0xfe9b, 0xfec2, 0xfee4, 0xff02 }。 uint code timerup[]={0x0000, // timer[]为基本音符对应定时器初值, timerup[]为升音音符对应定时器初值。 // 1 2 3 4 5 6 7 0xf8f3, 0xf9b9, 0xfa68, 0xfab9, 0xfb4c, 0xfbd0, 0xfc44, 0xfc7a, 0xfcdd, 0xfd32, 0xfd5d, 0xfda7, 0xfde8, 0xfe22, 0xfe3e, 0xfe6f, 0xfe9b, 0xfeaf, 0xfed3, 0xfef4, 0xff20 }。 uchar th,tl。 sbit out=P2^0。 uint i=0,j=0。 /****************************************************************************** 15 曲子存储格式:频率,节拍;频率,节拍; 0 x 0 0 0。 0 x 0 0 音域,正常为 01; 频率 1 ~ 7; 是 1 否 0 升音 节拍 1 ~ 15 00\02\03 降升八度 0 表示休止 是 1 否 0 顿音 若为 0 则表示停止标志 ********************************************************************************/ uchar code bas[]={//音符 0x01,0x08, 0x02,0x08, 0x03,0x08, 0x04,0x08, 0x05,0x08, 0x06,0x08, 0x07,0x08,// 0x08,0x08, 0x11,0x08, 0x12,0x08, 0x13,0x08, 0x14,0x08, 0x15,0x08, 0x16,0x08, 0x17,0x08, 0x21,0x08, 0x22,0x08, 0x23,0x08, 0x24,0x08, 0x25,0x08, 0x26,0x08, 0x27,0x08, 0,0 }。 uchar code red[]={ //红河谷 0x05,0x01, 0x11,0x01, 0x13,0x03, 0x13,0x01, 0x13,0x02, 0x12,0x01, 0x13,0x01, 0x12,0x01, 0x11,0x03, 0x05,0x01, 0x11,0x01, 0x13,0x02, 0x11,0x01, 0x13,0x01, 0x15,0x02, 0x14,0x01, 0x13,0x01, 0x12,0x04, 0x15,0x01, 0x14,0x01, 0x13,0x02, 0x13,0x01, 0x12,0x01, 0x11,0x02, 0x12,0x01, 0x13,0x01, 0x15,0x01,0x14,0x03, 0x06,0x01, 0x06,0x01, 0x05,0x02, 0x07,0x01, 0x11,0x01, 0x12,0x02, 0x13,0x01, 0x12,0x01, 0x11,0x04, 0,0 }。 uchar code xingyue[]={ //星月神话 0x15,0x01, 0x16,0x01, 0x15,0x01,0x14,0x01,0x15,0x02,0x14,0x01,0x13,0x01, 0x14,0x02, 0x13,0x01,0x12,0x01,0x11,0x04, 0x12,0x02,0x14,0x02, 0x13,0x02,0x11,0x02, 0x06,0x04, 0x14,0x01, 0x15,0x01,0x16,0x02, 0x15,0x01,0x14,0x01, 0x15,0x02,0x14,0x01, 0x13,0x01,0x14,0x02, 0x13,0x01,0x12,0x01, 0x11,0x04, 0x12,0x02,0x16,0x01, 0x13,0x01,0x13,0x02, 0x14,0x01,0x15,0x01, 0x14,0x04, 0x12,0x03,0x14,0x01, 0x13,0x02,0x14,0x01, 0x15,0x01,0x16,0x03, 0x21,0x01,0x16,0x03, 0x00,0x01, 0x12,0x03,0x14,0x01, 0x13,0x02,0x14,0x01, 0x15,0x01,0x14,0x04, 0x00,0x01, 0x14,0x01,0x15,0x01,0x16,0x02, 0x15,0x01,0x14,0x01,0x15,0x02,0x14,0x01,0x13,0x01, 16 0x14,0x02, 0x13,0x01,0x12,0x01,0x11,0x04, 0x12,0x02,0x14,0x02, 0x13,0x02,0x14,0x。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。