freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于51單片機簡易電子琴設計報告-文庫吧

2025-07-22 20:06 本頁面


【正文】 低 4FA 349 64103 中 7SI 968 65030 4FA 370 64185 低 1DO 1046 65058 低 SO 392 64260 1DO 1109 65085 5SO 415 64331 高 2RE 1175 65110 低 6LA 440 64400 2RE 1245 65134 6LA 466 64463 高 3MI 1318 65157 低 7SI 494 64524 高 4FA 1397 65178 中 1DO 523 64580 4FA 1490 65198 1DO 554 64633 高 5SO 1568 65217 中 2RE 587 64633 5SO 1661 65235 2RE 622 64884 高 6LA 1760 65252 中 3MI 659 64732 6LA 1865 65268 中 4FA 698 64820 高 7SI 1967 65283 采用查表程序進行查表時,可以為這個音符建立一個表格,有助于 單片機 通過查表的方式來獲得相應的數(shù)據(jù):低音 0- 19之間,中音在 20- 39 之間,高音在 40 11 - 59 之間。用單片機播放音樂,或者彈奏電子琴,實際上是按照特定的頻率,輸出一連串的方波。為了輸出合適的方波,首先應該知道音符與頻率的關系。 ( 2)音調數(shù)據(jù)表 曲調值 DELAY 曲調值 DELAY 調 4/4 125ms 調 4/4 62ms 調 3/4 187ms 調 3/4 94ms 調 2/4 250ms 調 2/4 125ms 上表中的頻率數(shù)值,有些過多,去掉不常用的黑鍵頻率,只是把白鍵對應的數(shù)據(jù)存放在單片機中,即可滿足絕大部分的應用需求。 定義音調數(shù)據(jù)表的程序如下: DW 63628,63835,64021,64103,64260,64400,64524 。64580,低音區(qū) :1 2 3 4 5 6 7 DW 64580,64671,64777,64820,64898,64968,65030 65058 中音區(qū) :1 2 3 4 5 6 7 DW 65058,65110,65157,65178,65217,65252,65283 65312 高音區(qū) :1 2 3 4 5 6 7 把這個數(shù)據(jù)表,放在程序中,需要播音的時候,就從表中取出一個數(shù)據(jù)送到定時器,當定時器溢出中斷的時候,再 對輸出引腳取反,那么,在揚聲器中,即可聽到上表中頻率的聲音。 : void YinFu_DiZhongGao_Flag(uchar keyval) { if(keyval7) flag_yinfu_dizhonggao=1。 // 低音 else if(keyval14) flag_yinfu_dizhonggao=2。 //中音 else if(keyval21) flag_yinfu_dizhonggao=3。 //高音 } 12 此函數(shù)是根據(jù)按下鍵值來確定音符是高音、中音還是低音flag_yinfu_dizhonggao=1 代表 低音; lag_yinfu_dizhonggao=2。 代表中音。 flag_yinfu_dizhonggao=3。代表高音。 。而 LED 顯示函數(shù)(定時器 1 中斷服務函數(shù))會根據(jù) lag_yinfu_dizhonggao 的值來顯示 void Timer_Init() { TMOD=0x11。 //定時器 T0,T1 設置為方式 1, TH1=0xD8。 //10ms 中斷一次 TL1=0xF0。 TH0=th0。 TL0=tl0。 IE=0x82。 //開啟總中斷和定時器 T0,T1 溢出中斷 ET1=1。 IP=0x02。 //T0優(yōu)先于 T1 } 定時器 0 用來產生不同方波頻率,使音響發(fā)聲 定時器 1 用來控制 LED 顯示,當工作在演奏模式時,按下音符鍵時,判斷音符鍵是高音還是中音或者低音,當是高音時, LED全亮,占空比為 1,當是中音時,LED快速閃爍,占空比為 1/2;當是低音時, LED相對較慢的閃爍,占空比為 1/4。 以下是中斷服務程序: void play_Tone() interrupt 1 using 0//定時器 T0溢出中斷,產生不同頻率的矩形波 { TH0=th0。 TL0=tl0。 Beep=~Beep。 } 13 void play_LED() interrupt 3 using 2 { if(Recordonoff)//開啟錄音后計時按鍵按下的時間 { TH1=0xB1。 TL1=0xE0。 Record_Timer++。 } if(flag_yinfu_dizhonggao==1||flag_yinfu_dizhonggao==3)//低音或高音 { if((cont==3amp。amp。flag_yinfu_dizhonggao==1)||flag_yinfu_dizhonggao==3) //低音占空比為 1/高音占空比為 1 { led=LED_Dis[yuzhi]。 } else led=0x00。 } if(flag_yinfu_dizhonggao==2) { if(cont1) //控制占空比為 1/2 { cont1=~cont1。 led=LED_Dis[yuzhi]。 } else { led=0x00。 cont1=~cont1。 } } cont++。 14 if(cont3) cont=0。 } 中斷函數(shù)中的余值在主程序中是這樣賦值的: yuzhi=(KeyNo+3)%7。 //判斷 DO RE MI FA... 根據(jù) yuzhi 判斷 DO、 RE。當時 DO時,亮一個 LED 燈,當時 RE時,亮兩個LED... //21個音符的頻率對應的 T 值 Uint code Tone_Delay_Table[]={63628,63835,64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217,65252,65283} void main() { uchar Keystate=0。 Timer_Init()。 led=0x00。 //初始化 led led_zhishi=0。指示 LED 滅(進入演奏狀態(tài),若進入錄音狀態(tài)則亮) while(1) { Keystate=KeyState()。//如果有按鍵按下,返回 1 if(Keystate) { key_scan()。 if(KeyNo21)//KeyNo 存儲按下鍵的鍵值 { yuzhi=(KeyNo+3)%7。 //判斷 DO RE MI FA... th0=Tone_Delay_Table[KeyNo]/256。//賦初值,產生 //按鍵所對應的音符的頻率 tl0=Tone_Delay_Table[KeyNo]%256。 15 YinFu_DiZhongGao_Flag(KeyNo)。//判斷是高中低音 TR0=1。 //Turn on timer TR1=1。 } else if(KeyNo==21) //進入播放歌曲狀態(tài) { PlayMusic()。 Delayms(2020)。 } else if(KeyNo==23) //進入錄音狀態(tài) { Recordonoff=~Recordonoff。 Record_yinfu()。 } } else { TR0=0。 //關閉定時器 TR1=0。 led=0x00。 cont=0。//控制占空比變量,讓 LED 以不同頻率閃爍 } Delayms(2)。 } } 16 KeyNo==22 KeyNo==23 播放歌曲函數(shù)程序圖 4 總共有三首歌可供播放,三首歌循環(huán)播放,當按下退出鍵 23,返回主程序,進入演奏狀態(tài)。 函數(shù)實現(xiàn)如下: //音樂的頻率所對應的 T值 //包含了低音 SO,LA,SI,中音 DO,RE,MI, FA,SO,RE,SI,高音 DO,LA,MI uchar code MusicYinFu[]={0XFc,0X44,0XFc,0Xac,0XFd,0X09,0XFd,0X34, 0XFD,0X82,0XFD,0Xc8,0XFD,0X06,0XFb,0X04, 0Xfb,0X90, 0Xfc,0X0c,0Xfe,0X22,0Xf9,0X5b,0Xfa,0x15}。 主程序 指針指向第一首歌存 放地址 播放歌曲指針指向存放下一首個的 數(shù)組,從而播放下一首 關閉定時器,關中 斷退出播放 按鍵掃描 打開定時器 音響發(fā)聲 LED亮 17 //月亮代表我的心 //這里的數(shù)
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1