51單片機(jī)課程設(shè)計(jì)電子琴助教器設(shè)計(jì)報(bào)告_第1頁
51單片機(jī)課程設(shè)計(jì)電子琴助教器設(shè)計(jì)報(bào)告_第2頁
51單片機(jī)課程設(shè)計(jì)電子琴助教器設(shè)計(jì)報(bào)告_第3頁
51單片機(jī)課程設(shè)計(jì)電子琴助教器設(shè)計(jì)報(bào)告_第4頁
51單片機(jī)課程設(shè)計(jì)電子琴助教器設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、簡易電子琴助教器課題意義: 伴隨著電子信息技術(shù)的快速發(fā)展,越來越多電子產(chǎn)品也已經(jīng)走進(jìn)我們?nèi)粘I钪?,這些產(chǎn)品也它們獨(dú)特的優(yōu)勢開始逐步替代其它產(chǎn)品。這些電子產(chǎn)品往往價(jià)格低廉、應(yīng)用方便,很容易為使用者接受。考慮到現(xiàn)在要求人才發(fā)展的全面性以及精神文化生活的需求,音樂學(xué)習(xí)已成為很多小孩以及學(xué)生的一種追求,基于此我們設(shè)計(jì)了一款功能完備、應(yīng)用簡單、價(jià)格實(shí)惠的電子琴,以滿足社會(huì)的需要。設(shè)計(jì)方案:方案一:利用plc來完成設(shè)計(jì)。目前利用plc的技術(shù)已經(jīng)比較成熟。plc有其優(yōu)點(diǎn),其性能優(yōu)異,體積小,可靠性和精度比較好,在電子琴的設(shè)計(jì)中可采用plc來完成硬件的控制,但是用plc實(shí)現(xiàn)編程比較復(fù)雜,對于電子琴這種小型設(shè)

2、計(jì)來說成本過高。方案二:采用eda技術(shù)來完成設(shè)計(jì)。eda是電子設(shè)計(jì)的發(fā)展趨勢,利用eda工具可以代替設(shè)計(jì)者完成電子系統(tǒng)設(shè)計(jì)中的大部分工作。應(yīng)用范圍已涉及多個(gè)領(lǐng)域,對于電子琴的設(shè)計(jì)可以運(yùn)用不同的分頻器來對信號(hào)進(jìn)行不同程度的分頻,但由于元器件種類、個(gè)數(shù)繁多,而過于復(fù)雜的硬件電路也容易引起系統(tǒng)的精度不高、體積過大等不利因素。方案三:用單片機(jī)來完成設(shè)計(jì)??捎胊t89c52單片機(jī)通過zlg7289a的擴(kuò)展控制鍵盤的和數(shù)碼管來實(shí)現(xiàn)。目前單片機(jī)的體積小功能強(qiáng)、價(jià)格低廉,集成度日益增高且控制比較容易,因而得到廣泛應(yīng)用。因此利用單片機(jī)的設(shè)計(jì)可以克服其他方案中的問題,本設(shè)計(jì)就采用第三種方案。系統(tǒng)設(shè)計(jì):1、 總體設(shè)

3、計(jì) 本設(shè)計(jì)以at89c52單片機(jī)為核心,通過zlg7289a來擴(kuò)展外接鍵盤和led數(shù)碼管。聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機(jī)某個(gè)口線不斷的輸出“高”“低”電平,則在該口線上就能產(chǎn)生一定頻率的方波,將該方波接上喇叭就能發(fā)出一定頻率的聲音,若再利用程序控制“高”“低”電平的持續(xù)時(shí)間,就能改變輸出波形的頻率,從而改變音調(diào)。樂曲中,每一音符對應(yīng)著確定的頻率,如果單片機(jī)某個(gè)口線輸出“高”“低”電平的頻率和某個(gè)音符的頻率一樣,那么將此口線接上喇叭就可以發(fā)出此音符的聲音。本系統(tǒng)就是根據(jù)此原理設(shè)計(jì),對于at89c52單片機(jī)來說要產(chǎn)生一定頻率的方波大致是先將某口線輸出高電平然后延時(shí)一段時(shí)

