東北石油大學(xué) 單片機課程設(shè)計_第1頁
東北石油大學(xué) 單片機課程設(shè)計_第2頁
東北石油大學(xué) 單片機課程設(shè)計_第3頁
東北石油大學(xué) 單片機課程設(shè)計_第4頁
東北石油大學(xué) 單片機課程設(shè)計_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機課程設(shè)計東 北 石 油 大 學(xué)課 程 設(shè) 計課 程 單片機原理及應(yīng)用課程設(shè)計 題 目 音樂播放電路設(shè)計 院 系 電子科學(xué)學(xué)院 專業(yè)班級 應(yīng)物14-2班 學(xué)生姓名 郭昊 學(xué)生學(xué)號 140901340223 指導(dǎo)教師 2016年7月9日第1章 概 述1.1 引言本設(shè)計是以AT89C51芯片的電路為基礎(chǔ),外部加上放音設(shè)備,以此來實現(xiàn)音樂演奏控制器的硬件電路,通過軟件程序來控制單片機內(nèi)部的定時器使其演奏出優(yōu)美動聽的音樂。用戶可以按照自己的喜好選擇音樂并將其轉(zhuǎn)化成機器碼存入單片機的存儲器中。對于不同型號的單片機只需要相應(yīng)的改變一下地址即可。該軟、硬件系統(tǒng)具有很好的通用性,很高的實際使用價值,為廣大

2、的單片機和音樂愛好者提供了很好的借鑒。本文設(shè)計的音樂盒,是基于單片機設(shè)計制作的電子式音樂盒。與傳統(tǒng)的機械式音樂盒相比更小巧,音質(zhì)更優(yōu)美且能演奏和弦音樂。電子式音樂盒動力來源是電池,制作工藝簡單,可進行批量生產(chǎn),所以價格便宜?;趩纹瑱C制作的電子式音樂盒,控制功能強大,可根據(jù)需要擴展其顯示、選歌功能,使用方便。根據(jù)存儲容量的大小,可以盡可能多的存儲歌曲。另外,可以設(shè)計彩燈外觀效果,使音樂盒的功能更加豐富。1.2 設(shè)計意義音樂播放器的起源,可追溯至中世紀(jì)歐洲文藝復(fù)興時期。當(dāng)時為使教會的鐘塔報時,而將大小的鐘表裝上機械裝置,被稱為“可發(fā)出聲音的組鐘”。音樂播放器有著300多年的發(fā)展歷史,是人類文明發(fā)

3、展的歷史見證。傳統(tǒng)的音樂播放器多是機械音樂盒,其工作原理是通過齒輪帶動一個帶有鐵釘?shù)蔫F桶轉(zhuǎn)動,鐵桶上的鐵釘撞擊鐵片制成的琴鍵,從而發(fā)出聲音。但是,機械式的音樂盒體積比較大,比較笨重,且發(fā)音單調(diào)。水、灰塵等外在因素,容易使內(nèi)部金屬發(fā)音條變形,從而造成發(fā)音跑調(diào)。本文設(shè)計的音樂播放器,是基于單片機設(shè)計制作的電子式音樂播放器。與傳統(tǒng)的機械式音樂播放器相比更小巧,音質(zhì)更優(yōu)美且能演奏和弦音樂。電子式音樂播放器動力來源是電池,制作工藝簡單,可進行批量生產(chǎn),所以價格便宜。基于單片機制作的電子式音樂播放器,控制功能強大,可根據(jù)需要選歌,使用方便。根據(jù)存儲容量的大小,可以盡可能多的存儲歌曲。另外,可以設(shè)計彩燈外觀

