基于AT89C52单片机的简易电子琴设计与仿真

news2024/10/7 16:24:58

点击链接获取Keil源码与Project Backups仿真图:
https://download.csdn.net/download/qq_64505944/87853299?spm=1001.2014.3001.5503
在这里插入图片描述

源码获取
主要内容:
本设计是基于51系列的单片机进行的设计,利用所给键盘的八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。并在LED上相应的设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用KEIL公司的UVision4软件,采用汇编语言进行编程,并用proteus仿真。
基本要求:
1、利用所给键盘的八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。
2、当系统扫描到键盘上有键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键的发音程序,发出后按的键的音。
主要参考资料:
[1] 刘润华,刘立山.模拟电子技术[J].山东:石油大学出版社,2003.
[2] 苏成富.彩灯控制器[J].北京:电机电器技术,2000,(01).
[3] 祝富林.音乐彩灯电路CS9482[J].北京:电子世界,1995,(12).
[4] 彭介华.电子技术课程设计指导[J].北京:高等教育出版社,1997.

           完  成  期  限:                    
        指导教师签名:                    
           课程负责人签名:                    

摘 要

在电子音乐领域,自从20世纪末期MIDI(乐器数字化接口)推出和逐步规范化后,各种乐器及众多数码音视频产品中采用MIDI技术已逐渐成为一种潮流。但是当前各厂商的电子琴产品通常使用自己设计的专用音源,并且软硬件均不对外公开,阻碍了MIDI技术的交流。作者在开发基于MIDI模块的音乐发生器的过程中,进行了用单片机控制通用MIDI音源模块的相关功能制作电子琴的实践,制作出具有8个按键的 MIDI电子琴,该琴支持单音和复音弹奏,单片机以标准的MIDI波特率传送信息,通过串口连接蜂鸣器,从而获得优美的乐音。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用KEIL公司的UVision4软件,采用汇编语言进行编程,并用proteus仿真。
关键字:计算器;电子琴;AT89C51

目 录
1 概述 1
1.2 电子琴技术状况 1
1.3 本设计任务 2
2 总体方案论证与设计 2
2.1 播放模块 2
2.2 按键控制模块 2
2.3 总体硬件组成框图 3
3.1 中心控制模块的硬件设计 3
3.2 播放模块的硬件设计 3
3.3 按键控制模块的硬件设计 4
4 系统的软件设计 4
4.1 下位机软件流程 5
4.2上位机软件 5
5 系统调试与测试结果分析 9
5.1 使用的仪器仪表 9
5.2 系统调试 9
5.2.1硬件调试 9
5.2.2软件调试 10
5.2.3硬件软件联调 10
5.3 测试结果 10
总结 10
参考文献 10

1 概述
在电子音乐领域,自从20世纪末期MIDI(乐器数字化接口)推出和逐步规范化后,各种乐器及众多数码音视频产品中采用MIDI技术已逐渐成为一种潮流。但是当前各厂商的电子琴产品通常使用自己设计的专用音源,并且软硬件均不对外公开,阻碍了MIDI技术的交流。作者在开发基于MIDI模块的音乐发生器的过程中,进行了用单片机控制通用MIDI音源模块的相关功能制作电子琴的实践,制作出具有8个按键的 MIDI电子琴,该琴支持单音和复音弹奏,单片机以标准的MIDI波特率传送信息,通过串口连接蜂鸣器,从而获得优美的乐音。

