版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)課程設(shè)計(jì)(論文)任務(wù)書信息工程學(xué)院學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)計(jì)算機(jī)2023-1班一、課程設(shè)計(jì)(論文)題目基于單片機(jī)多模式的帶音樂跑馬燈設(shè)計(jì)二、課程設(shè)計(jì)(論文)工作自2023年6月11日起至2023年6月24日止。三、課程設(shè)計(jì)(論文)地點(diǎn):四、課程設(shè)計(jì)(論文)內(nèi)容要求:1.本課程設(shè)計(jì)的目的〔1〕利用所學(xué)單片機(jī)的理論知識(shí)進(jìn)行軟硬件整體設(shè)計(jì),培養(yǎng)學(xué)生分析、解決問題的能力,鍛煉學(xué)生理論聯(lián)系實(shí)際、綜合應(yīng)用的能力?!?〕使學(xué)生掌握系統(tǒng)各功能模塊的根本工作原理;〔3〕培養(yǎng)學(xué)生根本掌握電路設(shè)計(jì)的根本思路和方法;〔4〕使學(xué)生掌握接收系統(tǒng)調(diào)試;〔5〕培養(yǎng)學(xué)生分析、解決問題的能力;〔6〕提高學(xué)生的科技論文寫作能力。2.課程設(shè)計(jì)的任務(wù)及要求1〕根本要求:1、有八個(gè)發(fā)光二極管做跑馬燈,其中跑馬燈有8種模式。2、有專門的鍵盤用以切換跑馬燈的模式,并且對(duì)于任何一種跑馬燈模式都可以對(duì)亮燈速度進(jìn)行控制。3、每一種跑馬燈模式用LED數(shù)碼管進(jìn)行顯示。4、當(dāng)跑馬燈處于一種模式時(shí),伴隨的音樂響起,音樂至少有3首,并可以對(duì)其進(jìn)行切換。2〕創(chuàng)新要求:在根本要求到達(dá)后,可進(jìn)行創(chuàng)新設(shè)計(jì),如改善電路性能;對(duì)系統(tǒng)進(jìn)行仿真分析。3〕課程設(shè)計(jì)論文編寫要求〔1〕要按照書稿的規(guī)格打印謄寫畢業(yè)論文〔2〕論文包括目錄、緒論、正文、小結(jié)、參考文獻(xiàn)、謝辭、附錄等〔3〕畢業(yè)論文裝訂按學(xué)校的統(tǒng)一要求完成4〕辯論與評(píng)分標(biāo)準(zhǔn):〔1〕完成原理分析:20分;〔2〕完成設(shè)計(jì)過程:30分;〔3〕完成調(diào)試:30分;〔4〕答復(fù)下列問題:20分。5〕參考文獻(xiàn):〔1〕張毅剛彭喜元彭宇.《單片機(jī)原理及應(yīng)用》[M].北京:高等教育出版社〔2〕譚浩強(qiáng).《C程序設(shè)計(jì)教程》[M].北京:清華大學(xué)出版社課程設(shè)計(jì)進(jìn)度安排內(nèi)容天數(shù)地點(diǎn)構(gòu)思及收集資料2圖書館組裝與調(diào)試5實(shí)驗(yàn)室撰寫論文3圖書館、實(shí)驗(yàn)室學(xué)生簽名:2023年6月24日課程設(shè)計(jì)(論文)評(píng)審意見〔1〕完成原理分析〔20分〕:優(yōu)〔〕、良〔〕、中〔〕、一般〔〕、差〔〕;〔2〕設(shè)計(jì)分析〔30分〕:優(yōu)〔〕、良〔〕、中〔〕、一般〔〕、差〔〕;〔3〕完成調(diào)試〔30分〕:優(yōu)〔〕、良〔〕、中〔〕、一般〔〕、差〔〕;〔4〕答復(fù)下列問題〔20分〕:優(yōu)〔〕、良〔〕、中〔〕、一般〔〕、差〔〕;〔5〕格式標(biāo)準(zhǔn)性及考勤是否降等級(jí):是〔〕、否〔〕評(píng)閱人:職稱:副教授2023年6月27目錄TOC\o"1-3"\h\u12575一、設(shè)計(jì)概述5136391.1設(shè)計(jì)目的:5309201.3設(shè)計(jì)作用:5231781.4設(shè)計(jì)要求:57143二、設(shè)計(jì)的具體實(shí)現(xiàn)685962.1系統(tǒng)概述6312782.2各模塊分析778532.2.1主控芯片STC90C51794022.2.2STC90C51性能簡(jiǎn)介7319092.2.3LED顯示局部7103932.2.4模式顯示局部8296472.2.5單片機(jī)局部99833三、硬件電路設(shè)計(jì)及描述934813.1LED9266233.2數(shù)碼管9169273.3復(fù)位電路及晶振電路10277043.4蜂鳴器及按鍵1010035四、程序設(shè)計(jì)思想及流程11251864.1程序設(shè)計(jì)思路11257644.2音樂局部設(shè)計(jì)136625五、電路的安裝與調(diào)試1432722六、總結(jié)1620470七、參考文獻(xiàn)1724784附錄1821723實(shí)物圖1817827程序清單18摘要跑馬燈,顧名思義,就是“會(huì)像馬兒一樣跑動(dòng)〞的小燈,故取名“跑馬燈〞。跑馬燈在單片機(jī)系統(tǒng)中一般是用來指示和顯示單片機(jī)的運(yùn)行狀態(tài),一般情況下,單片機(jī)的跑馬燈由多個(gè)LED發(fā)光二極管組成。在單片機(jī)運(yùn)行時(shí),可以在不同狀態(tài)下讓跑馬燈顯示不同的組合,作為單片機(jī)系統(tǒng)正常的指示。當(dāng)單片機(jī)系統(tǒng)出現(xiàn)故障時(shí),可以利用跑馬燈顯示當(dāng)前的故障碼,對(duì)故障做出診斷。此外,跑馬燈在單片機(jī)的調(diào)試過程中也非常有用,可以在不同時(shí)候?qū)⑿枰拇娣牌骰蜿P(guān)鍵變量的值顯示在跑馬燈上,提供需要的調(diào)試信息。本設(shè)計(jì)使用STC90C51芯片,利用P0的8個(gè)端口連接8個(gè)發(fā)光二極管,通過P0.0到P0.7的值控制“跑馬燈〞的亮滅,以到達(dá)顯示效果。設(shè)計(jì)的中斷程序要對(duì)多個(gè)按鍵動(dòng)作進(jìn)行響應(yīng),燈光變換的把戲有8種,用按鍵k1切換。按下k1鍵,程序?qū)窗朔N模式循環(huán)切換,每按一次K1鍵,切換一次跑馬燈模式,同時(shí)切換音樂。關(guān)鍵詞跑馬燈;單片機(jī);LED發(fā)光二極管一、設(shè)計(jì)概述1.1設(shè)計(jì)目的:利用所學(xué)單片機(jī)的理論知識(shí)進(jìn)行軟硬件整體設(shè)計(jì),培養(yǎng)學(xué)生分析、解決問題的能力,鍛煉學(xué)生理論聯(lián)系實(shí)際、綜合應(yīng)用的能力。通過實(shí)踐動(dòng)手制作硬件和軟件,綜合應(yīng)用本學(xué)期所學(xué)的單片機(jī)知識(shí),到達(dá)加深學(xué)習(xí)該專業(yè)知識(shí)的目的。1.2設(shè)計(jì)內(nèi)容:基于單片機(jī)的多模式帶音樂跑馬燈設(shè)計(jì).1.3設(shè)計(jì)作用:通過發(fā)光二極管的動(dòng)態(tài)閃亮,顯示非常炫目的效果,應(yīng)用于各種建筑物,大樓,酒吧,KTV,夜總會(huì)等娛樂場(chǎng)所,拖尾燈,以及各種休閑娛樂場(chǎng)所用的動(dòng)態(tài)燈光顯示,同時(shí)加上音樂的效果,可以制作出各種各樣的炫目多彩的霓虹燈,為夜晚帶來不一樣的光榮。1.4設(shè)計(jì)要求:1、有8個(gè)發(fā)光二極管做跑馬燈,其中跑馬燈有8種燈亮模式。2、有專門的鍵盤用以切換跑馬燈的模式,并且對(duì)于任何一種跑馬燈模式都可以對(duì)亮燈速度進(jìn)行控制。3、每一種跑馬燈模式用LED數(shù)碼管進(jìn)行顯示。4、當(dāng)跑馬燈處于一種模式時(shí),伴隨的音樂響起,音樂至少有3首,并可以對(duì)其進(jìn)行切換.設(shè)計(jì)的具體實(shí)現(xiàn)2.1系統(tǒng)概述本設(shè)計(jì)的要求是設(shè)計(jì)一個(gè)有多種功能的走馬燈,有多種不同的顯示方式,速度控制功能,這里的速度控制還有顯示方式都是由單片機(jī)內(nèi)部的程序控制,在這里我將8個(gè)光二極管接在P0,通過程序控制這個(gè)端口的電平上下,將8個(gè)光二極管的正極接電源,負(fù)極接P0口,即發(fā)P0口的相應(yīng)端口為高電平時(shí),發(fā)光二極管的兩端都為高電平,所以發(fā)光二極管不亮,當(dāng)發(fā)光二極管的相應(yīng)端口為低電平時(shí)就能被點(diǎn)亮。再通過程序循環(huán)的讓各個(gè)端口以不同的方式點(diǎn)亮來到達(dá)走馬的效果,并且當(dāng)中要有一定的延時(shí),延時(shí)時(shí)間小于人眼視覺暫留時(shí)間,否那么人眼看上去每個(gè)燈都是亮的也就沒有跑馬效果。單片機(jī)演奏一個(gè)音符,是通過引腳,周期性的輸出一個(gè)特定頻率的方波。這就需要單片機(jī),在半個(gè)周期內(nèi)輸出低電平、另外半個(gè)周期輸出高電平,周而復(fù)始。半個(gè)周期的時(shí)間是多長(zhǎng)呢?眾所周知,周期為頻率的倒數(shù),可以通過音符的頻率計(jì)算出半周期。演奏時(shí),要根據(jù)音符頻率的不同,把對(duì)應(yīng)的、半個(gè)周期的定時(shí)時(shí)間初始值,送入定時(shí)器,再由定時(shí)器按時(shí)輸出上下電平。系統(tǒng)框圖如圖一:蜂鳴器LED顯示陣列蜂鳴器LED顯示陣列MCU(STC90C51)MCU(STC90C51)12M晶振8段共陰數(shù)碼管鍵盤8段共陰數(shù)碼管鍵盤圖一系統(tǒng)框圖2.2各模塊分析2.2.1主控芯片STC90C51STC90C516RD+系列單片機(jī)是宏晶科技推出的新一代超性能、高速、低功耗的單片機(jī),指令代碼完全兼容傳統(tǒng)8051單片機(jī),12時(shí)鐘/機(jī)器周期和6時(shí)鐘/機(jī)器周期可任意選擇,內(nèi)部集成MAX810專用復(fù)位電路,時(shí)鐘頻率在12MHz以下時(shí),復(fù)位腳可直接接地。且兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISPFlash存儲(chǔ)單元,功能強(qiáng)大的微型計(jì)算機(jī)的STC90C51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。2.2.2STC90C51性能簡(jiǎn)介STC90C51具有如下特點(diǎn):40個(gè)引腳,4kBytesFlash片內(nèi)程序存儲(chǔ)器,256bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器〔RAM〕,32個(gè)外部雙向輸入/輸出〔I/O〕口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗〔WDT〕電路,片內(nèi)時(shí)鐘振蕩器。此外,STC90C51設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過軟件設(shè)置省電模式??臻e模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。STC90C51芯片引腳圖如圖二:圖二STC90C51芯片引腳圖2.2.3LED顯示局部顯示局部用8個(gè)發(fā)光二極管接在P0,這里需要注意的是P0口出I/O口輸入輸出的時(shí)候需要加上拉電阻,通過程序控制P0的8個(gè)端口按照一定的方式依次為低電平以點(diǎn)亮相應(yīng)端口的LED。此時(shí)通過按按鍵K1來切換跑馬燈的模式,同時(shí)切換音樂。按按鍵K2來控制跑馬燈的速度。LED陣列如圖三:圖三LED顯示陣列2.2.4模式顯示局部模式即跑馬的方式,共8種。相應(yīng)方式由數(shù)碼管顯示出來,每當(dāng)模式按鈕按下時(shí),相應(yīng)的模式加一,數(shù)碼管顯示相應(yīng)模式。本次實(shí)驗(yàn)數(shù)碼管采用的是共陰極八段數(shù)碼管,只對(duì)其abcdefg段編程。共陰數(shù)碼管結(jié)構(gòu)如圖四:a各段代碼b實(shí)物外觀圖四共陽數(shù)碼管結(jié)構(gòu)單片機(jī)局部該局部主要涉及功能的實(shí)現(xiàn)方式,即程序編寫。程序要實(shí)現(xiàn)的功能包括讀鍵盤,通過對(duì)讀入鍵盤的值控制LED點(diǎn)亮方式和數(shù)碼管顯示。鍵盤有兩個(gè)按鍵K1、K2,K1控制LED點(diǎn)亮模式,K2鍵控制跑馬燈速度。不管K1被按下多少次,LED八種點(diǎn)亮模式是循環(huán)的,K2鍵控制速度分別有上限和下限的,每當(dāng)按下K2鍵,跑馬燈的速度相應(yīng)的減慢一個(gè)級(jí)別,當(dāng)?shù)竭_(dá)下限時(shí),再次按K2鍵,跑馬燈的速度變成最快的,和K1鍵類是,速度也是用了一個(gè)循環(huán)。硬件電路設(shè)計(jì)及描述3.1LED本設(shè)計(jì)使用STC90C51芯片,利用P0的8個(gè)端口連接8個(gè)發(fā)光二極管,通過P0.0到P0.7的值控制“跑馬燈〞的亮滅,以到達(dá)顯示效果,這里需要注意的是P0口內(nèi)部沒有上拉電阻,是開漏的,不管它的驅(qū)動(dòng)能力多大,相當(dāng)于它是沒有電源的,需要外部的電路提供,作普通I/O輸入輸出,需要外接上拉電阻。連接圖如圖五所示。圖五硬件電路LED二極管連接圖3.2數(shù)碼管本次實(shí)驗(yàn)采用的數(shù)碼管是一位八段數(shù)碼管,所以不需要位選,在硬件設(shè)計(jì)中我將數(shù)碼管各個(gè)引腳接在芯片的P2口,同時(shí)加上上拉電阻,連接圖如圖六所示圖六數(shù)碼管硬件電路連接圖3.3復(fù)位電路及晶振電路對(duì)單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括復(fù)位電路、晶振電路復(fù)位電路:有電容串聯(lián)電阻構(gòu)成,當(dāng)系統(tǒng)一上電,RST腳將會(huì)出現(xiàn)高電平,典型的51單片機(jī)當(dāng)RST腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位。晶振電路:典型的晶振取11.0592MHz〔因?yàn)榭梢詼?zhǔn)確地得到9600波特率和19200波特率,用于有串口通訊的場(chǎng)合〕/12MHz〔產(chǎn)生精確的uS級(jí)時(shí)歇,方便定時(shí)操作〕復(fù)位電路和晶振電路連接圖如圖七所示圖七晶振電路和復(fù)位電路硬件連接圖3.4蜂鳴器及按鍵蜂鳴器只是作為簡(jiǎn)單的輸出口,用P1.5口控制輸出即可。本次實(shí)驗(yàn)采用了兩個(gè)按鍵作為控制局部,按鍵K1控制跑馬燈的模式和音樂的模式,按鍵K2控制跑馬燈的速度。按鍵K1和K2連接在單片機(jī)的兩個(gè)外部中斷引腳上,在程序設(shè)計(jì)局部,編寫了兩個(gè)外部中斷函數(shù)用來切換模式和控制速度。硬件連接圖如圖八圖八蜂鳴器及按鍵硬件連接圖在硬件電路設(shè)計(jì)的時(shí)候,考慮到有些布線空間缺乏,以及美觀問題,有些地方采用了網(wǎng)絡(luò)布線,使電路圖看起來更見清晰合理。綜上所述,總體的硬件電路連接圖如圖九所示圖九總體硬件電路連接圖程序設(shè)計(jì)思想及流程4.1程序設(shè)計(jì)思路程序設(shè)計(jì)思路:主程序中默認(rèn)執(zhí)行左循環(huán)跑馬燈,在中斷效勞程序中,首先讀取按鍵狀態(tài),判斷是哪個(gè)外部中斷產(chǎn)生中斷。如果是K1,就執(zhí)行下一個(gè)跑馬;如果是K2,就執(zhí)行跑馬減速。采用置標(biāo)志位的方法。即在主程序中設(shè)定兩個(gè)標(biāo)志位,一個(gè)跑馬模式標(biāo)志位,一個(gè)跑馬速度標(biāo)志位。不斷的對(duì)這兩個(gè)個(gè)標(biāo)志進(jìn)行查詢:如果是跑馬模式標(biāo)志為狀態(tài)0,就執(zhí)行左循環(huán)一個(gè)LED跑馬;如果是狀態(tài)1,就執(zhí)行左循環(huán)兩個(gè)LED跑馬燈,依次類推。跑馬速度標(biāo)志默認(rèn)值為10,對(duì)應(yīng)延時(shí)值為200ms。跑馬燈的模式一共有八種,循環(huán)切換。與此同時(shí),對(duì)應(yīng)的音樂模式,我采用的是二維數(shù)組法存儲(chǔ)的音樂數(shù)據(jù)表,樂曲的數(shù)據(jù),程序中以codeunsignedcharsszymmh[4][400]命名。一共有四首曲子,每當(dāng)外部中斷1產(chǎn)生中斷時(shí),即K1鍵按下,跑馬模式標(biāo)志加1,此時(shí)在音樂播放函數(shù)中,k=sszymmh[RunMode%4][i1]+7*sszymmh[RunMode%4][i1+1]-1;k值表示的是音階,從數(shù)據(jù)表中讀出頻率數(shù)值;time=sszymmh[RunMode%4][i1+2];讀出時(shí)間長(zhǎng)度數(shù)值,即拍數(shù)。外部中斷函數(shù)程序流程圖如圖十主程序主程序初始化初始化開中斷開中斷讀鍵盤保存讀鍵盤保存判斷哪個(gè)外部中斷判斷哪個(gè)外部中斷K1K2K2鍵按下K2鍵按下K1鍵按下K1鍵按下控制速度循環(huán)減置跑馬模式標(biāo)志控制速度循環(huán)減置跑馬模式標(biāo)志圖十外部中斷函數(shù)程序流程圖外部中斷1產(chǎn)生中斷后,采用置標(biāo)志位的方法。即在主程序中設(shè)定一個(gè)標(biāo)志位RunMode,跑馬模式標(biāo)志位。沒產(chǎn)生一次外部中斷RunMode那么加1,不斷的對(duì)這這個(gè)標(biāo)志進(jìn)行查詢:如果是跑馬模式標(biāo)志為狀態(tài)0,就執(zhí)行左循環(huán)一個(gè)LED跑馬;如果是狀態(tài)1,就執(zhí)行左循環(huán)兩個(gè)LED跑馬燈,依次類推。跑馬速度標(biāo)志默認(rèn)值為10,對(duì)應(yīng)延時(shí)值為200ms。跑馬燈的模式一共有八種,循環(huán)切換。RunMode=RunMode%8圖十一外部中斷1模式切換程序流程圖4.2音樂局部設(shè)計(jì)在這個(gè)程序中,有兩個(gè)數(shù)據(jù)表,其中存放了事先算好的、各種音符頻率所對(duì)應(yīng)的、半周期的定時(shí)時(shí)間初始值。有了這些數(shù)據(jù),單片機(jī)就可以演奏從低音、中音、高音和超高音,四個(gè)八度共28個(gè)音符。演奏樂曲時(shí),就根據(jù)音符的不同數(shù)值,從半周期數(shù)據(jù)表中找到定時(shí)時(shí)間初始值,送入定時(shí)器即可控制發(fā)音的音調(diào)。比方把表中的0xF2和0x42送到定時(shí)器,定時(shí)器按照這個(gè)初始值來產(chǎn)生中斷,輸出的方波,人們聽起來,這就是低音1。樂曲的數(shù)據(jù),也要寫個(gè)數(shù)據(jù)表,程序中以codeunsignedcharsszymmh[]命名。這個(gè)表中每三個(gè)數(shù)字,說明了一個(gè)音符,它們分別代表:第一個(gè)數(shù)字是音符的數(shù)值1234567之一,代表多來咪發(fā)...;第二個(gè)數(shù)字是0123之一,代表低音、中音、高音、超高音;第三個(gè)數(shù)字是時(shí)間長(zhǎng)度,以半拍為單位。樂曲數(shù)據(jù)表的結(jié)尾是三個(gè)0。//頻率-半周期數(shù)據(jù)表高八位本軟件共保存了四個(gè)八度的28個(gè)頻率數(shù)據(jù)codeunsignedcharFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,//低音12345670xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//高音2345670xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};//超高音1234567//頻率-半周期數(shù)據(jù)表低八位codeunsignedcharFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,//低音12345670x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,//高音2345670x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};//超高音1234567電路的安裝與調(diào)試用keil將程序編寫好之后,檢查程序有無錯(cuò)誤。有錯(cuò)誤就改正,直到?jīng)]有錯(cuò)誤,最后生成.HEX文件,再用peoteus畫好硬件電路仿真圖,將單片機(jī)指向剛生成的.HEX文件并進(jìn)行仿真調(diào)試,在調(diào)試過程當(dāng)中通過調(diào)試的結(jié)果完善程序。一切OK之后,下面就進(jìn)行最后階段,即在面包板上搭電路,然后用燒寫器將.HEX文件下載到STC90C51單片機(jī)中。電路仿真圖如圖十二圖十二電路仿真圖總結(jié)通過為期兩周的時(shí)間,我和我的小組成員兩人共同完成了基于單片機(jī)多模式帶音樂跑馬燈的課程設(shè)計(jì),在設(shè)計(jì)到完成作品過程中,我們遇到很多問題。我們都知道讓蜂鳴器發(fā)出聲音很簡(jiǎn)單,但是讓蜂鳴器發(fā)出美妙的音樂卻沒有一點(diǎn)頭緒,通過參考別人的單片機(jī)音樂盒的設(shè)計(jì),我學(xué)會(huì)了如何用C語言編寫程序去實(shí)現(xiàn)通過蜂鳴器發(fā)出有節(jié)奏的音樂,在課程設(shè)計(jì)過程中我們遇到了很多問題,例如:我們之前的想法是通過三個(gè)按鍵來控制,K1切換模式、K2加速跑馬燈、K3減速〔只是接在普通的引腳上〕。在通過仿真電路圖仿真時(shí),音樂響起來了,跑馬燈也跑起來了,但是切換模式或者控制跑馬燈速度的時(shí)候,并不會(huì)響應(yīng)按鍵。通過我們的討論,認(rèn)為音樂程序占用了整個(gè)資源,而按鍵的響應(yīng)時(shí)間太短,不能實(shí)時(shí)的進(jìn)入響應(yīng)函數(shù),按鍵掃描函數(shù)不起作用了。后來我們將之簡(jiǎn)化成兩個(gè)按鍵,接在兩個(gè)外部中斷引腳上,通過中斷函數(shù)響應(yīng)按鍵。課程設(shè)計(jì)的時(shí)間比擬短,我們的作品還是有許多的瑕疵,功能也比擬簡(jiǎn)單,比方在程序運(yùn)行過程中,并沒有按鍵按下,數(shù)碼管的顯示也會(huì)變化,這便是沒有按鍵消抖。通過此次課程設(shè)計(jì),不僅初步掌握了51單片機(jī)的一些根本功能應(yīng)用,還學(xué)會(huì)了使用keil和protues兩個(gè)軟件。知道了怎么用keil新建工程文件、編寫調(diào)試程序、生成.HEX文件;怎么用protues軟件畫圖,特別是總線的畫法,怎么仿真等。參考文獻(xiàn)張毅剛彭喜元彭宇.《單片機(jī)原理及應(yīng)用》[M].北京:高等教育出版社譚浩強(qiáng)《C程序設(shè)計(jì)教程》[M].北京:清華大學(xué)出版社附錄實(shí)物圖程序清單#include<REG52.H>unsignedcharRunMode;//定義跑馬模式標(biāo)志unsignedchari1;unsignedKey=0x00;unsignedintTimer0Count,SystemSpeed,SystemSpeedIndex;sbitspeaker=P1^5;unsignedchartimer0h,timer0l,time;codeunsignedcharsszymmh[4][200]={//世上只有媽媽好{6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0},//生日快樂{5,1,1,5,1,1,6,1,2,5,1,2,1,2,2,7,1,4,5,1,1,5,1,1,6,1,2,5,1,2,2,2,2,1,2,4,5,1,1,5,1,1,5,2,2,3,2,2,1,2,2,7,1,2,6,1,2,4,2,1,4,2,1,3,2,2,1,2,2,2,2,2,1,2,4}, //送別{5,2,2,3,2,1,5,2,1,1,3,4,6,2,2,1,3,1,6,2,1,5,2,4,5,2,2,1,2,1,2,2,1,3,2,2,2,2,1,1,2,2,2,2,4,5,2,2,3,2,1,5,2,1,1,3,3,7,2,1,6,2,2,1,3,1,6,2,1,5,2,4,5,2,2,2,2,1,3,2,1,4,2,3,7,1,2,1,2,4,6,2,2,1,3,2,1,3,4,7,2,2,6,2,1,7,2,1,1,3,4,6,2,1,7,2,1,1,3,1,6,2,1,6,2,1,5,2,1,3,2,1,1,2,2,2,2,4 }, //甩蔥歌{3,1,1,6,1,1,6,1,1,6,1,1,7,1,1,1,2,1,6,1,1,6,1,1,6,1,1,1,2,1,7,1,1,5,1,1,5,1,2,7,1,1,1,2,1,6,1,1,6,1,1,3,1,1,3,1,1,6,1,1,6,1,1,6,1,1,7,1,1,1,2,1,6,1,1,6,1,1,6,1,1,3,2,1,3,2,1,2,2,1,1,2,2,7,1,1,1,2,1,6,1,1,6,1,1,6,1,1} }; //音階頻率表高八位codeunsignedcharFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,//低音12345670xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//高音0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,//超高音};//音階頻率表低八位codeunsignedcharFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,//低音12345670x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,//高音0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,//超高音};unsignedcharcodeLEDDisplayCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,//0~70x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};voidDisplay(unsignedcharValue) //數(shù)碼管顯示函數(shù){ P2=LEDDisplayCode[Value];}voiddelay(unsignedchart)//按鍵延時(shí)函數(shù){unsignedchart1;unsignedlongt2;for(t1=0;t1<t;t1++){for(t2=0;t2<8000;t2++){;}}TR0=0;}voidex1int()interrupt0 //外部中斷0中斷函數(shù){ RunMode++; i1=0; RunMode=RunMode%8; Display(RunMode); delay(1);}voidex2int()interrupt2//外部中斷1中斷函數(shù){ SystemSpeedIndex++; SystemSpeedIndex=SystemSpeedIndex%30; delay(1);}voidt0int()interrupt1//定時(shí)器0中斷函數(shù),控制發(fā)音的音調(diào){TR0=0;//先關(guān)閉T0speaker=!speaker;//輸出方波,發(fā)音TH0=timer0h;//下次的中斷時(shí)間,這個(gè)時(shí)間,控制音調(diào)上下TL0=timer0l;TR0=1;//啟動(dòng)T0}voidsong()//演奏一個(gè)音符{TH0=timer0h;//控制音調(diào)TL0=timer0l;TR0=1;//啟動(dòng)T0,由T0輸出方波去發(fā)音delay(time);//控制時(shí)間長(zhǎng)度}//**********************************SystemFuction*************************************************voidDelay1ms(unsignedintcount){ unsignedinti,j; for(i=0;i<count;i++) for(j=0;j<120;j++);}voidLEDFlash(unsignedcharCount){ unsignedchari; bitFlag; for(i=0;i<Count;i++) { Flag=!Flag; if(Flag) Display(RunMode); else Display(0x10); Delay1ms(100); } Display(RunMode);}voidInitialTimer(void){ TMOD=0x11; //定時(shí)器0、1工作于方式1 TH0=0xee; //重裝值,初始值 TL0=0x00; TH1=0XEE; TL1=0X00; ET0=1; //定時(shí)器0中斷允許 ET1=1; TR1=1; TR0=1; //定時(shí)器0、1啟動(dòng) EX0=1; EX1=1; IT0=0; IT1=0; EA=1;}unsignedintcodeSpeedCode[]={1,2,3,5,8,10,14,17,20,30,40,50,60,70,80,90,100,120,140,160,180,200,300,400,500,600,700,800,900,1000};//30voidSetSpeed(unsignedcharSpeed){ SystemSpeed=SpeedCode[Speed];}voidLEDShow(unsignedcharLEDStatus){ P0=~LEDStatus;}voidInitialCPU(void){ RunMode=0x00; Timer0Count=0; SystemSpeedIndex=9; P1=0x00; P0=0x00; P2=0xFF; P3=0x00; Delay1ms(500); P1=0xFF; P0=0xFF; P2=0xFF; P3=0xFF; SetSpeed(SystemSpeedIndex); //設(shè)定流水燈速度 Display(RunMode); //數(shù)碼管初始化為0}//Mode0unsignedcharLEDIndex=0;bitLEDDirection=1,LEDFlag=1;voidMode_0(void) //一個(gè)燈左循環(huán){ LEDShow(0x01<<LEDIndex); LEDIndex=(LEDIndex+1)%8;}//Mode1voidMode_1(void) //兩個(gè)燈左循環(huán){ LEDShow(0x03<<LEDIndex); LEDIndex=(LEDIndex+1)%8;}//Mode2voidMode_2(void) //三個(gè)燈左循環(huán){ LEDShow(0x07<<LEDIndex); LEDIndex=(LEDIndex+1)%8;}//Mode3voidMode_3(void)//四個(gè)燈左循環(huán){ LEDShow(0x0f<<LEDIndex); LEDIndex=(LEDIndex+1)%8;}//Mode4voidMode_4(void) //一個(gè)燈來回循環(huán){ if(LEDDirection) LEDShow(0x01<<LEDIndex); else LEDShow(0x80>>LEDIndex); if(LEDIndex==7) LEDDirection=!LEDDirection; LEDIndex=(LEDIndex+1)%8;}//Mode5voidMode_5(void) //兩個(gè)燈來回循環(huán){ if(LEDDirection) LEDShow(0x03<<LEDIndex); else LEDShow(0xc0>>LEDIndex); if(LEDIndex==6) LEDDirection=!LEDDirection; LEDIndex=(LEDIndex+1)%8;}//Mode6voidMode_6(void){ if(LEDDirection) LEDShow(~(0x0F<<LEDIndex));
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園文化建設(shè)與學(xué)校發(fā)展戰(zhàn)略
- 行為習(xí)慣與孩子未來家庭教育的長(zhǎng)遠(yuǎn)影響
- DB6103T 80-2025獼猴桃園覆土栽培香菇技術(shù)規(guī)范
- 不可撤銷物業(yè)服務(wù)合同范例
- 中保人壽幸福家園保險(xiǎn)合同范本(A)
- 臨街旺鋪?zhàn)赓U合同樣本
- 二手車買賣合同(權(quán)威版)
- 業(yè)務(wù)拓展與培訓(xùn)合作合同
- 上海市物流運(yùn)輸合同范本
- 個(gè)人信用擔(dān)保貸款合同范文
- 美容衛(wèi)生管理制度
- 銅陵2025年安徽銅陵郊區(qū)周潭鎮(zhèn)招聘鄉(xiāng)村振興專干和村級(jí)后備干部5人筆試歷年參考題庫附帶答案詳解
- 2025年紀(jì)檢辦公室工作計(jì)劃范文
- 七年級(jí)上學(xué)期歷史期末考試模擬卷02(原卷版)
- 華北理工兒童口腔醫(yī)學(xué)教案06兒童咬合誘導(dǎo)
- 中國(guó)建筑項(xiàng)目管理表格
- 高一3班第一次月考總結(jié)班會(huì)課件
- 公共政策分析導(dǎo)論教學(xué)課件匯總完整版電子教案
- 我國(guó)油菜生產(chǎn)機(jī)械化技術(shù)(-119)
- 大跨度斜拉橋上部結(jié)構(gòu)施工技術(shù)(圖文并茂)
- 論人口模型論文計(jì)劃生育政策調(diào)整對(duì)人口數(shù)量結(jié)構(gòu)及其影響
評(píng)論
0/150
提交評(píng)論