基于AT89C51單片機(jī)的模擬路燈控制系統(tǒng)設(shè)計(jì)_第1頁
基于AT89C51單片機(jī)的模擬路燈控制系統(tǒng)設(shè)計(jì)_第2頁
基于AT89C51單片機(jī)的模擬路燈控制系統(tǒng)設(shè)計(jì)_第3頁
基于AT89C51單片機(jī)的模擬路燈控制系統(tǒng)設(shè)計(jì)_第4頁
基于AT89C51單片機(jī)的模擬路燈控制系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩81頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

-單片機(jī)的種類很多,最常用的就是8051系列,其常見的型號有AT89C51、AT89C52、AT89S51、AT89S52等。有相當(dāng)一部分廠家的單片機(jī)與8051單片機(jī)是基于該系列單片機(jī),從而可以方便地替換該系列單片機(jī),如STC公司、PHILIPS公司等等。一般情況下,52型號的可以直接替換51型號單片機(jī),如果程序不大(code區(qū)小于4096)的話51型號也可以替換52型號。如果程序較大,還可以采用89C54、89C58等資源更多的單片機(jī)。本系統(tǒng)采用的是最常用的AT89C51。3.2.1AT89C51的簡介MCS-51系列單片機(jī)是由美國的Intel公司開發(fā)研制,并于1980年推出的產(chǎn)品。與MCS-48系列單片機(jī)相比,其以典型的體系結(jié)構(gòu)和完善的專用寄存器集中管理方式,方便的邏輯位操作功能及豐富的指令系統(tǒng)[5],堪稱一代“名機(jī)”,為之后的其他單片機(jī)的發(fā)展奠定了基礎(chǔ)。因此,MCS-51系列單片機(jī)結(jié)構(gòu)先進(jìn),功能強(qiáng)大,增加了更多的電路單元和功能模塊,指令數(shù)達(dá)111條。其中的代表作便是AT89C5x系列單片機(jī),而本文所采用的就是AT89C51。AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶有2K字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。圖3-1單片機(jī)外形圖及引腳圖3.2.2AT89C51特性概述AT89C51具有以下標(biāo)準(zhǔn)功能:4k字節(jié)Flash閃速存儲器;128字節(jié)內(nèi)部RAM;32個(gè)I/O口線;兩個(gè)16位定時(shí)/計(jì)數(shù)器;一個(gè)5向量兩級中斷結(jié)構(gòu);一個(gè)全雙工串行通信口;片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。3.2.3單片機(jī)的中斷系統(tǒng)8051具備較完善的中斷功能,其中有兩個(gè)外中斷、兩個(gè)定時(shí)/計(jì)數(shù)器中斷和一個(gè)串行中斷,可滿足不同的控制要求,并具有2級的優(yōu)先級別選擇。3.2.4引腳說明AT89C51的引腳如圖所示:圖3-2AT89C51管腳圖管腳說明:VCC:電源電壓。GND:接地。P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。當(dāng)P0口作為輸出口用時(shí),在訪問外部數(shù)據(jù)存儲器或程序存儲器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在FLASH編程時(shí),P0口作為原碼輸入口,而當(dāng)FLASH在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。P1口:P1口是一個(gè)帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口,P2的輸出緩沖級可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號拉低時(shí)會輸出一個(gè)電流(IIL)。在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX@DPTR指令)時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號和控制信號。P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O,可接收輸出4個(gè)TTL門電路。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表所示:表0-1P3口第二功能端口引腳第二功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0P3.2/INT0(外中斷0)P3.3/INT1(外中斷1)P3.4T0(定時(shí)/計(jì)數(shù)器0外部輸入)P3.5T1(定時(shí)/計(jì)數(shù)器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲器寫選通)P3.7/RD(外部數(shù)據(jù)存儲器讀選通)RESET/復(fù)位信號復(fù)用腳,當(dāng)8051通電時(shí),時(shí)鐘電路開始工作,在RESET引腳上出現(xiàn)24個(gè)時(shí)鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計(jì)數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),8051的初始態(tài)。8051的復(fù)位方式可以是自動(dòng)復(fù)位,也可以是手動(dòng)復(fù)位,如下圖所示。此外,RESET/還是一復(fù)用腳,VCC掉電其間,此腳可接上備用電源,來保證單片機(jī)內(nèi)部RAM的數(shù)據(jù)不丟失。圖0-3AT89C51的復(fù)位方式XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。振蕩器的特性:XTAL1和XTAL2分別為反向放大器的輸入與輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號要通過一個(gè)二分頻觸發(fā)器,因此對外部時(shí)鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。ALE當(dāng)訪問外部程序器時(shí),ALE(地址鎖存)的輸出用于鎖存地址的低位字節(jié)。而訪問內(nèi)部程序存儲器時(shí),ALE端將有一個(gè)1/6時(shí)鐘頻率的正脈沖信號,這個(gè)信號可以用于識別單片機(jī)是否工作,同時(shí)也可以當(dāng)作一個(gè)時(shí)鐘向外輸出。更有一個(gè)特點(diǎn),當(dāng)訪問外部程序存儲器,ALE會跳過一個(gè)脈沖。如果單片機(jī)是EPROM,在編程其間,將用于輸入編程脈沖。Pin29:當(dāng)訪問外部程序存儲器時(shí),此腳輸出負(fù)脈沖選通信號,PC的16位地址數(shù)據(jù)將出現(xiàn)在P0和P2口上,當(dāng)外部程序存儲器則把指令數(shù)據(jù)放到P0口上,由CPU讀入并執(zhí)行。EA/程序存儲器的內(nèi)外部選通線,8051和8751單片機(jī),內(nèi)置有4kB的程序存儲器,當(dāng)EA為高電平并且程序地址小于4kB時(shí),讀取內(nèi)部程序存儲器指令數(shù)據(jù),而當(dāng)超過4kB地址則讀取外部指令數(shù)據(jù)。如EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。顯然,對內(nèi)部無程序存儲器的8031,EA端必須接地。3.2.5時(shí)鐘電路8051內(nèi)置最高頻率可達(dá)12MHz的時(shí)鐘電路,用于產(chǎn)生整個(gè)單片機(jī)運(yùn)行的脈沖時(shí)序,但8051單片機(jī)需外置振蕩電容。3.2.6存儲器系統(tǒng)在計(jì)算機(jī)的組成結(jié)構(gòu)中,有一個(gè)很重要的部分,就是存儲器。存儲器是一種記憶部件,是用來存儲程序和數(shù)據(jù)的。對于計(jì)算機(jī)來說,有了存儲器,才有記憶功能,才能保證正常工作。存儲器的種類很多,8051單片機(jī)存儲器在物理結(jié)構(gòu)上分為程序存儲器空間和數(shù)據(jù)存儲器空間。程序存儲器ROM;為了讓單片機(jī)實(shí)現(xiàn)某種功能,需要利用匯編語言或者其他語言編寫一些源程序,然后再燒錄到芯片中。我們編寫的這些程序,就存儲在程序存儲器空間中。而數(shù)據(jù)存儲器RAM:我們編寫的源程序,在運(yùn)行的過程中,會產(chǎn)生一些臨時(shí)的運(yùn)算結(jié)果,這些結(jié)果需要臨時(shí)存放在一個(gè)地方,這個(gè)地方就是數(shù)據(jù)寄存器。8051單片機(jī)具有四個(gè)存儲器空間:①①片內(nèi)程序存儲器,即單片機(jī)芯片內(nèi)置的存儲空間。②片外程序存儲器,即當(dāng)單片機(jī)芯片內(nèi)置的存儲空間不夠使用時(shí),我們需要外加的一個(gè)存儲器芯片。③片內(nèi)數(shù)據(jù)存儲器,即單片機(jī)芯片內(nèi)置的存儲空間。④片外數(shù)據(jù)存儲器,即當(dāng)單片機(jī)芯片內(nèi)置的存儲空間不夠使用時(shí),我們需要外加的一個(gè)存儲器芯片。從用戶使用的角度,8051存儲器地址空間分為三類:片內(nèi)片外統(tǒng)一編址的FFFFH0000H--的64K字節(jié)的程序存儲器地址空間,用16位地址。64K字節(jié)片外數(shù)據(jù)存儲器空間,地址也是從0000H--FFFFH用16位地址。256字節(jié)數(shù)據(jù)存儲器空間,用8位地址。表3-2MCS-51系列單片機(jī)性能一覽表一、程序存儲器地址空間8051程序存儲器用于存放編寫好的程序和表格常數(shù)。程序存儲器通過16位程序計(jì)數(shù)器PC尋址。尋址能力為64K字節(jié)。片內(nèi)ROM為4KB。地址為0000H--0FFFH。片外最多可擴(kuò)至64K字節(jié)。地址為1000H--FFFFH。片內(nèi)片外是統(tǒng)一編址的。當(dāng)引腳EA接高電平時(shí),8051程序計(jì)數(shù)器PC在0000H--0FFFH范圍內(nèi),即前4K字節(jié)地址執(zhí)行片內(nèi)ROM中的程序。當(dāng)指令地址超過0FFFH后,就自動(dòng)轉(zhuǎn)向片外ROM中取指令。程序存儲器的某些單元是留給系統(tǒng)使用的。存儲單元0000H--0002H用作8051上電復(fù)位后引導(dǎo)程序存放單元。因?yàn)?051上電復(fù)位后程序計(jì)數(shù)器PC的內(nèi)容為0000H,所以CPU總是從0000H開始執(zhí)行程序,如果在這三個(gè)單元中有跳轉(zhuǎn)指令,那么,程序就被引導(dǎo)到轉(zhuǎn)移指令所指的ROM空間去執(zhí)行。二、數(shù)據(jù)存儲器空間數(shù)據(jù)存儲器RAM用于存放運(yùn)算中的結(jié)果、數(shù)據(jù)暫存或緩沖、標(biāo)志位等。數(shù)據(jù)存儲空間也分為片內(nèi)和片外兩大部分,即片內(nèi)RAM和片外RAM。片外數(shù)據(jù)存儲器外部數(shù)據(jù)存儲器又稱為外部數(shù)據(jù)RAM,當(dāng)805l片內(nèi)256個(gè)字節(jié)的數(shù)據(jù)RAM不能滿足數(shù)量上的要求時(shí),可通過總線端口和其它I/O端口擴(kuò)展外部數(shù)據(jù)RAM(擴(kuò)展方法見相關(guān)章節(jié)),其最大容量可達(dá)64K字節(jié)。地址從0000H--FFFFH。外部數(shù)據(jù)RAM與內(nèi)部數(shù)據(jù)RAM的功用基本相同,但外部數(shù)據(jù)RAM不能進(jìn)行堆棧操作。片內(nèi)數(shù)據(jù)存儲器MCS-51系列單片機(jī)的片內(nèi)數(shù)據(jù)存儲器包括通用數(shù)據(jù)存儲器塊和特殊功能寄存器(SFR)塊。對于51子系列,前者占128B,其編址為00H—7FH,后者也占128B,其編址為80H—FFH,二者連續(xù)而不重疊。對于52子系列,前者有256B,其編址為00H—FFH,后者占128B,其編址為80H—FFH,后者與前者高128B的編址是重疊的,由于訪問所用的指令不同,所以不會引起混亂。片內(nèi)數(shù)據(jù)存儲器的容量很小,常需要擴(kuò)展片外數(shù)據(jù)存儲器。MCS-51系列單片機(jī)有一個(gè)數(shù)據(jù)指針寄存器,可用于尋址程序存儲器或數(shù)據(jù)存儲器單元,它有16位,尋址范圍可達(dá)64KB。故片外數(shù)據(jù)存儲器的容量可達(dá)到與程序存儲器一樣,其編址自0000H開始,最大可至FFFFH。片內(nèi)RAM數(shù)據(jù)存儲器最大尋址空間為256字節(jié)。他們又分為兩個(gè)部分。低128字節(jié)00H--7FH是真正的RAM區(qū)。低128字節(jié)中地址00H一1FH的32個(gè)單元,安排為四組工作寄存器。每組又分為8個(gè)寄存器區(qū)R0--R7。 圖3-4AT89C51內(nèi)部功能圖3.3時(shí)鐘電路時(shí)鐘電路是產(chǎn)生CPU校準(zhǔn)時(shí)序,是單片機(jī)的控制核心,它控制著計(jì)算機(jī)的工作節(jié)奏。MCS-51系列單片機(jī)允許的時(shí)鐘頻率是因型號而不同的。AT89C51的時(shí)鐘信號可通過內(nèi)部振蕩方式和外部振蕩方式兩種方式得到。內(nèi)部振蕩方式,AT89C51內(nèi)部都有一個(gè)反相放大器,XTAL1、XTAL2分別為反相放大器輸入和輸出端,外接定時(shí)反饋元件以后就組成振蕩器,產(chǎn)生時(shí)鐘送至單片機(jī)內(nèi)部的各個(gè)部件,這樣就構(gòu)成了內(nèi)部振蕩方式。外部振蕩方式是把已有的時(shí)鐘信號引入單片機(jī)內(nèi)。這種方式適合用來使單片機(jī)的時(shí)鐘與外部信號一致。在本次設(shè)計(jì)中不需要與外部時(shí)鐘信號保持一致,所以我選擇內(nèi)部振蕩方式。由于單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,當(dāng)外接晶振后,就構(gòu)成了自激振蕩器并產(chǎn)生振蕩時(shí)鐘脈沖。而對于晶振的選擇:一種是:6MHz的晶振,其機(jī)器周期是2us。另一種是:12MHz的晶振,其機(jī)器周期是1us,也就是說在執(zhí)行同一條指令時(shí)用6MHz的晶振所用的時(shí)間是12MHz晶振的兩倍。為了提高整個(gè)系統(tǒng)的性能我選擇了12MHz的晶振。晶振我選擇了12MHz,相對于6MHz的晶振,整個(gè)系統(tǒng)的運(yùn)行速度就更快了。電容器C1、C2起穩(wěn)定振蕩頻率、快速起振的作用,電容值我選擇了30pF。內(nèi)部振蕩方式所得的時(shí)鐘信號穩(wěn)定性高。3.4復(fù)位電路3.4.1復(fù)位方式單片機(jī)在啟動(dòng)時(shí)都需要復(fù)位,以使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初始狀態(tài)開始工作。89系列單片機(jī)的復(fù)位信號是從RST引腳輸入到芯片內(nèi)的施密特觸發(fā)器中。當(dāng)系統(tǒng)處于正常工作狀態(tài)時(shí),而且振蕩器穩(wěn)定后,如果RST引腳上有一個(gè)高電平并維持2個(gè)機(jī)器周期(24個(gè)振蕩周期)以上,則CPU就可以響應(yīng)并將其系統(tǒng)復(fù)位。單片機(jī)系統(tǒng)的復(fù)位方式有:手動(dòng)按鈕復(fù)位和上電復(fù)位。3.4.2手動(dòng)按鈕復(fù)位手動(dòng)按鈕復(fù)位需要人為在復(fù)位輸入端手動(dòng)按鈕復(fù)位需要人為在復(fù)位輸入端RST加上高電平。一般的方法是將一個(gè)按鈕開關(guān)并聯(lián)于上電自動(dòng)復(fù)位電路,按一下開關(guān)就RST端出現(xiàn)一段時(shí)間的高電平,即使器件復(fù)位。如圖所示:圖3-5上電和開關(guān)復(fù)位3.4.3上電復(fù)位上電復(fù)位是常用的一種復(fù)位方式,AT89C51單片機(jī)有一個(gè)復(fù)位引腳RST,它是施密特觸發(fā)輸入,當(dāng)振蕩器起振后,該引腳上出現(xiàn)2個(gè)機(jī)器周期(即24個(gè)時(shí)鐘周期)以上的高電平。使元器件復(fù)位,只要RST保持高電平,AT89C51保持復(fù)位狀態(tài)。此時(shí)ALE、/PSEN、P0、P1、P2、P3口都輸出高電平。RST變?yōu)榈碗娖胶?,退出?fù)位,則CPU從初始狀態(tài)開始工作。復(fù)位以后內(nèi)部寄存器的初始狀態(tài)為(SP=07,P0、P1、P2、P3為0FFH外,其它寄存器都為0)。對于NMOS型單片機(jī),在RST復(fù)位端接一個(gè)電容至VccHE一個(gè)電阻至Vss,就能實(shí)現(xiàn)上電自動(dòng)復(fù)位,對于CMOS單片機(jī)只要接一個(gè)電容至Vcc即可。如圖,在加電瞬間,電容通過電阻充電,就在RST端出現(xiàn)一定時(shí)間的高電平,只要高電平時(shí)間足夠長,就可以使AT89C51有效地復(fù)位。RST端在加電時(shí)應(yīng)保持的高電平時(shí)間包括Vcc的上升時(shí)間和振蕩器起振時(shí)間,Vcc上升時(shí)間若為10ms,振蕩器起振時(shí)間和頻率有關(guān)。10MHz時(shí)間約為1ms,1MHz時(shí)約為10ms,所以一般為了可靠地復(fù)位,RST在上電時(shí)應(yīng)保持20ms以上的高電平。圖2.5中,RC時(shí)間常數(shù)越大,上電時(shí)RST端保持高電平的時(shí)間越長。振蕩頻率為12MHZ時(shí),典型值為C=10uF,R=8.2kΩ。若復(fù)位電路失效,加電后CPU從一個(gè)隨機(jī)的狀態(tài)開始工作,系統(tǒng)就不能正常運(yùn)轉(zhuǎn)。上電復(fù)位電路如下圖所示:圖3-6上電復(fù)位電路在這次的畢業(yè)設(shè)計(jì)中我選擇運(yùn)用上電復(fù)位電路.即只要一接+5V電壓,系統(tǒng)就會自動(dòng)的復(fù)位.出于可靠性和適時(shí)性的考慮,我選擇了簡單實(shí)用的上電復(fù)位電路上電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。從而實(shí)現(xiàn)上電復(fù)位操作。我選擇的C=10uF,R=1kΩ。3.5LM3243.5.1LM324簡介LM324系列器件帶有差動(dòng)輸入的四運(yùn)算放大器。與單電源應(yīng)用場合的標(biāo)準(zhǔn)運(yùn)算放大器相比,它們有一些顯著優(yōu)點(diǎn)。該放大器可以工作在低到3.0伏或者高于32伏的電源下,靜態(tài)電流為MC1741的靜態(tài)電流的五分之一。LM324是采用14腳雙列直插塑料封裝,外形如圖所示。它的內(nèi)部包含四組形式完全相同的運(yùn)算放大器。除電源共用之外,四組運(yùn)放是相互獨(dú)立的。每一組運(yùn)算放大器可用圖一所示的符號來表示,它有5個(gè)引出腳,其中“+”、“-”為兩個(gè)信號的輸入端,“V+”、“V-”為正、負(fù)電源端,“Vo”(+)為輸出端,兩個(gè)信號輸入端中,“Vi-”(-)為反相輸入端,表示運(yùn)放輸出端Vo的信號與該輸入端的位相反;“Vi+”(+)為同相輸入端,表示運(yùn)放輸出端Vo的信號與該輸入端的相位相同。LM324的引腳排列見圖:圖3-974HC573引腳圖表3-374HC573引腳功能表引腳號符號名稱及功能1/OE3態(tài)輸出使能輸入(低電平)2,3,4,5,6,7,8,9D0toD7數(shù)據(jù)輸入12,13,14,15,16,17,18,19Q0toQ73態(tài)鎖存輸出11LE鎖存使能輸入10GND接地(0V)20VCC電源電壓對于原理說明:74HC573的八個(gè)鎖存器都是透明D型鎖存器,當(dāng)使能(G)為高時(shí),則Q為輸出將隨數(shù)據(jù)(D)輸入而變。當(dāng)使能(G)為低時(shí),輸出將鎖存在已經(jīng)建立的數(shù)據(jù)電平上。輸出控制不會影響鎖存器的內(nèi)部工作,即老數(shù)據(jù)還可以保持,而且甚至當(dāng)輸出被關(guān)閉時(shí),新的數(shù)據(jù)也可以置入。這樣的電路可以驅(qū)動(dòng)大電容或低阻抗負(fù)載,可以直接與系統(tǒng)總線接口并且驅(qū)動(dòng)總線,不需要外接口。特別適用于緩沖寄存器,I/O通道,雙向總線驅(qū)動(dòng)器和工作寄存器。100Vcc+5VGNDI/O圖3-12按鍵電路圖3.9顯示電路3.9.1顯示方式選擇顯示器用于實(shí)現(xiàn)單片機(jī)應(yīng)用系統(tǒng)中的數(shù)據(jù)輸出和狀態(tài)反饋。單片機(jī)系統(tǒng)中常用的顯示器有發(fā)光二極管、七段數(shù)碼顯示器和液晶顯示器等等。LED數(shù)碼顯示器是一種常用的顯示器,具有顯示亮度高、響應(yīng)速度快等特點(diǎn)。最常用的是七段式LED顯示器,也稱之為數(shù)碼管。它能夠顯示十進(jìn)制或十六進(jìn)制數(shù)字及某些簡單字符。但控制簡單,使用方便。七段式LED顯示器的內(nèi)部是由7個(gè)條形發(fā)光的二極管和1個(gè)小圓點(diǎn)發(fā)光二極管組成,并且根據(jù)各管的亮暗組合成各種字符。從各發(fā)光段電極連接方式分為共陰極和共陽極兩種方式。所謂的共陰極方式就是指筆畫顯示器各段發(fā)光管的陰極(即N區(qū))是公共的,而陽極卻是互相隔離的。而共陽極方式就是指筆畫顯示器各段發(fā)光管的陽極(即P區(qū))是公共的,而陰極卻是互相隔離的。圖3-13數(shù)碼管及共陰極共陽極電路顯示的方式共有兩種方式,所謂的靜態(tài)顯示方式就是把共陰極或共陽極的公共端(位選端)連接在一起接地或接5V電源,形成位控端;每一位的段選線(a—dp)作為段控端。而動(dòng)態(tài)顯示方式是單片機(jī)應(yīng)用系統(tǒng)中最常用的顯示方式,就是把所有的顯示器的同名段選端選線相互并接在一起,由同一個(gè)8位的并行輸出口控制;而各顯示器的位選線則分別由不同輸出口線控制端。這樣各顯示位不能同時(shí)顯示不同的數(shù)字或字符。因此要選擇掃描的方法,即從右到左(或從左到右)依次輪流使每位顯示器顯示數(shù)字或者字符并保留一段時(shí)間(通常位1ms),由于LED的余輝特性以及人眼視覺上的惰性,盡管各位顯示器實(shí)際上使分時(shí)斷續(xù)地顯示,但只要適當(dāng)選取掃描頻率,給人眼的視察印象就會是在連續(xù)地顯示,察覺不到閃爍的現(xiàn)象。相對于靜態(tài)顯示,動(dòng)態(tài)顯示方式雖然占用的CPU空間較多,但使用的硬件較少,所占用的端口也較靜態(tài)顯示方式少,這樣可以大大的節(jié)約系統(tǒng)的端口資源,所以根據(jù)我設(shè)計(jì)中沒有擴(kuò)展端口,端口資源比較緊張,因此我選擇動(dòng)態(tài)顯示,不僅能節(jié)約線路板空間,而且效果也不差于靜態(tài)顯示。3.9.2LED的驅(qū)動(dòng)和顯示在本次電路設(shè)計(jì)的過程中,單片機(jī)的的P2.6口接的是74HC573作為段選輸出口,經(jīng)過上拉電阻加到數(shù)碼管的A-G和DP上,P2.7口接的是74HC573作為位選輸出口,經(jīng)電阻驅(qū)動(dòng)分別加到數(shù)碼管的COM端。LED的驅(qū)動(dòng)問題是顯示設(shè)計(jì)中的一個(gè)非常重要的環(huán)節(jié)。如果驅(qū)動(dòng)能力差,顯示器高度就低;且驅(qū)動(dòng)器長期在超負(fù)荷下運(yùn)行很容易損壞。下面就簡單介紹選擇LED驅(qū)動(dòng)器時(shí)應(yīng)注意的問題。顯示分為靜態(tài)顯示和動(dòng)態(tài)顯示兩種方式,由于這兩種方式有本質(zhì)的不同,因此在選擇LED驅(qū)動(dòng)器時(shí),一定要分清顯示方式。如果是靜態(tài)顯示,則LED驅(qū)動(dòng)器的選擇較為簡單,只要驅(qū)動(dòng)器的驅(qū)動(dòng)能力與顯示器的工作電流相匹配即可,而且只需要考慮段的驅(qū)動(dòng),因?yàn)?,共陽極接+5V,而共陰極接地,所以位的驅(qū)動(dòng)無須考慮。動(dòng)態(tài)顯示則不同,由于一位數(shù)據(jù)的表示是由段和位選信號共同配合完成的,因此必須同時(shí)考慮段與位的驅(qū)動(dòng)能力和位的驅(qū)動(dòng)能力,而且段的驅(qū)動(dòng)能力決定位的驅(qū)動(dòng)能力。段的驅(qū)動(dòng)能力是由驅(qū)動(dòng)能力決定位的驅(qū)動(dòng)能力。段的驅(qū)動(dòng)能力是由顯示器的亮度決定的,通過發(fā)光的二極管的電流較大,其亮度也就越多,對于靜態(tài)顯示器,當(dāng)某位電量時(shí),此位中點(diǎn)亮的段通過恒定的電流;而對于動(dòng)態(tài)顯示器,此電流卻是以一定脈沖方式出現(xiàn)的,其峰值電流來考慮。我采用的是三個(gè)數(shù)碼管集成在一起的管子,這種管子的好處是在接線的時(shí)候比較簡單,三個(gè)COM端接位選接口,非常適合用于動(dòng)態(tài)顯示。我們所采用的是動(dòng)態(tài)顯示,雖然有閃爍感,占用的CPU用的是動(dòng)態(tài)顯示,雖然有閃爍感,占用的CPU空間較多,但使用的硬件少,能節(jié)約線路板空間。3.10電源電路電源是一個(gè)控制系統(tǒng)中最重要的一部分,用于驅(qū)動(dòng)整個(gè)系統(tǒng)的運(yùn)行。輸入電源經(jīng)過穩(wěn)壓塊后輸出穩(wěn)定的+5V電源。Vin1GND2Vout3U8780512J9C30.1UC80.U1C4470UC7100U+5V圖3-14+5V穩(wěn)壓電路3.11光控電路由光敏電阻、滑動(dòng)變阻器、電阻及運(yùn)算放大器LM324組成,如圖所示:圖3-15光控電路在這次設(shè)計(jì)中把光敏電阻作為光傳感器件對外界光線進(jìn)行檢測,若光敏電阻受光照在這次設(shè)計(jì)中把光敏電阻作為光傳感器件對外界光線進(jìn)行檢測,若光敏電阻受光照時(shí),電阻阻值減小,運(yùn)放同向輸入端為低電平;若光照減弱時(shí),電阻增大,運(yùn)放同向輸入端就為高電平。光控電路的輸出信號經(jīng)過電壓跟隨器后,將比較微弱的電流信號放大到單片機(jī)能夠識別到的電流,然后再由運(yùn)放輸出端將放大后的信號傳給單片機(jī)的P1.7口。電路圖中的調(diào)節(jié)變阻器RV1能夠改變電流,從而來控制整個(gè)光控電路對光信號的靈敏度。3.12路燈控制電路路燈控制電路是整個(gè)硬件電路的基本組成部分之一,也是智能化路燈控制器電路的發(fā)光部分,這一部分的電路相對來說是比較簡單的,在其中起到控制作用的元件是單片機(jī),它的控制功能主要是通過指令系統(tǒng)的指令來實(shí)現(xiàn)的。圖3-16路燈控制電路第4章軟件設(shè)計(jì)4.1主程序模擬路燈控制系統(tǒng)的軟件程序設(shè)計(jì)包括判斷各個(gè)按鈕按下之后能夠?qū)崿F(xiàn)什么樣功能,判斷開燈、關(guān)燈的時(shí)間。其中,動(dòng)態(tài)顯示是在中斷子程序中來進(jìn)行的,每一次中斷的時(shí)間為1Ms,每中斷一次就掃描一次,從而實(shí)現(xiàn)動(dòng)態(tài)顯示。正常走時(shí)的動(dòng)態(tài)顯示是在T0中斷中進(jìn)行動(dòng)態(tài)掃描的,而設(shè)置開燈、關(guān)燈的時(shí)間是在T1中斷中進(jìn)行動(dòng)態(tài)掃描的。主程序流程圖如下:初始化初始化是否進(jìn)行時(shí)間調(diào)整?是否進(jìn)行定時(shí)開燈時(shí)間調(diào)整?是否進(jìn)行定時(shí)關(guān)燈時(shí)間調(diào)整?調(diào)時(shí)間調(diào)整子程序調(diào)整時(shí)、分子程序判斷是否開燈時(shí)間到?調(diào)整時(shí)、分子程序判斷是否關(guān)燈時(shí)間到?點(diǎn)燈關(guān)燈圖4-1主程序流程圖4.2計(jì)時(shí)程序在計(jì)時(shí)程序中主要是定時(shí)器/計(jì)數(shù)器的運(yùn)用,基本的MCS-51單片機(jī)內(nèi)部有兩個(gè)16位可編程的定時(shí)器/計(jì)數(shù)器,即定時(shí)器/計(jì)數(shù)器T0和定時(shí)器/計(jì)數(shù)器T1。它們既可以做定時(shí)器,也可以做計(jì)數(shù)器。定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)是由兩個(gè)8位的計(jì)數(shù)器(其中TH0、TL0是T0的計(jì)數(shù)器,TH1、TL1是T1的計(jì)數(shù)器。)組裝而成的。當(dāng)它作為定時(shí)器使用時(shí),輸入的時(shí)鐘脈沖是由于晶體振蕩器的輸出經(jīng)12分頻后得到的。所以定時(shí)器也可看做是對計(jì)算機(jī)的機(jī)器周期的計(jì)數(shù)器,因?yàn)槊總€(gè)機(jī)器周期包含晶體振蕩器的12個(gè)振蕩周期,所以每一個(gè)機(jī)器周期定時(shí)器加1,可以把輸入的時(shí)鐘脈沖看成機(jī)器周期信號。故它的頻率為晶振頻率的1/12。如果晶振頻率為12MHZ,那么定時(shí)器每接收一個(gè)輸入脈沖的時(shí)間為1us。定時(shí)器/計(jì)數(shù)器一共有四種工作方式,其工作方式的選擇與控制都由兩個(gè)特殊功能寄存器(TMOD和TCON)的內(nèi)容來決定。先用指令改變TMOD或TCON的內(nèi)容后,則在下一條指令的第一個(gè)機(jī)器周期的S1P1時(shí)起作用。對于定時(shí)器/計(jì)數(shù)器的工作方式而言,MCS-51片內(nèi)的定時(shí)器/計(jì)數(shù)器可以通過對特殊功能寄存器TMOD中的控制位C/的設(shè)置來選擇定時(shí)器方式或計(jì)數(shù)器方式;通過對M1、M0兩位的設(shè)置來選擇四種工作方式,由于在設(shè)計(jì)中采用了T0,所以就以T0來加以說明。方式0當(dāng)M1M0設(shè)置為00時(shí),定時(shí)器選定為方式0工作。在這種方式下,16位寄存器只用了13位,TL0的高三位沒有用。由TH0的8位和TL0的低5位組成一個(gè)13位計(jì)數(shù)器。當(dāng)GATE=0時(shí),只要TCON中的TR0為1,TL0及TH0組成的13位計(jì)數(shù)器就開始計(jì)數(shù);當(dāng)GATE=1時(shí),此時(shí)僅TR0=1仍不能使計(jì)數(shù)器計(jì)數(shù),還需要引腳為1才能使計(jì)數(shù)器工作。由此可知,當(dāng)GATE=1和TR0=1時(shí),TH0+TL0是否計(jì)數(shù)取決于引腳的信號,當(dāng)由0變1時(shí),開始計(jì)數(shù);當(dāng)由1變0時(shí),停止計(jì)數(shù),這樣就可以用來測量在端出現(xiàn)的脈沖寬度。當(dāng)13位計(jì)數(shù)器從0或設(shè)定的初值,加1到全“1”以后,再加1就產(chǎn)生溢出。這時(shí),置TCON的TF0位為1,同時(shí)把計(jì)數(shù)器變?yōu)槿?”。方式1方式1和方式0的工作相同,唯一的差別是TH0和TL0組成一個(gè)16位計(jì)數(shù)器。方式2方式2把TL0配置成一個(gè)可以自動(dòng)恢復(fù)初值(初始常數(shù)自動(dòng)重新裝入)的8位計(jì)數(shù)器,TH0作為常數(shù)緩沖器,TH0由軟件預(yù)置值。當(dāng)TL0產(chǎn)生溢出時(shí),一方面使溢出標(biāo)志TF0置1,同時(shí)把TH0中的8位數(shù)據(jù)重新裝入TL0中。方式2常用于定時(shí)控制。例如希望每隔250μs產(chǎn)生一個(gè)定時(shí)控制脈沖,則可以采用12MHz的振蕩器,把TH0預(yù)置為6,并使C/=0就能實(shí)現(xiàn)。方式2不用作串行口波特率發(fā)生器。方式3方式3對定時(shí)器T0和定時(shí)器T1是不相同的。若T1設(shè)置為方式3,則停止工作(其效果與TR1=0相同)。所以方式3只適用于T0。方式0和方式1的最大特點(diǎn)是計(jì)數(shù)溢出后,計(jì)數(shù)器全為0,因此循環(huán)定時(shí)或計(jì)數(shù)應(yīng)用時(shí)就存在重新設(shè)置計(jì)數(shù)初值的問題,這不但影響定時(shí)精度,而且也給程序設(shè)計(jì)帶來不便。方式2就是針對此問題而設(shè)置的,它具有自動(dòng)重新加載功能,因此也可以說方式2是自動(dòng)重新加載工作方式。在這種工作方式下,把16位計(jì)數(shù)器分為兩部分,即以TL0作計(jì)數(shù)器,以TH0作預(yù)置寄存器,初始化時(shí)把計(jì)數(shù)初值分別裝入TL0和TH0中。當(dāng)計(jì)數(shù)溢出后,由預(yù)置寄存器以硬件方法自動(dòng)加載。初始化時(shí),8位計(jì)數(shù)初值同時(shí)裝入TL0和TH0中。當(dāng)TL0計(jì)數(shù)溢出時(shí),置位TF0,同時(shí)把保存在TH0中的計(jì)數(shù)初值自動(dòng)加載裝入TL0中,然后TL0重新計(jì)數(shù),如此重復(fù)不止,這不但省去了用戶程序中的重裝指令,而且有利于提高定時(shí)精度。但這種方式下計(jì)數(shù)值有限,最大只能到256。這種自動(dòng)重新加載工作方式非常適用于連續(xù)定時(shí)或計(jì)數(shù)應(yīng)用。當(dāng)為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)值的范圍是:1-256(28)當(dāng)為定時(shí)工作方式時(shí),定時(shí)時(shí)間計(jì)算公式為:(28-計(jì)數(shù)初值)x晶振周期x12或(28計(jì)數(shù)初值)x機(jī)器周期通過上述四種方式的比較,根據(jù)本計(jì)時(shí)軟件設(shè)計(jì)的要求,所以我們就采用了T0定時(shí)器的方式1。時(shí)間調(diào)整子程序流程圖:判斷秒按鈕是否被按下?秒加1是否加到六十?判斷秒按鈕是否被按下?秒加1是否加到六十?秒單元清零判斷分按鈕是否被按下?分加1是否加到六十?分單元清零判斷時(shí)按鈕是否被按下?時(shí)加1是否加到二十四?時(shí)單元清零返回4.3中斷程序所謂的中斷就是指在計(jì)算機(jī)執(zhí)行程序過程中,當(dāng)出現(xiàn)某種情況時(shí)(例如:發(fā)生停電或其他情況),先由服務(wù)對象向CPU發(fā)出中斷請求信號,要求CPU暫時(shí)中斷當(dāng)前程序的執(zhí)行,而轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序,等待處理程序執(zhí)行完畢后,再繼續(xù)處理執(zhí)行原來被中斷的程序。實(shí)現(xiàn)這一個(gè)功能的部件稱作為中斷系統(tǒng),申請CPU中斷的請求源稱之為中斷源,單片機(jī)的中斷系統(tǒng)一般允許多個(gè)中斷源,若當(dāng)多個(gè)中斷源同時(shí)向CPU請求中斷時(shí),就存在一個(gè)中斷優(yōu)先權(quán)的問題。通常情況下,根據(jù)中斷源的優(yōu)先級別,優(yōu)先處理最緊急事件的中斷請求源,即最先響應(yīng)級別最高的中斷請求。MCS-51單片機(jī)的中斷控制系統(tǒng)有兩種中斷方式,即外部中斷與內(nèi)部中斷。外部中斷是指從單片機(jī)的外部引腳/INT0和/INT1輸入中斷請求信號的中斷,即外部中斷源共有兩個(gè)。如輸入/輸出的中斷請求、掉電和設(shè)備故障的中斷請求都可以作為外部中斷源,從引腳輸入。內(nèi)部中斷是指單片機(jī)芯片內(nèi)部產(chǎn)生的中斷,MCS-51單片機(jī)的內(nèi)部中斷有定時(shí)/計(jì)數(shù)器T0和T1的溢出中斷、串行口的發(fā)送/接收中斷。當(dāng)定時(shí)/計(jì)數(shù)器T0和T1的定時(shí)或計(jì)數(shù)到時(shí),由硬件自動(dòng)置位TCON的TF1或TF0,然后向CPU申請中斷;CPU響應(yīng)中斷而轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)將TF0或TF1清零。當(dāng)串行口發(fā)送或接收完一幀數(shù)據(jù)時(shí),由硬件自動(dòng)置位SCON的TI或RI,以此向CPU申請中斷;CPU響應(yīng)中斷后,硬件不能自動(dòng)將TI或RI清零,即CPU響應(yīng)串行口中斷后不能自動(dòng)撤除中斷請求信號,必須由用戶采用軟件方法將TI或RI清零,來撤除中斷請求信號。中斷過程分為5個(gè)階段:中斷請求、中斷優(yōu)先、中斷響應(yīng)、中斷處理和中斷返回。其中中斷處理就是執(zhí)行中斷服務(wù)程序,這就是中斷系統(tǒng)的核心。不同的計(jì)算機(jī)系統(tǒng)的中斷處理過程各具特色,但是對多數(shù)計(jì)算機(jī)而言,中斷服務(wù)程序的流程如下。中斷處理的過程基本上是由3部分組成,第一部分為準(zhǔn)備部分,它的基本功能是保護(hù)現(xiàn)場,相對于非向量中斷方式則需要確定中斷源,然后開放中斷,允許更高級的中斷請求來打斷低級的中斷服務(wù)程序;第二部分是處理部分,即真正執(zhí)行具體的為某個(gè)中斷源服務(wù)的中斷服務(wù)程序;第三部分是結(jié)尾部分,首先要關(guān)掉中斷,以便返回原來的程序后可響應(yīng)其他的中斷請求。中斷服務(wù)程序的最后一條指令一定是中斷返回指令了。流程圖如下:重新賦計(jì)數(shù)初值調(diào)顯示子程序重新賦計(jì)數(shù)初值調(diào)顯示子程序判斷是否計(jì)數(shù)到1秒鐘?1秒鐘計(jì)數(shù)器清零秒加1判斷秒是否加到一分鐘?分加1、秒清零判斷分是否加到一小時(shí)?時(shí)加1、分清零判斷時(shí)是否加到一天?時(shí)清零調(diào)轉(zhuǎn)換BCD碼子程序中斷返回中斷入口圖4-3中斷程序流程圖4.4按鍵程序?qū)τ诎存I電路的設(shè)計(jì),在沒有鍵按下去時(shí)一直為高電平,有按鍵按下時(shí)就變?yōu)榈碗娖?。單片機(jī)據(jù)此作為判斷的依據(jù)。用來表示每個(gè)不同的按鈕按下能夠?qū)崿F(xiàn)不同的功能,例如:調(diào)節(jié)定時(shí)開燈時(shí)間、定時(shí)關(guān)燈時(shí)間等等。當(dāng)單片機(jī)查到按鍵閉合時(shí),就調(diào)用按鍵功能程序,來實(shí)現(xiàn)相應(yīng)的功能。4.5程序清單與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。KeilC51是美國KeilSoftware公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),界面友好,易學(xué)易用。#include<reg51.h>sbitfunction=P1^0;sbithour_add=P1^1;sbithour_sub=P1^2;sbitminute_add=P1^3;sbitminute_sub=P1^4;sbitlamp1=P3^0;sbitlamp2=P3^1;sbitlamp3=P3^2;sbitlamp4=P3^3;sbitguang=P0^2;bitEN_COCLK=1;bitBEGIN=0;unsignedcharcnt;unsignedcharhour;unsignedcharminute;unsignedcharsecond;unsignedcharhalf_second;unsignedintms50;structtime{unsignedcharhour;unsignedcharminute;unsignedcharsecond;}ds[2];codeunsignedcharseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//CA//unsignedcharcodechoose_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcodechoose_bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsignedcharidatadisdata[7];unsignedcharidatadissetup[7];unsignedcharturnon[4]={0x01,0x02,0x04,0x08};unsignedcharkey_min_hour=0;//分或秒閃爍unsignedchardisp_type=0;//記錄時(shí)間組unsignedcharrn;//按定時(shí)開關(guān)鍵次數(shù)/****************************************延時(shí)1毫秒*****************************************/voiddelay1ms(unsignedinti){unsignedinta,b;for(a=0;a<i;a++)for(b=0;b<120;b++);}voiddelay(unsignedchara){while(--a);}/*******************************顯示時(shí)鐘*******************************/voiddisp_clock(void){unsignedchardisplay;unsignedchari;disdata[0]=hour/10;disdata[1]=hour%10;disdata[2]=minute/10;disdata[3]=minute%10;disdata[4]=second/10;disdata[5]=second%10;for(i=0;i<6;i++){P0=0xff;display=tab[disdata[i]];if(half_second&&(i==3)){display&=0x7f;}P2=choose_bit[i];P0=display;delay1ms(1);}P0=0xff;//關(guān)燈}/*******************************顯示設(shè)置時(shí)間值*******************************/voiddisp_init(void){unsignedchardisplay;unsignedchari;dissetup[0]=ds[disp_type-1].hour/10;dissetup[1]=ds[disp_type-1].hour%10;dissetup[2]=ds[disp_type-1].minute/10;dissetup[3]=ds[disp_type-1].minute%10;dissetup[4]=ds[disp_type-1].second/10;dissetup[5]=ds[disp_type-1].second%10;for(i=0;i<6;i++){P0=0xff;display=tab[dissetup[i]];if(i==3||i==1){display&=0x7f;}P2=choose_bit[i];P0=display;delay1ms(1);}P0=0xff;}/******************************鍵盤掃描子程序******************************/voidkeyscan(void){unsignedcharhouradd=1;unsignedcharminadd=1;if(!function){delay1ms(20);if(function==0){while(function==0);EN_COCLK=0;if(++disp_type==3){disp_type=0;EN_COCLK=1;}}}if(!hour_add){delay1ms(20);if(hour_add==0){while(hour_add==0);switch(disp_type){case0:if(++hour>=24)hour=0;break;case1:if(++ds[0].hour>=24)ds[0].hour=0;break;case2:if(++ds[1].hour>=24)ds[1].hour=0;break;default:break;}}}if(!hour_sub){delay1ms(20);if(hour_sub==0){while(hour_sub==0);switch(disp_type){case0:if(--hour==0xff)hour=23;break;case1:if(--ds[0].hour==0xff)ds[0].hour=23;break;case2:if(--ds[1].hour==0xff)ds[1].hour=23;break;default:break;}}}if(!minute_add){delay1ms(20);if(minute_add==0){while(minute_add==0);switch(disp_type){case0:if(++minute>=60)minute=0;break;case1:if(++ds[0].minute>=60)ds[0].minute=0;break;case2:if(++ds[1].minute>=60)ds[1].minute=0;break;default:break;}}}if(!minute_sub){delay1ms(20);if(minute_sub==0){while(minute_sub==0);switch(disp_type){case0:if(--minute==0xff)minute=59;break;case1:if(--ds[0].minute==0xff)ds[0].minute=59;break;case2:if(--ds[1].minute==0xff)ds[1].minute=59;break;default:break;}}}}/**************************************conctrl_lamp()控制路燈**************************************/voidconctrl_lamp(void){//默認(rèn)狀態(tài)下設(shè)置,晚上6點(diǎn)開燈,早上6點(diǎn)關(guān)燈if((ds[0].hour==0)&&(ds[0].minute==0)||ds[1].hour==0&&(ds[1].minute==0)){if((hour==18)&&(minute==0))P2|=0x0f;if((hour==0)&&(minute==0))P2&=~0x05;if((hour==6)&&(minute==0))P2&=~0x0f;}//如果有設(shè)置路燈的開關(guān)時(shí)間,則按照設(shè)定的開關(guān)時(shí)間開關(guān)路燈、else{if((ds[0].hour==hour)&&(ds[0].minute==minute)){P2|=0x0f;//控制P2.2—P2.5的二級管分別亮}if((ds[1].hour==hour)&&(ds[1].minute==minute)){P2&=~0x0f;//控制P2.2—P2.5的二級管分別亮}}}/************************************main()主函數(shù)************************************/voidmain(void){unsignedchari;hour=17;minute=59;second=50;cnt=20;P3=0x0;for(i=0;i<2;i++){ds[i].hour=0;ds[i].minute=0;ds[i].second=0;}TMOD=0x10;TL1=0xb0;TH1=0x3c;IE=0x88;TR1=1;unsignedchari=0;unsignedcharj=0;unsignedchark=0;while(1){if(guang!=0){for(i=0;i<=10;i++){for(j=0;j<50;j++){for(k=0;k<60;k++) {P2=seg[i/10];P0=0x01;delay(40);P2=seg[i%10];P0=0x02;delay(40);}}if(i==10){P1=~P1;i=0;}}}elseif(guang==0){delay(100);if(guang==0)P1=0;}}}while(1){keyscan();if(EN_COCLK){disp_clock();}else{disp_init();}conctrl_lamp();}}voidTimer1()interrupt3using3{ms50++;if(cnt--==10)half_second=1;if(!cnt){half_second=0;cnt=20;second++;if(second==60){second=0;minute++;if(minute==60){minute=0;hour++;if(hour==24)hour=0;}}}TL1=0xb0;TH1=0x3c;}/***********************************END***********************************/第5章系統(tǒng)調(diào)試5.1結(jié)果分析該系統(tǒng)能完成基本功能部分,光敏電阻在正常光照情況下電阻值為2K,在強(qiáng)光下電阻值為200歐姆,在黑暗情況下2M.。路燈電路正常時(shí)采樣點(diǎn)電壓為3V左右,在開路故障時(shí)電壓為0V。5.2系統(tǒng)調(diào)試系統(tǒng)調(diào)試包括兩部分:硬件調(diào)試部分及軟件調(diào)試部分。硬件調(diào)試指做成實(shí)物后,通過調(diào)試發(fā)現(xiàn)電路中的短路、虛焊、過焊等問題并加以解決。由于本次論文設(shè)計(jì)并未做成實(shí)物,故這一步省去。軟件調(diào)試主要是程序的調(diào)試,指硬件圖設(shè)計(jì)好以后,通過向單片機(jī)內(nèi)燒入程序進(jìn)行仿真,根據(jù)仿真的結(jié)果來判定程序的正確與否,從而達(dá)到調(diào)試的目的。用仿真機(jī)進(jìn)行軟件的調(diào)試。首先,建立用戶源程序。通過計(jì)算機(jī)以及開發(fā)系統(tǒng)的編輯軟件,把用C語言編輯的源程序存到計(jì)算機(jī)上。然后在仿真系統(tǒng)KeilC51上進(jìn)行源程序的編譯,如發(fā)現(xiàn)有語法錯(cuò)誤則應(yīng)改至無誤為止。5.2.1對每個(gè)子程序進(jìn)行調(diào)試①對子程序進(jìn)行編譯,檢查有無錯(cuò)誤語法。②對子程序功能進(jìn)行調(diào)試,在內(nèi)存單元設(shè)置參數(shù)數(shù)值,通過運(yùn)行子程序看CPU、RAM有關(guān)單元值是否與程序功能所得到的值相同,經(jīng)過幾次設(shè)置,并且設(shè)置的值要具有一定代表性,看它所反映的程序功能是否正確,來說明子程序是否有問題,對于子程序都有這樣一個(gè)一個(gè)調(diào)試。如我們在調(diào)試除法子程序與BCD碼轉(zhuǎn)換子程序時(shí),不斷地給內(nèi)存單元設(shè)置參數(shù)值,運(yùn)行檢查結(jié)果,檢查程序設(shè)計(jì)上是否有問題;后來發(fā)現(xiàn)是因?yàn)榻o內(nèi)存單元賦初值時(shí)沒有按照內(nèi)存單元前后順序,導(dǎo)致有些存儲單元沒有得到應(yīng)該賦的值。5.2.2總的程序調(diào)試根據(jù)系統(tǒng)要求將事先調(diào)試好的子程序結(jié)合起來,以總的程序進(jìn)行匯編,在匯編過程中發(fā)現(xiàn)一些錯(cuò)誤,比如,將阿拉伯?dāng)?shù)字的;“零”寫成字母“O”;子程序最后少“return”。還有調(diào)試子程序指令時(shí)出現(xiàn)錯(cuò)誤,原因是它所調(diào)試用范圍比較短,不能滿足被調(diào)用子程序所在范圍,調(diào)用就會出錯(cuò)。在調(diào)試總的程序時(shí),主要是兩個(gè)方面①電腦連接仿真機(jī);②觀察數(shù)碼管顯示數(shù)據(jù)是否正常,按鍵能否控制顯示。第6章結(jié)論經(jīng)過為期三個(gè)多月的畢業(yè)設(shè)計(jì)即將結(jié)束了,我完成了基于單片機(jī)的模擬路燈控制系統(tǒng)設(shè)計(jì)。本系統(tǒng)有以下幾個(gè)特點(diǎn):1.電路采用動(dòng)態(tài)顯示方式,硬件電路比較簡單,制作方便。2.采用中斷定時(shí)的方法,準(zhǔn)確度高,相對于延時(shí)來說計(jì)時(shí)更加準(zhǔn)確。3.?dāng)?shù)據(jù)處理速度快,采用了12MHZ相對傳統(tǒng)的6MHZ晶振單片機(jī)運(yùn)行速度明顯更快。此外,這個(gè)系統(tǒng)也存在著許多的不足與缺點(diǎn),驅(qū)動(dòng)能力不強(qiáng)等等。從剛接到畢業(yè)設(shè)計(jì)課題:首先我去查找一些相關(guān)的書籍及資料進(jìn)行閱讀和學(xué)習(xí),并根據(jù)實(shí)際情況擬定了總體的設(shè)計(jì)方案,從而達(dá)到優(yōu)化方案。在研究設(shè)計(jì)電路時(shí),最難的是硬件的選擇了,但在老師和同學(xué)的幫助下使得本次設(shè)計(jì)達(dá)到了預(yù)定的要求。同時(shí),通過這次畢業(yè)設(shè)計(jì),在各個(gè)方面都有了很大的提高,特別是在理論和實(shí)踐結(jié)合方面使我受益匪淺,使我大學(xué)里學(xué)習(xí)的理論知識在根本上得到一次最完整的實(shí)踐和提高。也為我即將面臨的工作奠定了很好的基礎(chǔ)。在本次畢業(yè)設(shè)計(jì)中深深認(rèn)識到自己的各個(gè)方面的不足之處,為了提高動(dòng)手能力以及檢測四年所學(xué)知識的目的,我嚴(yán)格要求自己,每一環(huán)節(jié)都認(rèn)真對待,每周向指導(dǎo)老師匯報(bào)這一周所作進(jìn)展情況,并向老師請教不懂的地方,從而得以完成這次設(shè)計(jì)。在以后的工作中,我必須進(jìn)一步深化提高,在實(shí)踐中去豐富理論,完善知識結(jié)構(gòu)體系。由于環(huán)境條件的影響,理論與實(shí)踐還是有一定的差距,這也要求我們在實(shí)踐中注意經(jīng)驗(yàn)的積累。參考文獻(xiàn)馬忠梅.單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)[M].北京,北京航空航天大學(xué)出版社,2001.黃繼昌.郭繼忠,數(shù)字電路集成應(yīng)用300例.北京,人民郵電出版社。戴佳等.51單片機(jī)C語言應(yīng)用程序設(shè)計(jì)[M].北京,人民郵電出版社。李廣弟.單片機(jī)基礎(chǔ)[M].北京:北航出版社,2010.孫育才.MCS-51系列單片微型計(jì)算機(jī)及其應(yīng)用.東南大學(xué)出版社.徐惠民.單片微型計(jì)算機(jī)習(xí)題與解答.北京郵電學(xué)院出版社.ATIFMR,GALASIUAD.Energyperformanceofdaylightlinkedautomaticlightingcontrdsystemsinlargeatriumspaces:reportontwofield-monitoredcasestudies[J].ElsevierEnergyandBuildings,2003,35:441-461.LCSMR,LHYMR.Studyofanenergy-savingequipmentofstreetlightbasedonMCU[J].ENERGYCONSERVATION,2007,26:120-367.沈德金.單片機(jī)接口技術(shù)實(shí)驗(yàn)指導(dǎo).北京航空航天大學(xué)出版社.吳永橋,金康進(jìn),施光林.基于AT89C52的日光燈照明節(jié)電控制系統(tǒng)[J].微型機(jī)與應(yīng)用,2004,23(8):36-38.邊春元,李文濤.C51單片機(jī)典型模塊設(shè)計(jì)與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2008.徐科軍.傳感器與檢測技術(shù)[M].北京:電子工業(yè)出版社,1994,6.陳杰,黃省鴻.傳感器與檢測技術(shù)[M].北京:高等教育出版社,2002.工業(yè)和信息化部.單片機(jī)與嵌入式系統(tǒng)應(yīng)用.[期刊].北京:北京航空航天大學(xué).沙占友.集成化智能傳感器原理與應(yīng)用.北京:電子工業(yè)出版社.2004.夏路易,單片機(jī)原理及應(yīng)用.電子工業(yè)出版社馬春燕,段承先,秦文萍.微機(jī)原理與接口技術(shù)(基于32位機(jī)),電子工業(yè)出版社.鄭學(xué)堅(jiān),周斌.微型計(jì)算機(jī)原理及運(yùn)用.第三版.清華大學(xué)出版社.2002:49—80.楊素行.模擬電子技術(shù)基礎(chǔ).第二版.高等教育出版社.1997:80—90.張友德.單片機(jī)原理應(yīng)用與實(shí)驗(yàn).復(fù)旦大學(xué)出版社.1995:159—163.牛昱光.單片機(jī)原理與接口技術(shù),電子工業(yè)出版社.夏路易.基于EDA的電子技術(shù)課程設(shè)計(jì)[M].電子工業(yè)出版社,2009.1:283~329.AT89C51DATASHEEPphilipsSemiconductors1999.dec蘇鐵力.傳感器及其接口技術(shù),中國石化出版社<BR>何利民MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)北京航空航天大學(xué)出版社.2003.王建校,楊建國,寧改娣,危建國.51系列單片機(jī)及程序設(shè)計(jì).科學(xué)出版社.2002.陳杰,黃省鴻.傳感器與檢測技術(shù)[M].北京:高等教育出版社,2002.BarbaraZitova.JanFlusher.Imageregistrationmethods:survey[J].ImageandVisionComputing.2003(21):977-1000.WUYou,SHAHong.ThedesignandimplementationofasignalsourceforEITsystemusingDSPbuilder[C]//2ndInternationalConference[S.l.]:[s.n.],2009:1-5.[30]吳金戎,沈慶陽,郭庭吉.8051單片機(jī)實(shí)踐與應(yīng)用.清華大學(xué)出版社.2002附錄A外文參考及中文翻譯外文原文TheIntroductionofAT89C51DescriptionTheAT89C51isalow-power,high-performanceCMOS8-bitmicrocomputerwith4KbytesofFlashprogrammableanderasablereadonlymemory(PEROM).ThedeviceismanufacturedusingAtmel’shigh-densitynonvolatilememorytechnologyandiscompatiblewiththeindustry-standardMCS-51instructionsetandpinout.Theon-chipFlashallowprogrammemorytobereprogrammedin-systemorbyaconventionalnonvolatilememoryprogrammer.Bycombiningaversatile8-bitCPUwithFlashonamonolithicchip,theAtAT89C51isapowerfulmicrocomputerwhichprovidesahighly-flexibleandcost-effectsolutiontomanyembeddedcontrolapplications.FunctioncharacteristicTheAT89C51providesthefollowingstandardfeatures:4KbytesofFlash,128bytesRAM,32I/Olines,two16-bittimer/counters,afivevectortwo-levelinterruptarchitfullduplexserialport,on-chiposcillatorandclockcircuitry.Inaddition,theAT89C51isdesignedwithstaticlogicforoperationdowntozerofrequencyandsupportstwosoftwareselectablepowersavingmodes.TheIdleModestopstheCPUwhileallowingtheRAM,timer/counters,serialportandinterruptsystemtocontinuefunctioning.ThePower-downModesavestheRAMcontentsbutfreezestheoscillatordisablingallotherchipfunctionsuntilthenexthardwarereset.PinDescriptionVCC:Supplyvoltage.GND:Ground.Port0:Port0isan8-bitopen-drabi-directionalnI/Oport.Asanoutputport,eachcanpinsinkeightTTLinputs.When1sarewrittentoport0pins,thepinscanbeusedashighimpedanceinputs.Port0mayalsobeconfiguredtobethemultiplexedloworderaddressbusduringaccessestoexternalprogramanddatamemory.InthismodeP0hasinternalpullups.Port0alsoreceivesthecodebytesduringFlashprogramming,andoutputsthebytesduringprogramverification.ExternalpullupsarerequiredduringprogramverifPort1Port1isan8-bitbi-directionalI/Oportwithinternalpullups.ThePort1outpucansink/sourcefourTTLinputs.When1sarewrittentoPort1pinstheyarepulledhtheinternalpull-upsandcanbeusedasinputs.Asinputs,Port1pinsthatareexternpulledlowwillsourcecurrent(IIL)becauseoftheinternalpullups.Port1alsoreclow-orderaddressbytesduringFlashprogrammingandverification.Port2Port2isan8-bitbi-directionalI/Oportwithinternalpullups.ThePort2outpucansink/sourcefourTTLinputs.When1sarewrittentoPort2pinstheyarepulledhtheinternalpull-upsandcanbeusedasinputs.Asinputs,Port2pinsthatareexternpulledlowwillsourcecurrent,becauseoftheinternalpullups.Port2emitsthehigh-orderaddressbyteduringfetchesfromexternalprogrammemoryandduringaccessestoexterdatamemorythatuse16-bitaddresses.Inthisapplication,itusesstronginternalpuemitting1s.Duringaccessestoexternaldatamemorythatuse8-bitaddresses,PortthecontentsoftheP2SpecialFunctionRegister.Port2alsoreceivesthehigh-orderbitsandsomecontrolsignalsduringFlashprogrammingandverification.Port3Port3isan8-bitbi-directionalI/Oportwithinternalpullups.ThePort3outpucansink/sourcefourTTLinputs.When1sarewrittentoPort3pinstheyarepulledhtheinternalpull-upsandcanbeusedasinputs.Asinputs,Port3pinsthatareexternpulledlowwillsourcecurrent(IIL)becauseofthepullups.Port3alsoservesthefunvariousspecialfeaturesoftheAT89C51aslistedbelow:Port3alsoreceivessomecontrolsignalsforFlashprogrammingandverification.RSTResetinput.Ahighonthispinfortwomachinecycleswhiletheoscillatorisrresetsthedevice.ALE/PROGAddressLatchEnableoutputpulseforlatchingthelowbyteoftheaddressduringaccessestoexternalmemory.Thispinisalsotheprogrampulseinput(PROG)duringFprogramming.InnormaloperationALEisemittedataconstantrateof1/6theoscillatorfrequency,andmaybeusedforexternalt

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論