4、效果,使音樂播放器的功能更加豐富。1.3 設(shè)計內(nèi)容主要工作過程是通過按下功能鍵實現(xiàn)上一首和下一首及暫停播放,同時有數(shù)碼管顯示當(dāng)前播放歌曲的序號,蜂鳴器播放出音樂,當(dāng)播放最后一首夜曲時還伴有彩燈閃爍。功能鍵盤采用按鍵開關(guān),通過單片機P1口控制,按鍵控制歌曲的順序播放,循環(huán)播放,隨機播放,以及上一曲,下一曲,暫停/播放,結(jié)束。蜂鳴器由單片機的P3.7口控制,實現(xiàn)歌曲播放。LCD播放當(dāng)前歌曲時,LCD顯示屏上顯示當(dāng)前歌曲的序號和歌曲名,并提示下一曲即將要播放的歌曲。利用I/O口產(chǎn)生一定頻率的方波,驅(qū)動蜂鳴器,發(fā)出不同的音調(diào),從而演樂曲(內(nèi)存四首樂曲)。1.4 設(shè)計方案設(shè)計一個基于AT89C51系列單

5、片機的音樂播放器,利用按鍵切換演奏出不同的樂曲。蜂鳴器發(fā)出某個音調(diào),與之相對應(yīng)的LED亮起。使用五個按鍵,分別是設(shè)置、上一曲、下一曲、暫停/播放和結(jié)束五個按鍵。第2章 系統(tǒng)的總體設(shè)計2.1 音樂播放器的工作原理通過單片機的定時器產(chǎn)生一定長度的方波,方波脈沖驅(qū)動蜂鳴器發(fā)聲。要產(chǎn)生音頻脈沖,只需算出某一音頻的周期(1/音頻),然后取半周期的時間定時。利用定時器計時這個半周期時間,每當(dāng)計時到后就將輸出脈沖的I/O反相,然后重復(fù)計時此半周期時間再對I/O口反相,就可在I/O腳上得到此頻率的脈沖。如中音D0,頻率為523HZ,其周期T=1/523=1912微秒,因此只要令計數(shù)器定時1912/2=956,

6、在每計數(shù)956次時將I/O口反相,就可得到中音D0(523HZ)。當(dāng)鍵盤有鍵按下時,判斷鍵值,啟動計數(shù)器T0,產(chǎn)生一定頻率的脈沖,驅(qū)動蜂鳴器,放出樂曲。同時啟動數(shù)碼顯示部分,在LED顯示歌曲號,也可使彩燈長亮和閃爍。數(shù)碼管采用共陽極數(shù)碼管,通過單片機P2口控制,實現(xiàn)歌曲序號的顯示;功能鍵盤采用按鍵開關(guān),通過單片機P3口控制,實現(xiàn)歌曲播放順序的調(diào)換和暫停播放功能;蜂鳴器由單片機的P3.7口控制,實現(xiàn)歌曲播放;彩燈是由普通發(fā)光二極管代替,能實現(xiàn)單色長亮和閃爍效果,通過單片機的P0口控制。2.2 總體設(shè)計框圖單片機接+5V電源供電,晶振電路產(chǎn)生單片機所需時鐘信號,通過功能鍵產(chǎn)生外部中斷,控制音樂盒的

7、上一首和下一首曲目,再由I/O接口輸出控制蜂鳴器發(fā)聲,LED顯示,彩燈亮或閃爍。另外,復(fù)位電路在于營造一個程序運行的初始狀態(tài),在程序出錯時,重新啟動單片機工作。蜂鳴器AT89C51按鍵輸入模塊 LED顯示燈LCD顯示屏晶振復(fù)位電路 圖2-1總體設(shè)計框圖編程設(shè)置好定時時間,通過編程器寫入AT89C51單片機系統(tǒng)。由AT89C51單片機的定時器每秒鐘通過P2.0-P2.7口控制LED數(shù)碼顯示,復(fù)位信號由按鈕輸入,每按下一次,系統(tǒng)恢復(fù)原設(shè)定狀態(tài)??傮w設(shè)計框圖如圖2-1所示。第3章 硬件電路設(shè)計3.1 晶振復(fù)位電路3.1.1 晶振電路在AT89C51單片機內(nèi)部有一振蕩電路,只要在單片機的XTAL1和X

