PianoMFC

西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC

需要连接西电微机原理实验室提供的 QTH9054 微机试验箱,使用其蜂鸣器发声,若不连接,程序会直接播放 mp3 文件模拟钢琴声。

请在 release 处下载编译好的 exe 文件运行,如需计算机喇叭发声,请选择声卡输出,并保证 sound 文件夹与 piano.exe 在同一目录下。

功能设计

基础功能

能够演奏 C 调包含高、中、低音的不同节拍的乐曲,音调与频率的对应关系如下:

微机键盘与电子琴键盘的对应关系为:高音依次为 Q,W,E,R,T,Y,U,中音依次为A,S,D,F,G,H,J,低音依次为 Z,X,C,V,B,N,M。

附加功能

增加自动演奏乐曲功能。当按下 P 键后,自动播放一首乐曲,曲长大于 20 秒。

增加琴键图形显示功能。屏幕上显示 21 个琴键(高中低音),当按下某键后屏幕上的对应琴键有所反映。

增加一个音调 D,当从 C 调改为 D 调后,演奏音按照 D 调(比 C 高一个调)发音。

进阶功能

实现键位切换功能:除了基础功能要求的按键映射关系外,额外增加可以选择 按键A~Z 对应于音调的最低音到最高音

实现声卡输出功能:在脱离了微机实验箱的情况下,程序仍然能够使用计算机内置的声卡,通过计算机喇叭或者耳机进行声音的输出

环境要求

开发环境:

开发工具:实验室给定的 Visual C++ 6.0

操作系统:实验室给定的 Windows XP

软件执行环境

执行程序需要在 WIndows 平台上运行,在 Windows10、Windows 7 、Windows XP 上通过兼容性测试

QTH9054 微机试验箱 (可选)

为什么用 vc6.0

因为实验室的电脑上面只有 vc6.0

硬件设计方案及硬件连线图

硬件部分使用8254定时器,控制音调的高低,为了使蜂鸣器发出声音,使用高频时钟脉冲信号(32.768KHz),向8254写入方式三控制字,之后通过改变计数值值来获得期望得到的脉冲信号,将可听频率内的脉冲信号直接接入蜂鸣喇叭,获得声音输出。

硬件连线:

总线 LD0-LD7 接8254的 D0-D7 ,

LA0和LA1接8254的A0和A1,

IOWR和IORD接8254的WR和RD,

地址0000H接8254的CS

8254的GATE0接VCC

CLK0接初始的时钟频率32.768KHZ

OUT0接蜂鸣器输入

硬件驱动部分设计

使蜂鸣喇叭发出声音的核心是 set_freq_dividing_ratio() 函数,其参数 ratio 设定了计数值,time 定义了声音发出的时长。

开始时,先写入 8254 的方式控制字,使其工作在方式 3,之后写入计数值。该方式输出的是方波。如果初始计数值是N, 那么方波的频率是输入时钟的N分之一。该方式的特点是方波占空比约为1比1

void set_freq_dividing_ratio(int ratio,int time)

{

if(ratio!=0){

IO8bWrite(P8254MODE,0x14);//0x03

char input = (char)(ratio);

IO8bWrite(P8254A,input);

}

Sleep(time);

IO8bWrite(P8254MODE,0x10);

}

而计数值则由play_one_tone() 函数通过查表并计算得出

void play_one_tone(int freqnum,float flag)

{

//printf("\b%c%c\n",tone_list[freqnum-1][0],tone_list[freqnum-1][1]);

int div_ratio = get_div_ratio(freqnum, flag);

if (isLocalSound){

if(flag < 1) flag = 0;

play_one_toneL('a'+freqnum-1 + flag*7);

}else{

set_freq_dividing_ratio(div_ratio,beat);

}

}

测试结果与功能展示

执行编译好的 Piano.exe 文件,完成硬件驱动检测后,即会弹出电子乐器演奏程序的主界面

界面中部为模拟的电子琴界面,界面下部为设置界面。

单击右下角的帮助按钮,弹出帮助窗口,对程序功能进行说明

按下键盘按键,微机试验箱上的蜂鸣器就会发出指定音调的声音。

可以通过点击按钮来设定 C/D 调 以及声音长度(节拍)。如果选择声卡输出,则会使用计算机的内置声卡进行钢琴音的模拟

点击右下角的歌曲按钮,会自动播放内置的音频

工作中的微机试验箱:

