一、大致描述
这是我们单片机课程设计中的一个实验,用51单片机设计一个有下面这三个要求的电子琴,
资料我上传到了百度网盘,链接:传送,密码:gyg6
二、大致原理
其实我的代码也大部分是从网上参考的别人的代码,但根据我们的课程设计要求更改了部分,然后根据我们的实验板(普中科技A7)的硬件资源做了部分IO等线路的调整。
1.八音弹奏
弹奏部分相对来说会简单一点,因为只需要用到独立按键和蜂鸣器
上面是独立按键模块的原理图(在资料中有),蜂鸣器也只有一个供电引脚。
八音弹奏的核心部分就是使用定时器来达到让蜂鸣器以不同的频率发音,从而达到发出不同音调的目的。
上面是我设计的八个音调的初值设定,其实音调的计算也是有规律的,你可以计算下,上边的频率就是成等比的,公比为1.059463。
上边就是定时器里面的代码了,其实也是很简单的。
在主程序中,我们只需要循环判断按键的值,然后根据键值来判断需要音调的频率,通过前面的初值矩阵就可以给定时器赋初值了(这里我同过High和Low分别代表高八位和低八位寄存器)。
2.24C02存取并播放
存取这里最主要的就是要能看懂这个模块的时序图(相信这应该是我们学硬件的基本功了),看懂时序图,把存入和读取函数写出来,在主程序中存入和中断中读取并播放(这里需要注意的就是外部中断和定时器中断之间的优先级关系)就很简单了。
进入外部中断读取简谱后的播放函数:
3.点阵显示
点阵显示这里有一些瑕疵,因为是放在播放函数里边的,所以每次的延时我们肉眼可以看到,因此就会有点阵闪烁显示的情况,因为已经到达课设要求了就没有找这方面的资料解决,如果感兴趣的话可以试试更改我放在上面的资料中的代码:
点阵显示需要用到74HC595串转并模块,所以也还是需要看时序图写函数,这个相比前边的24C02存储模块的简单多了,上面的代码我只截了一部分,具体可以在资料中看到。
好了,大致就是这样了。这次的课设其实对我来说还是收获挺大的,学到了很多之前自学的时候没有留意到的一些细节问题。希望这可以帮助到看到我这篇博客的你们吧😊。
加油!!!干饭人~