51学习记录基于51单片机的简单音乐盒

这个音乐盒我很久很久以前句尝试做过,当时学的时候几个中断都没搞清楚是咋回事,所以一直弄明白代码啥意思。不过,现在倒是能看懂代码了,可惜还是看不懂简谱,储存音乐的数组还是得到处找合适的。我这种从来没上过音乐课的人看不懂也正常吧,只能这么说服自己了。
下面还是原理图
51学习记录基于51单片机的简单音乐盒_第1张图片
原图很简单,四个按键开始暂停上一首下一首,启动以后显示欢迎,按开始就播放第一首音乐,并且在1602上显示当前播放的第几首音乐。下一首切换下一首音乐,上一首切换上一首音乐。其他好像就没啥了。
程序部分
在这里插入图片描述
这是为按键设置的几个全局变量作为按键的标记。
51学习记录基于51单片机的简单音乐盒_第2张图片
除了为按键设置的标记,其他这是为了蜂鸣器播放音乐做的准备,这里参考的主要是这篇文章https://blog.csdn.net/weixin_30802273/article/details/95788452包括后面播放音乐的函数的主体也是这篇文章上的。

51学习记录基于51单片机的简单音乐盒_第3张图片
51学习记录基于51单片机的简单音乐盒_第4张图片
这两个函数是1602的写指令和写数据函数,根据时序图很容易就能写好

51学习记录基于51单片机的简单音乐盒_第5张图片

这个函数是在1602上显示一个数字,x、y分别是行和列,dat是显示的数据,在后面用到的时候主要是用于显示数字,然后数字加上’0’或0x30以后就能转变我ASCII对应的数字了。

51学习记录基于51单片机的简单音乐盒_第6张图片

这个是在1602上显示字符串的函数,用法和上面显示一个字符的函数基本一样。

51学习记录基于51单片机的简单音乐盒_第7张图片
这则是对1602的初始化设置,至于指令啥意思我也记不得,要用的时候就翻翻书或者百度一下就好了。

51学习记录基于51单片机的简单音乐盒_第8张图片
这是对中断的设置,T0用于控制蜂鸣器的频率,T1则控制一个音节演奏时间,T0采用中断方式,T1则是查询方式,然后T1装载了初值的,计时时间10ms,这个时间是一个基础值,在具体用的时候是一个音节演奏时间是多少个10ms。因为每个音节频率不同,所以初值在后面音乐播放函数中计算出来。
对于T0的中断服务子函数就是装载初值和蜂鸣器I/O口电平翻转,这就不放图片了

51学习记录基于51单片机的简单音乐盒_第9张图片
这个大概就是对1602显示界面的一个设计吧。

51学习记录基于51单片机的简单音乐盒_第10张图片
这里就是音乐播放的函数了,前面说了主要是参考是那篇文章,使用的源代码部分就不是说了,因为我对实在是太缺乏关于音乐放的知识了,大概就只能,明白不同音调频率不同,然后演奏的时间也会有所不同,但是具体的不同在哪我就搞不明白了,这部分就直接用的那篇文章中的源代码。
这一部分是加入的部分
51学习记录基于51单片机的简单音乐盒_第11张图片
这是按键的操作。独立按键嘛,只要判断I/O的电平就好了。然后用前面的全局变量做好相应的标记就行了。

51学习记录基于51单片机的简单音乐盒_第12张图片
主函数就是显示一下欢迎,然后根据按键来判断开始、停止和当前播放音乐。

源文件
百度网盘:链接:https://pan.baidu.com/s/1tEDsRuDV6GC2BSSZoIyYuw
提取码:w4mc
曲奇云:https://quqi.avyeld.com/s/3914072/tlLuowJJAP82Dk2k

你可能感兴趣的:(51学习记录)