8、TAL2引腳外接晶振,就改成了自激振蕩器并在單片機內(nèi)部產(chǎn)生時鐘脈沖信號。如圖3-1所示,單片機工作的時間基準(zhǔn)是由時鐘電路提供的。在單片機的XTAL1和XTAL2兩個引腳間,接一個晶振及兩只電容就構(gòu)成了時鐘電路。圖3-1晶振復(fù)位電路電路中的器件可以通過計算和實驗確定,也可以參考一些典型電路參數(shù)。電路中,電容器C1和C2對晶振器頻率有微調(diào)作用,通常取值范圍30+10pF;石英晶體選擇12MHZ都可以。其結(jié)果只是機器周期時間不同,影響計算器的計數(shù)初值。3.1.2 復(fù)位電路圖3-2 復(fù)位電路51單片機的復(fù)位是由外部的復(fù)位電路來實現(xiàn)的。復(fù)位引腳RST通過一個斯密特觸發(fā)器與復(fù)位電路相連,斯密特觸發(fā)器用來抑

9、制噪聲。單片機需要復(fù)位以后才能正常工作,復(fù)位的目的就是使單片機處于一個基準(zhǔn)點,在這個基準(zhǔn)點,程序?qū)腃51的main()主函數(shù)的第一條語句開始執(zhí)行。復(fù)位工作是一個純硬件的工作,一般是在上電開始幾毫秒內(nèi)執(zhí)行完畢。復(fù)位的過程很簡單,在電源剛剛合上時,電流經(jīng)過電阻對電解電容器充電,這樣在電阻上就形成一個電壓,對于單片機來說,這個電壓就是復(fù)位電壓。經(jīng)過若干毫秒以后,電解電容器被充滿電,這時電阻就沒有電流流過,電阻兩端也就沒有電壓,單片機的復(fù)位腳電壓恢復(fù)為0,復(fù)位工作結(jié)束,單片機開始工作。上電復(fù)位:上電復(fù)位電路是種簡單的復(fù)位電路,只要在RST復(fù)位引腳接一個電容到VCC,接一個電阻到地就可以了。上電復(fù)位

10、是指在給系統(tǒng)上電時,復(fù)位電路通過電容加到RST復(fù)位引腳一個短暫的高電平信號,這個復(fù)位信號隨著VCC對電容的充電過程而回落,所以RST引腳復(fù)位的高電平維持時間取決于電容的充電時間。為了保證系統(tǒng)安全可靠的復(fù)位,RST引腳的高電平信號必須維持足夠長的時間。上電自動復(fù)位是通過外部復(fù)位電路的電容充電來實現(xiàn)的。只要Vcc的上升時間不超過1ms,就可以實現(xiàn)自動上電復(fù)位。 3.2 LED顯示電路3.2.1 二極管二極管是半導(dǎo)體設(shè)備中的一種最常見的器件,大多數(shù)半導(dǎo)體最是由攙雜半導(dǎo)體材料制成(原子和其它物質(zhì))發(fā)光二極管導(dǎo)體材料通常都是鋁砷化稼,在純鋁砷化稼中,所有的原子都完美的與它們的鄰居結(jié)合,沒有留下自由電子連

