大學(xué)畢業(yè)論文--基于單片機的音樂數(shù)字鐘的設(shè)計與仿真_第1頁
大學(xué)畢業(yè)論文--基于單片機的音樂數(shù)字鐘的設(shè)計與仿真_第2頁
大學(xué)畢業(yè)論文--基于單片機的音樂數(shù)字鐘的設(shè)計與仿真_第3頁
大學(xué)畢業(yè)論文--基于單片機的音樂數(shù)字鐘的設(shè)計與仿真_第4頁
大學(xué)畢業(yè)論文--基于單片機的音樂數(shù)字鐘的設(shè)計與仿真_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

鄭州輕工業(yè)學(xué)院輕工職業(yè)學(xué)院??飘厴I(yè)設(shè)計題目基于單片機的音樂數(shù)字鐘的設(shè)計與仿真學(xué)生姓名張培成 專業(yè)班級自動化生產(chǎn)設(shè)備及應(yīng)用121 學(xué)號 院(系)機電工程系 指導(dǎo)教師(職稱) 完成時間 基于單片機的音樂數(shù)字鐘的設(shè)計與仿真基于單片機的音樂數(shù)字鐘的設(shè)計與仿真L012300'0'0<■0120111J21236a[)[)0(b)有鍵按下\7(a)無鍵按下圖4-24檢查是否有鍵按下示意圖第二步:確定按下的是哪一個鍵。識別閉合鍵有兩種方法:一種稱為逐行掃描法, 另一一種稱為線反轉(zhuǎn)法。(1)逐行掃描法逐行掃描法是識別閉合鍵的常用方法, 在硬件電路上要求行線作輸出、 列線作輸入,列線上要有上拉電阻。4用鍵盤逐行掃描法的工作原理是:先掃描第 0行,即輸出1110(第0行為“0,”其余3行為“1)”,然后讀入列信號,判斷是否為全 “1?!比魹槿?,”表示第0行無鍵按下;若不為全“1”則表示第0行有鍵按下,閉合鍵的位置處于第 0行和不為“1的列線相交之處。如果第0行無鍵按下,就掃描第1行,用同樣的方法判斷第1行有沒有鍵按下,直到找到閉合鍵為止,如圖4-25(a)?(d)所示。J0<1*1i110J230-1<0q1*1'0123Q]1J*-A23 3■—ii J il■ ―11 il\7 \7(a)(a)掃描第0行 (b)掃描第1行(c)(c)掃描第2行(d)掃描第3行圖4-25逐行掃描法示意圖4-23行列式鍵盤的閉合鍵處理程序中,仍需要進行按鍵去抖和等待按鍵的釋放。在圖所示的行列鍵盤電路中,采用逐行掃描法識別閉合鍵的程序如下:4-23if(P1!=OxfO) //判斷是否有按鍵按下{delay(); //延時去抖if(P1!=0xf0) //再次判斷是否有按鍵按下{P仁Oxfe; //掃描第0行switch(P1){case0xee第0行第0個按鍵的功能代碼;break;case0xde第0行第1個按鍵的功能代碼;break;case0xbe第0行第2個按鍵的功能代碼;break;case0x7e第0行第3個按鍵的功能代碼;break;}P仁0xfd; //掃描第1行switch(P1){case0xed第1行第0個按鍵的功能代碼;break;case0xdd第1行第1個按鍵的功能代碼;break;case0xbd第1行第2個按鍵的功能代碼;break;case0x7d第1行第3個按鍵的功能代碼;break;}P仁0xfb; //掃描第2行switch(P1){case0xeb第2行第0個按鍵的功能代碼;break;case0xdb第2行第1個按鍵的功能代碼;break;case0xbb第2行第2個按鍵的功能代碼;break;case0x7b第2行第3個按鍵的功能代碼;break;}P仁0xf7; //掃描第3行switch(P1){case0xe7第3行第0個按鍵的功能代碼;break;case0xd7第3行第1個按鍵的功能代碼;break;case0xb7第3行第2個按鍵的功能代碼;break;case0x77第3行第3個按鍵的功能代碼;break;}P仁0xf0;while(P1!=0xf0);}}(2)線反轉(zhuǎn)法但在硬件電路線反轉(zhuǎn)法也是識別閉合鍵的一種常用方法, 該方法比行掃描法速度要快,