4、間再輸出低電平,如此循環(huán)的輸出就會(huì)產(chǎn)生一定頻率的方波,通過改變延時(shí)的時(shí)間就可以改變輸出方波的頻率,而單片機(jī)延時(shí)主要有兩種方法:第一種方法是使用循環(huán)語句來實(shí)現(xiàn)延時(shí),讓單片機(jī)循環(huán)的執(zhí)行某條指令然后根據(jù)單片機(jī)每條指令運(yùn)行的時(shí)間以及循環(huán)的次數(shù)來計(jì)算延時(shí)時(shí)間。第二種方法是使用單片機(jī)的定時(shí)計(jì)數(shù)器延時(shí)。at89c2051單片機(jī)內(nèi)部有兩個(gè)16位的定時(shí)計(jì)數(shù)器t0和t1,單片機(jī)的定時(shí)計(jì)數(shù)器實(shí)際上是個(gè)計(jì)數(shù)裝置它既可以對單片機(jī)的內(nèi)部晶振驅(qū)動(dòng)時(shí)鐘計(jì)數(shù)也可以對外部輸入的脈沖計(jì)數(shù),對內(nèi)部晶振計(jì)數(shù)時(shí)稱為定時(shí)器,對外部時(shí)鐘計(jì)數(shù)時(shí)稱為計(jì)數(shù)器。當(dāng)對單片機(jī)的內(nèi)部晶振驅(qū)動(dòng)時(shí)鐘計(jì)數(shù)時(shí),每個(gè)機(jī)器周期定時(shí)計(jì)數(shù)器的計(jì)數(shù)值就加1,當(dāng)計(jì)數(shù)值達(dá)到計(jì)

5、數(shù)最大值時(shí)計(jì)數(shù)完畢并通知單片機(jī)的cpu;對外部輸入的時(shí)鐘信號(hào)計(jì)數(shù)時(shí),外部時(shí)鐘的每個(gè)時(shí)鐘上升沿定時(shí)計(jì)數(shù)器的計(jì)數(shù)值就加1,當(dāng)計(jì)數(shù)值達(dá)到計(jì)數(shù)最大值時(shí)計(jì)數(shù)完畢并通知單片機(jī)的cpu。因此,如果知道單片機(jī)的機(jī)器周期或者外部輸入時(shí)鐘信號(hào)的周期,單片機(jī)就可以根據(jù)定時(shí)器的計(jì)數(shù)值計(jì)算出定時(shí)的時(shí)間。用此方法定時(shí)十分準(zhǔn)確,想得到多大的延時(shí)時(shí)間就可以給定時(shí)器賦一定的計(jì)數(shù)初值,定時(shí)器從預(yù)先設(shè)置的計(jì)數(shù)初值開始不斷增1當(dāng)增加到計(jì)數(shù)最大值時(shí)計(jì)數(shù)完畢,調(diào)整計(jì)數(shù)初值的大小就可以調(diào)整定時(shí)器定時(shí)的時(shí)間,從而達(dá)到準(zhǔn)確的延時(shí)。本系統(tǒng)中就采用第二種方法通過定時(shí)/計(jì)數(shù)器延時(shí)。2、 硬件設(shè)計(jì)at89c52單片機(jī):at89c52是51系列單片機(jī)的

6、一個(gè)型號(hào),它是atmel公司生產(chǎn)的。at89c52是一個(gè)低電壓,高性能cmos 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的flash只讀程序存儲(chǔ)器和256 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)大的at89c52單片機(jī)可提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場合。at89c52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(i/o)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫口線,at89c52可以按照常規(guī)方法進(jìn)行編程,但不可以

7、在線編程(s系列的才支持在線編程)。其將通用的微處理器和flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的flash存儲(chǔ)器可有效地降低開發(fā)成本。zlg7289a是一片具有串行接口的,可同時(shí)驅(qū)動(dòng)8位共陰式數(shù)碼管(或64只獨(dú)立led)的智能顯示驅(qū)動(dòng)芯片,該芯片同時(shí)還可連接多大64鍵的鍵盤矩陣,單片即可完成led顯示、鍵盤接口的全部功能。zlg7289a內(nèi)部含有譯碼器,可直接接受bcd碼或16進(jìn)制碼,并具有2種譯碼方式,此外,還具有多種控制命令,如消隱、閃爍、左移、右移、段尋址等。zlg7289a具有片選信號(hào),可方便地實(shí)現(xiàn)多于8位的顯示或多于64鍵的鍵盤接口。程序設(shè)計(jì)中將zlg7289a封裝成頭文件形式

