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

正文內(nèi)容

基于51單片機(jī)的電子琴設(shè)計附原理圖、pcb和程序_課程設(shè)計說明書-文庫吧在線文庫

2024-10-10 15:43上一頁面

下一頁面
  

【正文】 實物圖 ??????????????????????? 31 【摘要】: 打造一個多功能電子琴,核心是一塊單片機(jī)。 【關(guān)鍵字】: 單片機(jī)、 stc89c5電子琴、 C5 keil。(具體實現(xiàn)方法見附錄總程序) : ① 按鍵:讀出按鍵坐標(biāo)( x,y),用 if 語句來判斷( x,y)該給數(shù)碼管賦什 么值,然后從 uchar code num[] 表中讀取這個值賦給數(shù)碼管 (例如 P0)。 C1,C2 可采用 30pF 無極性陶瓷電容; C3 可采用 10181。 //延時 5ms 去抖動 if(P1_0 == 0) i = 1。 return (i)。 【數(shù)碼管與 LED 燈】: 數(shù)碼管: 在本課題中,數(shù)碼管要顯示 A G , 1 7, 1. 7. ,所以段碼比較另類。 //中音 1 4 else if(x == 3) P0 = num[11 + y]。amp。 播放音樂 時又有所不同: 播放音樂時, led 燈要精確地顯示當(dāng)前音符的節(jié)拍,所以 if 語句里加了一條限制語句: flash jiepai) 代碼: if(out == 1 amp。 P2 = led_table[flash]。 另外,采用 口連接接蜂鳴器是一個錯誤。兩個音之間的距離有兩個“半音”,就叫“全音”。 此外結(jié)束符和休止符可以分別用代 碼 00H 和 FFH 來表示,若查表結(jié)果為 00H,則表示曲子終了;若查表結(jié)果為 FFH,則產(chǎn)生相應(yīng)的停頓效果。至于 1拍多少 s,并沒有嚴(yán)格規(guī)定,就像人的心跳一樣,大部分人的心跳是每分鐘 72下,有些人快一點,有些人慢一點,只要聽的悅耳就好。第一個字節(jié)表示音調(diào),第二個字節(jié)表示節(jié)拍。右側(cè)兩橫: 0x0c。分部進(jìn)行,個個擊破。直到最后,忽然想到了定時器有優(yōu)先級的說法。 sbit P1_3 = P1^3。 /*矩陣鍵盤橫坐標(biāo) 從 1開始 0為未按下的標(biāo)志 */ uchar y = 0。 /*音調(diào) 定義為全局變量 為了在播放時數(shù)碼管能顯示當(dāng)前音調(diào) */ uchar yindiao_h。 //獲取鍵盤橫坐標(biāo) 函數(shù) uchar key_y()。 /*播放狀態(tài)下 選歌函數(shù) 釋放按鍵后才跳出函數(shù),返回歌曲序號 */ uchar choose2()。 uchar code test[]={//測試 0x78,0x00, //曲速 0x78表示 120拍 /分 0x01,0x04,0x02,0x04,0x03,0x04,0x04,0x04,0x05,0x04,0x06,0x04,0x07,0x04,0x00,0x04, 0x11,0x08,0x12,0x07,0x13,0x06,0x14,0x05,0x15,0x04,0x16,0x03,0x17,0x02,0x00,0x01, 0x21,0x01,0x22,0x02,0x23,0x03,0x24,0x04,0x25,0x05,0x26,0x06,0x27,0x07,0x00,0x08, 0xff, }。a)。a0。 } else if(P1_2 == 0) { delayms(5)。 if(P1_4 == 0) { delayms(5)。 } else j = 0。 y != 0 ) { if(x == 1) P0 = num[3 + y] 。 } } void speak() /* 按鍵 ,為定時器 0 T0 賦計數(shù)初值,讓 T0函數(shù)驅(qū)動 蜂鳴器發(fā)出對應(yīng)的音調(diào) */ { if(x == 1) { f_h = chuzhi[2*y + 6]。 } } else if(x == 4) { f_h = chuzhi[(33+y)*2]。amp。amp。 flash 0 ) //最小減到 0 flash。amp。amp。 else if(x == 1 amp。 y == 1)// 上一首 i = 13。amp。 y = key_y()。 } return(i)。amp。 else if(x == 2 amp。 y == 2) //用作暫停播放 i = 14。 which = 2。 /* pai2 = (2400/qusu)*jiepai。 if(song_id == 1) song_id = allsong 。amp。//播放最后一首 else song_id。 //從歌曲的第一個音播放 song_id = temp_id。 qusu = ymt[0]。 // } else if(song_id == 4) { key_play = 0。 goto choose_id。 /*給初值賦值后,開啟定時器 0 蜂鳴器開始發(fā)聲 */ TR1 = 1。 P2 = led_table[0]。 //led停止閃動 flash = 0。 if(song_id == 16) /*坐標(biāo) (4,4)的鍵盤作為停止播 放鍵 */ { while(1) { x = key_x()。 delayms(1000)。 TMOD = 0x11。 delayms(1000)。 // 第一首歌開始 which = 2。 P0 = 0x00。 //蜂鳴器停止發(fā)聲 P0 = 0x00。 out = 0。是低音 0 中音 1 還是 高音 2 */ if(yindiao != 0) /*音調(diào)不為 0。 jiepai = test[which+1]。 if(dl[which] == 0xff) /* 遇到結(jié)束符 跳出循環(huán) 停止播放 */ break。 yindiao = srkl[which]。 } else if(temp_id == 16) { song_id = 16。 } else if(same == 1) break。 if(song_id == allsong) 26 song_id = 1。/*choose2 按下就起作用 不必等到放開按鍵才起作用 */ if(temp_id == 14) /*再次按下“暫停鍵” 表示繼續(xù)播放 */ { break。 else if(i == 0) //i等于初值 說明未按鍵 i = song_id。 else if(x == 4 amp。amp。 y == 3) i = 3。 if(x == 1 amp。 else if(x == 4) j = 12 + y。amp。 else if(x == 4 amp。amp。 y == 2) i = 2。 //第 i首歌 初值 0表示未選歌 uchar j。 flash 8 amp。 else if(x == 0 amp。 /*蜂鳴器引腳電平取反,定時器每溢出一次電平取反一次,不同的計數(shù)初值對應(yīng)不同的溢出時間,對應(yīng)不同的方波頻率 */ } } void timer1() interrupt 3 //定時器 1 led燈起落 { TL1 = 0x00。 beep = ~beep。 } else if(x == 3) { if(y = 3) { f_h = chuzhi[(20+y)*2]。 //高音 2 5 } else P0 = 0x00。 if(key_play == 0) key_play = 0。 } else if(P1_6 == 0) { delayms(5)。 } else i = 0。 /*有按鍵按下后 對應(yīng)按鍵的橫坐標(biāo)電位被拉低( 注意低電位引腳不能被高電位引腳抬高,只能是低電位拉低高電位) */ 19 if(P1_0 == 0) { delayms(5)。c0。c) // 1+2 = 3 for(b=142。/*發(fā)光二極管閃爍表 */ uchar code chuzhi[]={ //音調(diào)對應(yīng)的計數(shù)初值 0xff,0xff,//占 0位 0xf8,0x8c,//低 1 (0x01) a 數(shù)碼管顯示方式 0xf9,0x5b,// 2 b 0xfa,0x15,// 3 c 0xfa,0x67,// 4 d 0xfb,0x04,// 5 e 0xfb,0x90,// 6 f 0xfc,0x0c,//低 7( 0x07) g 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*占位 0x08 0x0b (8 11)*/ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,/*占位 0x0c 0x10 (12 16)*/ 0xfc,0x44,//中 1 ( 0x11) (17) 0xfc,0xac,// 2 0xfd,0x09,// 3 0xfd,0x34,// 4 0xfd,0x82,// 5 0xfd,0xc8,// 6 0xfe,0x06,//中 7 ( 0x17) (23) 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*占位 0x18 0x1b (24 27)*/ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*占位 0x1c 0x20 (28 32)*/ 0xfe,0x22,//高 1 ( 0x21) 1. (33) 0xfe,0x56,// 2 2. 0xfe,0x85,// 3 3. 0xfe,0x9a,// 4 4. 0xfe,0xc1,// 5 5. 0xfe,0xe4,// 6 6. 0xff,0x03 //高 7 ( 0x27) 7. (39) 16 }。//節(jié)拍延時 函數(shù) void key_check()。 //歌曲序號變量 uchar temp_id = 1。 //高位 uchar song_l。 sbit P1_7 = P1^7。F 無極性電容 1 5 10K 9 10K x9 。 制作過程中,感觸最深的是解決雜音問題。 我們可以找到任意歌曲的簡譜圖,然后根據(jù)上述規(guī)則編寫出單片機(jī)識別的簡譜表。比如: 0x04, 表示延時 4 個 16 分音符,即延時 1 個四分之一音符。了解音樂的一些基礎(chǔ)知識,我們可知產(chǎn)生不同頻率的音頻脈沖即能產(chǎn)生音樂。 9 高音的 DO( 1046Hz)的計算值 T=65536N=65536Fi? 2? Fr=655361000000? 2? Fr=65536500000/Fr 低音 DO 的 T=65536500000/262=63627 中音 DO 的 T=65536500000/523=64580 高音 DO 的 T=65536500000/1047=65059 5) C 調(diào)各音符頻率與計數(shù)值 T 的對照表如表 所示。例如高音 DO 的頻率( 1046Hz)剛好是中音 DO 的頻率( 523Hz)的一倍,中音 DO 的頻率( 523Hz)剛好是低音 DO 頻率( 266 Hz)的一倍;同樣的,高音 RE 的頻率( 1175Hz)剛好是中音 RE 的頻率( 587Hz)的一倍,中音 RE 的頻率( 587Hz)剛好是低音 RE 頻率( 294 Hz)的一倍。 因此單片機(jī)奏樂只需弄清楚兩個概念即可,也就是“音調(diào)”和節(jié)拍。如果當(dāng)初采用 16 個燈的話,就沒有這個窘境了。 flash jiepai) /*out ==1 表示有歌曲發(fā)聲時 ,(flashjiepai)使 led燈剛好指示節(jié)拍 */ ++flash。 y == 0 amp。 表: uchar code led_table[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}。 我讓第一行的按鍵 觸發(fā)低音 4 7,第二行觸發(fā)中音 1 4,第三行觸發(fā)中音 5 7和高音 1,第四行觸發(fā)高音 2 5。amp。 if(P1_2 == 0) i = 3。 【 4x4矩陣鍵盤】: 鍵盤
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1