【TB作品】玩具电子琴,ATMEGA128单片机,Proteus仿真
题目 7 :玩具电子琴
基于单片机设计一能够发出中音八个音阶的音乐信号的电子琴,能够实现弹奏和音符显示功
能。
具有 8 个音阶按键,每按下一个按键时,所对应的 LED 点亮,音符进行显示。
具体要求如下:
(1)具有 8 个音阶按键,每按下一个按键时,扬声器发声,所对应的 LED 点亮。
(2)数码管显示当前的音符(用数字表示,简谱)。
(3)可通过单片机控制音量大小,并进行音量显示。
(4)音阶频率信号由单片机产生。
表 2 音阶/频率对照表
音阶 1 2 3 4 5 6 7 1
频率/Hz 262 294 330 349 392 440 494 523
可添加符合题目背景的其它合理功能。
玩具电子琴设计与实现
本文介绍了一款基于单片机的玩具电子琴的设计与实现。该电子琴能够发出中音八个音阶的音乐信号,具备弹奏和音符显示功能,同时能够通过按键控制音量大小,并显示当前音量。
1. 功能介绍
- 具有8个音阶按键,每按下一个按键时,扬声器发声,并点亮对应的LED。
- 数码管显示当前音符(用数字表示,简谱)。
- 通过按键控制音量大小,并在数码管上显示当前音量。
- 音阶频率信号由单片机产生。
2. 硬件设计
2.1 按键扫描
按键扫描采用PINE端口的8个输入,每个按键对应一个输入引脚。当按键按下时,扫描函数keyscan
返回对应按键的编号。
unsigned char keyscan( void )
{if ( (PINE & 0x01) == 0 )return(1);if ( (PINE & 0x02) == 0 )return(2);if ( (PINE & 0x04) == 0 )return(3);if ( (PINE & 0x08) == 0 )return(4);if ( (PINE & 0x10) == 0 )return(5);if ( (PINE & 0x20) == 0 )return(6);if ( (PINE & 0x40) == 0 )return(7);if ( (PINE & 0x80) == 0 )return(8);return(0);
}
2.2 数码管显示
数码管采用共阴极数码管,通过端口PD和PG控制显示。xianshi
数组用于存储需要显示的数字,LEDData
数组用于存储对应段选的数据。
unsigned char xianshi[2];
unsigned char LEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
定时器0用于数码管的动态扫描,每隔一段时间切换显示。
char i=0;
#pragma interrupt_handler TIMER0_ISR:17
void TIMER0_ISR(void)
{TCNT0 = 10;i++;if(i==2)i=0;PORTD = 0XFF; if(i==0){PORTG &= ~0x08;PORTG |= 0x04;PORTD = ~xianshi[0];}if(i==1){PORTG &= ~0x04;PORTG |= 0x08;PORTD = ~xianshi[1];}
}
2.3 PWM信号产生
PWM信号用于控制扬声器发声,通过设置定时器1的输出比较寄存器OCR1A和周期寄存器ICR1来生成不同频率的音阶。
void Set_waveform_parameters( unsigned int mu_volume, unsigned int fre_t )
{if ( mu_volume == 0 || fre_t == 0 ){OCR1A = 0;ICR1 = 0;return;}ICR1 = 57600 / fre_t;OCR1A = mu_volume * 5060 / fre_t;
}
3. 软件设计
在主程序中,首先进行初始化设置,包括按键端口、数码管端口、LED端口、PWM端口的配置。然后进入主循环,不断扫描按键,更新音量和数码管显示。
void main( void )
{unsigned char key;delay_nms( 100 );DDRE = 0x00;PORTE = 0xff;DDRG &= ~0x03;PORTG |= 0x03;DDRF = 0XFF;PORTF = 0XFF;DDRD = 0XFF; PORTD = 0XFF; DDRG |= 0x0C;PORTG |= 0x0C;xianshi[0]=0x00;xianshi[1]=LEDData[mu_volume];while ( 1 ){key = keyscan();if ( key != 0 ){Set_waveform_parameters( mu_volume, tone_freq[key - 1] );xianshi[0] = LEDData[key];PORTF = ~(0x01 << (key - 1));while ( keyscan() != 0 );PORTF = 0XFF;Set_waveform_parameters( 0, 0 );xianshi[0] = 0x00;}if ( (PING & 0x01) == 0 ){if ( mu_volume < 9 )mu_volume++;xianshi[1] = LEDData[mu_volume];while ( (PING & 0x01) == 0 );}if ( (PING & 0x02) == 0 ){if ( mu_volume > 1 )mu_volume--;xianshi[1] = LEDData[mu_volume];while ( (PING & 0x02) == 0 );}}
}
4. 总结
本文介绍的玩具电子琴通过单片机实现了音阶发声、音符显示和音量控制功能。硬件设计包括按键扫描、数码管显示和PWM信号产生,软件设计则包括按键处理、音量控制和定时器中断处理。该设计不仅实现了基本功能,还具有较好的扩展性,可以根据需要添加更多功能。
资源:
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2
相关文章:

【TB作品】玩具电子琴,ATMEGA128单片机,Proteus仿真
题目 7 :玩具电子琴 基于单片机设计一能够发出中音八个音阶的音乐信号的电子琴,能够实现弹奏和音符显示功 能。 具有 8 个音阶按键,每按下一个按键时,所对应的 LED 点亮,音符进行显示。 具体要求如下: &…...