1.1电子琴概述
键盘乐器,采用半导体集成电路,对乐音信号进行放大,通过扬声器产生音响。发音音量可以自由调节。音域较宽,和声丰富,甚至可以演奏出一个管弦乐队的效果,表现力极其丰富。它还可模仿多种音色,甚至可以奏出常规乐器所无法发出的声音(如人声,风雨声等)。另外,电子琴在独奏时,还可随意配上类似打击乐音响的节拍伴奏,适合于演奏节奏性较强的现代音乐。另外,电子琴还安装有混响、回声、延长音、震音和颤音等多项功能装置,表达各种情绪时运用自如。
  电子琴是电声乐队的中坚力量,常用于独奏主旋律并伴以丰富的和声。还常作为独奏乐器出现,具有鲜明时代特色。但电子琴的局限性也十分明显:旋律与和声缺乏音量变化,过于协和、单一;在模仿各类管、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。电子琴的演奏有较大一部分是通过自动和弦伴奏来配合完成的,在音乐中和弦的连接推动了旋律地进行,不同的和声连接,形成了不同的音乐色彩。
1.2电子琴技术状况
本次设计提出了用AT89C51单片机为核心控制元件,设计一个简易的电子琴. 本方案以AT89C51单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块在主控模块上设有16个按键和扬声器.根据使用者的操作随意弹奏想要表达的音乐。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号。
1.3本设计任务
利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。当系统扫描到键盘上有键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键的发音程序,发出后按的键的音。
2 总体方案论证与设计
本系统采用单片机AT89C51为电子琴的控制核心,系统主要包括播放模块、按键控制模块。下面对各模块的设计逐一进行论证比较。
2.1 播放模块
播放模块是喇叭构成。它几乎不存在噪声,音响效果较好。而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。
2.2按键控制模块
电子琴设有8个按键,其中7个作为音符输入,另外1个作为模式转换按键,实现用户自弹作曲。7个按键分别代表7个音符,包括中音段的全部音符。通过软硬件设计,模式转换按 键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现自编歌曲。当需要取消电子琴编曲功能时,再次按下模式转换按键引起外部中断.即可退出电子琴功能而返回原 来按键播放处。

2.3总体硬件组成框图

图2-1 总体硬件组成框图
3 系统硬件设计
为使该模块化电子琴控制系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。硬件电路包括中心控制模块、播放模块、按键控制模块三大模块。
3.1 中心控制模块的硬件设计
本次设计中中心控制模块是采用AT89C51单片机来控制整个系统。其中P1口作为输入口,连接蜂鸣器驱动电路,而P2口连接按键控制电路, 从而实现播放音乐的功能。
3.2 播放模块的硬件设计
如下图所示,播放模块其实就是喇叭,它接到P1.0口上当有按键按下时,它就会发出声音…

在这里插入图片描述

图 3-1 播放模块硬件连接图
3.3 按键控制模块的硬件设计
在P.2口十连有8个按键并加有8个拉电阻.它们一端接5伏电源,一端接地.在仿真时,只要有一个键被按下,并被单片机扫描到,则会使播放器发出声音.

在这里插入图片描述

图3-2按键控制电路图
4 系统的软件设计
软件是该电子琴控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。
4.1 下位机软件流程
本系统中下位机(单片机89C51)的主要功能就是实现音乐播放功能。其主程序流程如图4-1所示。

图4-1 软件程序流程图
4.2上位机软件
本系统的上位机软件主要是编辑电子琴播放状态的内容,在设计中采用c语言编写了电子琴控制系统控制和播放内容的程序。

 
       #include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit BEEP=P2^7;
