基于51单片机的音乐盒的设计-毕业设计内容摘要:

FH,TL0=0FFH。 当按键第一次产生中断信号时,播放 /暂停子程序改变标志符 R1,将其赋值为 01H。 此时播放器由暂停状态进入播放状态。 当按键第二次产生中断信号时, 播放 /暂停子程序判断 R1 是否为 02H 后,将 R1 再次赋值为 00H。 此时,播放器由播放状态进入暂停状态。 第 16 页 共 38 页 图 42 播放流程 代码实现如下: POP DPL。 恢复现场 POP DPH POP ACC SETB EA RETI。 中断返回 START_PAUSE:CPL F0。 开始 /暂停中断处理程序,将标置位取反 JB F0,RETURN。 为 1返回 SETB TR0。 为 0则播放 开始 标识符 R0=00H 暂停 R0是否为 00H 播放 /暂停 播放 将 R0 赋值 01H 将 R0 赋值 00H R0 是否为02H 第 17 页 共 38 页 RETURN: RETI。 中断返回 DELAY: MOV 27H,26H。 音 乐 演奏控制 D2: MOV 28H,125 D3: MOV 29H,248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RET LCD 显示模块软件设计 LCD 的 初始化函数 void LCD_Init(void) { LCD_Write_Com(0x38)。 /*显示模式设置 */ DelayMs(5)。 LCD_Write_Com(0x38)。 DelayMs(5)。 LCD_Write_Com(0x38)。 DelayMs(5)。 LCD_Write_Com(0x38)。 LCD_Write_Com(0x08)。 /*显示关闭 */ LCD_Write_Com(0x01)。 /*显示清屏 */ LCD_Write_Com(0x06)。 /*显示光标移动设置 */ DelayMs(5)。 LCD_Write_Com(0x0C)。 /*显示开及光标设置 */ LCD 与继电器的函数 LCD_Write_String(5,0,YinYueHe)。 while (1) 第 18 页 共 38 页 { if(key0==0) { DelayMs(20)。 //延时 if(key0==0) //条件选择 {while(!key0)。 JiDianQi=0。 // LCD的显示和继电器控制扬声器的同步 } } if(key1==0) { DelayMs(20)。 if(key1==0) {while(!key1)。 JiDianQi=1。 } 第 19 页 共 38 页 5 系统实现 本设计实现的是音乐盒的播放以及用 LCD 显示屏显示播放曲目,系统的硬件实现如下图所示: 图 51 歌曲切换 图 52 歌曲切换 第 20 页 共 38 页 硬件调试 按键控制的实现 本设计中通过按键实现控制上一曲、下一曲、音乐暂停和音乐开始,如下图: 图 53 显示电路的实现 LCD 显示 本设计中利用 LCD 显示实现歌曲曲目的显示,如下图: 图 54 LCD 显示 第 21 页 共 38 页 其他 软件部分主要是利用 KEIL 软件编写的音乐盒单片机程序的运行成功。 如图 图 55软件实现 第 22 页 共 38 页 总 结 单片机 音乐盒 的设计 在经历了近两个月后终于基本完成了,在当时选择这个题目时觉得一点思路都没有,之后在和老师讨论以及向其他同学请教之后确定了以STC89C52 单片机为基础的数字音乐 盒。 音乐盒的主要组成部分有 LCD 显示、单片机最小系统、继电器电路、扬声器组成;经过不断的修改与完善音乐盒可以实现使用 LCD 显示播放的歌曲名、用按键控制音乐的播放 /暂停和切换上一曲 /下一曲,通过这次的毕业设计我了解了如何使用 keil 软件来编写所需要的程序,怎么去合理的设计一个电路,更收获了单独做一个设计所需要的经验;这些都是在本次设计中我所学到的,让我受益匪浅。 然而,伴随着收获的往往还有遗憾,在这次的设计中我所做的音乐盒还有一些瑕疵和还未实现的功能;音乐盒是将放在 U 盘内的歌曲通过音频解码后使用由继电器控制 的扬声器播放的,但是,如果 U盘内的歌曲更换时, LCD 的显示必须要再次通过 Keil 软件来添加新的歌曲曲名,否则就无法显示着一点是十分麻烦的。 而且在原来的计划中,音乐盒播放时是想使用跑马灯来渲染的,但是由于程序编写存在问题使得跑马灯设计失败。 第 23 页 共 38 页 参考文献 [1]罗亚非 .凌阳 16 位单片机应用基础 [M],北京:北京航空航天大学出版社, 2020. [2] 雷思孝 .凌阳单片机原理及实用技术 [M],西安电子科技大学, 2020. [3] 黄智伟 .凌阳单片机课程设计指导 [M],北 京:北京航空航天大学出版社, . [4] 李广弟,朱月秀,王秀山 .单片机基础 [M],北京:北京航空航天大学出版社, . [5] 赵曙光,郭万有,杨颂华 .可编程逻辑器件原理开发与应用 [M],西安:西安电子科技大学, 2020. [6] 李建忠 .单片机原理及应用 [M],西安电子科技大学出版社, . [7] 康华光 . 模拟电子技术基础 (第四版 )[M], 武汉:华中理工大学出版社, 1999. [8] 谭浩强 .C 语言程序设计(第二版) [M],北京:清华大学出版社, 1991. [9] 陈小忠,黄宁 . 单片机接口技术实用子程序 [M],北京:北京人民邮电出版社, 2020. [10] 黄智伟 .全国大学生电子设计竞赛系统设计 [M],北京:北京航空航天大学出版社,. [11] 贾立新,王涌 .电子系统设计与实践 [M],北京:清华大学出版社, 2020. 第 24 页 共 38 页 附录 A 元器件清单 表 1 元器件清单 STC89C52 1 个 LCD 显示屏 1 个 扬声器 1 个 继电器 1 个 按键 5 个 电源线 1 根 第 25 页 共 38 页 附录 B 源程序 include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 include define RS_CLR RS=0 define RS_SET RS=1 define RW_CLR RW=0 define RW_SET RW=1 define EN_CLR EN=0 define EN_SET EN=1 define _Nop() _nop_() //定义空指令 define DataPort P0 sbit RS = P2^4。 //定义端口 sbit RW = P2^5。 sbit EN = P2^6。 sbit SDA=P2^1。 //模拟 I2C数据传送位 sbit SCL=P2^0。 //模拟 I2C时钟控制位 sbit key0=P1^0。 sbit key1=P1^1。 sbit key2=P1^2。 sbit key3=P1^3。 sbit JiDianQi=P1^4。 bit ack。 //应答标志位 void DelayUs2x(unsigned char t)。 //函数声明 void DelayMs(unsigned char t)。 /* uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量, 其值的范围是 0~255 这里使用晶振 12M,精确延时请使用汇编 ,大致延时 长度如下 T=tx2+5 uS */ void DelayUs2x(unsigned char t) { while(t)。 } 第 26 页 共 38 页 /* mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振 12M,精确延时请使用汇编 */ void DelayMs(unsigned char t) { while(t) { //大致延时 1mS DelayUs2x(245)。 DelayUs2x(245)。 } } /* 启动总线 */ void Start_I2c() { SDA=1。 //发送起始条件的数据信号 _Nop()。 SCL=1。 _Nop()。 //起始条件建立时间大于 ,延时 _Nop()。 _Nop()。 _Nop()。 _Nop()。 SDA=0。 //发送起始信号 _Nop()。 //起始条件锁定时间大于 4μ _Nop()。 _Nop()。 _Nop()。 _Nop()。 SCL=0。 //钳住 I2C总线,准备发送或接收数据 _Nop()。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。