8、,通過子程序調(diào)用即可達(dá)到程序開發(fā)目的,使用非常方便。電路連接圖:3、 軟件設(shè)計(jì)(一)定時(shí)計(jì)數(shù)器的工作方式及控制字特殊功能寄存器中tmod和tcon是定時(shí)器的方式控制寄存器。圖2為tmod寄存器的內(nèi)部結(jié)構(gòu),圖3為tcon寄存器的內(nèi)部結(jié)構(gòu)。tmod和tcon是寄存器的名稱,我們在寫程序時(shí)就可以直接用這個(gè)名稱來指定它們,當(dāng)然也可以直接用它們的地址89h和88h來指定它們。用于t1用于t0gatec/tm1m0gatec/tm1m0圖2 tmon用于定時(shí)/計(jì)數(shù)器用于中斷tf1tr1tf0tr0ie1it1ie0it0圖3 tcon單片機(jī)定時(shí)計(jì)數(shù)器有四種工作方式,方式0、方式1、方式2、方式3,除方式3

9、外,t0和t1有完全相同的工作狀態(tài)1工作方式0定時(shí)器,計(jì)數(shù)器的工作方式o稱之為13位定時(shí)計(jì)數(shù)方式。它由tl(10)的低5位和th(0/1)的8位構(gòu)成13位的計(jì)數(shù)器,此時(shí)tl(10)的高3位未用。對于定時(shí)器的工作模式可以根據(jù)定時(shí)器的寄存器tmod來設(shè)置:m1m0:定時(shí)計(jì)數(shù)器共有四種工作方式,就是用m1m0來控制的,2位正好是四種組合。ct:定時(shí)計(jì)數(shù)器即可作定時(shí)用也可用計(jì)數(shù)用,如果c/t為o就是用作定時(shí)器(開關(guān)往上打),如果ct為1就是用作計(jì)數(shù)器(開關(guān)往下打)。一個(gè)定時(shí)計(jì)數(shù)器同一時(shí)刻要么作定時(shí)用,要么作計(jì)數(shù)用,不能同時(shí)用的。gate:當(dāng)我們選擇了定時(shí)或計(jì)數(shù)工作方式后,定時(shí)計(jì)數(shù)脈沖卻不一定能到達(dá)計(jì)數(shù)

10、器端,中間還有一個(gè)開關(guān),顯然這個(gè)開關(guān)不合上,計(jì)數(shù)脈沖就沒法過去,那么開關(guān)什么時(shí)候過去呢?有兩種情況gate=0,分析一下邏輯,gate非后是1,進(jìn)入或門,或門總是輸出1,和或門的另一個(gè)輸入端int1無關(guān),在這種情況下,開關(guān)的打開、合上只取決于tr1,只要tr1是1,開關(guān)就合上,計(jì)數(shù)脈沖得以暢通無阻,而如果tr1等于0則開關(guān)打開,計(jì)數(shù)脈沖無法通過,因此定時(shí)計(jì)數(shù)是否工作,只取決于tr1。gate=1,在此種情況下,計(jì)數(shù)脈沖通路上的開關(guān)不僅要由tr1來控制,而且還要受到int1引腳的控制,只有trl為1,且int1引腳也是高電平,開關(guān)才合上,計(jì)數(shù)脈沖才得以通過。這個(gè)特性可以用來測量一個(gè)信號(hào)的高電平的

11、寬度。2工作方式1工作方式1是16位的定時(shí)計(jì)數(shù)方式,將m1m0設(shè)為01即可,其它特性與工作方式0相同。3:工作方式28位自動(dòng)裝入時(shí)間常數(shù)方式。由tl1構(gòu)成8位計(jì)數(shù)器,th1僅用來存放時(shí)間常數(shù)??磮D5所示,每當(dāng)計(jì)數(shù)溢出,就會(huì)打開t(0/1)的高、低8位之間的開關(guān),計(jì)預(yù)置數(shù)進(jìn)入低8位。這是由硬件自動(dòng)完成的,不需要由人工干預(yù)。通常這種式作方式用于波特率發(fā)生器,用于這種用途時(shí),定時(shí)器就是為了提供一個(gè)時(shí)間基準(zhǔn)。計(jì)數(shù)溢出后不需要做事情,要做的僅僅只有一件,就是重新裝入預(yù)置數(shù),再開始計(jì)數(shù),而且中間不要任何延遲,可見這個(gè)任務(wù)用工作方式2來完成是最妙不過了。4工作方式32個(gè)8位的計(jì)數(shù)器,只適合于定時(shí)器0。這種式

