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

正文內(nèi)容

基于stc89c52單片機的簡易電子琴(課程設(shè)計)-資料下載頁

2025-06-27 18:57本頁面
  

【正文】 one,Length,SL,SH,SM,SLen,XG,FD。 for(i=0。i12。i++) // 根據(jù)調(diào)號及升降八度來生成新的頻率表 { j = i + Signature。 if(j 11) { j = j12。 NewFreTab[i] = FreTab[j]*2。//計算新的頻率 } else NewFreTab[i] = FreTab[j]。 if(Octachord == 1) NewFreTab[i]=2。 else if(Octachord == 3) NewFreTab[i]=2。 } SoundLength = 0。 while(Sound[SoundLength] != 0x00) //計算歌曲長度 { SoundLength+=2。 } Point = 0。 Tone = Sound[Point]。 Length = Sound[Point+1]。 // 讀出第一個音符和它時時值 LDiv0 = 12000/Speed。 // 算出1分音符的長度(幾個10ms) LDiv4 = LDiv0/4。 // 算出4分音符的長度 LDiv4 = LDiv4LDiv4*SOUND_SPACE。 // 普通音最長間隔標(biāo)準(zhǔn) TR0 = 0。 TR1 = 1。 while(Point SoundLength) { SL=Tone%10。 //計算出音符 SM=Tone/10%10。 //計算出高低音 SH=Tone/100。 //計算出是否升半 CurrentFre = NewFreTab[SignTab[SL1]+SH]。 //查出對應(yīng)音符的頻率 if(SL!=0) { if (SM==1) CurrentFre = 2。 //低音 if (SM==3) CurrentFre = 2。 //高音 Temp_T = 65536(50000/CurrentFre)*10。//計算計數(shù)器初值 Sound_Temp_TH0 = Temp_T/256。 Sound_Temp_TL0 = Temp_T%256。 TH0 = Sound_Temp_TH0。 TL0 = Sound_Temp_TL0 + 12。 //加12是對中斷延時的補償 } SLen=LengthTab[Length%10]。 //算出是幾分音符 XG=Length/10%10。 //算出音符類型(0普通1連音2頓音) FD=Length/100。 LDiv=LDiv0/SLen。 //算出連音音符演奏的長度(多少個10ms) if (FD==1) LDiv=LDiv+LDiv/2。 if(XG!=1) if(XG==0) //算出普通音符的演奏長度 if (SLen=4) LDiv1=LDivLDiv4。 else LDiv1=LDiv*SOUND_SPACE。 else LDiv1=LDiv/2。 //算出頓音的演奏長度 else LDiv1=LDiv。 if(SL==0) LDiv1=0。 LDiv2=LDivLDiv1。 //算出不發(fā)音的長度 if (SL!=0) { TR0=1。 for(i=LDiv1。i0。i) //發(fā)規(guī)定長度的音 { while(TF1==0)。 TH1 = Sound_Temp_TH1。 TL1 = Sound_Temp_TL1。 TF1=0。 } } if(LDiv2!=0) { TR0=0。 beep=1。 for(i=LDiv2。i0。i) //音符間的間隔 { while(TF1==0)。 TH1 = Sound_Temp_TH1。 TL1 = Sound_Temp_TL1。 TF1=0。 } } Point+=2。 Tone=Sound[Point]。 Length=Sound[Point+1]。 } beep = 0。 TR0=0。//關(guān)閉定時器}//鍵盤矩陣掃描//返回按下的鍵的值unsigned char keys_scan(void){ unsigned char Tmp,k=16。 P2=0x0F。 delay_1ms(2)。 Tmp=P2 ^ 0x0F。 switch(Tmp)//確定掃描的是哪一行 { case 1: k=0。break。 case 2: k=1。break。 case 4: k=2。break。 case 8: k=3。break。 default: return 16。 //無鍵按下,返回 } P2=0xF0。 delay_1ms(2)。 Tmp=(P24)^0x0F。 switch(Tmp)//確定掃描的是那一列 { case 1: k+=0。 break。 case 2: k+=4。 break。 case 4: k+=8。 break。 case 8: k+=12。break。 default: return 16。 //無鍵按下,返回 } return k。}void main() //主程序{ unsigned char key_NO=0。 P1=0xFF。 //數(shù)碼管顯示關(guān)閉 //設(shè)置定時器工作方式1,以及相關(guān)開啟寄存器 TMOD |= 0x11。 ET0 = 1。 ET1 = 0。 TR0 = 0。 TR1 = 0。 EA = 1。 //設(shè)置定時器初值 TH0=tone_delay_table[key_NO]/256。 TL0=tone_delay_table[key_NO]%256。 TH1 = (6553550000)/256。// 計算TL1應(yīng)裝入的初值 (10ms的初裝值) TL1 = (6553550000)%256。 while(1) { P2=0xF0。 if(P2!=0xF0)//當(dāng)有按鍵按下時,需要顯示數(shù)碼管及設(shè)置定時器的開啟 { key_NO=keys_scan()。//調(diào)用鍵盤掃描 P1=DSY_CODE[key_NO]。//在數(shù)碼管上顯示按下的鍵 if(key_NO15)//按下那個鍵,發(fā)出對應(yīng)的音調(diào) { Sound_Temp_TH0=tone_delay_table[key_NO]/256。 Sound_Temp_TL0=tone_delay_table[key_NO]%256。 } else if(key_NO==15)//按下最后一個鍵時,要播放音樂 { Play(Music, 0, 3, 300)。 //TR1 = 0。//音長中斷 } TR0=1。//開啟定時器0,音符中斷 } else//當(dāng)沒有鍵按下時,數(shù)碼管不顯示,也無聲音發(fā)出;如果是播放音樂,則一直顯示 { TR0=0。//關(guān)閉定時器 P1=0xFF。//數(shù)碼管顯示關(guān)閉 } delay_1ms(2)。//稍做延時,可以避免誤判斷 }}//音符發(fā)生的中斷void play_tone() interrupt 1{ TH0=Sound_Temp_TH0。 TL0=Sound_Temp_TL0。 beep=~beep。
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1