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

正文內(nèi)容

電子音樂盒單片機(jī)原理及應(yīng)用課程設(shè)計(jì)-資料下載頁

2025-07-31 15:50本頁面

【導(dǎo)讀】設(shè)計(jì)一個基于AT89C51系列單片機(jī)的音樂盒,利用按鍵切換演奏出不同的樂曲。蜂鳴器發(fā)出某個音調(diào)。音樂盒的起源,可追溯至中世紀(jì)歐洲文藝復(fù)興時(shí)期。當(dāng)時(shí)為使教會的鐘塔報(bào)時(shí),而將大小的鐘表裝上機(jī)械裝置,被稱為“可發(fā)出聲音的組鐘”。音樂盒有著300多年的發(fā)展歷史,是人類文明發(fā)展的歷史見證。它是目前最好的仿真單片機(jī)及外圍器件的工具。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。AT89C51中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。外接石英晶體及電容C1、C2接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。對外接電容C1,C2雖然沒有什么嚴(yán)格的要求,但電容容量的大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程序及溫度穩(wěn)定性。如果使用石英晶體,我們推薦電容使用30PF10PF,而如果使用陶瓷振蕩器建議選擇4

  

【正文】 音高由三位數(shù)字組成: 個位是表示 1~7 這七個音符 十位是表示音符所在的音區(qū):1低音,2中音,3高音。 百位表示這個音符是否要升半音: 0不升,1升半音。 音長最多由三位數(shù)字組成: 個位表示音符的時(shí)值,其對應(yīng)關(guān)系是: |數(shù)值(n): |0 |1 |2 |3 | 4 | 5 | 6 |幾分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n 十位表示音符的演奏效果(02): 0普通,1連音,2頓音 百位是符點(diǎn)位: 0無符點(diǎn),1有符點(diǎn) 調(diào)用演奏子程序的格式 Play(樂曲名,調(diào)號,升降八度,演奏速度)。 Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed); |樂曲名 : 要播放的樂曲指針,結(jié)尾以(0,0)結(jié)束。 |調(diào)號(011) : 是指樂曲升多少個半音演奏。 |升降八度(13) : 1:降八度, 2:不升不降, 3:升八度。 |演奏速度(112000): 值越大速度越快。***************************************************************************/ifndef __SOUNDPLAY_H_REVISION_FIRST__define __SOUNDPLAY_H_REVISION_FIRST__//**************************************************************************define SYSTEM_OSC 6000000 //定義晶振頻率12000000HZdefine SOUND_SPACE 4/5 //定義普通音符演奏的長度分率,//每4分音符間隔sbit BeepIO = P0^1。 //定義輸出管腳unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }。 //原始頻率表unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }。 //1~7在頻率表中的位置unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 }。 unsigned char Sound_Temp_TH0,Sound_Temp_TL0。 //音符定時(shí)器初值暫存 unsigned char Sound_Temp_TH1,Sound_Temp_TL1。 //音長定時(shí)器初值暫存//**************************************************************************void InitialSound(void){ BeepIO = 0。 Sound_Temp_TH1 = (65535(1/1200)*SYSTEM_OSC)/256。 // 計(jì)算TL1應(yīng)裝入的初值 (10ms的初裝值) Sound_Temp_TL1 = (65535(1/1200)*SYSTEM_OSC)%256。 // 計(jì)算TH1應(yīng)裝入的初值 TH1 = Sound_Temp_TH1。 TL1 = Sound_Temp_TL1。 TMOD |= 0x11。 ET0 = 1。 ET1 = 0。 TR0 = 0。 TR1 = 0。 EA = 1。}void BeepTimer0(void) interrupt 1 //音符發(fā)生中斷{ BeepIO = !BeepIO。 TH0 = Sound_Temp_TH0。 TL0 = Sound_Temp_TL0。}//**************************************************************************void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed){ //聲音數(shù)組名稱 調(diào)號(011) 升降八度(13) 演奏速度(112000) unsigned int NewFreTab[12]。 //新的頻率表 unsigned char i,j。 unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength。 unsigned char Tone,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) //計(jì)算歌曲長度 { SoundLength+=2。 } Point = 0。 Tone = Sound[Point]。 Length = Sound[Point+1]。 // 讀出第一個音符和它時(shí)時(shí)值 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。 //計(jì)算出音符 SM=Tone/10%10。 //計(jì)算出高低音 SH=Tone/100。 //計(jì)算出是否升半 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/(12000000/SYSTEM_OSC)。//計(jì)算計(jì)數(shù)器初值 Sound_Temp_TH0 = Temp_T/256。 Sound_Temp_TL0 = Temp_T%256。 TH0 = Sound_Temp_TH0。 TL0 = Sound_Temp_TL0 + 12。 //加12是對中斷延時(shí)的補(bǔ)償 } 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。 BeepIO=0。 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]。 } BeepIO = 0。}endif1 調(diào)試結(jié)果記錄及分析 在一個星期的實(shí)訓(xùn)中,在開始看到題目都很茫然,也不知道怎么下手,歌曲的編碼,頻率和時(shí)間也不知道怎么設(shè)置,在程序中時(shí)間的把握很重要,時(shí)間不準(zhǔn),直接導(dǎo)致了程序的運(yùn)行,在寫程序的時(shí)候,先用軟件實(shí)現(xiàn)了,在到板子上去調(diào)試,通過幾天的努力最終有些進(jìn)展,后來慢慢的調(diào)試,終于出來了,在軟件的調(diào)試效果很好,而在開發(fā)板上的效果沒那么好,肯能是板子上的蜂鳴器的影響。 當(dāng)然在這次實(shí)訓(xùn)中,經(jīng)驗(yàn)才是對于我們最大的收獲,而且還增強(qiáng)了自身對未知問題以及對知識的深化認(rèn)識的能力,用受益匪淺這個詞語來概括這次難忘的活動我覺得再合適不過了。但是,光是完成了還是不可以自我滿足的,在從一開始的時(shí)候就懷著將制作得更加人性化,更加令人滿意,更加地使功能完美又方便地被應(yīng)用領(lǐng)域這個最終目的下,隨著對單片機(jī)這門學(xué)科的認(rèn)識加深,到達(dá)了拓展的程度,我想這個目的將在不遠(yuǎn)的時(shí)期內(nèi)被實(shí)現(xiàn)。 總之,這次設(shè)計(jì)從軟件編寫、調(diào)試到軟硬件聯(lián)機(jī)調(diào)試,我傾注了大量的時(shí)間和心血。真是曾經(jīng)為程序的編寫而冥思查找過,曾經(jīng)為無法找出錯誤而郁悶苦惱過,也曾經(jīng)為某一功能不能實(shí)現(xiàn)而猶豫彷徨過,但最終我成功了。參考文獻(xiàn)單片機(jī)原理與工程應(yīng)用書籍音樂盒設(shè)計(jì)STC系列增強(qiáng)型8051單片機(jī)書籍51單片機(jī)典型應(yīng)用開發(fā)范列大全34
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1