DIY激光竖琴

这篇博客介绍了如何使用单片机制作激光竖琴,实现通过遮挡光路播放音乐的功能。内容涵盖了音乐播放、LED显示音调和节拍指示的设计,包括按键切换歌曲、音域调节以及通过光敏电阻检测光路。程序设计中利用定时器控制音调和节拍,同时讨论了音乐编码和单片机定时计数的关系。在实际制作中,还解决了蜂鸣器杂音和光敏电阻检测的问题,最终实现了预期效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来动手制作一个激光竖琴吧,撩妹一流。

打造一个多功能电子琴,通过光源来驱动光敏电阻等电路,单片机读取键值,通过键值控制定时器产生不同频率的方波从而驱动蜂鸣器产生不同频率的声音。以实现光控无弦电子琴。用三个LED表示低,中,高音域,七个LED表示音阶。

用数组存储两首音乐的音符,由单片机读取音符,计算频率和节拍。形成播放乐曲的效果。播放乐曲时对应的音域和音阶LED点亮。用一个按键进行歌曲的切换。
要求:
1.通过遮挡光路能够发出相应的音符并播放产生乐音,实现演奏;
2.演奏的同时可通过LED显示当前的音调,利于培养乐感
3.可以选定播放固定乐曲自动演奏,演奏时LED进行节拍指示;
4.在自动演奏和奏乐的过程中按停止键则中断演奏;
5.可以选择调节高中低音域。

本课题采用stc89c52单片机作为核心器件,实现基本的音乐弹奏、音乐播放、音调显示和音乐节拍指示的功能。 

1.音乐弹奏:通过程序识别光路中中遮挡的键的坐标, 然后、从计数初值表中读取对应的计数初值,赋值给定时器0,定时器产生对应频率的方波,达到播放对应音调的功能。
2.音乐播放:先建立一个包含一首音乐的音调与节拍的表。其中,音调就是0x01(低音、do)、0x12(中音、re)、0x23(高音、mi)之类的数;节拍就是0x02(半拍),0x04(一拍)之类的数。然后,根据音调读取计数初值,再将计数初值赋给定时器T0 -> 开启定时器T0 -> 读取节拍并延时 -> 关闭定时器T0 。这样就发出了一个音,然后再读下一个音的初值与节拍,重复上一个操作即可。(具体实现方法见附录总程序)
3.LED显示音调:
① 按键:读出按键坐标(x,y),用if语句来判断(x,y)该给数码管赋什么值,然后从uchar code num[] 表中读取这个值赋给数码管(例如P0)。
② 播放歌曲时:读入音调,根据音调的值来判断num[i]这个表中的i,再把num[i] 赋给P0口。
4.led指示节拍:采用定时器1来控制,作为节拍指示。
①按键时:根据按下的时长来控制led的点亮个数,并且是按一定的时间间隔逐个点亮;释放按键时,led灯按一定的时间间隔逐个熄灭,从而达到一种比较简单的节拍指示效果。
②播放音乐时:根据音符的节拍,控制点亮到哪一个灯,在点亮那个灯之前,前面的灯逐个等时距点亮。音符结束后,led灯全部一起熄 灭。这样,达到了一个精确显示节拍的效果。

程序框图
这里写图片描述
设计方案
单片机最小系统设计
复位与震荡电路
原件的参数如图所示。C1,C2 可采用30pF 无极性陶瓷电容;C3可采用10µF记性电解质电容。
这里写图片描述
电源电路
实际焊接中,考虑到单片机工作稳定性,在电源和地之间接了一个0.1uF的电容。

这里写图片描述

音阶指示LED,通过七个LED,指示音阶乐符。

这里写图片描述

这里写图片描述
音域指示LED ,通过三个LED,指示低中高音域。

这里写图片描述

通过七个光敏电阻分别与一个10K电阻串联,对光路进行检测
这里写图片描述

用两个按键,分别控制播放,切换音乐和切换演奏音域
这里写图片描述

蜂鸣器发声电路
这里写图片描述

音乐相关知识:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值