上要求行線與列線都要既能作輸出又能作輸入,行線和列線上都要有上拉電阻。但在硬件電路下面仍以4X4鍵盤為例說明線反轉(zhuǎn)法的工作原理。首先將行線作為輸出線, 列線作為輸入線,先通過行線輸出全 “0信號,讀入列線的值,如果此時有某1個鍵被按下,則必然使某1列線值為“0信然后將行線和列線的輸入輸出關(guān)系互換(輸入輸出線反轉(zhuǎn)),列線作輸出線、行線作輸入線,再通過列線輸出全 “0信號,讀入行線的值,那么閉合鍵所在的行線上的值必定為 “0。這樣當1個鍵被按下時,必定讀得一對唯一的行值和列值,根據(jù)這一對值即可確定閉合鍵。線反轉(zhuǎn)法示意圖如圖4-26所示。□1730□1730?1J]112J31>■?()000(a)(a)行線輸出全“0得列值1101(b)列輸出全“0得行值1011if(P1!=0xf0)if(P1!=0xf0){delay();if(P1!=0xf0){P仁0xf0;temp=P1;P仁0x0f;temp=temp|P1;switch(temp)圖4-26線反轉(zhuǎn)法示意圖在圖4-23所示的行列鍵盤電路中,采用線反轉(zhuǎn)法識別閉合鍵的程序如下:unsignedchartemp;temp=0xff;P1=0xf0;〃判斷是否有按鍵按下//延時去抖//再次判斷是否有按鍵按下//行作輸出,列作輸入//讀取列值〃列作輸出,行作輸入//讀取行值并和列值合并{case0xee第0行第0個按鍵的功能代碼;break;case0xde第0行第1個按鍵的功能代碼;break;case0xbe第0行第2個按鍵的功能代碼;break;case0x7e第0行第3個按鍵的功能代碼;break;case0xed第1行第0個按鍵的功能代碼;break;case0xdd第1行第1個按鍵的功能代碼;break;case0xbd第1行第2個按鍵的功能代碼;break;case0x7d第1行第3個按鍵的功能代碼;break;case0xeb第2行第0個按鍵的功能代碼;break;case0xdb第2行第1個按鍵的功能代碼;break;

caseOxbb第2行第2個按鍵的功能代碼;break;case0x7b第2行第3個按鍵的功能代碼;break;case0xe7第3行第0個按鍵的功能代碼;break;case0xd7第3行第1個按鍵的功能代碼;break;case0xb7第3行第2個按鍵的功能代碼;break;case0x77第3行第3個按鍵的功能代碼;break;}P仁0xf0;while(P1!=0xf0);}}需要說明的是,若用線反轉(zhuǎn)法來確定閉合鍵時, 如果遇到多個鍵閉合的情況, 則得到的行值和列值中一定有1個以上的“0。由于按鍵處理程序中沒有這樣的值,因而可以判斷為重鍵而丟棄,由此可見,用這種方法可以很方便地解決重鍵問題。74LS245簡介0i1-1p-F_L110i1-1p-F_L11*-JD0BBBBBBBBMvaAOA1A2陽卻摳¥腫毎血20TFU-

rN=;三三UT1?112U—110T74IS245引腳圖與用法74LS245引腳圖74LS245是我們常用的芯片,用來驅(qū)動led或者其他的設(shè)備,用法很簡單如上圖,這里簡單的給出一些資料,他是8路同相三態(tài)雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù)。 74LS245還具有雙向三態(tài)功能,既可以輸出,也可以輸入數(shù)據(jù)。當8051單片機的P0口總線負載達到或超過P0最大負載能力時,必須接入74LS245等總線驅(qū)動器。