11、接電流。在攙雜物質(zhì)中,額外的原子改變電平衡,不是增加自由電子就是創(chuàng)造電子可以通過的空穴。這兩樣額外的條件都使得材料更具傳導(dǎo)性。帶額外電子的半導(dǎo)體叫做N型半導(dǎo)體,由于它帶有額外負電粒子,所以在N型半導(dǎo)體材料中,自由電子是從負電區(qū)域向正電區(qū)域流動。帶額外“電子空穴”的半導(dǎo)體叫做P型半導(dǎo)體,由于帶有正電粒子。電子可以從另一個電子空穴跳向另一個電子空穴,從從負電區(qū)域向正電區(qū)域流動。因此,電子空穴本身就顯示出是從正電區(qū)域流向負電區(qū)域。二極管是由N型半導(dǎo)體物質(zhì)與P型半導(dǎo)體物質(zhì)結(jié)合,每端都帶電子。這樣排列使電流只能從一個方向流動。當(dāng)沒有電壓通過二極管時,電子就沿著過渡層之間的匯合處從N型半導(dǎo)體流向P型半導(dǎo)體

12、,從而形成一個損耗區(qū)。在損耗區(qū)中,半導(dǎo)體物質(zhì)會回復(fù)到它原來的絕緣狀態(tài)-所有的這些“電子空穴”都會被填滿,所有就沒有自由電子或電子真空區(qū)和電流不能流動。為了除掉損耗區(qū)就必須使N型向P型移動和空穴應(yīng)反向移動。為了達到目的,連接二極管N型一方到電流的負極和P型就連接到電流的正極。這時在N型物質(zhì)的自由電子會被負極電子排斥和吸引到正極電子。在P型物質(zhì)中的電子空穴就移向另一方向。當(dāng)電壓在電子之間足夠高的時候,在損耗區(qū)的電子將會在它的電子空穴中和再次開始自由移動。損耗區(qū)消失,電流流通過二極管。3.2.2 發(fā)光二極管的性能發(fā)光二極管LED(Light-EmittingDiode)是能將電信號轉(zhuǎn)換成光信號的結(jié)型

13、電致發(fā)光半導(dǎo)體器件。發(fā)光二極管LED主要特點: (1)在低電壓(1.52.5V)、小電流(530mA)的條件下工作,即可獲得足夠高的亮度。 (2)發(fā)光響應(yīng)速度快(10-710-9 s),高頻特性好,能顯示脈沖信息。 (3)單色性好,常見顏色有紅、綠、黃、橙等。 (4)體積小。發(fā)光面形狀分圓形、長方形、異形(三角形等)。其中圓形管子的外徑有1、2、3、4、5、8、10、12、15、20(mm)等規(guī)格,直徑1mm的屬于超微型LED。 (5)防震動及抗沖擊穿性能好,功耗低,壽命長。由于LED的PN結(jié)工作在正向?qū)顟B(tài),本射功耗低,只要加必要的限流措施,即可長期使用,壽命在10萬小時以上,甚至可達10

14、0萬小時。 (6)使用靈活,根據(jù)需要可制成數(shù)碼管、字符管、電平顯示器、點陣顯示器、固體發(fā)光板、LED平極型電視屏等。 (7)容易與數(shù)字集成電路匹配。3.2.3 顯示接口電路的設(shè)計在單片機應(yīng)用系統(tǒng)中,使用的顯示器主要有LED顯示器(發(fā)光二極管顯示器)。這種顯示器成本低廉,配置靈活,與單片機接口方便。在本系統(tǒng)的設(shè)計中采用LED顯示器。LED顯示器由8位LED數(shù)碼管組成,用于顯示系統(tǒng)在各種不同條件下的狀態(tài)。用單片機驅(qū)動LED數(shù)碼管有很多方法,按顯示方式分,有靜態(tài)顯示和動態(tài)顯示,按譯碼方式分為硬件譯碼和軟件譯碼。靜態(tài)顯示是顯示驅(qū)動電路具有輸出鎖存功能,單片機將要顯示的數(shù)據(jù)送出后不再控制LED,直到下次

