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

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



这两个函数是1602的写指令和写数据函数,根据时序图很容易就能写好

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
这则是对1602的初始化设置,至于指令啥意思我也记不得,要用的时候就翻翻书或者百度一下就好了。

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

在这里插入图片描述
这个大概就是对1602显示界面的一个设计吧。

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

在这里插入图片描述
主函数就是显示一下欢迎,然后根据按键来判断开始、停止和当前播放音乐。

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

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值