當片選端/CE低電平有效時,DIR=“0”,信號由B向A傳輸;(接收)*DIR=“1” ,信號由A向B傳輸;(發(fā)送)當/CE為高電平時,A、B均為高阻態(tài)。蜂鳴器蜂鳴器一)蜂鳴器的介紹?蜂鳴器的作用蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計算機、打印機、復(fù)印機、報警器、電子玩具、汽車電子設(shè)備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。.蜂鳴器的分類蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。3.蜂鳴器的電路圖形符號蜂鳴器在電路中用字母 H”或HA”(舊標準用FM”、LB3.蜂鳴器的電路圖形符號表示。(二)蜂鳴器的結(jié)構(gòu)原理外殼等組成。有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管。阻抗匹配器及共鳴箱、表示。(二)蜂鳴器的結(jié)構(gòu)原理外殼等組成。有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管。阻抗匹配器及共鳴箱、多諧振蕩器由晶體管或集成電路構(gòu)成。當接通電源后( 1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。 在陶瓷片的兩面鍍上銀電極, 經(jīng)極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。2?電磁式蜂鳴器 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈, 使電磁線圈產(chǎn)生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。蜂鳴器的制作(1)制備電磁鐵M:在長約6厘米的鐵螺栓上繞100圈導(dǎo)線,線端留下5厘米作引線,用透明膠布把線圈粘好,以免線圈松開,再用膠布把它粘在一個盒子上,電磁鐵就做好了?(2)制備彈片P:從鐵罐頭盒上剪下一條寬約2厘米的長鐵片,彎成直角,把電磁鐵的一條引線接在彈片上,再用膠布把彈片緊貼在木板上.(3)用曲別針做觸頭Q,用書把曲別針墊高,用膠布粘牢,弓I出一條導(dǎo)線,如圖連接好電路.(4)調(diào)節(jié)M與P之間的距離(通過移動盒子),使電磁鐵能吸引彈片,調(diào)節(jié)觸點與彈片之間的距離,使它們能恰好接觸,通電后就可以聽到蜂鳴聲。3控制部分電路的設(shè)計系統(tǒng)復(fù)位設(shè)置單片機復(fù)位電路是使CPU和系統(tǒng)中的其他功能部件都處在一個確定的初始狀態(tài), PC=OOOOH論是在單片單片機各種復(fù)位電路原理復(fù)位電路的作用在上電或復(fù)位過程中,控制CPU的復(fù)位狀態(tài):這段時間內(nèi)讓CPU保持復(fù)位狀態(tài),而不是一上電或剛復(fù)位完畢就工作,防止 CPU發(fā)出錯誤的指令、執(zhí)行錯誤操作,也可以提高電磁兼容性能。無論用戶使用哪種類型的單片機,總要涉及到單片機復(fù)位電路的設(shè)計。而單片機復(fù)位電路設(shè)計的好壞,直接影響到整個系統(tǒng)工作的可靠性。許多用戶在設(shè)計完單片機系統(tǒng) ,并在實驗室調(diào)試成功后,在現(xiàn)場卻出現(xiàn)了“死機”、“程序走飛”等現(xiàn)象,這主要是單片機的復(fù)位電路設(shè)計不可靠引起的?;镜膹?fù)位方式單片機在啟動時都需要復(fù)位,以使 CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初態(tài)開始工作。89系列單片機的復(fù)位信號是從 RST引腳輸入到芯片內(nèi)的施密特觸發(fā)器中的。當系統(tǒng)處于正常工作狀態(tài)時,且振蕩器穩(wěn)定后,如果 RST引腳上有一個高電平并維持 2個機器周期(24個振蕩周期)以上,則CPU就可以響應(yīng)并將系統(tǒng)復(fù)位。 單片機系統(tǒng)的復(fù)位方式有:手動按鈕復(fù)位和上電復(fù)位 1、手動按鈕復(fù)位手動按鈕復(fù)位需要人為在復(fù)位輸入端RST上加入高電平(圖1)。一般采用的辦法是在RST端和正電源Vcc之間接一個按鈕。當人為按下按鈕時,則Vcc的+5V電平就會直接加到RST端。手動按鈕復(fù)位的電路如所示。由于人的動作再快也會使按鈕保持接通達數(shù)十毫秒,所以,完全能夠滿足復(fù)位的時間要求。數(shù)字時鐘的設(shè)計數(shù)字時鐘具有走時準確一鐘多用等特點在生活中已經(jīng)得到廣泛的應(yīng)用。雖然現(xiàn)在市場上已有現(xiàn)成的電子鐘集成電路芯片出售價格便宜,使用也方便但是人們對電子產(chǎn)品的應(yīng)用要求越來越高數(shù)字鐘不但可以顯示當前的時間而且可以顯示日期、農(nóng)歷、鐘還具備秒表的色彩。時間對人們來說總是那么寶貴工作的忙碌性和繁雜性容易使人忘記當前的時間。忘記了要做的事情當事情不是很重要的時候這種遺忘無傷大雅°但是一旦重要事情一時的耽誤可能釀成大禍?數(shù)字時鐘已成為人們?nèi)粘I钪斜夭豢缮俚谋匦杵窂V泛用于個人家庭以及車站、碼頭、劇院、辦公室等公共場所給人們的生活、學(xué)習、工作'娛樂帶來極大的方便「由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進的石英技術(shù)使電子時鐘具有走時準確「性能穩(wěn)定*攜帶方便等優(yōu)點它還用于計時、自動報時及自動控制等各個領(lǐng)域。數(shù)字時鐘是采用單片機原理實現(xiàn)對年、月、日、周,時、分、秒數(shù)字顯示及到時提醒的計時裝置,廣泛用于個人家庭,車站,碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?,由于?shù)字集成電路的發(fā)展和石英晶體振。1.技能要求數(shù)字時鐘需要顯示時、分、秒三個計時單位,每個計時單位有2位數(shù)字共需6個數(shù)碼管,為顯示美觀和讀取時間方便,在時、分、秒之間顯示分隔符“ -”共用8個數(shù)碼管,顯示格式如圖6-6所示。另外,數(shù)字時鐘還必須可以通過按鍵調(diào)整時間,為了調(diào)整的方便,本任務(wù)使用行列鍵盤,各按鍵定義如圖6-7所示。

