【TB作品】20以内加减法训练机,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
可添加符合题目背景的其它合理功能。

在这里插入图片描述

玩具电子琴设计

这篇博客将介绍基于单片机设计的一款玩具电子琴,该电子琴能够发出中音八个音阶的音乐信号,并具有弹奏和音符显示的功能。项目基于AVR单片机实现,主要包括按键检测、音阶生成、音量控制和数码管显示等功能。

设计背景

在音乐教育和娱乐中,电子琴是一种常见的乐器。为了提高音乐学习的兴趣和趣味性,设计一款简易的玩具电子琴是一个非常有意义的项目。本设计通过按键触发音阶的生成,并利用数码管显示当前音符,同时可以通过单片机控制音量大小。

具体功能要求

  1. 按键检测:具有8个音阶按键,每按下一个按键时,扬声器发声,所对应的LED点亮。
  2. 音符显示:数码管显示当前的音符(用数字表示,简谱)。
  3. 音量控制:可通过单片机控制音量大小,并进行音量显示。
  4. 音阶频率生成:音阶频率信号由单片机产生。

硬件设计

硬件部分主要包括单片机、按键、LED、数码管和扬声器。下图展示了主要的硬件连接。

+-------------+        +---------+
|  AVR MCU    | <----> |  按键   |
+-------------+        +---------+
     |  |                |    |
     |  |                |    |
     v  v                v    v
+--------+           +---------+
|  LED   |           |  数码管  |
+--------+           +---------+
     |
     v
+---------+
| 扬声器  |
+---------+

软件设计

软件设计包括按键检测、延时函数、PWM信号生成、数码管驱动等模块。以下是主要的代码模块和功能介绍。

延时函数

延时函数用于产生不同的时间间隔,用于按键消抖和音频信号的控制。

void delay_us(void) {
    // 微秒级延时,具体实现略
}

void delay_nms(unsigned int nms) {
    while (nms--) {
        delay_us();
    }
}
按键检测

按键检测函数用于读取按键状态,根据按键输入确定当前音符和音量控制。

unsigned char getKey(void) {
    if ((PIND & 0x01) == 0) return 1;
    if ((PIND & 0x02) == 0) return 2;
    // 检测其他按键
    return 0;
}
数码管驱动

数码管驱动函数用于控制数码管显示当前的音符。

void Write_Max7219(unsigned char address, unsigned char dat) {
    // 具体实现略
}

void Init_MAX7219(void) {
    Write_Max7219(0x09, 0xff);
    Write_Max7219(0x0a, 0x03);
    Write_Max7219(0x0b, 0x07);
    Write_Max7219(0x0c, 0x01);
    Write_Max7219(0x0f, 0x00);
}
PWM信号生成

PWM信号用于控制扬声器的音频输出,实现不同频率的音符生成。

void setPWM(unsigned int yinliang, unsigned int pinlv) {
    if (yinliang == 0 || pinlv == 0) {
        OCR1A = 0;
        ICR1 = 0;
        return;
    }
    ICR1 = 57600 / pinlv;
    OCR1A = yinliang * 10520 / pinlv;
}

主程序

主程序初始化各个模块,并在循环中检测按键输入,根据按键触发相应的功能。

void main(void) {
    unsigned char key;
    delay_nms(100);

    DDRD = 0x00;  // 方向控制
    PORTD = 0xff;

    DDRA = 0xFF;  // portA引脚全部输出
    DDRF = 0xFF;  // 小灯全部输出
    PORTF = 0xFF; // 全部熄灭


    Init_MAX7219();  // 数码管芯片初始化

    Write_Max7219(1, 0);
    Write_Max7219(3, 2);  // 默认音量显示

    while (1) {
        key = getKey();  // 获取按键

        if (key != 0) {
            setPWM(2, 262);  // 设置PWM输出音频信号
            Write_Max7219(1, key);
            PORTF = ~(0x01 << (key - 1));  // 点亮对应的LED

            while (getKey() != 0) ;
            PORTF = 0xFF;  // 全部熄灭
            setPWM(0, 0);  // 关闭PWM
            Write_Max7219(1, 0);
        }
    }
}

