基于51单片机低中高音7键电子琴音乐播放器

基于51单片机电子琴音乐播放器

(仿真+程序+原理图+PCB+设计报告)

功能介绍

具体功能:

1.可以使用按键切换音乐播放模式和弹奏模式;

2.LED灯显示在使用哪种模式;

3.音乐播放模式播放音乐《两只老虎》;

4.弹奏模式可以切换低中高音;

5.数码管实时显示弹奏的音调;

​演示视频:

基于51单片机低中高音7键电子琴音乐播放器 

#include<reg51.h>
#include<intrins.h>
typedef unsigned int  uint;   
typedef unsigned char uchar;
sbit SDA1=P0^2;//串行数据输入,对应595的14脚SER
sbit SCL1=P0^1;//移位寄存器时钟输入,对应595的11脚SCK
sbit SCL2=P0^0;//存储寄存器时钟输入,对应595的12脚RCK
sbit W1=P0^3;
sbit W2=P0^4;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit D1=P2^6;//播放音乐模式
sbit D2=P2^7;//弹奏模式 
sbit k8=P3^2;//功能切换键
sbit k9=P3^3;//低音
sbit k10=P3^4;//中音
sbit k11=P3^5;//高音
sbit beep=P2^2;//蜂鸣器接口
uchar code table1[]={   0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F,/*9*/0x37,/*N*///中音	0x38,/*L*///低音0x76,/*H*///高音0x79 /*E*/};//共阴极数码管
uchar code table2[]={		 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//中音0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,//低音的高8位0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};//音阶频率表 低八位
uchar code table3[]={		0x8E,0xED,0x44,0x6B,0xB4,0xF4,0x2D,//中音0x21,0xDB,0x87,0xD7,0x68,0xE8,0x5B,//低音的低8位0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};
uchar code table4[]={1,2,3,1,      1,2,3,1,      3,4,5,    3,4,5,     5,6,5,4,3,1,    5,6,5,4,3,1,   1,12/*低音5*/,1,     1,12,1}; 
uchar code table5[]={4,4,4,4,   4,4,4,4,     4,4,8,    4,4,8,     2,1,2,1,4,4,    2,1,2,1,4,4,   4,4,6,      4,4,6};
uchar i;
uchar key,aa=0;
uchar bb,cc;
bit flag=0;
//延时子函数
void delay(uint z)
{uint x,y;for(x=z;x>0;x--)for(y=340;y>0;y--);		
}
void in(uchar Data)
{uchar i;for(i=0;i<8;i++)   //循环8次,刚好移完8位{Data<<=1;SCL1=CY;SDA1=1;        //先将移位寄存器控制引脚置为低    _nop_();_nop_();SDA1=0;}
}
void out()
{SCL2=0;   //先将存储寄存器引脚置为低_nop_(); SCL2=1;    //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。_nop_(); SCL2=0;
}
//初始化子函数
void init()
{beep=0;D1=1;D2=0;EA=1;//开总中断TCON=0x01;//外部中断0设置为边沿触发EX0=1;//开外部中断0ET0=1;ET1=1;TMOD=0x11;//定时器0,1工作在定时状态,均为方式1
}
//数码管显示子函数
void display1()
{in(table1[aa]);  //再传段码out();W1=0;;delay(1);             //延迟时间2ms以内W1=1;in(table1[cc+1]);  //再传段码out();W2=0;delay(1);             //延迟时间2ms以内W2=1; 
}
//高低音选择子函数
void yinjie()
{if(k10==0){	delay(5);if(k10==0){   aa=10;bb=0;//返回10为seg[10]显示C}}if(k9==0){	delay(5);if(k9==0){	aa=11;bb=1;//返回11为seg[11]显示L}}if(k11==0){	delay(5);if(k11==0){	aa=12;bb=2;//返回12为seg[12]显示H}}if(aa==0){aa=13;}
}
//播放音乐子函数
void display_music()
{	TH0=table2[table4[i]-1];TL0=table3[table4[i]-1];while(flag==0){	if(i<32){TR0=1;delay(57*table5[i]);i++;}if(i==32){i=0;}}	
}
//演奏模式子函数
void display_play()
{TR0=0;TR1=0;yinjie();in(table1[aa]);  //再传段码out();W1=0;;delay(1);             //延迟时间2ms以内W1=1;if(aa!=13&&flag==1){	if(k1==0){	TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;	while(k1==0){	cc=0;display1();}}if(k2==0){	TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k2==0){	cc=1;display1();}}	if(k3==0){		TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k3==0){	cc=2;display1();}}if(k4==0){TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k4==0){	cc=3;display1();		}}if(k5==0){	TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k5==0){cc=4;display1();}}if(k6==0){	TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k6==0){cc=5;display1();							}}if(k7==0){		TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;	while(k7==0){cc=6;display1();	}}		}
}

硬件设计

使用元器件:

单片机:AT89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

电阻 0.5欧;铝电解电容器 47uF;

74HC595驱动数码管模块;

晶振 12MHZ;瓷片电容器 30pF;

铝电解电容器 47uF;

发光二级管;蜂鸣器;

按键;单片机底座;

导线:若干;

结构图:

设计资料

01 仿真图

本设计使用proteus7.8和proteus8.9两个版本设计,向下兼容,无需担心!具体如图!

音乐模式

弹奏模式(低、中、高音)

02 原理图

本系统原理图采用Altium Designer19设计,具体如图!

03 程序

本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!

04 设计报告

八千字设计报告,具体如下!

05 设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、pcb电路图,参考论文、元件清单等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《黑马点评》Redis高并发项目实战笔记(上)P1~P31

P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 首先在数据库连接下新建一个数据库hmdp&#xff0c;然后右键hmdp下的表&#xff0c;选择运行SQL文件&#xff0c;然后指定运行文件hmdp.sql即可&#xff08;建议MySQL的版本在5.7及以上&#xff09;&#xff1a; 下面这…

【Vue + keep-alive】路由缓存

一. 需求 列表页&#xff0c;n 条数据项可打开 n 个标签页&#xff0c;同时1条数据项的查看和编辑共用一个标签页。如下所示&#xff1a; 参考 // 主页面 // 解决因 路由缓存&#xff0c;导致 编辑后跳转到该页面 不能实时更新数据 onActivated(() > {getList() })二. 实现…

5.2 配置静态路由

5.2.1 实验1&#xff1a;配置IPv4静态路由 1、实验目的 通过本实验可以掌握&#xff1a; 配置带下一跳地址的IPv4静态路由的方法。配置带送出接口的IPv4静态路由的方法。配置总结IPv4静态路由的方法。配置浮动IPv4静态路由的方法。代理 ARP的作用。路由表的含义。扩展ping命…

python|sort_values()排序

sort_value()可以用来对值&#xff08;比如说年龄&#xff09;进行排序 根据 ‘Age’ 列进行升序排序&#xff0c;如果 ‘Age’ 相同则根据 ‘Name’ 列进行降序排序 df_sorted_multi df.sort_values(by[Age, Name], ascending[True, False]) print(df_sorted_multi)

一款可自动跳广告的安卓App开源项目

开放权限有风险&#xff0c;使用App需谨慎&#xff01; gkd 基于 无障碍 高级选择器 订阅规则 的自定义屏幕点击 APP 功能 基于 高级选择器 订阅规则 快照审查, 它可以实现 点击跳过任意开屏广告/点击关闭应用内部任意弹窗广告, 如关闭百度贴吧帖子广告卡片/知乎回答底…

自动泊车车位检测

作者 | 机器学习AI算法工程 编辑 | 汽车人 原文链接&#xff1a;https://mp.weixin.qq.com/s/JaPUiKv_F9RObJKimg_7dQ APA 自动泊车相关的车位检测算法。 一、背景介绍 自动泊车大体可分为4个等级&#xff1a; 第1级&#xff0c;APA 自动泊车&#xff1a;驾驶员在车内&#xff…

虚拟网络设备与Linux网络协议栈

在现代计算环境中&#xff0c;虚拟网络设备在实现灵活的网络配置和隔离方面发挥了至关重要的作用&#x1f527;&#xff0c;特别是在容器化和虚拟化技术广泛应用的今天&#x1f310;。而Linux网络协议栈则是操作系统处理网络通信的核心&#x1f4bb;&#xff0c;它支持广泛的协…

基于BP神经网络的时间序列预测模型matlab代码

整理了基于BP神经网络的时间序列预测模型matlab代码&#xff0c;包含数据集。采用了四个评价指标R2、MAE、MBE、MAPE对模型的进行评价。BP模型在数据集上表现优异。 代码获取链接&#xff1a;基于BP神经网络的时间序列预测模型matlab代码 训练效果&#xff1a; 训练集数据的R…

服务器开发 Socket 相关基础

Socket 三要素 1.通信的目的地址&#xff1b; 2.使用的端口号&#xff1b; 3.使用的传输层协议&#xff08;如 TCP、UDP&#xff09; Socket 通信模型 服务端实现 #include <iostream> #include <unistd.h> #include <stdio.h> #include <sys/types.h&…

day13-实战:商城首页(上)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业 作业 .bg-backward {width: 60px; height: 60px;background: url(../ima…

LeetCode 热题 100 题解(二):双指针部分(1)

题目一&#xff1a;移动零&#xff08;No. 283&#xff09; 题目链接&#xff1a;https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同…

Python对docx文本一些操作

文本要是docx结尾 安装 Python-docx 包 读取word from docx import Document doc Document("c:/word22.docx") 获取word中的所有表格 from docx import Document doc Document("c:/word22.docx") doc.tables # 返回所有表格的list 获取表格中的总行…

uni-admin初始化一直提示未初始化数据库问题

uni-admin初始化&#xff0c;一直提示&#xff1a; “检测到您未初始化数据库&#xff0c;请先右键uni-admin项目根目下的 uniCloud/database 目录&#xff0c;执行初始化云数据库&#xff0c;否则左侧无法显示菜单等数据” 最后清除了localStorage&#xff0c;发现就好了。

盘点6个AI绘画免费网站,第一个不仅免费还好用!

随着人工智能技术的前沿发展&#xff0c;人工智能在各个领域发挥了重要作用。人工智能的受欢迎程度不断增加&#xff0c;引起了越来越多的关注。借助动画人工智能生成器&#xff0c;用户可以通过简单的操作获得专业的动画作品&#xff0c;而无需掌握高端技术。今天我们将盘点 1…

算法学习 -- 多路归并

思想 : 抽象出来一个例子 : 合并k个长度相等升序列表 : 抽象成一张表也就是 : 做法 : 用一个小根堆来维护 &#xff0c; 首先将每个序列的第一个元素放入队列中 &#xff0c; 然后模拟&#xff0c;每次取出队头&#xff0c;作为结果序列的下一个元素 &#xff0c; 然后向堆…

系统架构最佳实践 -- 人力资源(E-HR)应用架构设计

当谈到人力资源管理时&#xff0c;电子人力资源&#xff08;E-HR&#xff09;系统已经成为现代企业不可或缺的组成部分。E-HR系统的设计与实践对于提高组织的人力资源管理效率和员工体验至关重要。本文将探讨E-HR应用架构的设计与实践&#xff0c;以及如何借助信息技术优化人力…

第 6 章 Gazebo仿真环境搭建(自学二刷笔记)

6.6.4 Gazebo仿真环境搭建 到目前为止&#xff0c;我们已经可以将机器人模型显示在 Gazebo 之中了&#xff0c;但是当前默认情况下&#xff0c;在 Gazebo 中机器人模型是在 empty world 中&#xff0c;并没有类似于房间、家具、道路、树木... 之类的仿真物&#xff0c;如何在 …

第十四届蓝桥杯C/C++大学B组题解(二)

6、岛屿个数 #include <bits/stdc.h> using namespace std; const int M51; int T,m,n; int vis[M][M],used[M][M]; int dx[]{1,-1,0,0,1,1,-1,-1}; int dy[]{0,0,1,-1,1,-1,1,-1}; string mp[M]; struct node{//记录一点坐标 int x,y; }; void bfs_col(int x,int y){ qu…

Linux安全认证隐匿插件:PAM配置探秘

Linux安全认证隐匿插件&#xff1a;PAM配置探秘 初遇PAM&#xff1a;踏入未知领域 案例&#xff1a; 现网环境升级总是报错端口已被占用&#xff0c;原因是执行升级包中的一条命令时&#xff0c;返回多了一条日志打印&#xff0c;导致升级包中解析命令执行结果错误 当时是第…

【图论】图的存储--链式前向星存图法以及深度优先遍历图

图的存储 介绍 无向图-就是一种特殊的有向图-> 只用考虑有向图的存储即可 有向图 邻接矩阵邻接表 邻接表 存储结构: (为每一个点开了一个单链表,存储这个点可以到达哪个点) 1:3->4->null2:1->4->null3:4->null4:null 插入一条新的边 比如要插一条边&am…