【TB作品】20以内加减法训练机,ATMEGA128单片机,Proteus仿真

news2025/1/18 12:03:39

题目 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 

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

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

相关文章

微积分-导数3(微分法则)

常见函数的导数 常量函数的导数 d d x ( c ) 0 \frac{d}{dx}(c) 0 dxd​(c)0 常量函数的图像是一条水平线 y c y c yc&#xff0c;它的斜率为0&#xff0c;所以我们必须有 f ′ ( x ) 0 f(x) 0 f′(x)0。从导数的定义来看&#xff0c;证明也很简单&#xff1a; f ′ …

系统工程与信息系统基础(上)

目录 系统工程 霍尔三维结构的三维&#xff1a; 切克兰德方法&#xff1a; 并行工程方法&#xff1a; 综合集成法&#xff1a; WSR系统方法&#xff1a; 系统工程生命周期阶段 探索性阶段 概念阶段 开发阶段 生产阶段 使用阶段 保障阶段 退役阶段 系统工程生命周…

sky18流水线设计

1.最大时钟频率确定 时钟周期要大于等于组合逻辑的delay&#xff08;最大的那条delay&#xff09; Freq_max(Mhz) 1000/T_delay(ns); 数据吞吐率Throughput Freq_max *Toggle_rate;//Toggle_rate&#xff1a;如两个时钟&#xff0c;输入变一次&#xff0c;就是50%&#xff1b…

业务链SFC简介

目录 业务链&#xff08;SFC&#xff09;简介什么是业务链&#xff1f;业务链的体系架构业务链的基本工作流程PBRPBR实现的SFC工作流程 NSHNSH报文NSH实现的SFC工作流程 区别 业务链的应用 配置指南 业务链&#xff08;SFC&#xff09;简介 业务链是网络功能虚拟化&#xff08…

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 失败的话可能是网络问题&#xff0c;可以试一下是否能ping通&#xff0c;连…

【轻量化】YOLOv8 更换骨干网络之 MobileNetv4 | 《号称最强轻量化网络》

论文地址:https://arxiv.org/pdf/2404.10518 代码地址:https://github.com/tensorflow/models/blob/master/official/vision/modeling/backbones/mobilenet.py 文章速览 文章摘要 MobileNetV4引入了一个名为Universal Inverted Bottleneck (UIB) 的新搜索模块,这个模块融合…

vue 组件el-tree添加结构指示线条

效果展示: 注意&#xff1a;组件中需要添加:indent"0" 进行子级缩进处理&#xff0c;否则会出现子级缩进逐级递增 :expand-on-click-node"false" 设置点击箭头图标才会展开或者收起 代码&#xff1a; <el-tree class"tree filter-tree" :da…

高并发场景下的热点key问题探析与应对策略

目录 一、问题描述 二、发现机制 三、解决策略分析 &#xff08;一&#xff09;解决策略一&#xff1a;多级缓存策略 客户端本地缓存 代理节点本地缓存 &#xff08;二&#xff09;解决策略二&#xff1a;多副本策略 &#xff08;三&#xff09;解决策略三&#xff1a;热点…

商标字体的选择:企业和个人申请注册商标攻略!

对于汉字商标&#xff0c;就会涉及到字体的选择&#xff0c;普推商标老杨也经常看到企业因为文字商标字体侵权收到相关字体公司的律师函&#xff0c;所以商标字体选择上要特别注意。 建议选择可以商用的免费字体&#xff0c;常见的有黑体、宋体等&#xff0c;如果这些字体前面…

vue 组件批量删除

element ui table表格中前面这个勾选框 对应 type"selection" 属性&#xff0c;绑定事件时selection-change,当你勾选全面的框时就会触发selection-change 对应的事件 绑定事件里面这样定义方法时&#xff0c;这个val 就是选中的时候那一行的数据&#xff0c;如下图…

数学建模(1):期末大乱炖

