日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微机原理实验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...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。