12、作方式之下,定時(shí)計(jì)數(shù)器0被拆成2個(gè)獨(dú)立的定時(shí)計(jì)數(shù)器來用。其中,tl0可以構(gòu)成8位的定時(shí)器或計(jì)數(shù)器的工作方式,而tho則只能作為定時(shí)器來用。我們知道作定時(shí)、計(jì)數(shù)器來用需要控制位tr0,計(jì)滿后溢出需要有溢出標(biāo)記tf0。t0被分成兩個(gè)來用,那就要兩套控制及溢出標(biāo)記,tlo還是用原來的t0的標(biāo)記,而th0則借用t1的標(biāo)記。如此t1就無標(biāo)記、控制可用因此一般只有在t1以工作方式2運(yùn)行(當(dāng)波特率發(fā)生器用)時(shí),才讓t0工作于方式3的。(二)定時(shí)器計(jì)數(shù)器的定時(shí)計(jì)數(shù)范圍工作方式o:13位定時(shí)計(jì)數(shù)方式,因此,最多可以計(jì)到213,也就是8192次。對于12mhz的晶振,單片機(jī)的機(jī)器周期是1us。則工作方式0最大定時(shí)

13、時(shí)間是8.192us。工作方式1:16位定時(shí)計(jì)數(shù)方式,因此,最多可以計(jì)到216,也就是65536次。對于12mhz晶振,工作方式1最大定時(shí)時(shí)間是65536s。工作方式2和工作方式3,都是8位的定時(shí)計(jì)數(shù)方式,因此,最多可以計(jì)到28,也說是256次。對于12mhz晶振,工作方式1最大定時(shí)時(shí)間是256s。計(jì)數(shù)初值的計(jì)算方法:用最大計(jì)數(shù)量減去需要的計(jì)數(shù)次數(shù)即可。例:如果t0運(yùn)行于定時(shí)狀態(tài),單片機(jī)的晶振是12mhz,要求定時(shí)loous,那么定時(shí)器要計(jì)100個(gè)機(jī)器周期,當(dāng)to工作在工作方式o時(shí)計(jì)數(shù)初值應(yīng)該是8192100=8092;工作在方式1時(shí)的計(jì)數(shù)初值應(yīng)該是65536-100=65436;工作在方式2

14、,3時(shí)的計(jì)數(shù)初值應(yīng)該是256100=156。音符和音拍與單片機(jī)定時(shí)器/計(jì)數(shù)器t0的對應(yīng)關(guān)系:音樂的音符利用單片機(jī)的定時(shí)器/計(jì)數(shù)器t0產(chǎn)生不同頻率的方波信號(hào),設(shè)單片機(jī)的晶振頻率為12mhz,則高、中、低音符于單片機(jī)定時(shí)器/計(jì)數(shù)器t0的數(shù)值對應(yīng)關(guān)系如下表所示:音符頻率(hz)數(shù)值音符頻率(hz)數(shù)值音符頻率(hz)數(shù)值低1do26263628中1do52364580高1do104665058#1do#27763731#1do#55464663#1do#110965085低2re29463835中2er58764684高2re117565110#2re#31163928#2er#62264732#2

15、re#124565134低3m33064021中3m65964777高3m131865157低4fa34964103中4fa69864820高4fa139765178#4fa#37064185#4fa#74064860#4fa#148065198低5so39264260中5so78464898高5so156865217#5so#41564331#5so#83164934#5so#166165235低6la44064400低6la88064968高6la176065252#6la#46664463#6la#93264994#6la#186565268低7si49464524中7si9886503