15、顯示時再傳送一次新的顯示數(shù)據(jù)。靜態(tài)顯示的數(shù)據(jù)穩(wěn)定,占用CPU時間少。動態(tài)顯示要CPU時刻對顯示器件進行數(shù)據(jù)刷新,顯示數(shù)據(jù)會有閃爍,占用的CPU時間多。這兩種顯示方式各有利弊:靜態(tài)顯示雖然數(shù)據(jù)顯示穩(wěn)定,占用很少的CPU時間,但每個顯示單元都需要單獨的顯示驅(qū)動電路,使用的電路硬件較多;動態(tài)顯示雖然閃爍,占用的CPU時間多,但使用的硬件少,能節(jié)省線路板空間。在本設(shè)計中由于顯示部分比較簡單,所以選用了靜態(tài)顯示方式,LED顯示器由74LS373來驅(qū)動,為了擴展外部存儲器需一塊74LS373(地址鎖存器) 。LED發(fā)光器件一般常用的有兩類:數(shù)碼管和點陣。常用的數(shù)碼管一般為8字型數(shù)碼管,分為A、B、C、D、

16、E、F、G、DP八段,其中DP為小數(shù)點。數(shù)碼管常用的有10根管腳,每一段有一根管腳,另外兩根管腳為一個數(shù)碼管的公共端,兩根之間相連通。數(shù)碼管從電路上來看可分為共陰和共陽兩種,在本設(shè)計中用了共陽的LED。3.3 時鐘振蕩電路AT89C51中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或者陶瓷諧振器一起構(gòu)成自然振蕩器。外接石英晶體及電容C1、C2接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。對外接電容C1,C2雖然沒有什么嚴格的要求,但電容容量的大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程序

17、及溫度穩(wěn)定性。如果使用石英晶體,我們推薦電容使用30PF10PF,而如果使用陶瓷振蕩器建議選擇40PF10PF。用戶也可以采用外部時鐘。采用外部時鐘的電路如圖示。這種情況下,外部時鐘脈沖接到XTAL1端,即內(nèi)部時鐘發(fā)生器的輸入端,XTAL2則懸空。由于外部時鐘信號是通過一個2分頻觸發(fā)器后作為內(nèi)部時鐘信號的,所以對外部時鐘信號的占空比沒有特殊要求,但最小高電平持續(xù)時間和最大的低電平持續(xù)時間應(yīng)符合產(chǎn)品技術(shù)條件的要求。振蕩器電路如圖3-3所示。圖3-3 時鐘振蕩電路3.4 按鍵電路按鍵的開關(guān)狀態(tài)通過一定的電路轉(zhuǎn)換為高、低電平狀態(tài)。按鍵閉合過程在相應(yīng)的I/O端口形成一個負脈沖。閉合和釋放過程都要經(jīng)過一

18、定的過程才能達到穩(wěn)定,這一過程是處于高、低電平之間的一種不穩(wěn)定狀態(tài),稱為抖動。抖動持續(xù)時間的常長短與開關(guān)的機械特性有關(guān),一般在5-10ms之間。為了避免CPU多次處理按鍵的一次閉合,應(yīng)采用措施消除抖動。本文采用的是獨立式按鍵,直接用I/O口線構(gòu)成單個按鍵電路,每個按鍵占用一條I/O口線,每個按鍵的工作狀態(tài)不會產(chǎn)生互相影響。按鍵電路如圖3-4所示。圖3-4 按鍵電路鍵盤是一組按鍵的集合,它是最常用的單片機輸入設(shè)備。操作人員可以通過鍵盤輸入數(shù)據(jù)或命令,可以實現(xiàn)簡單的人機通信。鍵盤可以分為獨立連接式和矩陣式兩種,每一種按其譯碼方式都可以分為編碼及非編碼兩種。編碼鍵盤通過硬件的方法產(chǎn)生鍵碼,能自動的識