总结

通过本次设计,我们实现了一款具有基本功能的玩具电子琴。该电子琴可以发出八个音阶的音乐信号,具备音符显示和音量控制功能。通过进一步优化和扩展,还可以增加更多的功能,如多音符和弦、预设曲目播放等。

这个项目不仅提高了我们对单片机编程的理解,也增加了我们对音乐信号处理的认识。希望这款电子琴能够带给大家更多的乐趣和启发。

资源:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2

视频:

链接:https://pan.baidu.com/s/1QP7BdwvnJwhawF4UXoHPyg?pwd=3qvz 
提取码:3qvz 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tampermonkey插件下载国家标准文件

#创作灵感# 最近在一个系统招标正文中看到了一些国家标准&#xff0c;想要把文章下载下来&#xff0c;方便查阅&#xff0c;但是“国家标准全文公开系统”网站只提供了在线预览功能&#xff0c;没有提供下载功能&#xff0c;但是公司又需要文件&#xff0c;在网上找了一些办法&…

矩阵置零解题

给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff1a; 输入&…

用户资料门户的构建

1. 需求背景 老的页面停止维护了,且老旧, 功能单一,且页面分散. 急需做功能集成的平台化建设原先的用户资料查询没有做权限管控, 每一次查询都会消耗我们组的人力资源. 2. 项目介绍 2.1. 项目地址 服务地址: [公司内网服务(略)] 工蜂地址: [公司内网仓库(略)] 2.2 项目的价…

Spring Security基本源码解析(超精细版)

一、基本源码解析 1.1 UsernamePasswordAuthenticationFilter 用户名称和密码的过滤器 浏览器发送用户名称和密码 ----》 经过过滤器「UsernamePasswordAuthenticationFitler」 1.2 UsernamePasswordAuthenticationFilter核心方法 重写父类「AbstractAuthenticationProcessing…

数据在内存中的存储方式

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C语言 目录 前言 一、整数的存储 二、大小端字节序及其判断 1.什么是大小端 2.为什么有大小端 3.用c语言编写程序判断大小端 三、浮点数的存储 1.浮点数…

第7章:Electron文件系统操作(2)

7.2 文件对话框 Electron 提供了 dialog 模块用于显示文件打开和保存对话框。 7.2.1 显示文件打开对话框 主进程代码&#xff1a; const { app, BrowserWindow, ipcMain, dialog } require(electron); const path require(path);let mainWindow;const createMainWindow …

【Unity学习笔记】A*寻路算法

文章目录 图寻路算法BFS广度优先算法DFS深度优先贪心算法 引入权重Dijkstra算法 A*算法C#实现步骤 Unity中的A*算法A*优化建议 图 图的知识盘点 pathfinding 作为一名计算机专业的学生&#xff0c;对于图这种数据结构也是烂熟于心了。图是一种包含了多个结点的数据结构&…

巴图自动化Modbus协议转Profinet协议网关模块连智能仪表与PLC通讯

一、现场要求:PLC作为控制器&#xff0c;仪表设备作为执行设备。执行设备可以实时响应PLC传送的指令&#xff0c;并将数据反馈给PLC&#xff0c;从而实现PLC对仪表设备的控制和监控&#xff0c;实现对生产过程的精确控制。 二、解决方案:通过巴图自动化Modbus协议转Profinet协议…

大模型面试题目

1.为什么需要做位置编码 位置编码&#xff08;Positional Encoding&#xff09;在变换器&#xff08;Transformer&#xff09;模型中非常重要&#xff0c;因为变换器架构本身没有内置的顺序信息。变换器使用的是自注意力机制&#xff0c;它能够捕捉输入序列中所有词之间的相关性…

Vscode 保存代码,代码自动格式化

我这里使用的插件是Prettier-Code formatter&#xff1a;自动缩进整理代码的格式&#xff0c;使用方法如下&#xff1a; 先在vscode商店找到插件并安装&#xff1a;安装插件之后&#xff0c;随便找到一个项目文件&#xff0c;右键选择格式化文档&#xff1a;选中我们安装的插件…

