




已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
此文檔收集于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除單片機(jī)課程設(shè)計(jì) 題 目:八路搶答器姓 名:楊揚(yáng)凱學(xué) 號(hào):1305990333學(xué) 院:物理與信息工程學(xué)院專 業(yè):電子信息工程班 級(jí):13電信2班時(shí)間日期:2016年6月15日指導(dǎo)老師:周錦榮摘要搶答器作為一種工具,已廣泛應(yīng)用于各種智力和知識(shí)競(jìng)賽場(chǎng)合。但搶答器的使用頻率較低,且有的要么制作復(fù)雜,要么可靠性低。作為一個(gè)單位,如果專門購(gòu)一臺(tái)搶答器雖然在經(jīng)濟(jì)上可以承受,但每年使用的次數(shù)極少,往往因長(zhǎng)期存放使(電子器件的)搶答器損壞,再購(gòu)置的麻煩和及時(shí)性就會(huì)影響活動(dòng)的開(kāi)展,因此設(shè)計(jì)了本搶答器。本設(shè)計(jì)是以八路搶答為基本理念??紤]到依需設(shè)定限時(shí)回答的功能,利用AT89C51單片機(jī)及外圍接口實(shí)現(xiàn)的搶答系統(tǒng),利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠正確地進(jìn)行計(jì)時(shí),同時(shí)使數(shù)碼管能夠正確地顯示時(shí)間。用開(kāi)關(guān)做鍵盤輸出,揚(yáng)聲器發(fā)生提示。同時(shí)系統(tǒng)能夠?qū)崿F(xiàn):在搶答中,只有開(kāi)始后搶答才有效,如果在開(kāi)始搶答前搶答為無(wú)效;搶答限定時(shí)間和回答問(wèn)題的時(shí)間可在1-99s設(shè)定;可以顯示是哪位選手有效搶答和無(wú)效搶答,正確按鍵后有音樂(lè)提示;搶答時(shí)間和回答問(wèn)題時(shí)間倒記時(shí)顯示,滿時(shí)后系統(tǒng)計(jì)時(shí)自動(dòng)復(fù)位及主控強(qiáng)制復(fù)位;按鍵鎖定,在有效狀態(tài)下,按鍵無(wú)效非法。關(guān)鍵詞:?jiǎn)纹瑱C(jī)AT89SC2051、LED數(shù)碼管動(dòng)態(tài)掃描顯示、八路數(shù)字搶答器目錄摘要I1.引 言12 系統(tǒng)設(shè)計(jì)12.1 設(shè)計(jì)要求12.2總設(shè)計(jì)方案12.2.1 系統(tǒng)實(shí)現(xiàn)3系統(tǒng)硬件電路設(shè)計(jì)23.1時(shí)鐘電路設(shè)計(jì)33.2顯示模塊的設(shè)計(jì)43.3按鍵模塊的設(shè)計(jì)53.4復(fù)位電路設(shè)計(jì)53.5鬧鈴的設(shè)計(jì)63.6 發(fā)光二極管閃爍電路設(shè)計(jì)64 軟件設(shè)計(jì)74.1 程序流程74.1.1主程序84.1.2 時(shí)鐘走時(shí)模塊94.1.3時(shí)間設(shè)置模塊104.1.4鬧鐘設(shè)置模塊114.1.5 奏樂(lè)模塊145 系統(tǒng)測(cè)試155.1硬件調(diào)試155.2 軟件調(diào)試156 結(jié)論15附錄16附錄1 器件清單16附錄2 調(diào)試儀器附錄3 原理圖和PCB圖17附錄4 實(shí)物附錄5 程序清單1.系統(tǒng)設(shè)計(jì)1.1 設(shè)計(jì)要求 1 系統(tǒng)初始化,數(shù)碼管顯示初始狀態(tài)“00”;2 當(dāng)主持人按下開(kāi)始搶答按鍵時(shí),響鈴一聲(1s)提示進(jìn)入搶答狀態(tài),數(shù)碼管同時(shí)做30s倒計(jì)時(shí);3 在30s搶答時(shí)間內(nèi),參加搶答選手先按下?lián)尨鸢存I,響鈴連續(xù)提示兩聲(每聲1s),且鎖定其它選手的按鍵搶答功能,同時(shí)數(shù)碼管顯示該搶答選手的兩位編號(hào)(0108),并且編號(hào)連續(xù)閃爍3秒后進(jìn)入答題計(jì)時(shí)10s;4 答題計(jì)時(shí)10s時(shí)間到,解除選手們的按鍵鎖定,數(shù)碼管顯示初始狀態(tài)“00”。2系統(tǒng)硬件電路設(shè)計(jì)AT89C2051簡(jiǎn)介 AT89C2051是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含2k bytes的可反復(fù)擦寫的只讀Flash程序存儲(chǔ)器和128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,功能強(qiáng)大AT89C2051單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場(chǎng)合。AT89C2051是一個(gè)功能強(qiáng)大的單片機(jī),但它只有20個(gè)引腳,15個(gè)雙向輸入/輸出(I/O)端口,其中P1是一個(gè)完整的8位雙向I/O口,兩個(gè)外中斷口,兩個(gè)16位可編程定時(shí)計(jì)數(shù)器,兩個(gè)全雙向串行通信口,一個(gè)模擬比較放大器。 同時(shí)AT89C2051的時(shí)鐘頻率可以為零,即具備可用軟件設(shè)置的睡眠省電功能,系統(tǒng)的喚醒方式有RAM、定時(shí)/計(jì)數(shù)器、串行口和外中斷口,系統(tǒng)喚醒后即進(jìn)入繼續(xù)工作狀態(tài)。省電模式中,片內(nèi)RAM將被凍結(jié),時(shí)鐘停止振蕩,所有功能停止工作,直至系統(tǒng)被硬件復(fù)位方可繼續(xù)運(yùn)行。 主要功能特性: 兼容MCS51指令系統(tǒng) 2k可反復(fù)擦寫(1000次)Flash ROM 15個(gè)雙向I/O口 6個(gè)中斷源 兩個(gè)16位可編程定時(shí)/計(jì)數(shù)器 2.7-6.V的寬工作電壓范圍 時(shí)鐘頻率0-24MHz 128x8bit內(nèi)部RAM 兩個(gè)外部中斷源 兩個(gè)串行中斷 可直接驅(qū)動(dòng)LED 兩級(jí)加密位 低功耗睡眠功能 內(nèi)置一個(gè)模擬比較放大器 可編程UARL通道 軟件設(shè)置睡眠和喚醒功能 AT89C2051引腳圖如下:圖3-0 AT89SC2051引腳圖2.1搶答器電路設(shè)計(jì) 振蕩器和時(shí)鐘電路用于產(chǎn)生單片機(jī)正常工作時(shí)所需要的時(shí)鐘信號(hào)。AT89C2051單片機(jī)采用CMOS工藝,內(nèi)部包含一個(gè)振蕩器,可以用于CPU 的時(shí)鐘源;也允許采用外部振蕩器,由外部振蕩器產(chǎn)生的時(shí)鐘信號(hào)來(lái)供內(nèi)部CPU運(yùn)行使用。3本設(shè)計(jì)采用內(nèi)部時(shí)鐘模式,需在XTAL1和XTAL2端口加晶振電路,單片機(jī)工作速度也是由晶振電路決定的。在晶振電路中,電路中電容C2和C3對(duì)振蕩頻率有微調(diào)作用,通常的取值范圍3010pF;石英晶體選擇12MHz。電路如下圖:3.2顯示模塊的設(shè)計(jì)LED顯示有靜態(tài)掃描和動(dòng)態(tài)掃描兩種,由于本系統(tǒng)要顯示四位LED,所以選擇的動(dòng)態(tài)掃描方式。所謂動(dòng)態(tài)顯示就是一位一位的輪流點(diǎn)亮各個(gè)位,對(duì)于顯示器的每一位來(lái)說(shuō),每隔一段時(shí)間點(diǎn)亮一次。利用人的視覺(jué)暫留功能可以看到整個(gè)顯示,但必須保證掃描速度足夠快,字符才不閃爍。顯示器的亮度既與導(dǎo)通電流有關(guān),也與點(diǎn)亮?xí)r間和間隔時(shí)間的比例有關(guān)。調(diào)整參數(shù)可以實(shí)現(xiàn)較高穩(wěn)定度的顯示。動(dòng)態(tài)顯示節(jié)省了I/O口,降低了能耗。由于AT89C2051單片機(jī)的I/O口的帶載能力不強(qiáng),故本系統(tǒng)選用共陽(yáng)型的七段LED數(shù)碼管。P1口傳送的是顯示段碼,P3.0P3.3口傳送的是顯示位碼。P3.7用于控制兩個(gè)LED燈的選亮。動(dòng)態(tài)掃描周期的確定,所謂動(dòng)態(tài)驅(qū)動(dòng)實(shí)際就是分時(shí)點(diǎn)亮不同位置的數(shù)碼管,由于人眼的惰性,當(dāng)亮度熄滅的時(shí)間小于1/25秒時(shí),給人們感覺(jué)是亮度沒(méi)變。每段LED正常顯示是的電流為2mA20mA,此處每段LED接470的電阻,則每段LED的電流為數(shù)碼管的電流為(5-1.8)/470=6.8mA,滿足要求。5 電路如圖3-5所示:3.3按鍵模塊的設(shè)計(jì) 獨(dú)立式按鍵是最簡(jiǎn)單的鍵盤輸入設(shè)計(jì),每個(gè)鍵盤單獨(dú)占用一個(gè)I/O口,當(dāng)按下和釋放按鍵時(shí),輸入到I/O口的電平是不一樣的。按照端口電平的不同判斷是否有按鍵按下,并執(zhí)行相應(yīng)的程序段。6本設(shè)計(jì)中將4個(gè)按鍵分別接P3.5和P3.0P3.3口。設(shè)計(jì)中按鍵解釋:SW1:功能按鍵,在設(shè)置鬧鐘時(shí)是確定鍵,按下即返回時(shí)鐘走時(shí)模塊;SW2:賦值鍵,按下一次加一;SW3:鬧鐘設(shè)置按鍵,依次按下則顯示不同的鬧鐘時(shí)間;Sw4: 數(shù)碼管閃爍按鍵,在設(shè)置時(shí)間時(shí)配合SW1返回時(shí)鐘走時(shí)模塊;電路如下圖:3.4復(fù)位電路設(shè)計(jì)在理論上復(fù)位電路的實(shí)質(zhì)是一階充放電電路,系統(tǒng)上電時(shí)該電路提供有效的復(fù)位信號(hào)RST(高電平)直至系統(tǒng)電源穩(wěn)定后撤銷復(fù)位信號(hào)(低電平)。7理論上說(shuō),AT89C2051單片機(jī)復(fù)位引腳只要外加2個(gè)機(jī)器周期的有效信號(hào)即可復(fù)位,即只要保證tRC2M(機(jī)器周期)。由于本系統(tǒng)所用的晶振為12M,則單片機(jī)的一個(gè)機(jī)器周期為1uS,所以可選電解電容為104,點(diǎn)電阻為10K。則高電平時(shí)間為左右,滿足要求。由于設(shè)計(jì)的是時(shí)鐘,故沒(méi)有設(shè)置按鍵復(fù)位,即上電時(shí),時(shí)鐘就會(huì)自動(dòng)上電復(fù)位,其復(fù)位電路如下圖所示:3.5鬧鈴的設(shè)計(jì)本塊實(shí)驗(yàn)板,是通過(guò)無(wú)源蜂鳴器其基本工資原理: 無(wú)源蜂鳴器是靠壓電效應(yīng)的原理來(lái)發(fā)聲的,壓電材料,一般常見(jiàn)的是各種壓電陶瓷. 這種材料的特別之處在于,當(dāng)電壓作用于壓電材料時(shí),就會(huì)隨電壓和頻率的變化產(chǎn)生機(jī)械變形.另一方面,當(dāng)振動(dòng)壓電陶瓷時(shí),則會(huì)產(chǎn)生電荷.就是說(shuō)這種材料能把機(jī)械變形和電荷相互轉(zhuǎn)化,壓電式蜂鳴器里面的起振片,就是一種壓電陶瓷.如上所述,要讓它振動(dòng),除了壓電陶瓷本身,還需要適當(dāng)大小和頻率變化的電壓作用于壓電陶瓷.壓電式(有源)蜂鳴器內(nèi)部帶有多諧振蕩器,可以產(chǎn)生 1.52.5kHZ 的電壓信號(hào). 由此壓電式蜂鳴器才能發(fā)聲。電路原理圖如下: 3.6 發(fā)光二極管閃爍電路設(shè)計(jì) 本系統(tǒng)當(dāng)時(shí)間為走時(shí)時(shí)間時(shí),兩個(gè)發(fā)光二極管閃爍。在一秒鐘閃爍一次,(亮暗一次)代表時(shí)鐘的秒表;電路如下:4 軟件設(shè)計(jì)設(shè)計(jì)并實(shí)現(xiàn)基于AT89C2051單片機(jī)的電子鬧鐘,軟件實(shí)現(xiàn)的功能有:1 上電時(shí),LED數(shù)碼管顯示所有數(shù)碼管顯示00:00,發(fā)光二極管LED開(kāi)始1S閃爍1次,并且開(kāi)始走時(shí)。2 根據(jù)需要設(shè)置現(xiàn)在的時(shí)間:k0為功能鍵和確認(rèn)鍵,按下k0鍵,確認(rèn)設(shè)置的時(shí)間。k1鍵分別為增加鍵即是賦值鍵,按下鍵可以相應(yīng)時(shí)間的加1。k2為調(diào)整鍵,當(dāng)按下k3時(shí)可以跳到相應(yīng)的小時(shí)、分鐘之間的相互轉(zhuǎn)換。k3是數(shù)碼管閃爍標(biāo)志位的設(shè)置位,當(dāng)要對(duì)數(shù)碼管賦值送顯時(shí),要根據(jù)標(biāo)志位的閃爍位,對(duì)應(yīng)對(duì)該位賦值,當(dāng)鬧鐘時(shí)間和走時(shí)時(shí)間相同時(shí),蜂鳴器奏樂(lè)40秒。3 當(dāng)有設(shè)置鬧鐘,并將鬧鐘設(shè)置完后,按下確定鍵,則開(kāi)啟鬧鐘,當(dāng)走時(shí)時(shí)間等于鬧鐘時(shí)間時(shí),則蜂鳴器播放音樂(lè)。4 設(shè)置鬧鐘時(shí),時(shí)鐘繼續(xù)走時(shí),按下k0鍵則返回時(shí)鐘走時(shí)模塊,設(shè)置當(dāng)前時(shí)間時(shí),LED不閃爍,當(dāng)設(shè)置完成時(shí),同時(shí)按下k0則從設(shè)置的時(shí)間開(kāi)始走時(shí)。5 定時(shí)器1來(lái)實(shí)現(xiàn)關(guān)閉鬧鐘和讀取節(jié)拍、音頻的功能。4.1 程序流程4.1.1主程序 主程序主要完成系統(tǒng)的初始化和按鍵的捕獲,在鍵沒(méi)有按下時(shí)調(diào)用顯示子程序。程序如下圖所示。#includesbit w1=P33;sbit w2=P32;sbit w3=P31;sbit w4=P30;sbit szled=P37;sbit nzled=P17;sbit jian=P34;unsigned char disp;unsigned char bdata keys;sbit lw1=keys0;sbit lw2=keys1;sbit lw3=keys2;sbit lw4=keys3;sbit yanw1=keys4;sbit yanw2=keys5;sbit yanw3=keys6;sbit yanw4=keys7;unsigned char w1cnt,w2cnt,w3cnt,w4cnt;unsigned char code CODE10 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char DisplayData5,szj;unsigned char c0=0,c1=0,c2=0,c3=0,c4=0, sswx=1,b0=0,b1=0,b2=5,b3=0,b4=0;unsigned char a=0,mbl,musictime;unsigned char m,p; unsigned char ss=0;unsigned int ssys=0,t=0,nz;sbit Beep=P35 ; unsigned char n=0; unsigned char code music_tab =0x40,0x20,0x39,0x10,0x30,0x20,0x26, 0x10,0x1c,0x20,0x26,0x20,0x20,0x40, 0x20,0x20,0x1c,0x10,0x20, 0x20,0x26, 0x10,0x24,0x20,0x26,0x10,0x2b ,0x40,0x39,0x20,0x2b,0x10,0x2b ,0x20,0x24,0x10,0x19 ,0x20,0x19 ,0x10,0x1c,0x20,0x20,0x10,0x24,0x40,0x24, 0x20,0x26, 0x20,0x39,0x40,0x33,0x40,0x30,0x40, 0x2b ,0x40, 0x40, 0x20,0x39 ,0x10,0x30,0x20,0x26, 0x10,0x1c, 0x20,0x26 ,0x20,0x20 ,0x40, 0x20, 0x20,0x1c,0x10,0x20,0x20,0x26, 0x10,0x24,0x00;void Display();void zoushi();void xtcshua(); unsigned char keysm(); void ssDisplay();void int0();void delay (unsigned char m);void music();4.1.2 時(shí)鐘走時(shí)模塊 本設(shè)計(jì)在空閑模塊時(shí)電子鬧鐘的數(shù)碼管顯示走時(shí)間,LED發(fā)光二極管以每1s閃爍。當(dāng)走時(shí)時(shí)間與設(shè)置的鬧鐘時(shí)間相同,揚(yáng)聲器奏樂(lè)。 空閑模塊的程序如下:void main() unsigned char k=0;unsigned int szsj=0;xtcshua(); while(1) if(TF0=1) /5ms到了 TF0=0;TH0 = (65536-5000)/256;TL0 = (65536-5000)%256; t+; k+; switch(a) case(0): zoushi(); szsj=0; ss+; if(ss100&ss=200)ss=0; if(k2) nzled=1; w1=w2=w3=w4=1; jian=0; a=keysm(); if(a=3|a=4) a=0; if(1k7) Display(); if(k=6)k=0; if(c1=b1&c2=b2&c3=b3&c4=b4&c0=b0) a=3;/鬧鐘時(shí)間到,轉(zhuǎn)到鬧鐘模塊 break; case(1): zoushi();szsj+; if(k2) w1=w2=w3=w4=1; jian=0;keysm(); if(1k7); ssDisplay(); if(k=6)k=0; if(szsj=2000) a=0; break; case(2): /設(shè)置鬧鐘模塊 DisplayData4=CODEb4; DisplayData3=CODEb3; DisplayData2=CODEb2; DisplayData1=CODEb1;/讓數(shù)碼管顯示鬧鐘時(shí)間 zoushi(); szsj+; if(k2) w1=w2=w3=w4=1;jian=0; keysm(); if(1k3) disp=0; switch(disp) case(0): w1=0; P1=DisplayData4; break; case(1): w2=0; P1=DisplayData3; break; case(2): w3=0; P1=DisplayData2; break; case(3): w4=0; P1=DisplayData1; break; default: break; void zoushi() /走時(shí)函數(shù) unsigned char i; if(t=200) t=0; c0+; if(c0=60) c0=0; if(a!=2) /非鬧鐘模式 c1+; DisplayData1=CODEc1; if(c15) c2=0; c3+; DisplayData2=CODEc2; DisplayData3=CODEc3; if(c4=1|c4=0) if(c39) c3=0; c4+; DisplayData3=CODEc3;DisplayData4=CODEc4; if(c4=2) if(c34) c3=0; DisplayData3=CODEc3;DisplayData4=CODEc4; if(c4=2&c3=4&c2=0&c1=0) for(i=1; i9) c1=0; c2+; if(c25) c2=0; c3+; if(c34) c3=0; c4+; if(c42) c4=c3=c2=c1=0; void xtcshua()/初始化函數(shù) unsigned char i; TMOD = 0x01; TH0 = (65536-5000)/256; TL0 = (65536-5000)%256;/5MS TR0 = 1; /定時(shí)器0,沒(méi)開(kāi)中斷,用于主程序5ms循環(huán) for(i=1; i3) lw1=1; else ; else w1cnt=0;if(lw1)yanw1=1;lw1=0; if(!w2) if(w2cnt+3) lw2=1; else ; else w2cnt=0;if(lw2)yanw2=1;lw2=0; if(!w3) if(w3cnt+3) lw3=1; else ; else w3cnt=0;if(lw3)yanw3=1;lw3=0; if(!w4) if(w4cnt+3) lw4=1; else; else w4cnt=0;if(lw4)yanw4=1;lw4=0;keyValue=0;if(yanw1) /按鍵1按下切換到設(shè)置時(shí)間 keyValue=1;sswx+;if(sswx=5)sswx=1; if(yanw2)/按鍵2按下切換到設(shè)置鬧鐘 keyValue=2; if(yanw3)/按鍵3按下改變時(shí)間或鬧鐘的值 keyValue=3;if(a=1) if(sswx=1) DisplayData1=CODE+c1;if(c19) c1=0;DisplayData1=CODEc1;if(sswx=2)DisplayData2=CODE+c2;if(c25) c2=0;DisplayData2=CODEc2;if(sswx=3)DisplayData3=CODE+c3;if(c39) c3=0;DisplayData3=CODEc3;if(sswx=4)DisplayData4=CODE+c4;if(c42) c4=0;DisplayData4=CODEc4; if(a=2) if(sswx=1) DisplayData1=CODE+b1;if(b19) b1=0;DisplayData1=CODEb1;if(sswx=2)DisplayData2=CODE+b2;if(b25) b2=0;DisplayData2=CODEb2;if(sswx=3)DisplayData3=CODE+b3;if(b39) b3=0;DisplayData3=CODEb3;if(sswx=4)DisplayData4=CODE+b4;if(b42)b4=0;DisplayData4=CODEb4; if(yanw4) keyValue=4;/回到計(jì)時(shí)狀態(tài) a=0; DisplayData4=CODEc4; DisplayData3=CODEc3; DisplayData2=CODEc2; DisplayData1=CODEc1;jian=1; return keyValue;4.1.4鬧鐘設(shè)置模塊 在時(shí)鐘正常走時(shí)狀態(tài)下,按下K3,LED發(fā)光二極管不閃爍。則跳轉(zhuǎn)到鬧鐘設(shè)置模塊,設(shè)置好鬧鐘響應(yīng)的時(shí)間時(shí),按下K0,返回時(shí)鐘走時(shí)模塊,等到現(xiàn)在時(shí)間和鬧鐘設(shè)置時(shí)間一樣時(shí),蜂鳴器奏樂(lè)。鬧鐘設(shè)置模塊的程序如下所示:void ssDisplay() /閃爍顯示 ssys+;if(ssys3) disp=0; switch(disp) case(0): w1=0; P1=DisplayData4; break; case(1): w2=0; P1=DisplayData3; break; case(2): w3=0; P1=DisplayData2; break; case(3): w4=0; P1=DisplayData1; break; default: break; if(ssys=50&ssys3) disp=0; switch(disp) case(0): w1=0; P1=0xff; break; case(1): w2=0; P1=DisplayData3; break; case(2): w3=0; P1=DisplayData2; break; case(3): w4=0; P1=DisplayData1; break; default: break; if(sswx=3)/第二位亮滅 w1=w2=w3=w4=1; disp+; if(disp3) disp=0; switch(disp) case(0): w1=0; P1=DisplayData4; break; case(1): w2=0; P1=0xff; break; case(2): w3=0; P1=DisplayData2; break; case(3): w4=0; P1=DisplayData1; break; default: break; if(sswx=2)/第三位亮滅 w1=w2=w3=w4=1; disp+; if(disp3) disp=0; switch(disp) case(0): w1=0; P1=DisplayData4; break; case(1): w2=0; P1=DisplayData3; break; case(2): w3=0; P1=0xff; break; case(3): w4=0; P1=DisplayData1; break; default: break; if(sswx=1)/第四位亮滅 w1=w2=w3=w4=1; disp+; if(disp3) disp=0; switch(disp) case(0): w1=0; P1=DisplayData4; break; case(1): w2=0; P1=DisplayData3; break; case(2): w3=0; P1=DisplayData2; break; case(3): w4=0; P1=0xff; break; default: break; if(ssys=100)ssys=0; void delay (unsigned char m)/控制頻率的延遲函數(shù) unsigned i=3*m; while(-i); void int0() interrupt 3 /定時(shí)器1中斷,用于音樂(lè)控制節(jié)拍 n-; TH1=0xd8; TL1=0xef;/延遲10ms 4.1.5 奏樂(lè)模塊單片機(jī)奏樂(lè)原理單片機(jī)演奏一個(gè)音符,是通過(guò)引腳,周期性的輸出一個(gè)特定頻率的方波。 這就需要單片機(jī),在半個(gè)周期內(nèi)輸出低電平、另外半個(gè)周期輸出高電平,周而復(fù)始。 周期為頻率的倒數(shù),可以通過(guò)音符的頻率 計(jì)算出半周期。 演奏時(shí),要根據(jù)音符頻率的不同,把對(duì)應(yīng)的、半個(gè)周期的定時(shí)時(shí)間初始值,送入 定時(shí)器,再由定時(shí)器按時(shí)輸出高低電平。 有兩個(gè)數(shù)據(jù)表, 其中存放了事先算好的、 各種音符頻率所對(duì)應(yīng)的、 半周期的定時(shí)時(shí)間初始值。 有了這些數(shù)據(jù),單片機(jī)就可以演奏從低音、中音、高音和超高音,四個(gè)八度共 28 個(gè)音符。 演奏樂(lè)曲時(shí),就根據(jù)音符的不同數(shù)值,從半周期數(shù)據(jù)表中找到定時(shí)時(shí)間初始值, 送入定時(shí)器即可控制發(fā)音的音調(diào)。 比如把表中的 0xF2 和 0x42 送到定時(shí)器,定時(shí)器按照這個(gè)初始值來(lái)產(chǎn)生中斷,輸 出的方波,人們聽(tīng)起來(lái),這就是低音 1。 樂(lè)曲的數(shù)據(jù),也要寫個(gè)數(shù)據(jù)表,程序中以code music_tab 命名。 其中,音樂(lè)的組成主要靠頻率和節(jié)拍進(jìn)行,兩者結(jié)合
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 代發(fā)工資活動(dòng)方案
- 代筆活動(dòng)策劃方案
- 以身說(shuō)法活動(dòng)方案
- 企業(yè)上云活動(dòng)方案
- TJSQA-溫室氣體?產(chǎn)品碳足跡量化方法與要求?砌體材料產(chǎn)品編制說(shuō)明
- 企業(yè)上網(wǎng)繪畫活動(dòng)方案
- 企業(yè)代發(fā)活動(dòng)方案
- 企業(yè)公司初步策劃方案
- 企業(yè)冬至活動(dòng)方案
- 貴州省銅仁市沿河縣2022-2023學(xué)年五年級(jí)下學(xué)期數(shù)學(xué)期末試卷(含答案)
- 激光切割機(jī)日常點(diǎn)檢表
- 一班二模后主題班會(huì)
- 電梯維修報(bào)價(jià)表格
- 醫(yī)技科室交接班記錄-影像科(本)
- 礦區(qū)專項(xiàng)邊坡治理方案設(shè)計(jì)
- 破產(chǎn)管理人工作履職報(bào)告(優(yōu)選.)
- 養(yǎng)老服務(wù)禮儀與實(shí)務(wù)全書(shū)ppt完整版課件最全電子教案正本書(shū)教學(xué)教程
- 公路段橋梁應(yīng)急搶險(xiǎn)演練腳本
- 集裝箱碼頭堆場(chǎng)優(yōu)化問(wèn)題
- 《redis講解》PPT課件
- 京東考試答案
評(píng)論
0/150
提交評(píng)論