19、別按下的健并產(chǎn)生相應(yīng)的鍵碼值,以并行或串行的方式發(fā)送給CPU,它的接口簡單,響應(yīng)速度快,但需要專用的硬件電路;非編碼鍵盤通過軟件的方法產(chǎn)生鍵碼,它不需要專用硬件電路,結(jié)構(gòu)簡單,成本低廉,但響應(yīng)速度沒有編碼鍵盤快。為了減少電路的復(fù)雜程度,節(jié)省單片機的I/O接口,因此非編碼鍵盤在單片機鍵盤中使用非常廣泛。(1)鍵盤輸入的特點 鍵盤實質(zhì)上是一級按鍵開關(guān)的集合。通常,鍵盤開關(guān)利用了機械觸點的合、斷作用。 (2)按鍵的確認 鍵的閉合與否,反映在行線輸出電壓上就呈現(xiàn)高電平或低電平,如果高電平表示鍵斷開,低電平則表示鍵閉合,通過對行線電平高低狀態(tài)的檢測,便可確認按鍵按下與否。為

20、了確保CPU對一次按鍵動作只確認一次按鍵有效,必須消除抖動的影響。  第4章 軟件設(shè)計4.1 主程序流程圖開機加電關(guān)閉定時器T0、T1A鍵函數(shù)是A鍵?有按鍵輸入?讀取鍵盤等待按鍵按下置定時器T0、T1的工作方式NNYYNY是B鍵?B鍵函數(shù)NYC鍵函數(shù)是C鍵?N結(jié)束圖4-1 主函數(shù)程序框圖本設(shè)計采用了自定義下的流程圖。主要程序流程有:主程序、判斷有無按鍵子程序、鍵盤掃描子程序、顯示鍵號/歌曲號子程序、開機畫面子程序、按鍵值播放歌曲子程序等。程序中使用了兩個定時中斷,定時中斷0用于產(chǎn)生整個音程的頻率,以便驅(qū)動揚聲器。程序的總體流程是當(dāng)P1由按鍵按下時,讀鍵盤,并儲存鍵值,若為F鍵則通過查

21、表的方式,調(diào)用字符串下手鍵號/曲目子程序,將鍵號顯示出來。主程序流程圖如圖4-1所示。4.2 延時模塊延時程序一般是通過一層或幾層循環(huán)實現(xiàn)的,整個過程延時的時間是程序執(zhí)行的指令總次數(shù)乘以每條指令所用的時間。由于該系統(tǒng)的晶振選用的是12M,所以執(zhí)行指令所用的時間是2ms。程序如下:void delay_ms(uint xms) uint x,y; for(x=xms;x>0;x-) for(y=110;y>0;x-) 4.3 函數(shù)初始化模塊函數(shù)初始化程序即在主函數(shù)內(nèi)對某些參數(shù)和標(biāo)記位賦初值編寫成一個函數(shù),這樣便是程序更具有條理化,清晰易懂。由于整個程序要用到定時器0和定時器1,所以,