00-0012I300-0045I77_8_19圖6-6數(shù)字時鐘數(shù)碼管顯示格式圖圖6-6數(shù)字時鐘數(shù)碼管顯示格式圖6-7鍵盤按鍵定義示意圖2.仿真電路圖數(shù)字時鐘電路如圖6-8所示。顯示電路采用8位數(shù)碼管動態(tài)掃描顯示,最高2位顯示時,中間2位顯示分,最低2位顯示秒,時、分、秒之間用 -”隔開。調(diào)整時間時,按下設(shè)置”鍵,小時數(shù)開始閃爍,表示設(shè)置小時數(shù), 第一次輸入數(shù)字鍵調(diào)整十位, 第二次輸入數(shù)字鍵調(diào)整個位,再次按下設(shè)置”鍵,分鐘數(shù)開始閃爍,第一次輸入數(shù)字鍵調(diào)整十位,第二次輸入數(shù)字鍵調(diào)整個位,再次按下設(shè)置”鍵,退出調(diào)整,數(shù)碼管不再閃爍。11-XF4L2KlLMiE-l財站mEMp3竺AtalMKvuras.nr.曲iw比E1*11rz11-XF4L2KlLMiE-l財站mEMp3竺AtalMKvuras.nr.曲iw比E1*11rzH-fJMPTF-J-VTiF5.<ELnph'ayikiJ痞-■'1Ei:”";|?rp,3pii4-cfn-P*.,iPei?PhF~ 旦AIKX1圖6-8數(shù)字時鐘電路■Hi盤ii■i>4J■■iS?■囂品靈■!!Mvlin音樂模塊單片機產(chǎn)生音調(diào)的基本原理時播放器是利用單片機產(chǎn)牛樂曲音符再把樂曲音符翻譯成訐算機音樂語言用單片機進行信息處坯再迪過舞鳴器哎喇叭放出舀樂。音樂的產(chǎn)生主要是通過單片機的I/O口輸出高低不同的脈沖信號來控制蜂鳴器發(fā)舀。亞想產(chǎn)牛普頻脈沖信號需耍算岀杲一音頻的周期(1/頻率)然后將此周期除以2當計時到后就將輸出脈沖的I/O I/O口I/O口上得到此頻率的脈沖。通常利用單片機的內(nèi)部定時器0丄作在方式1下改變計數(shù)初值THO和TLO來產(chǎn)生不同頻率。1個寧節(jié)寧節(jié)的嵩4位代表普後的訛

低4位代表音符的節(jié)拍。如果1拍為0.4S 1/4拍為0.1S只孌伐定延世討間就ij求得節(jié)拍的時間。假設(shè)1/4拍為1DELAY 1拍應(yīng)為4DELAY以只要求得1/4拍的DELAYJ音階和節(jié)拍兩大要素構(gòu)成。一首樂曲演奏的原理是不同音階分別對應(yīng)不同的頻率發(fā)出不同的普調(diào)血節(jié)捫則控制發(fā)出音調(diào)時間的長短若將樂曲的晉調(diào)連續(xù)狡出井使其按和應(yīng)的節(jié)擴變化即呵漁奏一M樂曲。根據(jù)這一時點我們采用單片機輔以相應(yīng)的接口來設(shè)計音樂播放器。音樂播放器的組成根據(jù)系統(tǒng)普樂播放器的功能耍求一個完整的音樂播放器電路相當于一個簡單的單片囲L系統(tǒng)該系統(tǒng)山按鍵開關(guān)、單片機、LED顯示電路、揚聲器控制電路4個方面構(gòu)成。?51單片機。51草山機為整個糸統(tǒng)的核心部分是竊;浮個系統(tǒng)丄作的成史部件。?鎧盤輸入C鋰盤輸人用來控制輸入指令發(fā)岀指令卒單片機使單片機按照指令工作。?揚聲器。揚聲器作為輸出部分按照鍵盤給單片機的指令發(fā)出樂曲。?LED顯示電路。LED顯小上在演奏的樂曲c |定時/計數(shù)器的結(jié)構(gòu)及工作原理MCS-51單片機內(nèi)部集成了兩個16位的定時/計數(shù)器,即T0和T1。從名稱上就可以看出來,它們既具有計數(shù)功能又具有定時功能, 通過設(shè)置與它們相關(guān)的特殊功能寄存器可以選擇工作在定時功能或計數(shù)功能。定時 /計數(shù)器的實質(zhì)是計數(shù)器,它的功能是能對輸入脈沖按照一定規(guī)律進行計數(shù)。 如果輸入脈沖的周期是固定的, 即計數(shù)脈沖的時間間隔相等, 那么計數(shù)值就代表了時間,從而可以實現(xiàn)定時。如同往一個水瓶里滴水一樣,水瓶的容量是有限的,不能無限制地往水瓶里滴水,水瓶滿了以后,再往水瓶里滴水就會溢出,單片機中的計數(shù)器也是如此, T0和T1都是16位的計數(shù)器,它的容量也是有限的,其計數(shù)的最大值為 65535(即二進制數(shù)1111111111111,這個標志位1111B),此時,再輸入一個計數(shù)脈沖則計滿溢出,將對應(yīng)的溢出標志位置就是定時器中斷標志位,就會向 CPU1,這個標志位6-13所示。C/?1用制佔號MCS-51單片機的定時/6-13所示。C/?1用制佔號圖6-13定時/計數(shù)器的結(jié)構(gòu)框圖(x=0或x=1)