16、0高7si196765283音樂的節(jié)拍利用單片機(jī)的定時(shí)器/計(jì)數(shù)器t1的延時(shí)功能還可以產(chǎn)生音樂不同的節(jié)拍,以c調(diào)為例,音拍與延時(shí)的對應(yīng)關(guān)系如下表:音拍延時(shí)時(shí)間調(diào)4/4125調(diào)3/4187調(diào)2/4250系統(tǒng)軟件流程圖如圖所示實(shí)物圖: 彈奏樂曲如下圖: 播放樂曲及顯示相應(yīng)聲調(diào)如下圖:參考文獻(xiàn):1、 李朝青,單片機(jī)原理及接口技術(shù)(第3版),北京:北京航空航天大學(xué)出版社,2005.2、 姚燕南,姚向華,喬瑞萍,微型計(jì)算機(jī)原理(第五版),西安:西安電子科技大學(xué)出版社,2008.3、 周亞軍,張衛(wèi),電氣控制與plc原理及應(yīng)用,西安:西安電子科技大學(xué)出版社,2008.4、 潘松,黃繼業(yè),eda技術(shù)與vhdl(

17、第2版),北京:清華大學(xué)出版社,2007.5、 楊路明,c語言程序設(shè)計(jì),北京:北京郵電大學(xué)出版社,2005.6、 百度文庫網(wǎng)站 附件:程序段:/51單片機(jī)c語言程序和音樂采燈程序/本程序的單片機(jī)晶振采用#include#define uint unsigned int#define uchar unsigned charsbit speaker=p37;unsigned char timer0h,timer0l,m=0,k=0,i=0,zz,zz1,zz2,zz3,zz4,j=0,led=1,key2=0,key3=0,we=0x80,time=1;unsigned char flagd=0;

18、 code unsigned char sszymmh= 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 ; /世上只有媽媽好? code unsigned char sb=

19、5,2,2, 3,2,1, 5,2,1, 1,3,4, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 1,2,1, 2,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,6, 5,2,2, 3,2,1, 5,2,1, 1,3,2, 7,2,2, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,2, 7,1,2, 1,2,8, 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,1,

20、 2,2,8, 5,2,2, 3,2,1, 5,2,1, 1,3,2, 7,2,2, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,2, 7,1,2, 1,2,8 ; /送別code unsigned char dfh=5,2,2, 5,2,1, 6,2,1, 2,2,2, 1,2,2, 1,2,1, 6,1,1, 2,2,2, 5,2,2, 5,2,2, 6,2,1, 1,3,1, 6,2,1, 5,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,2, 5,2,2, 2,2,2, 1,2,2, 7,1,1, 6,1,1, 5,1,1,

21、 5,2,2, 2,2,2, 3,2,1, 2,2,1, 1,2,1, 1,2,1, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 2,2,1, 1,2,1, 7,1,1, 6,1,1, 5,1,1 ;/東方紅code unsigned char xyxy=6,2,2, 1,3,2, 7,2,1, 6,2,1, 5,2,1, 6,2,1, 3,2,6, 6,2,1, 5,2,1, 6,2,2, 1,3,2, 7,2,2, 6,2,1, 7,2,1, 1,3,6, 1,3,1, 2,3,1, 3,3,1, 3,3,1, 3,3,1, 3,3,1, 2,3,4, 1,3,1

22、, 7,2,1, 6,2,1, 7,2,1, 5,2,2, 6,2,2, 1,3,2, 7,2,2, 6,2,1, 5,2,1, 6,2,6, 6,2,2, 6,2,1, 1,3,1, 7,2,2, 5,2,2, 6,2,8, 6,2,4, 3,2,1, 5,2,1, 6,2,2, 3,3,2, 2,3,1, 1,3,1, 7,2,1, 1,3,1, 1,3,6, 1,3,1, 7,2,1, 6,2,2, 6,2,1, 6,2,1, 5,2,1, 5,2,1, 6,2,2, 3,2,6, 3,2,1, 5,2,1, 6,2,2, 3,3,2, 2,3,1, 1,3,1, 7,2,1, 1,3,

23、1, 1,3,6, 1,3,1, 7,2,1, 6,2,2, 6,2,2, 5,2,2, 7,2,2, 6,2,8;/星語心愿code unsigned char yxdcb=5,1,1, 1,2,1, 3,2,2, 5,2,1, 3,2,2, 2,2,1, 1,2,1, 1,2,1, 1,2,1, 1,2,1, 6,1,1, 5,1,1, 5,1,1, 1,2,1,3,2,2, 5,2,2, 5,2,1, 5,2,1, 6,2,1, 5,2,1, 5,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 2,2,1, 2,2,2, 6,2,1, 5,2,1, 3,2,2, 5,2