22、初始化程序主要是對定時器相關(guān)內(nèi)容作說明。程序如下:void Initialsound(void) Sound_Temp_TH1=(65536-(1/1200)*SYSTEM_OSC)/256; /計算TL1應(yīng)裝入的初值Sound_Temp_TL1=(65536-(1/1200)*SYSTEM_OSC)%256; /計算TH1應(yīng)裝入的初值TH1=Sound_Temp_TH1;TL1=Sound_Temp_TL1;TMOD=0x11;ET0=1;ET0=0;TR0=0;TR1=0;EA=1;4.4 順序播放模塊順序播放函數(shù)設(shè)計主要實現(xiàn)的是歌曲從1-4的播放,當(dāng)播放歌曲時,播放模塊(即上一曲、下一曲

23、、暫停/播放和結(jié)束播放)可進行相應(yīng)的操作,實現(xiàn)了音樂播放的切換功能。順序播放函Order()函數(shù)代碼如下:void Order() uint i; k=8; init(); for(i=0;i<15;i+) WriteData(tabi); /LCD寫數(shù)據(jù)函數(shù)寫第一行 mydelay(50); mydelay(1000); WriteCMD(0x80+0x40+2);/將指針設(shè)到第二行空兩字符 for(i=0;i<6;i+) WriteData(tab1i); mydelay(50); InitialSound();/發(fā)音初始化程序 Getch(); /掃描鍵盤,獲取鍵值 if(k

24、=0) /若鍵值為0 uint i; init(); for(i=0;i<10;i+) WriteData(tab2i); /寫第一首歌曲序號 mydelay(50); mydelay(1000); WriteCMD(0x80+0x40); /轉(zhuǎn)到第二行 for(i=0;i<9;i+) Play(Music_Girl,0,3,360);/播放第一首歌 mydelay(500); for(i=0;i<11;i+) WriteData(tab4i); mydelay(50); mydelay(1000); WriteCMD(0x80+0x40); for(i=0;i<11;

25、i+) WriteData(tab5i); mydelay(50); Play(Music_Jingle,0,3,360); mydelay(500); for(i=0;i<10;i+) WriteData(tab6i); mydelay(50); mydelay(1000); WriteCMD(0x80+0x40); for(i=0;i<6;i+) Play(Music_Two,0,3,360); mydelay(500); for(i=0;i<10;i+) mydelay(1000); WriteCMD(0x80+0x40); for(i=0;i<6;i+) Wri

26、teData(tab9i); mydelay(50); Play(Music_Jingle,0,3,360); mydelay(500); break; 4.5 鍵盤掃描函數(shù)流程圖開始 N鍵盤掃描有按鍵按下?去抖動Y確定按鍵的物理位置計算鍵碼等待釋放返回返回圖4-2鍵盤掃描子程序流程按鍵掃面程序事實上就是去抖動程序。即先判斷是否有鍵按下,若有則判斷本次按鍵值和上次掃描到的的是否相同,如果相同,將掃描計數(shù)器加1:;如果不同掃描計數(shù)器1;保存按鍵值以便和下次掃描鍵值比較。如果沒有鍵按下,則認為按鍵值已釋放。鍵盤掃描子程序流程如圖4-2所示。其源代碼如下:uchar GetKey () uchar

27、i, j, k = 0; uchar KeyScanCode = 0xEF, 0xDF, 0xBF, 0x7F; /鍵盤掃描碼 uchar KeyCodeTable =0xEE,0xED,0xEB,0xDE,0xDD,0xDB, 0xBE,0xBD,0xBB,0x7E,0x7D,0x7B; /鍵盤特征碼 P3 = 0x0F;/掃描鍵盤獲取按鍵序號 if (P3! = 0x0F) for (i = 0; i< 4;i+) P3 = KeyScanCodei; for (j = 0;j < 3;j+) k = i * 3 + j; if (P3 = KeyCodeTablek) ret

28、urn k; else return 0xFF;AT89C51單片機的P3口用作鍵盤I/O口,鍵盤的列線接到P3口的低4位,鍵盤的行線接到P3口的高4位。列線P3.0-P3.3分別接有4個上拉電阻到正電源+5V,并把列線P3.0-P3.3設(shè)置為輸入線,行線P3.4-P3.7設(shè)置為輸出線。4根行線和4根列線形成16個相交點。 (1)檢測當(dāng)前是否有鍵被按下。檢測的方法是P3.4-P3.7輸出全“0”,讀取P3.0-P3.3的狀態(tài),若P3.0-P3.3為全“1”,則無鍵閉合,否則有鍵閉合。 (2)去除鍵抖動。當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。 (3)若有鍵被按下,應(yīng)識別出是哪一個

29、鍵閉合,方法是對鍵盤的行線進行掃描。P3.4-P3.7按下表所示4種組合依次輸出。(4)在每組行輸出時讀取P3.0-P3.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。4.6 主要程序代碼void Getch() uchar X,Y,Z; P1=0xFF; P1=0xF3; /先對P0置數(shù),行掃描 if(P1!=0xF3) /判斷是否有鍵按下 delay1(); /延時 if(P1!=0xF3)/確認按鍵按下X=P3; X=P1; /保存行掃描時有鍵按下時狀態(tài) P1=0xFC; /列掃

