# PianoMFC
西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC
需要连接西电微机原理实验室提供的 QTH9054 微机试验箱,使用其蜂鸣器发声,若不连接,程序会直接播放 mp3 文件模拟钢琴声。
请在 release 处下载编译好的 exe 文件运行,如需计算机喇叭发声,请选择声卡输出,并保证 sound 文件夹与 piano.exe 在同一目录下。
## 功能设计
**基础功能**
1. 能够演奏 C 调包含高、中、低音的不同节拍的乐曲,音调与频率的对应关系如下:
微机键盘与电子琴键盘的对应关系为:高音依次为 Q,W,E,R,T,Y,U,中音依次为A,S,D,F,G,H,J,低音依次为 Z,X,C,V,B,N,M。
**附加功能**
1. 增加自动演奏乐曲功能。当按下 P 键后,自动播放一首乐曲,曲长大于 20 秒。
2. 增加琴键图形显示功能。屏幕上显示 21 个琴键(高中低音),当按下某键后屏幕上的对应琴键有所反映。
3. 增加一个音调 D,当从 C 调改为 D 调后,演奏音按照 D 调(比 C 高一个调)发音。
**进阶功能**
1. 实现键位切换功能:除了基础功能要求的按键映射关系外,额外增加可以选择 按键A~Z 对应于音调的最低音到最高音
2. 实现声卡输出功能:在脱离了微机实验箱的情况下,程序仍然能够使用计算机内置的声卡,通过计算机喇叭或者耳机进行声音的输出
## 环境要求
- 开发环境:
- 开发工具:实验室给定的 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
```c++
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()` 函数通过查表并计算得出
```c++
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);
}
}
```
没有合适的资源?快使用搜索试试~ 我知道了~
基于 C++/MFC实现的键盘电子乐器演奏程序设计(电子琴)

共95个文件
mp3:26个
bmp:17个
h:8个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 43 浏览量
2024-06-14
12:29:00
上传
评论
收藏 9.81MB ZIP 举报
温馨提示
【作品名称】:基于 C++/MFC实现的键盘电子乐器演奏程序设计(电子琴) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:功能设计 基础功能 能够演奏 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 对应于音调的最低音到最高音 实现声卡输出功能:在脱离了微机实验箱的情况下,程序仍然能够使用计算机内置的声卡,通过计算机喇叭或者耳机进行声音的输出
资源推荐
资源详情
资源评论
















收起资源包目录





































































































共 95 条
- 1
资源评论


MarcoPage
- 粉丝: 4652
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 北京交通大学无线通信技术课后习题答案PPT课件.ppt
- 开发我国旅游电子商务方案探究论文(1).docx
- 试论计算机网络信息安全中数据加密技术(1).docx
- 工程部项目管理体系.doc
- vb程序设计项目说明书习题和参考答案.doc
- 微机原理与接口技术周荷琴课后习题答案.doc
- PLC试验参考指导书专业资料.doc
- 【精品文章】-三星220亿美元加大对人工智能和5G的投资(1).docx
- 最全VISIO图标集-附网络拓扑图实例(.ppt
- STMFVGT的通信程序SP芯片中断接收(1).docx
- 操作系统磁盘调度算法程设计.docx
- 大数据在移动通信中的应用研究(1).docx
- 关于企业财务信息化管理的探讨(1).docx
- 2023年网上书店可行性研究实验报告软件工程实验(1).doc
- 人工智能在消防监督管理中的应用(1).docx
- 关于天猫网互联网销售渠道调研报告(1).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
