版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本科畢業(yè)設(shè)計(jì)論文題目基于單片機(jī)的智能調(diào)光燈設(shè)計(jì)專業(yè)名稱自動(dòng)化學(xué)生姓名指導(dǎo)教師畢業(yè)時(shí)間設(shè)計(jì)論文設(shè)計(jì)論文一、題目:基于單片機(jī)的智能調(diào)光燈設(shè)計(jì)二、指導(dǎo)思想和目的要求:通過(guò)畢業(yè)設(shè)計(jì),使學(xué)生對(duì)所學(xué)電子工藝、電路基礎(chǔ)知識(shí)、模電、數(shù)電、等電子基礎(chǔ)課程的基本知識(shí)加深理解,掌握單片機(jī)的基本指令及基本結(jié)構(gòu),并將其與實(shí)際工程應(yīng)用緊密結(jié)合起來(lái),培養(yǎng)創(chuàng)新意識(shí),增強(qiáng)分析問(wèn)題解決問(wèn)題能力,為盡快進(jìn)入社會(huì)角色,熟悉相關(guān)開(kāi)發(fā)工作流程、項(xiàng)目小組組成、分工、合作方式方法等。增強(qiáng)團(tuán)隊(duì)合作意識(shí),提高基本工作技能,為即將踏入社會(huì)奠定理論和實(shí)踐基礎(chǔ)。內(nèi)容:設(shè)計(jì)一電路,不僅亮度可調(diào),還可以顯示時(shí)間等功能。具體要求如下:1)顯示當(dāng)前的時(shí)間,24時(shí)制的時(shí)、分、秒;2)可調(diào)節(jié)時(shí)間;3)可調(diào)節(jié)LED光亮度;步驟:l、了解所設(shè)計(jì)系統(tǒng)的工作原理及要求。2、設(shè)計(jì)單片機(jī)工作的基本電路,如:晶振電路、復(fù)位電路。3、根據(jù)系統(tǒng)設(shè)計(jì)要求選擇發(fā)光二極管、按鍵等模擬部件。4、設(shè)計(jì)系統(tǒng)基本電路。5、繪制PRTUSE電原理圖并編寫系統(tǒng)控制程序。6、聯(lián)機(jī)進(jìn)行系統(tǒng)仿真調(diào)試。 三、進(jìn)度與要求:1.第一周~第一周收集設(shè)計(jì)系統(tǒng)相關(guān)資料。2.第二周~第三周用PROTUSE設(shè)計(jì)硬件原理圖并進(jìn)行器件選型。3.第四周~第六周編寫系統(tǒng)各功能模塊控制程序。4.第七周~第十周聯(lián)機(jī)進(jìn)行系統(tǒng)調(diào)試。5.第十一周~第十二周整理并組織論文。6.第十三周~第十四周完成修改稿,定稿,打印,交評(píng)閱。7.第十五周~第十六周評(píng)閱與答辯學(xué)生屈曉東指導(dǎo)教師李雪霞系主任史儀凱第一章緒論1.1選題意義現(xiàn)代人類生活中所用的幾乎每件有電子器件的產(chǎn)品中都會(huì)集成有單片機(jī)。手機(jī)、電話、計(jì)算器、家用電器、電子玩具、掌上電腦以及鼠標(biāo)等電子產(chǎn)品中都含有單片機(jī)。智能燈不是傳統(tǒng)燈具,而是智能設(shè)備的一種,除了智能燈體,還有一個(gè)手持智能控制設(shè)備,智能燈控制設(shè)備具備計(jì)算能力和網(wǎng)絡(luò)聯(lián)接能力,通過(guò)應(yīng)用程序,功能可以不斷擴(kuò)展。智能燈的核心功能是控制、燈光效果、創(chuàng)作、分享、光與音樂(lè)互動(dòng)、光提升健康和幸福。開(kāi)關(guān)燈的控制,不但可以通過(guò)控制器,手動(dòng)遙控?zé)舻拈_(kāi)關(guān),還可以進(jìn)行定時(shí)開(kāi)關(guān)燈的控制,可以設(shè)定不同的時(shí)間開(kāi)燈關(guān)燈。其次是對(duì)光的控制,光的亮度,光的冷暖,光的色彩都可以連續(xù)手動(dòng)控制或自動(dòng)控制。白熾燈和金鹵燈在調(diào)光領(lǐng)域應(yīng)用得比較廣泛,但隨著節(jié)能減排的不斷推廣,LED可調(diào)光在攻克了調(diào)光技術(shù)障礙后,開(kāi)始呈現(xiàn)發(fā)展趨勢(shì),LED可調(diào)光與LED紅外智能燈管、LED聲光控等一起統(tǒng)稱為L(zhǎng)ED智能化系列,在LED普通燈具價(jià)格競(jìng)爭(zhēng)日趨激烈的今天,LED智能化已經(jīng)成為大型LED照明企業(yè)的發(fā)展方向。電子鐘已成為人們?nèi)粘I钪斜夭豢缮俚奈锲?,廣泛用于個(gè)人家庭以及車站、碼頭、劇院、辦公室等公共場(chǎng)所,給人們的生活、學(xué)習(xí)、工作、娛樂(lè)帶來(lái)極大的方便。隨著技術(shù)的發(fā)展,人們已不再滿足于鐘表原先簡(jiǎn)單的報(bào)時(shí)功能,希望出現(xiàn)一些新的功能,諸如日歷的顯示、鬧鐘的非接觸式止鬧跑表功能、重要日期倒計(jì)時(shí)顯示等,以帶來(lái)更大的方便,而所有這些,又都是以數(shù)字化的電子時(shí)鐘為基礎(chǔ)的。因此,研究實(shí)用電子鐘的應(yīng)用,有著非?,F(xiàn)實(shí)的意義,具有很大的實(shí)用價(jià)值。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進(jìn)的石英技術(shù),使電子鐘具有走時(shí)準(zhǔn)確、性能穩(wěn)定、攜帶方便等優(yōu)點(diǎn),它還用于計(jì)時(shí)、自動(dòng)報(bào)時(shí)及自動(dòng)控制等各個(gè)領(lǐng)域?,F(xiàn)在市場(chǎng)上已有現(xiàn)成的電子鐘集成電路芯片出售,價(jià)格便宜,使用也靈活,如可以隨意設(shè)置時(shí)、分、秒的輸出,改變顯示數(shù)字的大小等,并且由于集成電路技術(shù)的發(fā)展,特別是MOS集成電路技術(shù)的發(fā)展,使電子鐘具有體積小、攜帶方便的特點(diǎn),這里介紹的實(shí)用電子鐘可以滿足使用者的一些基本要求,輸出方式靈活、功耗低、計(jì)時(shí)準(zhǔn)確、性能穩(wěn)定、維護(hù)方便等優(yōu)點(diǎn)。實(shí)用電子鐘是一個(gè)時(shí)間控制系統(tǒng),既能作為一般的時(shí)間顯示器,也可作為一個(gè)定時(shí)控制器,驅(qū)動(dòng)負(fù)載或顯示信息,同時(shí)可以根據(jù)需要擴(kuò)展其功能。在此項(xiàng)目的設(shè)計(jì)研究過(guò)程中需綜合運(yùn)用所學(xué)的數(shù)字電子技術(shù)、單片機(jī)原理與應(yīng)用等課程的知識(shí),掌握實(shí)用電子鐘的設(shè)計(jì)、組裝與調(diào)試方法,利用現(xiàn)代的單片機(jī)等新電子技術(shù)以及現(xiàn)代的設(shè)計(jì)手段,系統(tǒng)地培養(yǎng)了綜合設(shè)計(jì)、操作調(diào)試、故障處理的能力,達(dá)到綜合素質(zhì)以及創(chuàng)新能力的提高。1.2設(shè)計(jì)要求1.2.1功能實(shí)現(xiàn)(1)LED調(diào)光燈功能:當(dāng)按下按鍵K0、K1、K2分為一級(jí)亮度紅燈、二級(jí)亮度黃燈和三級(jí)亮度綠燈來(lái)實(shí)現(xiàn)。(2)時(shí)間、日期顯示:系統(tǒng)采用24小時(shí)制。正常情況下,系統(tǒng)顯示當(dāng)前日期、時(shí)間,由LCD顯示。(3)設(shè)置功能:用戶可以對(duì)LED燈光的亮度進(jìn)行調(diào)節(jié),對(duì)時(shí)間、日期、星期進(jìn)行設(shè)置。用戶依次進(jìn)入日期設(shè)置、星期設(shè)置、時(shí)間設(shè)置。在進(jìn)行設(shè)置時(shí),光標(biāo)停留在相應(yīng)位,按下K4鍵、K5鍵對(duì)數(shù)值進(jìn)行加、減調(diào)整。通過(guò)K3鍵,在各個(gè)數(shù)位間移動(dòng)。 通過(guò)K6鍵,確定所設(shè)置的時(shí)間。1.2.2系統(tǒng)所需功能模塊 由功能分析,臺(tái)燈系統(tǒng)分為燈光模塊、鍵盤模塊、顯示模塊、時(shí)鐘部分、電源模塊和單片機(jī)模塊,考慮成本時(shí)鐘模塊可由單片機(jī)內(nèi)部計(jì)數(shù)器模擬實(shí)現(xiàn)。(1)燈光模塊用D0~D12個(gè)LED燈實(shí)現(xiàn)。(2)按鍵模塊分為調(diào)光3個(gè)按鍵和調(diào)節(jié)時(shí)間4個(gè)按鍵,分別是K0、K1、K2和K3、K4、K5、K6。(3)顯示模塊負(fù)責(zé)顯示系統(tǒng)的日期、星期、時(shí)間。(4)電源模塊采用+5V直流供電。(5)單片機(jī)模塊內(nèi)部計(jì)數(shù)器負(fù)責(zé)LED燈光和時(shí)鐘,通過(guò)程序模擬生成亮度調(diào)節(jié)和時(shí)間走時(shí)。同時(shí)負(fù)責(zé)掃描鍵盤,并將時(shí)間送給LCD顯示。1.3系統(tǒng)基本方案選擇和論證1.3.1單片機(jī)芯片的選擇方案和論證方案一:采用STC89C52芯片作為硬件核心,采用FlashROM,內(nèi)部具有4KBROM存儲(chǔ)空間,能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備ISP在線編程技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對(duì)芯片的多次拔插會(huì)對(duì)芯片造成一定的損壞。方案二:采用AT89C52,片內(nèi)ROM全都采用FlashROM;能以3V的超底壓工作;同時(shí)也與MCS-51系列單片機(jī)完全該芯片內(nèi)部存儲(chǔ)器為8KBROM存儲(chǔ)空間,同樣具有STC89C52的功能,且具有在線編程可擦除技術(shù),對(duì)所下載的程序能夠加密,比較安全。當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),不需要對(duì)芯片多次拔插,所以不會(huì)對(duì)芯片造成損壞。所以選擇采用AT89C52作為主控制系統(tǒng)。1.3.2顯示模塊選擇方案和論證方案一:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以不用此種作為顯示。方案二:采用LED數(shù)碼管動(dòng)態(tài)掃描,雖然LED數(shù)碼管價(jià)格適中,但要顯示多個(gè)數(shù)字所需要的個(gè)數(shù)偏多,功耗較大,所以也不用此種作為顯示。方案三:采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見(jiàn),與普通數(shù)碼管相比功耗較小,硬件連接簡(jiǎn)單。所以顯示部分采用1602液晶顯示。1.3.3時(shí)鐘芯片的選擇方案和論證方案一:直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大。所以不采用此方案。方案二:采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,DS1302芯片是一種高性能的時(shí)鐘芯片,可自動(dòng)對(duì)秒、分、時(shí)、周、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù),而且精度高,RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時(shí)耗電小于300nA。第二章系統(tǒng)的硬件設(shè)計(jì)2.1系統(tǒng)模塊框圖六大模塊以AT89C52單片機(jī)為控制核心,實(shí)現(xiàn)了該智能臺(tái)燈的各項(xiàng)要求,外接一個(gè)5V的直流電源,為整個(gè)系統(tǒng)供電。圖2-1系統(tǒng)結(jié)構(gòu)示意圖2.2系統(tǒng)整體硬件圖該設(shè)計(jì)是以AT89C52單片機(jī)為控制核心的集多種功能于一體的智能LED臺(tái)燈。該臺(tái)燈具有燈光亮度調(diào)節(jié)功能;具有時(shí)間顯示功能。硬件設(shè)計(jì)分為單片機(jī)控制模塊、按鍵模塊、臺(tái)燈模塊、時(shí)鐘模塊、鬧鈴模塊、顯示模塊等五個(gè)部分。單片機(jī)控制用AT89C52,顯示模塊用LCD1602液晶顯示、時(shí)間、日期等內(nèi)容,按鍵模塊用來(lái)調(diào)整時(shí)間、日期、LED的亮度等,時(shí)鐘用DS1302時(shí)鐘芯片,臺(tái)燈模塊用13顆LED,通過(guò)按鍵K0、K1、K2調(diào)節(jié)燈光的亮度,分為一級(jí)亮度、二級(jí)亮度和三級(jí)亮度。圖2-2系統(tǒng)整體硬件圖2.3各模塊電路的設(shè)計(jì)2.3.1單片機(jī)控制模塊單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的微型計(jì)算機(jī)系統(tǒng),在工業(yè)控制領(lǐng)域廣泛應(yīng)用。從上世紀(jì)80年代,由當(dāng)時(shí)的4位、8位單片機(jī),發(fā)展到現(xiàn)在的300M的高速單片機(jī)。AT89C52單片機(jī)為40引腳雙列直插芯片,有四個(gè)I/O口P0,P1,P2,P3,MCS-51單片機(jī)共有4個(gè)8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨(dú)立地作輸出或輸入。圖2-3AT89C52單片機(jī)控制模塊2.3.2晶振/復(fù)位模塊晶振是晶體振蕩器的簡(jiǎn)稱,在電氣上它可以等效成一個(gè)電容和一個(gè)電阻并聯(lián)再串聯(lián)一個(gè)電容的二端網(wǎng)絡(luò),電工學(xué)上這個(gè)網(wǎng)絡(luò)有兩個(gè)諧振點(diǎn),以頻率的高低分其中較低的頻率是串聯(lián)諧振,較高的頻率是并聯(lián)諧振。由于晶體自身的特性致使這兩個(gè)頻率的距離相當(dāng)?shù)慕咏?在這個(gè)極窄的頻率范圍內(nèi),晶振等效為一個(gè)電感,所以只要晶振的兩端并聯(lián)上合適的電容它就會(huì)組成并聯(lián)諧振電路。晶振是給單片機(jī)提供工作信號(hào)脈沖的。這個(gè)脈沖就是單片機(jī)的工作速度。單片機(jī)的工作頻率是有范圍的,不能太大。圖中19與18引腳分別為XTAL1、XTAL2,他們分別接晶振的輸入與輸出,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.因?yàn)橐粋€(gè)機(jī)器周期含有6個(gè)狀態(tài)周期,而每個(gè)狀態(tài)周期為2個(gè)振蕩周期,所以一個(gè)機(jī)器周期共有12個(gè)振蕩周期。本設(shè)計(jì)選擇晶振頻率為12MHz,輸入芯片震蕩周期為1/12μs,一個(gè)機(jī)器周期為1μs。圖2-4晶振電路模塊復(fù)位電路,就是利用它把電路恢復(fù)到起始狀態(tài)。就像計(jì)算器的清零按鈕的作用一樣,以便回到原始狀態(tài),重新進(jìn)行計(jì)算。和計(jì)算器清零按鈕有所不同的是,復(fù)位電路啟動(dòng)的手段有所不同。一是在給電路通電時(shí)馬上進(jìn)行復(fù)位操作;二是在必要時(shí)可以由手動(dòng)操作;三是根據(jù)程序或者電路運(yùn)行的需要自動(dòng)地進(jìn)行。在RST復(fù)位輸入引腳上接一電容至Vcc端,下接一個(gè)電阻到地即可。復(fù)位電路工作原理如下圖所示,Vcc上電時(shí),C3充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位;幾個(gè)毫秒后,C3充滿,10K電阻上電流降為0,電壓也為0,使得單片機(jī)進(jìn)入工作狀態(tài)。工作期間,按下K7,C3放電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位。K7松手,C3又充電,幾個(gè)毫秒后,單片機(jī)進(jìn)入工作狀態(tài)。第9引腳為復(fù)位輸入端,接上電容,電阻及開(kāi)關(guān)后夠上電復(fù)位電路。圖2-5復(fù)位電路模塊2.3.3臺(tái)燈模塊臺(tái)燈模塊用13顆LED作為發(fā)光系統(tǒng),每一顆和一個(gè)220的電阻串聯(lián),用P1.4~P1.6口控制。電阻起限流作用,13個(gè)I/O均采用低電平有效方式,即給相應(yīng)的I/O低電平LED工作。通過(guò)按鍵K0、K1、K2調(diào)節(jié)燈光的亮度,亮度分為三個(gè)等級(jí):一級(jí)亮度控制紅色的D0燈亮;二級(jí)亮度控制黃色的D1、D2、D3、D4燈亮;三級(jí)亮度控制綠色的D5、D6、D7、D8、D9、D10、D11、D12燈亮。圖2-6臺(tái)燈模塊(1)圖2-7臺(tái)燈模塊(2)2.3.4臺(tái)燈調(diào)光按鍵模塊圖2-8臺(tái)燈按鍵模塊按鍵K0、K1、K2用來(lái)調(diào)節(jié)臺(tái)燈的亮度,通過(guò)按下按鍵K0可以讓臺(tái)燈變亮,按下按鍵K1可以讓臺(tái)燈變的更亮,按下按鍵K2可以讓臺(tái)燈燈光達(dá)到最亮。3個(gè)I/O均采用低電平有效方式。2.3.5DS1302時(shí)鐘電路模塊下圖示出DS1302的引腳排列圖,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電動(dòng)行時(shí),在Vcc大于等于2.5V之前,RST必須保持低電平。中有在SCLK為低電平時(shí),才能將RST置為高電平,I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。表1DS1302引腳功能表引腳號(hào)引腳名稱功能1VCC2主電源2、3X1、X2振蕩源,外接32768Hz晶振4GND地線5RST復(fù)位/片選線6I/O串行數(shù)據(jù)輸入/輸出端(雙向)7SCLK串行時(shí)鐘輸入端8VCC1后備電源DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置“0”,接著把RST端置“1”,最后才給予SCLK脈沖。DS1302的控制字,此控制字的位7必須置1,若為0則不能把對(duì)DS1302進(jìn)行讀寫數(shù)據(jù)。對(duì)于位6,若對(duì)程序進(jìn)行讀/寫時(shí)RAM=1,對(duì)時(shí)間進(jìn)行讀/寫時(shí),CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí),該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開(kāi)始輸入/輸出的。DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開(kāi)始運(yùn)行?!癢P”是寫保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫操作之前,“WP”必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。圖2-9DS1302時(shí)鐘電路模塊2.3.61602LCD顯示模塊字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。1602LCD分為背光和不帶背光兩種,基控制大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無(wú)差別,引腳功能說(shuō)明:表21602LCD功能表編號(hào)符號(hào)引腳說(shuō)明編號(hào)符號(hào)引腳說(shuō)明1Vss電源地9D2數(shù)據(jù)口2Vcc電源正極10D3數(shù)據(jù)口3VO液晶顯示對(duì)比度調(diào)節(jié)端11D4數(shù)據(jù)口4RS數(shù)據(jù)/命令選擇端(H/L)12D5數(shù)據(jù)口5R/W讀寫選擇端(H/L)13D6數(shù)據(jù)口6E能使信號(hào)14D7數(shù)據(jù)口7D0數(shù)據(jù)口15BLA背光電源正極8D1數(shù)據(jù)口16BLK背光電源負(fù)極1602LCD采用標(biāo)準(zhǔn)的14腳(無(wú)背光)或16腳(帶背光)接口,各引腳接口說(shuō)明如表2所示:第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VEE為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄器。第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。1602LCD的一般初始化(復(fù)位)過(guò)程延時(shí)15mS寫指令38H(不檢測(cè)忙信號(hào))延時(shí)5mS寫指令38H(不檢測(cè)忙信號(hào))延時(shí)5mS寫指令38H(不檢測(cè)忙信號(hào))以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)寫指令38H:顯示模式設(shè)置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置寫指令0CH:顯示開(kāi)及光標(biāo)設(shè)置LCD1602液晶顯示,如下圖所示:圖2-101602LCD顯示模塊2.3.7調(diào)節(jié)時(shí)鐘按鍵模塊因?yàn)橛心暝氯?,時(shí)分秒幾個(gè)參數(shù)要調(diào),所以設(shè)置這幾個(gè)參數(shù)的計(jì)數(shù)。當(dāng)按下一個(gè)鍵時(shí),單片機(jī)進(jìn)行相應(yīng)的操作。根據(jù)設(shè)計(jì)要求需要選擇四個(gè)獨(dú)立按鍵分別為選擇、加、減、確定,按鍵用來(lái)調(diào)整時(shí)間和設(shè)置鬧鐘,調(diào)光亮度,各鍵功能在介紹硬件部分已描述。按鍵模塊下圖所示:圖2-11調(diào)節(jié)時(shí)鐘按鍵模塊第三章系統(tǒng)的軟件設(shè)計(jì)3.1系統(tǒng)軟件編程工具C和C++3.1.1C簡(jiǎn)介C語(yǔ)言是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,它既具有高級(jí)語(yǔ)言的特點(diǎn),又具有匯編語(yǔ)言的特點(diǎn)。它可以作為工作系統(tǒng)設(shè)計(jì)語(yǔ)言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語(yǔ)言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,不僅僅是在軟件開(kāi)發(fā)上,而且各類科研都需要用到C語(yǔ)言,適于編寫系統(tǒng)軟件、三維、二維圖形和動(dòng)畫,具體應(yīng)用例如單片機(jī)以及嵌入式系統(tǒng)開(kāi)發(fā)。C程序是由一組變量或是函數(shù)的外部對(duì)象組成的。函數(shù)是一個(gè)自我包含的完成一定相關(guān)功能的執(zhí)行代碼段。我們可以把函數(shù)看成一個(gè)“黑盒子”,你只要將數(shù)據(jù)送進(jìn)去就能得到結(jié)果,而函數(shù)內(nèi)部究竟是如何工作的的,外部程序是不知道的。外部程序所知道的僅限于輸入給函數(shù)什么以及函數(shù)輸出什么。函數(shù)提供了編制程序的手段,使之容易讀、寫、理解、排除錯(cuò)誤、修改和維護(hù)。C程序中函數(shù)的數(shù)目實(shí)際上是不限的,如果說(shuō)有什么限制的話,那就是,一個(gè)C程序中必須至少有一個(gè)函數(shù),而且其中必須有一個(gè)并且僅有一個(gè)以main為名,這個(gè)函數(shù)稱為主函數(shù),整個(gè)程序從這個(gè)主函數(shù)開(kāi)始執(zhí)行。C語(yǔ)言程序鼓勵(lì)和提倡人們把一個(gè)大問(wèn)題劃分成一個(gè)個(gè)子問(wèn)題,對(duì)應(yīng)于解決一個(gè)子問(wèn)題編制一個(gè)函數(shù),因此,C語(yǔ)言程序一般是由大量的小函數(shù)而不是由少量大函數(shù)構(gòu)成的,即所謂“小函數(shù)構(gòu)成大程序”。這樣的好處是讓各部分相互充分獨(dú)立,并且任務(wù)單一。因而這些充分獨(dú)立的小模塊也可以作為一種固定規(guī)格的小“構(gòu)件”,用來(lái)構(gòu)成新的大程序。 3.1.2C++C++是在C語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)的一種集面向?qū)ο缶幊?、泛型編程和過(guò)程化編程于一體的編程語(yǔ)言。應(yīng)用較為廣泛,是一種靜態(tài)數(shù)據(jù)類型檢查的,支持多重編程的通用程序設(shè)計(jì)語(yǔ)言。它支持過(guò)程化程序設(shè)計(jì),數(shù)據(jù)抽象,面向?qū)ο笤O(shè)計(jì),制作圖標(biāo)等多種程序設(shè)計(jì)風(fēng)格。在操作系統(tǒng)和系統(tǒng)使用程序以及需要對(duì)硬件進(jìn)行操作的場(chǎng)合,用C語(yǔ)言明顯優(yōu)于其它高級(jí)語(yǔ)言,但在編寫大型程序時(shí),C語(yǔ)言仍面臨著挑戰(zhàn)。C語(yǔ)言是C++的基礎(chǔ),C++和C語(yǔ)言在很多方面是兼容的。C語(yǔ)言是一個(gè)結(jié)構(gòu)化語(yǔ)言,它的重點(diǎn)在于算法與數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過(guò)一個(gè)過(guò)程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過(guò)程(事物)控制)。C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問(wèn)題域,這樣就可以通過(guò)獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過(guò)程(事物)控制。所以C語(yǔ)言和C++的最大區(qū)別在于它們解決問(wèn)題的思想方法不一樣。C++語(yǔ)言的主要特點(diǎn)表現(xiàn)在兩個(gè)方面,一是盡量兼容C,二是支持面向?qū)ο蟮姆椒?。它操持了C的簡(jiǎn)潔、高效的接近匯編語(yǔ)言等特點(diǎn),對(duì)C的類型系統(tǒng)進(jìn)行了改革的擴(kuò)充,因此C++比C更安全,C++的編譯系統(tǒng)能檢查出更多的類型錯(cuò)誤。另外,由于C語(yǔ)言的廣泛使用,因而極大的促進(jìn)了C++的普及和推廣。C++由四個(gè)“子語(yǔ)言”組成:C子語(yǔ)言,C++支持C語(yǔ)言的幾乎全部功能,主要是c89的部分,在語(yǔ)法上與C語(yǔ)言僅有極微妙的差別(如括號(hào)表達(dá)式的左右值性,具體請(qǐng)參考C++標(biāo)準(zhǔn)文獻(xiàn))。這部分功能對(duì)應(yīng)于傳統(tǒng)的面向過(guò)程的編程泛型,并提供了面向函數(shù)編程泛型的基礎(chǔ)。面向?qū)ο蟮腃++語(yǔ)言,C++語(yǔ)言原本不具備面向?qū)ο蟮脑O(shè)計(jì)功能,然而隨著面向?qū)ο缶幊痰母拍畹钠占?,C++語(yǔ)言也開(kāi)發(fā)出了支持面向?qū)ο蠊δ艿陌姹?。這部分功能對(duì)應(yīng)于面向?qū)ο蟮木幊谭盒?。泛型編程語(yǔ)言,C++強(qiáng)大(但容易失控的)模板功能使它能在編譯期完成許多工作,從而大大提高運(yùn)行期效率,并且大大提高了C++的表達(dá)能力。STL(C++標(biāo)準(zhǔn)模板庫(kù),StandardTemplateLibrary)是一個(gè)基于模板技術(shù)的庫(kù)。隨著STL的不斷發(fā)展,它已經(jīng)逐漸成為C++程序設(shè)計(jì)中不可或缺的部分,其效率可能比一般的native代碼低些,但是其安全性與規(guī)范性使它大受歡迎。模板使C++能夠支持泛型編程(genericprogramming)和生成式編程(generativeprogramming)的泛型。在C++0X中引入的Lambda,使得程序員可以定義匿名函數(shù),完善了C++對(duì)于面向函數(shù)的編程泛型的支持。3.2主程序的設(shè)計(jì)流程圖圖3-1主程序流程圖一給單片機(jī)上電,單片機(jī)就初始化。通過(guò)接收并處理,有人按下開(kāi)關(guān)就工作。然后檢開(kāi)始LED工作顯示時(shí)間、日期,按鍵按下,修正時(shí)間,設(shè)置鬧鐘系統(tǒng)初始化測(cè)按鍵是否按下,判斷工作在那個(gè)模式下。液晶還顯示當(dāng)前的時(shí)間,日期,最后進(jìn)入循環(huán)。3.3臺(tái)燈模塊編程 3.3.1臺(tái)燈模塊流程圖該模塊只需給LED紅燈D0的P1.4口、黃燈D1到D4的P1.5口和綠燈D5到D12的P1.6口送低電平即可,再通過(guò)按鍵K0、K1、K2調(diào)LED燈光亮度。圖3-2臺(tái)燈模塊流程圖3.3.2臺(tái)燈模塊程序#include<AT89X51.H>sbitK0=P2^5;//調(diào)光燈亮度等級(jí)開(kāi)關(guān)I/O口分配sbitK1=P2^6;sbitK2=P2^7;sbitD0=P1^4;//LED燈I/O口分配sbitD1=P1^5;sbitD2=P1^5;sbitD3=P1^5;sbitD4=P1^5;sbitD5=P1^6;sbitD6=P1^6;sbitD7=P1^6;sbitD8=P1^6;sbitD9=P1^6;sbitD10=P1^6;sbitD11=P1^6;sbitD12=P1^6;voidmain()//主程序{while(1){if(K0==0)//一級(jí)亮度調(diào)光開(kāi)關(guān)被按下{D0=0;//D3燈亮}else{D0=1;//D3燈滅}if(K1==0)//二級(jí)亮度調(diào)光開(kāi)關(guān)被按下{D1=0;//D1,D2,D3,D4燈亮D2=0;D3=0;D4=0;}else{D1=1;//D1,D2,D3,D4燈滅D2=1;D3=1;D4=1;}if(K2==0)//三級(jí)亮度調(diào)光開(kāi)關(guān)被按下{D5=0;//D5,D6,D7,D8,D9,D10,D11,D12燈亮D6=0;D7=0;D8=0;D9=0;D10=0;D11=0;D12=0;}else{D5=1;//D5,D6,D7,D8,D9,D10,D11,D12燈滅D6=1;D7=1;D8=1;D9=1;D10=1;D11=1;D12=1;}}}3.4LCD1602液晶顯示3.4.1時(shí)鐘設(shè)置流程圖調(diào)整時(shí)間用4個(gè)調(diào)整按鈕,1個(gè)作為選擇控制用,另外3個(gè)分別作為加調(diào)整,減調(diào)整和確定用。圖3-3時(shí)鐘設(shè)置流程圖3.4.2時(shí)鐘程序#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitRS=P2^0; //LCD寄存器選擇sbitRW=P2^1; //LCD讀寫控制sbitEN=P2^2; // LCD啟動(dòng)//*延時(shí)子程序*//voidDelayMS(uintK){uchari;while(K--){ for(i=0;i<120;i++); }}//*讀取LCD的狀態(tài)*//ucharRead_LCD_State(){ucharstate;RS=0;RW=1;EN=1;DelayMS(2);state=P0;EN=0;DelayMS(2);returnstate;}//*忙檢查*//voidLCD_Busy_Wait(){while((Read_LCD_State()&0x80)==0x80); DelayMS(5);}//*寫LCD命令*//voidWrite_LCD_Command(ucharcmd){LCD_Busy_Wait();RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(2);EN=0;}//*向LCD寫入數(shù)據(jù)*//voidWrite_LCD_Data(uchardat){LCD_Busy_Wait();RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(2);EN=0;}//*LCD初始化*//voidInitialize_LCD1602()//液晶初始化函數(shù){Write_LCD_Command(0x38);DelayMS(2); //功能設(shè)置,數(shù)據(jù)長(zhǎng)度為8位,雙行顯示,5×7點(diǎn)陣字體Write_LCD_Command(0x01);DelayMS(2); //清屏Write_LCD_Command(0x06);DelayMS(2);//字符進(jìn)入模式:屏幕不動(dòng),字符后移Write_LCD_Command(0x0c);DelayMS(2); //顯示開(kāi),關(guān)光標(biāo)}//*設(shè)置液晶顯示位置*//voidSet_LCD_Position(ucharpos){Write_LCD_Command(pos|0x80); //設(shè)置7位的DDRAM地址值}//*在LCD上顯示字符串*//voidLCD_Display(ucharp,uchar*str){uchari;Set_LCD_Position(p);for(i=0;i<16;i++){ Write_LCD_Data(str[i]); DelayMS(2); }}//*main.c源程序*////*用DS1302和1602液晶顯示的實(shí)時(shí)時(shí)鐘*//#include<reg51.h>#include<string.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintvoidInitialize_LCD1602();//液晶初始化函數(shù)voidLCD_Display(ucharp,uchar*str);sbitSDA=P1^0; //DS1302數(shù)據(jù)線sbitCLK=P1^1; //DS1302時(shí)鐘線sbitRST=P1^2; //DS1302 復(fù)位線sbitk1=P3^4; //選擇按鍵sbitk2=P3^5; //加sbitk3=P3^6; // 減sbitk4=P3^7; // 確定uchartcount=0; ucharMonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};//一年中每個(gè)月的天數(shù),二月的天數(shù)由年份決定uchar*Week[]={"SUN","MON","TUS","WEN","THU","FRI","SAT"};//周日,周一到周六//LCD顯示緩沖ucharLCD_DSY_BUFFER1[]={"DATE00-00-00"};ucharLCD_DSY_BUFFER2[]={"TIME00:00:00"};ucharDateTime[7];//所讀取的日期時(shí)間charAdjust_Index=-1;//當(dāng)前調(diào)節(jié)的時(shí)間對(duì)象:秒,分,時(shí),日,月,年(0,1,2,3,4,6)ucharChange_Flag[]="-MHDM-Y";//(分,時(shí),日,月,年)不調(diào)節(jié)秒和周//函數(shù)聲明voidWrite_Byte_TO_DS1302(ucharX);//向DS1302寫入一個(gè)字節(jié)ucharRead_Byte_FROM_DS1302(); //從DS1302中讀取一個(gè)字節(jié)ucharRead_Data_FROM_DS1302(ucharaddr);//從DS1302指定位置讀取數(shù)據(jù) ,讀數(shù)據(jù)voidWrite_Data_TO_DS1302(ucharaddr,uchardat);//向DS1302指定位置寫入數(shù)據(jù),寫數(shù)據(jù)voidSET_DS1302(); //設(shè)置時(shí)間voidGetTime(); //讀取當(dāng)前時(shí)間voidInitialization();//初始化函數(shù)//*主程序*//voidmain(){Initialization();while(1){ if(Adjust_Index==-1) GetTime(); }}//*初始化函數(shù)*//voidInitialization(){Initialize_LCD1602();//調(diào)用液晶初始化函數(shù)IE=0x83; //允許中斷外部0中斷和T0中斷IP=0x01; // 設(shè)置中斷優(yōu)先級(jí)IT0=0x01; // 設(shè)置外部中斷的脈沖觸發(fā)方式TMOD=0x01;//設(shè)置定時(shí)器的工作方式,為方式1TH0=-50000/256;//寫入初值TL0=-50000%256;//寫入初值TR0=1;// 啟動(dòng)定時(shí)器}//*寫字節(jié)函數(shù),向DS1302寫入一個(gè)字節(jié)*//voidWrite_Byte_TO_DS1302(ucharX)//向DS1302寫入一個(gè)字節(jié){uchari; for(i=0;i<8;i++) { SDA=X&1; CLK=1; CLK=0; X>>=1; }}//*讀字節(jié)函數(shù),從DS1302讀取一個(gè)字節(jié)*//ucharRead_Byte_FROM_DS1302() //從DS1302中讀取一個(gè)字節(jié){uchari,byte,t;for(i=0;i<8;i++){ byte>>=1; t=SDA; byte|=t<<7; CLK=1; CLK=0; }////BCD碼轉(zhuǎn)換// returnbyte/16*10+byte%16;}////從DS1302指定位置讀取數(shù)據(jù),讀數(shù)據(jù)//ucharRead_Data_FROM_DS1302(ucharaddr)//從DS1302指定位置讀取數(shù)據(jù) ,讀數(shù)據(jù){uchardat; RST=0; CLK=0; RST=1; Write_Byte_TO_DS1302(addr);//向DS1302寫入一個(gè)地址 dat=Read_Byte_FROM_DS1302();//在上面寫入的地址中讀取數(shù)據(jù) CLK=1; RST=0; returndat;}////向DS1302指定位置寫入數(shù)據(jù),寫數(shù)據(jù)//voidWrite_Data_TO_DS1302(ucharaddr,uchardat)//向DS1302指定位置寫入數(shù)據(jù),寫數(shù)據(jù){CLK=0; RST=1; Write_Byte_TO_DS1302(addr); Write_Byte_TO_DS1302(dat); CLK=1; RST=0;}////設(shè)置時(shí)間//voidSET_DS1302() //設(shè)置時(shí)間{uchari;Write_Data_TO_DS1302(0x8E,0x00);//寫控制字,取消寫保護(hù)//分,時(shí),日,月,年依次寫入for(i=1;i<7;i++){ //分的起始地址是10000010(0x82),后面依次是時(shí),日,月,周,年,寫入地址每次遞增2 Write_Data_TO_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i]%10)); }Write_Data_TO_DS1302(0x8E,0x80);//寫控制字,加寫保護(hù)}////讀取當(dāng)前時(shí)間//voidGetTime() //讀取當(dāng)前時(shí)間{uchari;for(i=0;i<7;i++){ DateTime[i]=Read_Data_FROM_DS1302(0x81+2*i); }}////日期與時(shí)間值轉(zhuǎn)換為數(shù)字字符//voidFormat_DateTime(uchard,uchar*a){ a[0]=d/10+'0'; a[1]=d%10+'0';}////判斷是否為閏年//ucharIs_Leapyear(uintyear){return(year%4==0&&year%100!=0)||(year%400==0);}//// 求自2000.1.1開(kāi)始的任何一天是星期幾?//voidRefresh_Week_Day(){uinti,d,w=5;//已知1999年12.31是星期五for(i=2000;i<2000+DateTime[6];i++){ d=Is_Leapyear(i)?366:365; w=(w+d)%7; }d=0;for(i=1;i<DateTime[4];i++){d+=MonthsDays[i];}d+=DateTime[3];//保存星期,0-6表示星期日,星期一至星期六,為了與DS1302的星期格式匹配,返回值需要加1DateTime[5]=(w+d)%7+1;}////年,月,日和時(shí),分++/--//voidDatetime_Adjust(charX){switch(Adjust_Index){ case6: //年調(diào)整,00-99 if(X==1&&DateTime[6]<99) { DateTime[6]++; } if(X==-1&&DateTime[6]>0) { DateTime[6]--; } //獲取2月天數(shù) MonthsDays[2]=Is_Leapyear(2000+DateTime[6])?29:28; //如果年份變化后當(dāng)前月份的天數(shù)大于上限則設(shè)為上限 if(DateTime[3]>MonthsDays[DateTime[4]]) { DateTime[3]=MonthsDays[DateTime[4]]; } Refresh_Week_Day();//刷新星期 break; case4://月調(diào)整01-12 if(X==1&&DateTime[4]<12) { DateTime[4]++; } if(X==-1&&DateTime[4]>1) { DateTime[4]--; } //獲取2月天數(shù) MonthsDays[2]=Is_Leapyear(2000+DateTime[6])?29:28; //如果年份變化后當(dāng)前月份的天數(shù)大于上限則設(shè)為上限 if(DateTime[3]>MonthsDays[DateTime[4]]) { DateTime[3]=MonthsDays[DateTime[4]]; } Refresh_Week_Day();//刷新星期 break; case3: // 日調(diào)整00-28或00-29或00-30或00-31 //調(diào)節(jié)之前首先根據(jù)當(dāng)前年份得出該年中2月的天數(shù) MonthsDays[2]=Is_Leapyear(2000+DateTime[6])?29:28; //根據(jù)當(dāng)前月份決定調(diào)節(jié)日期的上限 if(X==1&&DateTime[3]<MonthsDays[DateTime[4]]) { DateTime[3]++; } if(X==-1&&DateTime[3]>0) { DateTime[3]--; } Refresh_Week_Day();//刷新星期 break; case2: //時(shí)調(diào)整 if(X==1&&DateTime[2]<23) { DateTime[2]++; } if(X==-1&&DateTime[4]>0) { DateTime[2]--; } break; case1: //分調(diào)整 if(X==1&&DateTime[1]<59) { DateTime[1]++; } if(X==-1&&DateTime[4]>0) { DateTime[1]--; } break; }}//// 定時(shí)器0刷新LCD顯示函數(shù)//voidT0_INT()interrupt1{ TH0=-50000/256;//寫入初值TL0=-50000%256;//寫入初值 if(++tcount!=2)return; tcount=0; //按指定格式生成待顯示的日期時(shí)鐘 Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5); Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8); Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11); //星期 strcpy(LCD_DSY_BUFFER1+13,Week[DateTime[5]-1]); //時(shí),分。秒 Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5); Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8); Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11); //顯示年、月、日、星期、時(shí)、分、秒 LCD_Display(0x00,LCD_DSY_BUFFER1); LCD_Display(0x40,LCD_DSY_BUFFER2);}//// 鍵盤中斷處理函數(shù)//voidEX_INT0()interrupt0{if(k1==0) { while(k1==0); if(Adjust_Index==-1||Adjust_Index==-1) {Adjust_Index=7;} Adjust_Index--; if(Adjust_Index==5) {Adjust_Index=4;} //跳過(guò)對(duì)星期的調(diào)節(jié) LCD_DSY_BUFFER2[13]='['; LCD_DSY_BUFFER2[14]=Change_Flag[Adjust_Index]; LCD_DSY_BUFFER2[15]=']'; }elseif(k2==0) // 加 { while(k2==0); Datetime_Adjust(1); }elseif(k3==0) // 減 { while(k3==0); Datetime_Adjust(-1); }elseif(k4==0) { while(k4==0); SET_DS1302(); LCD_DSY_BUFFER2[13]=''; LCD_DSY_BUFFER2[14]=''; LCD_DSY_BUFFER2[15]=''; Adjust_Index=-1;//操作索引重設(shè)為-1,時(shí)間繼續(xù)正常顯示 }}第四章仿真結(jié)果4.1仿真軟件PROTEUS和KEIL4.1.1PROTEUS仿真軟件Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái),其處理器模型支持8051、HC11、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MATLAB等多種編譯器。Proteus可提供的仿真元器件資源:仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件,有30多個(gè)元件庫(kù)。Proteus可提供的仿真儀表資源:示波器、邏輯分析儀、虛擬終端、SPI調(diào)試器、I2C調(diào)試器、信號(hào)發(fā)生器、模式發(fā)生器、交直流電壓表、交直流電流表。理論上同一種儀器可以在一個(gè)電路中隨意的調(diào)用。除了現(xiàn)實(shí)存在的儀器外,Proteus還提供了一個(gè)圖形顯示功能,可以將線路上變化的信號(hào),以圖形的方式實(shí)時(shí)地顯示出來(lái),其作用與示波器相似,但功能更多。這些虛擬儀器儀表具有理想的參數(shù)指標(biāo),例如極高的輸入阻抗、極低的輸出阻抗。這些都盡可能減少了儀器對(duì)測(cè)量結(jié)果的影響。Proteus可提供的調(diào)試手段Proteus提供了比較豐富的測(cè)試信號(hào)用于電路的測(cè)試。這些測(cè)試信號(hào)包括模擬信號(hào)和數(shù)字信號(hào)。在PROTEUS繪制好原理圖后,調(diào)入已編譯好的目標(biāo)代碼文件:*.HEX,可以在PROTEUS的原理圖中看到模擬的實(shí)物運(yùn)行狀態(tài)和過(guò)程。PROTEUS不僅可將許多單片機(jī)實(shí)例功能形象化,也可將許多單片機(jī)實(shí)例運(yùn)行過(guò)程形象化。它的元器件、連接線路等卻和傳統(tǒng)的單片機(jī)實(shí)驗(yàn)硬件高度對(duì)應(yīng)。由于PROTEUS提供了實(shí)驗(yàn)室無(wú)法相比的大量的元器件庫(kù),提供了修改電路設(shè)計(jì)的靈活性、提供了實(shí)驗(yàn)室在數(shù)量、質(zhì)量上難以相比的虛擬儀器、儀表,因而也提供了培養(yǎng)學(xué)生實(shí)踐精神、創(chuàng)造精神的平臺(tái)。使用Proteus軟件進(jìn)行單片機(jī)系統(tǒng)仿真設(shè)計(jì),是虛擬仿真技術(shù)和計(jì)算機(jī)多媒體技術(shù)相結(jié)合的綜合運(yùn)用,有利于培養(yǎng)學(xué)生的電路設(shè)計(jì)能力及仿真軟件的操作能力,在使用Proteus進(jìn)行系統(tǒng)仿真開(kāi)發(fā)成功之后再進(jìn)行實(shí)際制作,能極大提高單片機(jī)系統(tǒng)設(shè)計(jì)效率。4.1.2KEIL仿真軟件KeilC51是美國(guó)KeilSoftware公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì)。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVision)將這些部分組合在一起。運(yùn)行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。如果你使用C語(yǔ)言編程,那么Keil幾乎就是你的不二之選,即使不使用C語(yǔ)言而僅用匯編語(yǔ)言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會(huì)令你事半功倍。Keil公司2005年由ARM公司收購(gòu)。而后ARMKeil推出基于uVision界面,用于調(diào)試ARM7,ARM9,Cortex-M內(nèi)核的MDK-ARM開(kāi)發(fā)工具,用于為控制領(lǐng)域的開(kāi)發(fā)。4.2PROTEUS仿真圖4.2.1LED燈亮度仿真(1)一級(jí)亮度調(diào)節(jié)D0紅燈亮圖4-1一級(jí)亮度(2)二級(jí)亮度調(diào)節(jié)D1、D2、D3、D4黃燈亮圖4-2二級(jí)亮度(3)三級(jí)亮
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年魯科版六年級(jí)英語(yǔ)上冊(cè)階段測(cè)試試卷含答案
- 二零二五年度工程項(xiàng)目安全生產(chǎn)事故應(yīng)急預(yù)案合同2篇
- 2025年魯教版九年級(jí)科學(xué)上冊(cè)月考試卷含答案
- 構(gòu)建現(xiàn)代職業(yè)教育體系的路徑設(shè)計(jì)與執(zhí)行策略
- 2024物流公司與貨運(yùn)代理關(guān)于貨物運(yùn)輸?shù)膭趧?wù)合同
- 2024年北師大版四年級(jí)英語(yǔ)上冊(cè)階段測(cè)試試卷含答案
- 游園·皂羅袍(說(shuō)課稿)-2024-2025學(xué)年高一語(yǔ)文必修下冊(cè)同步備課系列(說(shuō)課稿+說(shuō)課稿)(統(tǒng)編版2019)001
- 2024離職合同賠償協(xié)議書
- 2025年牛津譯林版七年級(jí)科學(xué)上冊(cè)階段測(cè)試試卷
- 2025年蘇教新版九年級(jí)物理下冊(cè)月考試卷
- 基于STEAM教育的小學(xué)德育創(chuàng)新實(shí)踐研究
- 2024年03月山東煙臺(tái)銀行招考筆試歷年參考題庫(kù)附帶答案詳解
- 河道綜合治理工程施工組織設(shè)計(jì)
- 江蘇省揚(yáng)州市2024-2025學(xué)年高中學(xué)業(yè)水平合格性模擬考試英語(yǔ)試題(含答案)
- 2025年蛇年年度營(yíng)銷日歷營(yíng)銷建議【2025營(yíng)銷日歷】
- 福建省泉州市2023-2024學(xué)年高一上學(xué)期期末質(zhì)檢英語(yǔ)試題 附答案
- 安保服務(wù)評(píng)分標(biāo)準(zhǔn)
- 馬工程《思想政治教育學(xué)原理 第二版》課后習(xí)題詳解
- 山東中醫(yī)藥大學(xué)中醫(yī)學(xué)(專升本)學(xué)士學(xué)位考試復(fù)習(xí)題
- Y620優(yōu)眾變頻器說(shuō)明書
- 講師與平臺(tái)的合作協(xié)議
評(píng)論
0/150
提交評(píng)論