LVS-负载均衡

目录 一、概念 二、LVS工作原理 1. ipvs/ipvsadm 2.名词&#xff1a; 三、常用命令 四、工作模式 1.NAT地址转换模式 &#xff08;1&#xff09;工作流程 &#xff08;2&#xff09;特点 &#xff08;3&#xff09;实验过程 a.环境准备&#xff1a; b.修改测试机的…

Wing FTP Server

文章目录 1.Wing FTP Server简介1.1主要特点1.2使用教程 2.高级用法2.1Lua脚本,案例1 1.Wing FTP Server简介 Wing FTP Server&#xff0c;是一个专业的跨平台FTP服务器端&#xff0c;它拥有不错的速度、可靠性和一个友好的配置界面。它除了能提供FTP的基本服务功能以外&#…

android应用的持续构建CI(一)-- 总体设计

一、背景 接下里我希望通过一系列的文章&#xff0c;把android应用的构建梳理一遍&#xff0c;从总体设计到逐个环节的实现。 总体设计jenkins集成手动签名依赖环境应用管理 二、构建流程图 三、技术组件 jenkinsjdkgradle360加固 既然是android应用的持续构建&#xff0c…

科普文:Linux服务器性能调优之CPU调度策略和可调参数

概叙 进程 进程是操作系统虚拟出来的概念&#xff0c;用来组织计算机中的任务。计算机的核心是CPU&#xff0c;它承担了所有的计算任务&#xff1b;而操作系统是计算机的管理者&#xff0c;它负责任务的调度、资源的分配和管理&#xff0c;统领整个计算机硬件&#xff1b;应用…

5百多本分章节古籍内容大全ACCESS\EXCEL数据库

很多明清小说现在越来越不容易查看其内容&#xff0c;虽然之前搞到过一份《3万8千多古代文学大全ACCESS数据库》&#xff0c;但简体中文总让我感觉有删减、非原版的印象&#xff0c;今天正好遇到一个好的古籍网站&#xff0c;繁体字繁体文&#xff0c;感觉非常不错&#xff0c;…

微信小程序遮罩层显示

效果展示&#xff1a; wxml页面&#xff1a; <view classmodal-mask wx:if{{showModal}}><view class"modal-container"><view classmodal-content></view><view classmodal-footer bindtap"closeImage">//这个/images/ind…

电脑录音怎么录?简单四个方法轻松搞定!

在电脑上录制音频是一项非常实用的技能&#xff0c;适合多种场合的需求。例如&#xff0c;你可能需要录制自己的声音&#xff0c;用于录音广播、演示或视频制作&#xff1b;也可能需要录制电脑中的声音&#xff0c;如音乐、游戏音效或在线直播&#xff1b;或者需要捕捉浏览器中…

快排的实现

引言 作为c语言库函数的一种&#xff0c;快排在排序中的地位毋庸置疑. 而更加具体的实现如图&#xff1a; 快排的实现&#xff08;递归实现&#xff09; 原理 单趟:先假定第一个数设为key,如果左边指针的值比key大&#xff0c;且右边指针的值比key小&#xff0c;则将其交换.…

亚马逊云服务器的价格真的那么贵吗?一年要花多少钱?

亚马逊Web服务&#xff08;AWS&#xff09;作为全球领先的云计算平台&#xff0c;其定价策略常常引起用户的关注。很多人可能会问&#xff1a;"AWS真的那么贵吗&#xff1f;"实际上&#xff0c;这个问题的答案并不是简单的"是"或"否"&#xff0c…

JavaScript技术的小饰品销售管理系统-计算机毕业设计源码21597

摘 要 在当今的数字化时代&#xff0c;电子商务已经成为了商业领域中不可或缺的一部分。随着消费者对于购物体验的要求越来越高&#xff0c;一个高效、便捷、用户友好的小饰品销售管理系统显得尤为重要。 本系统旨在利用 JavaScript 技术&#xff0c;设计并实现一个功能强大的小…