由圖6-13可知,定時/計數(shù)器的核心是1個加1計數(shù)器,它的輸入脈沖有兩個來源:一個是外部脈沖信號,通過TO(P3.4)腳或T1(P3.5)輸入;另一個是系統(tǒng)時鐘脈沖(時鐘振蕩器經(jīng)12分頻以后的脈沖信號)。計數(shù)器對兩個脈沖源之一進行計數(shù), 每輸入1個脈沖,計數(shù)值加1,TH0(或TH1)和TLO(或TL1)是用來存放所計脈沖個數(shù)的寄存器。當計數(shù)器計滿回0后,就從最高位溢出1個脈沖,使特殊功能寄存器TCON中的TFO或TF1置1,作為定時/計數(shù)器的溢出中斷標志。 如果定時/計數(shù)器工作在定時功能, 則表示定時的時間到;若工作在計數(shù)功能,則表示計數(shù)器計滿回零。當定時/計數(shù)器處于定時功能,加1計數(shù)器在每個機器周期加 1,因此,也可以把它看作在累計機器周期。由于每個機器周期時間恒定不變, 計數(shù)值也就代表了時間, 這樣就把定時問題轉(zhuǎn)化成了計數(shù)問題。 比如12MHz晶振機器周期是1卩§計5000個脈沖就是5000s16位定時/計數(shù)器的最大定時時間就是 65536&如果定時少于65536 怎么為呢?這就好比一個空的水瓶,要滴1萬滴水才會滴滿溢出, 我們在開始滴水之前先放入一些水, 就不需要1萬滴了。比如先放入2000滴,再滴8000滴就可以把瓶子滴滿。在單片機中,也采用類似的方法,稱為預(yù)置計數(shù)初值法。如果要定時 5000卩$可以讓計數(shù)器從65536-5000=60536開始計數(shù),當定時/計數(shù)器溢出時正好就是5000所以計數(shù)初值就是60536。當定時/計數(shù)器處于計數(shù)功能時,外部脈沖信號加在 T0(P3.4)腳或T1(P3.5)腳。外部信號的下降沿將觸發(fā)計數(shù),若一個周期的采樣值為 1,下1個周期的采樣值為0,則計數(shù)器加1,故識別一個脈沖需要2個機器周期,所以對外部輸入信號的最高計數(shù)速率是機器周期所對應(yīng)頻率的1/2(晶振頻率的1/24)。圖6-13中有2個模擬的位開關(guān),前者決定了定時 /計數(shù)器的功能:當開關(guān)處于上方時為定時功能,處于下方時為計數(shù)功能。工作狀態(tài)的選擇由特殊功能寄存器 TMOD的C/T位來決定。后1個模擬開關(guān)受控制信號的控制, 它決定了脈沖是否加到計數(shù)器輸入端, 即決定了加1計數(shù)器的運行與關(guān)閉。6-14所示。即對內(nèi)部時鐘脈沖計數(shù)就對于定時/6-14所示。即對內(nèi)部時鐘脈沖計數(shù)就定時計數(shù)器\定時計數(shù)器\4硬件電路端口分配I/O端口是單片機對外部電路實現(xiàn)控制和進行信息交換的通路, AT89C51片內(nèi)有4組8位并行I/O端口P0、P1、P2和P3。每組I/O端口均為8位,每位由鎖存器、輸出驅(qū)動器和輸入緩沖器等電路組成。每組I/O端口與特殊功能寄存器中的 P0、P1、P2和P3對應(yīng),片內(nèi)RAM地址為80H90HA0H和B0Ho同時,還可對每組I/O端口進行按位尋址。當用作數(shù)據(jù)輸出時,鎖存器對端口引腳上的數(shù)據(jù)進行鎖存; 當用作輸入時,緩沖器對端口引腳上的數(shù)據(jù)進行緩沖。1)P0口:對應(yīng)P0.0?P0.7。P0口為8位三態(tài)I/O端口,作為通用I/O端口使用,需要加上拉電阻,作為輸入時應(yīng)先把端口的輸出鎖存器置1。當訪問外部擴展存儲器時,可作為地址總線低8位與數(shù)據(jù)總線的分時復(fù)用口。 P0口可驅(qū)動8個TTL負載。P1口:對應(yīng)P1.0?P1.7。P1口為8位準雙向I/O端口,一般作為通用I/O端口使用,內(nèi)部具有上拉電阻,作為輸入端口時應(yīng)先將端口的輸出鎖存器置 1°P1口可驅(qū)動4個TTL負載。P2口:對應(yīng)P2.0?P2.7。P2口為8位準雙向I/O端口,可作為通用I/O端口使用,內(nèi)部具有上拉電阻,作為輸入端口時應(yīng)先將端口的輸出鎖存器置 1。當訪問外部擴展存儲器時,可作為地址總線的高8位使用。P2口可驅(qū)動4個TTL負載。P3口:對應(yīng)P3.0?P3.7。P3口為8位準雙向I/O端口,可作為通用 I/O端口使用,內(nèi)部具有上拉電阻,作為輸入端口時應(yīng)先將端口的輸出鎖存器置 1oP2口可驅(qū)動4個TTL負載。同時它是雙功能復(fù)用口,常使用其第二功能,見表 1-3oP3.0串行輸入口(RXD)P3.1串行輸出口(TXD)P3.2外中斷O(INTO)P3.3外中斷1(INT1)P3.4定時/計數(shù)器0的外部輸入口(T0)P3.5定時/計數(shù)器1的外部輸入口(T1)P3.6外部數(shù)據(jù)存儲器寫選通(WR)P3.7外部數(shù)據(jù)存儲器讀選通(RD5軟件設(shè)計5.1程序#inelude<reg51.h>#ineludevintrins.h>sbitkey1=P1A6;sbitkey2=P1A7;sbitsounder=P3A7;unsignedchareount,count_f,sec,min,hour,alarm_min,alarm_hour;//count和count_f對中斷次數(shù)計數(shù),count控制秒//eount_f控制數(shù)碼管閃爍頻率unsignedcharset; //set對設(shè)置鍵計次,實現(xiàn) 1個鍵多個功能bitflash_m,flash_h,ge_shi,flag_alarm; 〃這3個位變量分別是分鐘閃爍、小時閃爍和〃個位/十位調(diào)整切換的標志位unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0xC7〃0,1,2,3,4,5,6,7,8,9,A,L};delay(unsignedintj){while(j--);}display(){unsignedchari,wk=0x01;unsignedcharbuf[8];if(set==0||set==1||set==2){buf[0]=tab[sec%10];buf[1]=tab[sec/10];buf[2]=0xbf;if(flash_m){buf[3]=0xff;

buf[4]=0xff;}else{buf[3]=tab[min%10];buf[4]=tab[min/10];}buf[5]=0xbf;if(flash_h){buf[6]=0xff;buf[7]=0xff;}else{buf[6]=tab[hour%10]buf[7]=tab[hour/10];}}else 〃顯示鬧鐘時間{buf[6]=tab[11];buf[7]=tab[10];〃顯示子函數(shù)//顯示時、分、秒//分鐘閃爍標志〃小時閃爍標志〃顯示字母L〃顯示字母A(ALARM:鬧鐘的意思)buf[5]=0xff;if(flash_h) //分鐘閃爍標志{buf[3]=0xff;buf[4]=0xff;}else{buf[3]=tab[alarm_hour%10];buf[4]=tab[alarm_hour/10];}buf[2]=0xbf;if(flash_m) 〃小時閃爍標志{buf[0]=0xff;buf[1]=0xff;}else{buf[O]=tab[alarm_min%10];buf[1]=tab[alarm_min/10];}}for(i=0;i<=7;i++){P2=wk;P0=buf[i];delay(100);wk=_crol_(wk,1);P0=0xff;}if(flag_alarm){P2=01;P0=0x7f;delay(100);P0=0xff;}}unsignedcharkeypress() 〃按鍵處理子函數(shù){unsignedchartemp,num;num=15;case0xeecase0xee:num=1;case0xde:num=2;case0xbe:num=3;case0xed:num=4;case0xdd:num=5;case0xbd:num=6;case0xeb:num=7;case0xdb:num=8;case0xbb:num=9;case0xe7:num=0;temp=Oxff;P1=OxfO;if(P1!=OxfO){delay(IOOO);if(P1!=OxfO){P仁OxfO;temp=P1;P仁OxOf;temp=temp|P1;switch(temp){

//判斷是否有按鍵按下//延時去抖〃再次判斷是否有按鍵按下〃行作輸出,列作輸入〃讀取列值〃列作輸出,行作輸入〃讀取行值并和列值合并break;break;break;break;break;break;break;break;break;break;case0xd7:num=10;break;case0xb7:num=11;break;}P仁0xf0;while(P1!=0xf0)display();}}returnnum;}button(){〃返回按鍵號,帶返回值的函數(shù)的應(yīng)用〃按下的是數(shù)字鍵//〃返回按鍵號,帶返回值的函數(shù)的應(yīng)用〃按下的是數(shù)字鍵//小時數(shù)值調(diào)整if(keyNum<10){if(set==1){if(ge_shi){hour=hour/10*10+keyNum;if(hour>23){hour=23;}ge_shi=!ge_shi;}else{if(keyNum<3){hour=keyNum*10+hour%10;ge_shi=!ge_shi;}}}if(set==2) //分鐘數(shù)值調(diào)整{if(ge_shi){min=min/10*10+keyNum;ge_shi=!ge_shi;}else{if(keyNum<6){min=keyNum*10+min%10;ge_shi=!ge_shi;}}}if(set==3) 〃鬧鐘小時數(shù)值調(diào)整{if(ge_shi){alarm_hour=alarm_hour/10*10+keyNum;if(alarm_hour>23){alarm_hour=23;}ge_shi=!ge_shi;}else{if(keyNum<3){alarm_hour=keyNum*10+alarm_hour%10;ge_shi=!ge_shi;}}}if(set==4) 〃鬧鐘分鐘數(shù)值調(diào)整{if(ge_shi){alarm_min=alarm_min/10*10+keyNum;ge_shi=!ge_shi;}elseif(keyNum<6){alarm_min=keyNum*10+alarm_min%10;ge_shi=!ge_shi;}}}if(keyNum==11){//按下的是設(shè)置鍵set=(set+1)%5;flash_m=0;flash_h=0;ge_shi=0;〃0-4,設(shè)置時間時、分和鬧鐘時、分功能//保證分鐘不閃爍時是亮著的//保證小時不閃爍時是亮著的〃保證每次都是先調(diào)整十位再調(diào)整個位}if(keyNum==10){flag_alarm=!flag_alarm;}//鬧鐘開啟和關(guān)閉voidinit(){TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;//初始化函數(shù)TR0=1;}intmain() //主函數(shù){init();sounder=1;while(1){display();button();sounder=0;if(flag_alarm&&alarm_hour==hour&&alarm_min==min){sounder=0;}else{sounder=1;}}}voidtimer_0()interrupt1 //定時器0中斷函數(shù){TH0=0x3c;TL0=0xb0;count++;if(count==20) 〃1秒定時時間到{count=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}}count_f++;if(count_f==4) //控制數(shù)碼和閃爍快慢{count_f=0;switch(set){case1:flash_h=!flash_h;break;case2:flash_m=!flash_m; break;case3:flash_h=!flash_h;break;case4:flash_m=!flash_m; break;}}}Proteus 軟件仿真與實現(xiàn)一、仿真軟件Proteus簡介Proteus軟件是由英國LabcenterElectronics公司開發(fā)的EDA(電子設(shè)計自動化)工具軟件,已有近20年的歷史,在全球得到了廣泛應(yīng)用。 Proteus軟件的功能強大,它集電路設(shè)計、印刷電路板設(shè)計及仿真等多種功能于一身, 軟件提供了大量模擬與數(shù)字元器件及外部設(shè)備,各種虛擬儀器(如電壓表、電流表、示波器、邏輯分析儀、信號發(fā)生器等) ,不僅能夠?qū)﹄姽ぁ㈦娮蛹夹g(shù)學(xué)科涉及的電路進行設(shè)計與分析,還能夠?qū)χ髁鲉纹瑱C進行設(shè)計和仿真,并且功能齊全,界面多彩,是近年來備受電子設(shè)計愛好者青睞的一款新型電子線路設(shè)計與仿真軟件。目前,Proteus仿真系統(tǒng)支持的主流單片機有ARM7、8051/52系列,AVR系列、PIC系列、HC11系列等,它支持的第三方軟件開發(fā)、編譯和調(diào)試環(huán)境有 Keil卩Vision2/3MPLAB等。Proteus軟件和其它電路設(shè)計仿真軟件最大的不同在于它的功能不是單一的,在 Proteus中,從原理圖設(shè)計、單片機編程、系統(tǒng)仿真到 PCB設(shè)計一氣呵成,真正實現(xiàn)了從概念到產(chǎn)品的完整設(shè)計。Proteus從原理圖設(shè)計到PCB設(shè)計,再到電路板完成的流程如圖 1-1所示。圖1-1使用Proteus設(shè)計電路板流程圖Proteus軟件仿真ra.HTfl*3.TWF18nn曰=□0「7X%Z3*G召7a集成開發(fā)軟件KeilC51簡介KEIL是德國開發(fā)的一個51單片機開發(fā)軟件平臺,最開始只是一個支持 C語言和匯編語言的編譯器軟件。后來隨著開發(fā)人員的不斷努力以及版本的不斷升級, 使它已經(jīng)成為了一個重要的單片機開發(fā)平臺,不過 KEIL的界面并不是非常復(fù)雜,操作也不是非常困難,很多工程師的開發(fā)的優(yōu)秀程序都是在 KEIL的平臺上編寫出來的??梢哉f它是一個比較重要的軟件,熟悉他的人很多很多,用戶群極為龐大,相關(guān)的資料也非常豐富, Keil卩V3的啟動界面如圖1-18所示。單片機開發(fā)中除必要的硬件外, 同樣離不開軟件,我們寫的匯編語言源程序要變?yōu)?CPU可以執(zhí)行的機器碼有兩種方法, 一種是手工匯編,另一種是機器匯編,目前已極少使用手工匯編的方法了。機器匯編是通過匯編軟件將源程序變?yōu)闄C器碼, 用于MCS-51單片機的匯編軟件有早期的A51,隨著單片機開發(fā)技術(shù)的不斷發(fā)展, 從普遍使用匯編語言到逐漸使用高級語言開發(fā),單片機的開發(fā)軟件也在不斷發(fā)展, Keil軟件是目前最流行開發(fā) MCS-51系列單片機的軟件,這從近年來各仿真機廠商紛紛宣布全面支持 Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、 庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案, 通過一個集成開發(fā)環(huán)境(uVision)將這些部份組合在一起。掌握這一軟件的使用對于使用 51系列單片機的愛好者來說是十分必要的,如果你使用 C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強大的軟件仿真調(diào)試工具也會令你事半功倍。

IDEforMicrocontrollers圖1-18Keil卩V3IDEforMicrocontrollers圖1-18Keil卩V3的啟動界面Copyright?>1307-ZOO3KellSottwe.me.MlriQhlsreservedINEprogramIfprortecttdbyUSdrnsrn^lQngilaw.Proteus與Keil軟件實現(xiàn)仿真運行在進行模擬電路、數(shù)字電路仿真時,只需點擊仿真運行按鈕 就可以了。仿真單片機應(yīng)用系統(tǒng)時,應(yīng)將應(yīng)用程序目標文件( HEX文件)載入單片機,就好像是燒錄到單片機的程序存儲器。載入目標文件的方法是, 雙擊打開AT89C51的屬性編輯對話框,如圖1-10所示。點擊“Programfile輸入框后面的按鈕□,出現(xiàn)文件選擇對話框,選中并打開本書配套資料中的“仿真實例\1-01”文件夾中的“_1-01.hex”文件,然后點擊“0K按鈕,完成將目標文件載入單片機芯片中,點擊按鈕 就可以看到程序運行的結(jié)果了。圖1-10圖1-10單片機載入目標文件對話框Proteus與Keil軟件實現(xiàn)00~I~IE.ATEKS1rZ£IL*S3^10ZJfAIIS.rfAIZ3.1¥AWfti?盼ACHEt■is■17■ITUMDO口-.'tr>ig^Ap*JVAOf.WADflo.imr30!IMF3.?nurXMTIpm劇眄rariirrnmis-zfW1T12P¥.IFProteus與Keil軟件實現(xiàn)00~I~IE.ATEKS1rZ£IL*S3^10ZJfAIIS.rfAIZ3.1¥AWfti?盼ACHEt■is■17■ITUMDO口-.'tr>ig^Ap*JVAOf.WADflo.imr30!IMF3.?nurXMTIpm劇眄rariirrnmis-zfW1T12P¥.IFAL3I!>■■25■2C!

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論