1 概述&#xff01;&#xff01; 1.1 原型和模型 原型&#xff1a;客观存在的研究对象称为原型&#xff0c;也称为“系统”、“过程”。 机械系统、电力系统、化学反应过程、生产销售过程等都是原型&#xff1b; 研究原型的结构和原理&#xff0c; 从而进行优化、预测、评价…

02.Linux下安装FFmpeg

目录 一、下载FFmpeg的编译源码 二、编译源码 三、ffmpeg工具结构解析 1、bin目录 2、include库 3、lib库 四、注意事项 五、可能出现的一些问题 1、某些工具未安装/版本过久 2、缺少pkg-config工具 3、缺少ffmplay FFmpeg 是一个开源的跨平台音视频处理工具集&…

QListView自定义item(结合QSqlQueryModel)

QListView:绘制自定义List&#xff08;一&#xff09;——设置ItemDelegate_qt_繁星执着-开放原子开发者工作坊 (csdn.net) QListView自定义Item_qlistview 自定义item-CSDN博客 结合我写的上一篇文章&#xff1a; QTableView与QSqlQueryModel的简单使用-CSDN博客 这次尝试…

[数据集][目标检测]桥梁检测数据集VOC+YOLO格式1116张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1116 标注数量(xml文件个数)&#xff1a;1116 标注数量(txt文件个数)&#xff1a;1116 标注…

zfile文件共享系统使用

1.简介 zfile是一款基于java开源的文件共享软件&#xff0c;有两种部署&#xff08;jar包和war包&#xff09;,非常适合广大的Java开发人员使用&#xff08;当然其他人员也可使用&#xff09;&#xff0c;或者你也可以称它为网盘&#xff0c;可以在Windows、MacOS、Linux上部署…

C#串口通信Seriaport和页面传值

串口通信 串口COM&#xff1a;是一种用于连接计算机和外设设备的接口&#xff0c;也叫串行接口&#xff0c;简称com,常见的串口有一半电脑应用的RS-232&#xff08;使用25针或9针的 连接器&#xff09;通俗来讲串口就是usb接口、鼠标串口。键盘串口 串口通讯&#xff1a;是指外…

【MySQL】Linux下MySQL的目录结构、用户、权限与角色

一、Linux下MySQL的目录结构 1、MySQL相关目录 数据库文件存放路径&#xff1a;/var/lib/mysql数据库命令存放路径&#xff1a;/user/bin和/user/sbin配置文件目录&#xff1a;/usr/share/mysql-8.0/、/usr/share/mysql/和/etc/my.cnf 2、假设我们创建了一个数据库dbtest1&a…

uniapp 安卓、IOS、H5、微信小程序实现PDF在线预览

在使用uniapp开发移动端时&#xff0c;微信开发者工具里webview能正常打开后端接口返回的pdf文件流。正式发布后&#xff0c;在配置了业务域名和服务器域名的前提下&#xff0c;预览pdf文件却只能看到白屏&#xff0c;因此我猜测微信小程序不能通过webview读取文件流。这个想法…

论文阅读_基于嵌入的Facebook搜索

英文名称&#xff1a;Embedding-based Retrieval in Facebook Search 中文名称&#xff1a;基于嵌入式检索的Facebook搜索 时间&#xff1a;Wed, 29 Jul 2020 (v2) 地址&#xff1a;https://arxiv.org/abs/2006.11632 作者&#xff1a;Jui-Ting Huang, Ashish Sharma, Shuying …

09_计算机网络模型

目录 OSI/RM七层模型 OSI/RM七层模型 各层介绍及硬件设备 传输介质 TCP/IP协议簇 网络层协议 传输层协议 应用层协议 完整URL的组成 IP地址表示与计算 分类地址格式 子网划分和超网聚合 无分类编址 特殊含义的IP地址 IPv6协议 过渡技术 OSI/RM七层模型 OSI/RM七…