找回密码
 注册

QQ登录

只需一步,快速开始

搜索

基于51单片机的电子琴16键程序

[复制链接]
山海致远 发表于 2020-1-22 23:10:35 | 显示全部楼层 |阅读模式
1.由4X4组成16个按钮矩阵,设计成16个音。
2.可随意弹奏想要表达的音乐。附件里面有汇编和C两种: 51单片机电子琴仿真文件和程序源码.zip (139.94 KB, 售价: 1 E币)
1.png
2.png
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示
音符        频率(HZ)        简谱码(T值)                  音符        频率(HZ)        简谱码(T值)
低1 DO        262        63628                # 4 FA#        740        64860
#1 DO#        277        63731                中 5 SO        784        64898
低2 RE        294        63835                # 5 SO#        831        64934
#2 RE#        311        63928                中 6 LA        880        64968
低 3 M        330        64021                # 6        932        64994
低 4 FA        349        64103                中 7 SI        988        65030
# 4 FA#        370        64185                高 1 DO        1046        65058
低 5 SO        392        64260                # 1 DO#        1109        65085
# 5 SO#        415        64331                高 2 RE        1175        65110
低 6 LA        440        64400                  # 2 RE#        1245        65134
# 6        466        64463                高 3 M        1318        65157
低 7 SI        494        64524                高 4 FA        1397        65178
中 1 DO        523        64580                # 4 FA#        1480        65198
# 1 DO#        554        64633                高 5 SO        1568        65217
中 2 RE        587        64684                # 5 SO#        1661        65235
# 2 RE#        622        64732                高 6 LA        1760        65252
中 3 M        659        64777                # 6        1865        65268
中 4 FA        698        64820                高 7 SI        1967        65283
下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据
低音0-19之间,中音在20-39之间,高音在40-59之间
              1     2     3     4     5     6     7     8     9    10
TABLE:        DW 0    ,63628,63835,64021,64103,64260,64400,64524,0    ,0
        DW 0    ,63731,63928,0    ,64185,64331,64463,0    ,0    ,0
        DW 0    ,64580,64684,64777,64820,64898,64968,65030,0    ,0
        DW 0    ,64633,64732,0    ,64860,64934,64994,0    ,0    ,0
        DW 0    ,65058,65110,65157,65178,65217,65252,65283,0    ,0
        DW 0    ,65085,65134,0    ,65198,65235,65268,0    ,0    ,0
        DW 0
unsigned int code tab[]={64021,64103,64260,64400,
                          64524,64580,64684,64777,
                          64820,64898,64968,65030,
                          65058,65110,65157,65178};

db定义字节型的变量   dw定义字类型(两个字节)变量    dd定义双字类型(两个字)变量
2、音乐的音拍,一个节拍为单位(C调)
曲调值        DELAY                  曲调值        DELAY
调4/4        125ms                  调4/4        62ms
调3/4        187ms                  调3/4        94ms
调2/4        250ms                  调2/4        125ms
对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-26 00:31

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表