微机原理实验8254计算机钢琴,GitHub - SincereXIA/PianoMFC: 西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC...相关推荐

  1. 西电微机系统课程设计——步进电机开环控制系统设计

    西电微机系统课程设计--步进电机开环控制系统设计 一.课程设计目的 1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力. 2.加深对 A/D 和并行接口芯片的工作方式和编程方法的 ...

  2. 计算机原理实验存储器,计算机组成原理实验存储器.pptx

    计算机组成原理实验存储器 计算机组成原理实验课注意事项 实验箱电源由桌上的电源插板供电,可能会有相邻的两个实验箱共用电源插板的情况.请勿乱拔电源插板上的电源线.为了安全起见,实验完成后需关闭电源插板. ...

  3. 计算机组成运算器原理实验报告,计算机组成原理运算器实验报告

    计算机组成原理运算器实验报告 计算机组成原理实验一 运算器实验 一.实验目的:1.掌握简单运算器的数据传输方式.2.验证运算功能发生器(74LS181)及进位控制的组合功能. 二.实验要求: 完成不带 ...

  4. 计算机学院优研计划,西电计算机考研总结 优研计划夏令营

    考研历程 2019年7月参加西安电子科技大学计算机学院"优研计划"夏令营,得到优研计划. 12月份参加考研统考(政治68,英一53,数一90,专业课128,总分339). 2020 ...

  5. 双非计算机专业排名,计算机专业最新排名:西电第11,北邮第15,双非深大、杭电排前2...

    计算机专业是目前被大家最看好的工科专业,每年报考计算机科学与技术的考生可以说是工科里面最多的,当然,计算机专业也差不多是每所高校都要开设的专业,学计算机专业就业面广,而且不需要做实验,也不用进车间,是 ...

  6. 湖南大学计算机系统原理实验,湖南大学-计算机组成原理实验-实验3-bomblab_图文.pdf...

    课程实验报告 课 程 名 称: 计算机组成与结构 实验项目名称: bomblab 专 业 班 级: 姓 名: 学 号: 指 导 教 师: 完 成 时 间: 2016 年 4 月 20 日 信息科学与工 ...

  7. 微型计算机原理辅导西电,微机原理与系统设计-西安电子科技大学.pdf

    微机原理与系统设计-西安电子科技大学 2017版 微机原理与系统设计 第10章并行接口芯片8255A应用设计 董明皓,博士 西安电子科技大学 dminghao@xidian.edu.cn 目录 1 8 ...

  8. 西电微机原理期末考试复习重点

    以下手写笔记并不包含整门课的所有细节,只是列出考试题目必考到的非常重要的知识点,适合考前大体浏览一遍.

  9. 西电微机系统课程设计步进电机开环控制系统

    ** 微机系统与应用课程设计 课题二 步进电机开环控制系统设计** 一.程设计目的 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力. 加深对 A/D 和并行接口芯片的工作方式和编 ...

最新文章

  1. CISCO专用协议CDP
  2. 梦之队奥运30人大名单:詹皇库里甜瓜双少领衔
  3. Android App的架构设计:从VM、MVC、MVP到MVVM
  4. 基于Nexys4DDR的UART实验
  5. 骆驼路线的主/从故障转移
  6. https open api_Web上的分享(Share)API
  7. python3 dict 排序_Python 3.9 新增功能展望
  8. 被问到TCP的可靠传输和提高网络利用率?
  9. HTTP请求方式中GET和POST的区别?
  10. 小程序和H5 之间的通信
  11. Scratch(四十三):赛龙舟
  12. 2.1 软件开发生命周期模型
  13. JRebel: ERROR Failed to obtain seat. Unable to connect to license server. Check
  14. 免费老牌php空间,Alwaysdata.com老牌稳定法国PHP免费空间
  15. openldap范例数据库mysql_用mysql作openldap的后台数据库
  16. [异常]kvm虚拟机卡顿连接不稳定
  17. 华硕笔记本系统重装之后需要输入用户名和计算机名称是怎么回事,华硕笔记本电脑重装系统【方法详解】...
  18. 腾讯云IM集成(so easy)
  19. [并发并行]_[线程池]_[Programming With POSIX Threads的线程池实现分析1]
  20. 服务器多出mysql帐户_在一台服务器构建多mysql 服务

热门文章

  1. gdal 压缩tif_Python | GDAL处理影像
  2. linux apr文件解压失败,Apache编译安装提示configure: error: APR not found错误解决方法...
  3. unit类型是什么?_项目中有用过锁吗?能解释一下什么是AQS(AbstractQueuedSynchronizer)吗?...
  4. kafka分区与分组原理_kafka 基本原理和概念
  5. 1476D. Journey
  6. linux 文件按时间 函数,[Linux文件属性]使用utime函数操作文件的时间参数
  7. vue如何split_vue代码分割的实现(codesplit)
  8. python ckeditor上传图片400错误_又一款python开发神器
  9. java解析dxf文件_浅析JVM方法解析、创建和链接
  10. 硬件服务器采购指南,硬件组装_服务器采购指南_太平洋电脑网PConline