24、,2, 5,2,1, 5,2,1, 6,2,1, 5,2,1, 3,2,1, 2,2,1, 1,2,1, 2,2,1, 6,1,2, 5,1,1, 6,1,1, 1,2,2, 2,2,1, 3,2,1, 2,2,2, 3,2,1, 1,2,1, 1,2,4, 5,1,1, 1,2,1, 1,2,4, 3,2,1, 5,2,1, 1,3,2, 7,2,1, 1,3,1, 7,2,2, 6,2,1, 5,2,1, 6,2,1, 1,3,1, 3,2,1, 2,2,1, 1,2,2, 1,2,1, 1,2,1, 1,2,1, 1,3,2, 5,2,1, 6,2,1, 5,2,1, 2,2,1, 3,

25、2,1, 2,2,1, 1,2,1, 2,2,1, 2,2,4,13,2,1, 5,2,1, 1,3,2, 7,2,1, 1,3,1, 7,2,2, 6,2,1, 5,2,1, 6,2,1, 1,3,1, 3,2,1, 2,2,1, 1,2,2, 1,2,1, 1,2,1, 1,2,1, 1,3,2, 5,2,1, 6,2,1, 5,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,4, ; code unsigned char freqh= 0xf2,0xf3,0xf5,0xf5,0xf6,0xf7,0xf8, 0xf9,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,

26、 /1,2,3,4,5,6,7,8,i 0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe, 0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0;/ 音階頻率表高八位code unsigned char freql= 0x42,0xc1,0x17,0xb6,0xd0,0xd1,0xb6, 0x21,0xe1,0x8c,0xd8,0x68,0xe9,0x5b, /1,2,3,4,5,6,7,8,i 0x8f,0xee,0x44,0x6b,0xb4,0xf4,0x2d, 0x47,0x77,0xa2,0xb6,0xda,0xfa,0x16,0;/ 音階頻率表

27、低八位void delay(unsigned char t)unsigned char t1; unsigned long t2;for(t1=0;t1t;t1+)for(t2=0;t2800;t2+); tr0=0; void delay1(unsigned char t)unsigned char t1; unsigned long t2; for(t1=0;t1t;t1+) for(t2=0;t28000;t2+); tr0=0; void timer0() interrupt 1tr0=0;speaker=!speaker;th0=timer0h;tl0=timer0l; tr0=1;

28、 void song()th0=timer0h;tl0=timer0l;tr0=1; void main()ea=1;ex0=1;/開外部中斷0et0=1;tmod=0x11;/置ct0定時(shí)th1=(65536-50000)/256;tl1=(65536-50000)%256;it0=1;/外部中斷0觸發(fā)類型zlg7289_init(5); /7289初始化ll1:zlg7289_reset();/7289復(fù)位while(1) key2=zlg7289_key(); if(key2!=255) key3=key2;switch(key3)case 0:k=1+7*i-1;zlg7289_cmd

29、_dat(we,1);p1=0xfe;break;case 1:k=2+7*i-1;zlg7289_cmd_dat(we,2);p1=0xfd;break;case 2:k=3+7*i-1;zlg7289_cmd_dat(we,3);p1=0xfb;break;case 3:k=4+7*i-1;zlg7289_cmd_dat(we,4);p1=0xf7;break;case 4:k=5+7*i-1;zlg7289_cmd_dat(we,5);p1=0xef;break;case 5:k=6+7*i-1;zlg7289_cmd_dat(we,6);p1=0xdf;break;case 6:k=7

30、+7*i-1;zlg7289_cmd_dat(we,7);p1=0xbf;break;case 7:k=8+7*i-1;zlg7289_cmd_dat(we,8);p1=0x7f;break;case 11:k=28;break;case 12:i=0;we=0x80;zlg7289_reset();zlg7289_flash(0xef);zlg7289_cmd_dat(0xcc,0x0c);break;case:i=1;we=0x81;zlg7289_reset();zlg7289_flash(0xdf);zlg7289_cmd_dat(0xcd,0x0d);break;case 14:i=

31、2;we=0x82;zlg7289_reset();zlg7289_flash(0xbf);zlg7289_cmd_dat(0xce,0x0e);break;case15:i=3;we=0x83;zlg7289_reset();zlg7289_flash(0x7f);zlg7289_cmd_dat(0xcf,0x0f);break;default:break; if(key3=8) zz=0;zlg7289_reset();zlg7289_cmd_dat(0x80,5);zlg7289_cmd_dat(0x81,0);zlg7289_cmd_dat(0x82,0);zlg7289_segoff