1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库…...
SQL游标的应用场景及使用方法
SQL游标的应用场景及使用方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨SQL中游标的应用场景及使用方法。游标在SQL中是一种重要的数据…...
LLama-Factory使用教程
本文是github项目llama-factory的使用教程 注意,最新的llama-factory的github中训练模型中,涉及到本文中的操作全部使用了.yaml配置。 新的.yaml的方式很简洁但不太直观,本质上是一样的。新的readme中的.yaml文件等于下文中的bash指令 PS: …...
Java面试题:讨论在Java Web应用中实现安全的认证和授权机制,如使用Spring Security
在Java Web应用中,实现安全的认证和授权是至关重要的,Spring Security是一个强大的框架,可以简化这项工作。以下是详细讨论如何在Java Web应用中使用Spring Security实现安全的认证和授权机制。 Spring Security简介 Spring Security是一个…...
如何在Vue3项目中使用Pinia进行状态管理
**第一步:安装Pinia依赖** 要在Vue3项目中使用Pinia进行状态管理,首先需要安装Pinia依赖。可以使用以下npm命令进行安装: bash npm install pinia 或者如果你使用的是yarn,可以使用以下命令: bash yarn add pinia *…...

【初阶数据结构】深入解析队列:探索底层逻辑
🔥引言 本篇将深入解析队列:探索底层逻辑,理解底层是如何实现并了解该接口实现的优缺点,以便于我们在编写程序灵活地使用该数据结构。 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 &#…...

Go 语言环境搭建
本篇文章为Go语言环境搭建及下载编译器后配置Git终端方法。 目录 安装GO语言SDK Window环境安装 下载 安装测试 安装编辑器 下载编译器 设置git终端方法 总结 安装GO语言SDK Window环境安装 网站 Go下载 - Go语言中文网 - Golang中文社区 还有 All releases - The…...

javascript v8编译器的使用记录
我的机器是MacOS Mx系列。 一、v8源码下载构建 1.1 下载并更新depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH/path/to/depot_tools:$PATH 失败的话可能是网络问题,可以试一下是否能ping通,连…...

C语言--vs使用调试技巧
1.什么是bug? 1.产品说明书中规定要做的事情,而软件没有实现。 2.产品说明书中规定不要做的事情,而软件确实现了。 3.产品说明书中没有提到过的事情,而软件确实现了。 4.产品说明书中没有提到但是必须要做的事情,软件确没有实…...
Spring Boot中的国际化配置
Spring Boot中的国际化配置 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中实现国际化配置,使得应用能够轻松…...

WPF的IValueConverter用于校验和格式化TextBox的数字输入
在数据绑定(Data Binding)的上下文中,我们经常使用继承 IValueConverter 接口的类,用于在源值和目标值之间进行转换。该接口定义了两个方法:Convert 和 ConvertBack,这两个方法分别用于从源值到目标值的转换…...
SQL Server的守护神:Always On 高可用性详解
🛡️ SQL Server的守护神:Always On 高可用性详解 在企业级应用中,数据的可用性和业务连续性至关重要。SQL Server的Always On功能提供了一个高可用性解决方案,确保数据库服务的持续运行和快速故障恢复。本文将详细解释SQL Serve…...
Eureka入门
Eureka是一种服务发现工具,广泛应用于微服务架构中。它主要由Netflix开源,帮助服务在分布式系统中自动注册和发现。以下是Eureka的基本入门指南。 前提条件 在开始之前,确保你已经安装了以下软件: JDK 8或更高版本Maven或Gradl…...
高阶面试-netty部分
介绍下netty Netty 是一个基于 Java 的异步事件驱动的网络应用框架,提供了用于快速开发高性能、高可扩展性的协议服务器和客户端的工具 BIO、NIO、AIO 的区别是什么 BIO blocking io,同步阻塞IO,比较简单,为每个请求分配一个线…...
在 C++的跨平台开发中,如何处理不同操作系统和编译器之间的细微差异,以确保程序能够稳定且高效地运行?
在 C 的跨平台开发中,处理不同操作系统和编译器之间的细微差异是非常重要的。以下是一些处理差异的技巧: 使用条件编译:使用预处理指令,根据不同的操作系统和编译器来编写不同的代码。 #if defined(_WIN32)// Windows 特定代码 …...
独孤思维:脑子不好使,副业稳赚钱
01 副业,贴身级模仿。 比如独孤最近在测试dy虚拟资料项目。 跑了三个多月。 赚了点下小钱。 从最开始的自动生成视频,到后来的抽帧优化,再到先做的矩阵玩法。 一直都在迭代。 是独孤脑子好使吗? 恰恰相反。 正式因为独孤…...

【数据结构】(C语言):二叉搜索树
二叉搜索树: 树不是线性的,是层级结构。基本单位是节点,每个节点最多2个子节点。有序。每个节点,其左子节点都比它小,其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。…...
泛微开发修炼之旅--23基于ecology自研的数据库分页组件(分页组件支持mysql、sqlserver、oracle、达梦等)
一、使用场景 ecology二开开发过程中,经常要使用到分页查询,随着信创项目的到来,各种国产数据库的出现,对于数据库分页查询兼容何种数据库,就迫在眉睫。 于是,我自己基于ecology开发了一个分页插件&#…...
《昇思25天学习打卡营第4天 | mindspore Transforms 数据变换常见用法》
1. 背景: 使用 mindspore 学习神经网络,打卡第四天; 2. 训练的内容: 使用 mindspore 的常见的数据变换 Transforms 的使用方法; 3. 常见的用法小节: 支持一系列常用的 Transforms 的操作 3.1 Vision …...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...