sbit K1=P2^0;
sbit K2=P2^1;
sbit K3=P2^2;
sbit K4=P2^3;
sbit K5=P2^4;
sbit K6=P2^5;
sbit K7=P2^6;
sbit K8=P2^7;
uchar th0_f;
uchar tl0_f;
char code segtable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code freq[36*2]={
	0xA9,0xEF,
	0x93,0xF0,
	0x73,0XF1,
	0x49,0xF2,
	0x07,0xF3,
	0xC8,0xF3,
	0x73,0xF4,
	0x1E,0xF5,
	0xB6,0xF5,
	0x4C,0xF6,
	0xD7,0xF6,
	0X5A,0xF7,
	0xD8,0xF7,
	0x4D,0xD8,
	0xBD,0xF8,
	0x24,0XF9,
	0x87,0xF9,
	0xE4,0xF9,
	0x3D,0xFA,
	0x90,0xFA,
	0xDE,0xFA,
	0x29,0xFB,
	0x6F,0xFB,
	0xB1,0xFB,
	0xEF,0xFB,
	0x2A,0xFC,
	0x62,0xFC,
	0x95,0xFC,
	0xC7,0xFC,
	0xF6,0xFC,
	0x22,0xFD,
	0x4B,0xFD,
	0x73,0xFD,
	0x98,0xFD,
	0xBB,0xFD,
	0xDC,0xFD,
};
timer0() interrupt 1
{
	TL0=tl0_f;TH0=th0_f;
	BEEP=~BEEP;
}
void main(void)
{
	ulong n;
	uchar code jie[21]={0,2,4,5,7,9,11,12,14,16,17,19,21,23,24,26,28,29,31,33,35};
		TMOD =0x01;
		TR0=0;
		ET0=1;
		EA=1;
		while(1)
		{
			if(!K1)
			{
		P0=segtable[1];
		tl0_f=freq[jie[8]*2];
		th0_f=freq[jie[8]*2+1];
		TR0=1;
	for(n=0;n<1000;n++);
			}
			if(!K2)
			{
		P0=segtable[2];
	tl0_f=freq[jie[9]*2];
	th0_f=freq[jie[9]*2+1];
	TR0=1;
	for(n=0;n<1000;n++);
			}
			if(!K3)
			{
		P0=segtable[3];
	tl0_f=freq[jie[10]*2];
	th0_f=freq[jie[10]*2+1];
	TR0=1;
	for(n=0;n<1000;n++);
}
if(!K4)
{
	P0=segtable[4];
	tl0_f=freq[jie[11]*2];
	th0_f=freq[jie[11]*2+1];
	TR0=1;
	for(n=0;n<1000;n++);
}
if(!K5)
{
	P0=segtable[5];
	tl0_f=freq[jie[12]*2];
	th0_f=freq[jie[12]*2+1];
	TR0=1;
	for(n=0;n<1000;n++);

if(!K6)
{
	P0=segtable[6];
tl0_f=freq[jie[13]*2];
	th0_f=freq[jie[13]*2+1];
	TR0=1;
	for(n=0;n<1000;n++);
}
if(!K7)
{
	P0=segtable[7];
tl0_f=freq[jie[14]*2];
th0_f=freq[jie[14]*2+1];
TR0=1;
for(n=0;n<1000;n++);
}
if(!K8)
{
	P0=segtable[8];
	tl0_f=freq[jie[15]*2];
th0_f=freq[jie[15]*2+1];
	TR0=1;
for(n=0;n<1000;n++);
}
}
}

5 系统调试与测试结果分析
5.1 使用的仪器仪表
  单片机仿真器  KEILC
蜂鸣器 LS1
5.2 系统调试
根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:中心控制模块的调试,音乐播放模块的调试,按键控制模块的调试等,最后将各模块组合后进行整体测试。
5.2.1硬件调试
对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。
5.2.2软件调试
软件调试采用单片机仿真器KEILC及微机,将编好的程序进行调试,主要是检查语法错误。
5.2.3硬件软件联调
将调试好的硬件和软件进行联调,主要调试系统的实现功能。
5.3 测试结果
此次系统设计结果较好,分别播动8个按键会发出8种高低不同的声音,如果送入音乐程序,则会播放歌曲。

总结
经过两周的忙碌,我的电子琴终于仿真成功.虽然失败了几次,但经过老师对硬件连接图的纠正,自己又调整.了程序最后终于方仿真成功.心情很激动,一方面:觉得很有成就感;另一方面:收获很大,:不但锻炼了编程的能力,而且通过编程对硬件的整个流程了解了。在仿真过程中,我犯了两个低级错误:一个是用了没有模型的元件,另一个是喇叭可以不用驱动就能发出声音。经老师提醒,我改正了连接图。结果成功了。用单片机控制播放模块和按键控制模块制作出的电子琴,结构简单,可靠性高,并且价格低廉,具有实用的价值。这种电子琴能够支持单音和复音弹奏,如果与高品质的音源芯片连接,音质更可与高档电子琴相媲美。

参考文献
[1]张毅刚,彭喜元。单片机原理与应用[M](十)北京:高等教育出版社,2007.10
[2] 张毅刚。MCS-51单片机应用设计[M]。哈尔滨。哈尔滨工业大学出版,1999
[3] 李广弟。单片机基础[M]。北京:北京航天航空大学出版社,2001
[4] 杨振江。智能仪器与数据采集系统的新器件及应用[M]。西安:西安电子科技大学出版社,2001
[5] 彭介华.电子技术课程设计指导[J].北京:高等教育出版社,1997.

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

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

相关文章

基于单片机的红外光控灯系统

摘要 随着时代的飞逝&#xff0c;人们对更加先进、更加环保、更加节约资源、更加可持续地满足自身需要&#xff0c;高科技的运用正变成当今时代发展的动力&#xff0c;其对电子行业有着重要影响。近年来&#xff0c;智能化技术被广泛运用到各种家庭设备上&#xff0c;如智能洗衣…

如何分析OOM文件

一、下载dump文件。 需联系运维同事获取dump文件。dump文件的生成&#xff0c;需在jvm启动时通过添加启动参数&#xff1a;-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath。因此直接到设置的目录文件下下载下来即可。后缀名一般为hprof。有些为dump后缀&#xff0c;改为hpro…

国际儿童节

节日由来 国际儿童节儿童作品画(11张) 国际儿童节的设立&#xff0c;和发生在二战期间一次屠杀——利迪策惨案有关。1942年6月10日&#xff0c;德国法西斯枪杀了捷克利迪策村16岁以上的男性公民140余人和全部婴儿&#xff0c;并把妇女和90名儿童押往集中营。村里的房舍、建筑物…

MySQL中字符串查询效率大比拼

背景 最近有个同事对字符串加索引&#xff0c;加完后&#xff0c;发现多了个奇奇怪怪的数字 执行的SQL如下&#xff1a; alter table string_index_test add index idx_name (name) USING BTREE;这个奇怪数字就是191&#xff0c;它很是疑惑&#xff0c;也没指定索引的长度 通…

SYSU程设c++(第十四周)函数模板、类模板

函数模板 在函数前加template<typename T1,typename T2,typename T3....>&#xff0c;T1,T2,T3叫模板形参 函数形参中的类型必须涵盖所有模板形参&#xff0c;不然报错 此时dv1,dv2只要相同类型就可以Swap (dv1, dv2); 但如果dv1,dv2不同类型就需要显示转换 Swap <dou…

五款电脑上的小众软件,简洁干净,功能强悍,值得收藏

电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.系统优化——Dism Dism是一款用于优化和维护Windows系统的工具。它可以让你对系统进行清理,备份,还原,更…

二叉树和堆详解

一、树的概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 1.2树的相关基本概念 空集合也是树&#…

macOS Ventura 13.5beta2 (22G5038d)发布

系统介绍 黑果魏叔 6 月 1 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;22G5038d&#xff09;&#xff0c;本次更新距离上次发布隔了 12 天。 macOS Ventura 带来了台前调度、连续互通相机、Fac…

数据结构--不带头的单向链表

不带头的单向链表 链表的结构注意点&#xff08;贯穿于整个链表的注意事项&#xff09;结点类型的定义申请新结点函数链表的打印链表的尾插链表的头插链表的尾删链表的头删链表的查找和修改在pos之前插入在pos位置删除在pos之后插入&#xff08;通过交换值&#xff0c;达到在po…

SpringBoot集成XXL-JOB

一、调度中心 首先下载XXL-JOB GitHub&#xff1a;https://github.com/xuxueli/xxl-job GitEE&#xff1a;https://gitee.com/xuxueli0323/xxl-job 项目使用2.3.1版本&#xff1a; https://github.com/xuxueli/xxl-job/releases/tag/2.3.1 使用IDEA打开项目 xxl-job-admin&…

Nginx网站服务详解(Nginx服务的主配置文件 ——nginx.conf)

目录 一、全局配置的六个模块简介 二、Nginx配置文件的详解 1&#xff09;全局配置模块 2&#xff09;I/O 事件配置 3&#xff09;HTTP 配置 4&#xff09;web服务监听设置 5&#xff09;其他设置 location常见配置指令&#xff1a;“root、alias、proxy_pass 对比&a…

【高危】Windows LDAP 服务远程代码执行漏洞

漏洞描述 LDAP (Lightweight Directory Access Protocol)是一个建立在TCP/IP协议栈上的目录访问协议&#xff0c;支持Active Directory服务的Windows服务器通常也支持LDAP协议。 Windows 10至11、Windows Server 2008至2022版本存在远程代码执行漏洞。当目标服务器开启LDAPS时…

PointNet、PointNet++代码解析

最远点采样FPS代码解析 注意&#xff1a;一般深度学习框架中都会使用批操作&#xff0c;来加速收敛。 因此采样函数的输入输出应当也要包含批。 def farthest_point_sample(xyz, npoint):"""Input:xyz: pointcloud data, [B, N, C]npoint: number of samplesR…

2023-6-1-Qt是什么

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

Python编程环境搭建:Mac OS安装Python环境

和 Linux 发行版类似&#xff0c;最新版的 Mac OS X 也会默认自带 Python 2.x。 我们可以在终端&#xff08;Terminal&#xff09;窗口中输入python命令来检测是否安装了 Python 开发环境&#xff0c;以及安装了哪个版本&#xff0c;如下所示&#xff1a; c.biancheng.net:~ m…

仙境传说ro服务端搭建服务器架设教程

仙境传说ro服务端搭建服务器架设教程 仙境传说&#xff1a;改编同名幻想漫画有代表科幻的中世纪的村庄、精灵居住的森林、烈日曝晒的沙漠、东洋科幻风格的村庄等。深受玩家的热爱&#xff0c;爱与勇气的冒险即将拉开帷幕这一次梦想由我们来守护仙境传说RO全屏大世界冒险RPG RO…

C++核心编程——初识STL——STL的基本概念和六大组件

文章目录&#x1f4ac; 一.前言二.STL基本概念和组成①容器②算法③迭代器④空间配置器⑤适配器⑥仿函数 三.STL工作机制 一.前言 长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西&#xff0c;以及一种得以制造出“可重复运用的东西”的方法,让程序员的心血不止于…

Redis中的动态字符串(SDS)

动态字符串&#xff08;Simple Dynamic String&#xff0c;SDS&#xff09; Redis是用C语言编写的。Redis中的简单动态字符串的设计与实现&#xff0c;兼顾了操作高效、能保存任意数据、以及节省内存的需求。Redis并且还兼容C语言的原生字符串API&#xff0c;从而提高了代码的…

【MTGCD-Net】Detecting Building Changes with Off-Nadir Aerial Images

目录 1.背景 2.网络总体结构 2.1中间辅助任务预测 2.2多任务特征引导模块

【Android】Binder(二)内存划分和Binder实现一次拷贝

MMAP介绍 在 Android 中&#xff0c;Binder 通信机制中使用了 mmap&#xff08;Memory Map&#xff09;技术&#xff0c;用于实现进程间的共享内存。mmap 是一种内存映射文件的方式&#xff0c;可以将一个文件或者设备映射到进程地址空间的一段连续的地址区域中&#xff0c;这…