32、(19);zlg7289_cmd_dat(0x83,8);zlg7289_segoff(26); while(time) key2=zlg7289_key(); if(key2!=255) key3=key2;while(key3=9) key2=zlg7289_key(); if(key2!=255) key3=key2;while(key3=10) goto ll1;if(key3=0) zz1=0;zz2=0;zz3=0;switch(sszymmhzz+1)case 0:we=0x84;zlg7289_hide(0x1f);break;case 1:we=0x85;zlg7289_hi

33、de(0x2f);break;case 2:we=0x86;zlg7289_hide(0x4f);break;case 3:we=0x87;zlg7289_hide(0x8f);break; switch(sszymmhzz)case 1:zlg7289_cmd_dat(we,1);p1=0xfe;break;case 2:zlg7289_cmd_dat(we,2);p1=0xfd;break;case 3:zlg7289_cmd_dat(we,3);p1=0xfb;break;case 4:zlg7289_cmd_dat(we,4);p1=0xf7;break;case 5:zlg7289_

34、cmd_dat(we,5);p1=0xef;break;case 6:zlg7289_cmd_dat(we,6);p1=0xdf;break;case 7:zlg7289_cmd_dat(we,7);p1=0xbf;break; k=sszymmhzz+7*sszymmhzz+1-1; time=sszymmhzz+2; zz=zz+3;else if(key3=1) zz=0;zz2=0;zz3=0;switch(sbzz1+1)case 0:we=0x84;zlg7289_hide(0x1f);break;case 1:we=0x85;zlg7289_hide(0x2f);break;ca

35、se 2:we=0x86;zlg7289_hide(0x4f);break;case 3:we=0x87;zlg7289_hide(0x8f);break; switch(sbzz1)case 1:zlg7289_cmd_dat(we,1);p1=0xfe;break;case 2:zlg7289_cmd_dat(we,2);p1=0xfd;break;case 3:zlg7289_cmd_dat(we,3);p1=0xfb;break;case 4:zlg7289_cmd_dat(we,4);p1=0xf7;break;case 5:zlg7289_cmd_dat(we,5);p1=0xef

36、;break;case 6:zlg7289_cmd_dat(we,6);p1=0xdf;break;case 7:zlg7289_cmd_dat(we,7);p1=0xbf;break; k=sbzz1+7*sbzz1+1-1; time=sbzz1+2; zz1=zz1+3;else if(key3=2) zz=0;zz1=0;zz3=0;switch(dfhzz2+1)case 0:we=0x84;zlg7289_hide(0x1f);break;case 1:we=0x85;zlg7289_hide(0x2f);break;case 2:we=0x86;zlg7289_hide(0x4f

37、);break;case 3:we=0x87;zlg7289_hide(0x8f);break; switch(dfhzz2)case 1:zlg7289_cmd_dat(we,1);p1=0xfe;break;case 2:zlg7289_cmd_dat(we,2);p1=0xfd;break;case 3:zlg7289_cmd_dat(we,3);p1=0xfb;break;case 4:zlg7289_cmd_dat(we,4);p1=0xf7;break;case 5:zlg7289_cmd_dat(we,5);p1=0xef;break;case 6:zlg7289_cmd_dat

38、(we,6);p1=0xdf;break;case 7:zlg7289_cmd_dat(we,7);p1=0xbf;break; k=dfhzz2+7*dfhzz2+1-1; time=dfhzz2+2; zz2=zz2+3;else if(key3=3) zz=0;zz1=0;zz2=0;switch(xyxyzz3+1)case 0:we=0x84;zlg7289_hide(0x1f);break;case 1:we=0x85;zlg7289_hide(0x2f);break;case 2:we=0x86;zlg7289_hide(0x4f);break;case 3:we=0x87;zl

39、g7289_hide(0x8f);break; switch(xyxyzz3)case 1:zlg7289_cmd_dat(we,1);p1=0xfe;break;case 2:zlg7289_cmd_dat(we,2);p1=0xfd;break;case 3:zlg7289_cmd_dat(we,3);p1=0xfb;break;case 4:zlg7289_cmd_dat(we,4);p1=0xf7;break;case 5:zlg7289_cmd_dat(we,5);p1=0xef;break;case 6:zlg7289_cmd_dat(we,6);p1=0xdf;break;cas