30、描 Y=P1; /保存列掃描時有鍵按下 Z=X|Y; /取出鍵值 switch(Z) /判斷鍵值 case 0xF9: k=0;break; case 0xF5: k=1;break; case 0xFA: k=2;break; case 0xF6: k=3;break; void Delay() uint uiCount; for(uiCount=0;uiCount<250;uiCount+);void WriteCMD(uchar Commond) /寫指令函數(shù) Delay(); /先延時 LCDE=1; /然后把LCD改為寫入命令狀態(tài) LCDRS=0; LCDRW=0; LCDPO

31、RT=Commond; /在輸出命令 LCDE=0; /最后執(zhí)行命令void WriteData(uchar dat) /LCD寫數(shù)據(jù)函數(shù) Delay(); /先延時 LCDE=1; /把LCD改為寫入數(shù)據(jù)狀態(tài) LCDRS=1; LCDRW=0; LCDPORT=dat; /在輸出數(shù)據(jù) LCDE=0; /顯示數(shù)據(jù) void InitialSound(void) BeepIO=0; Sound_Temp_TH1=(65535-(1/1200)*SYSTEM_OSC)/256;/計算TL1應(yīng)裝入的初值 Sound_Temp_TL1=(65535-(1/1200)*SYSTEM_OSC)/256;/

32、計算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;第5章 調(diào)試與仿真5.1 Keil C51單片機軟件開發(fā)系統(tǒng)5.1.1 系統(tǒng)的整體結(jié)構(gòu)C51工具包的整體結(jié)構(gòu)中,其中uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(ID

33、E),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。5.1.2 采用KEIL 開發(fā)的89C51單片機應(yīng)用程序步驟(1)在uVision 集成開發(fā)環(huán)境中創(chuàng)建新項目(Project),擴展文件名

34、為.UV2,并為該項目選定合適的單片機CPU器件(本設(shè)計采用ATMEL 公司下的AT89C51)(2)用uVision 的文本編輯器編寫源文件,可以是匯編文件(.ASM),也可以使C語言文件(擴展名.C),并將該文件添加到項目中去。一個項目文件可以包含多個文件,除了源程序文件外,還可以是庫文件、頭文件或文本說明文件。(3)通過uVision 2 的相關(guān)選擇項,配置編譯環(huán)境、連接定位器以及Debug調(diào)試器的功能。(4)對項目中的源文件進行編譯連接,生成絕對目標(biāo)代碼和可選的HEX文件,如果出現(xiàn)編譯連接錯誤則返回到第2步,修改源文件中的錯誤后重構(gòu)整個項目。(5)對沒有語法錯誤的程序進行仿真調(diào)試,調(diào)試

35、成功后將HEX文件寫入到單片機應(yīng)用系統(tǒng)的ROM中。5.2 Proteus的操作5.2.1 硬件電路圖的接法操作 (1)放置選擇(刪除)元器件(2)移動元器件(3)縮放視圖(4)連接導(dǎo)線(5)仿真,調(diào)試5.3 單片機系統(tǒng)PROTEUS設(shè)計Proteus強大的單片機系統(tǒng)設(shè)計與仿真功能,使它可成為單片機系統(tǒng)應(yīng)用開發(fā)和改進手段之一。全部過程都是在計算機上通過Proteus來完成的。其過程一般也可分為三步:(1)Proteus電路設(shè)計,首先選擇元器件,然后接插件、連接電路等。(2)Proteus源程序設(shè)計,通過KEIL軟件對系統(tǒng)的程序進行設(shè)計,通過編輯程序、保存程序、編譯程序、調(diào)試程序來生成目標(biāo)代碼文件(*.hex)。(3)將我們生成的源程序目

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論