微机原理实验8254计算机钢琴,GitHub - SincereXIA/PianoMFC: 西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC...
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...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mapiicon.exe进程是什么文件
- 下一篇: 动手学PaddlePaddle(1):线