40、e 7:zlg7289_cmd_dat(we,7);p1=0xbf;break; k=xyxyzz3+7*xyxyzz3+1-1; time=xyxyzz3+2; zz3=zz3+3; else if(key3=4) zz=0;zz1=0;zz2=0;zz3=0;switch(yxdcbzz4+1)case 0:we=0x84;zlg7289_hide(0x1f);break;case 1:we=0x85;zlg7289_hide(0x2f);break;case 2:we=0x86;zlg7289_hide(0x4f);break;case 3:we=0x87;zlg7289_hide(0x

41、8f);break; switch(yxdcbzz4)case 1:zlg7289_cmd_dat(we,1);p1=0xfe;break;case 2:zlg7289_cmd_dat(we,2);p1=0xfd;break;case 3:zlg7289_cmd_dat(we,3);p1=0xfb;break;case 4:zlg7289_cmd_dat(we,4);p1=0xf7;break;case 5:zlg7289_cmd_dat(we,5);p1=0xef;break;case 6:zlg7289_cmd_dat(we,6);p1=0xdf;break;case 7:zlg7289_

42、cmd_dat(we,7);p1=0xbf;break; k=yxdcbzz4+7*yxdcbzz4+1-1; time=yxdcbzz4+2; zz4=zz4+3; timer0h=freqhk; timer0l=freqlk; song(); delay1(time); if(zz=99) zz=0; if(zz1=174) zz1=0; if(zz2=120) zz2=0; if(zz3=222) zz3=0; if(zz4=70) zz4=0; timer0h=freqhk; timer0l=freqlk; song(); delay(1); key3=11;void inter0()

43、 interrupt 0;2.zlg7289頭文件封裝/*zlg7289.h數(shù)碼管顯示與鍵盤管理芯片zlg7289 的標(biāo)準(zhǔn)80c51 驅(qū)動(dòng)程序頭文件copyright (c) 2005,廣州周立功單片機(jī)發(fā)展有限公司all rights reserved.本程序僅供學(xué)習(xí)參考,不提供任何可靠性方面的擔(dān)保;請勿用于商業(yè)目的。*/#ifndef _zlg7289_h_#define _zlg7289_h_#include /定義i/o 接口sbit zlg7289_pincs = p05; /片選信號(hào),低電平有效sbit zlg7289_pinclk = p06; /時(shí)鐘信號(hào),上升沿有效sbit zl

44、g7289_pindio = p07; /數(shù)據(jù)信號(hào),雙向sbit zlg7289_pinint = p32; /鍵盤中斷請求信號(hào),低電平(負(fù)邊沿)有效/執(zhí)行zlg7289 純指令extern void zlg7289_cmd(char cmd);/執(zhí)行zlg7289 帶數(shù)據(jù)指令extern void zlg7289_cmd_dat(char cmd, char dat);/以下是zlg7289 的用戶指令集/復(fù)位(清除)指令#define zlg7289_reset() zlg7289_cmd(0xa4)/測試指令#define zlg7289_test() zlg7289_cmd(0xbf)

45、/左移指令#define zlg7289_shl() zlg7289_cmd(0xa0)/右移指令#define zlg7289_shr() zlg7289_cmd(0xa1)/循環(huán)左移指令#define zlg7289_rol() zlg7289_cmd(0xa2)/循環(huán)右移指令#define zlg7289_ror() zlg7289_cmd(0xa3)/下載數(shù)據(jù)extern void zlg7289_download(unsigned char mod, char x, bit dp, char dat);/閃爍控制/ x 的8 個(gè)位分別對應(yīng)數(shù)碼管的8 個(gè)位,0閃爍,1不閃爍#define zlg7289_flash(x) zlg7289_cmd_dat(0x88,(x)/消隱控制/ x 的8 個(gè)位分別對應(yīng)數(shù)碼管的8 個(gè)位,0消隱,1顯示#define zlg7289_hide(x) zlg7289_cmd_dat(0x98,(x)/段點(diǎn)亮指令/seg=063,8 只數(shù)碼管被看成64 只獨(dú)立的led/每只數(shù)碼管中各段的點(diǎn)亮順序按照“g,f,e,d,c,b,a,dp”進(jìn)行#define zlg7289_segon(seg) zlg7289_cmd_dat(0xe0,(seg)/段關(guān)閉指令/seg=063,8 只數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論