已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
定時電源插座江蘇信息職業(yè)技術(shù)學(xué)院畢業(yè)論文課題 定時電源插座 系 電子信息工程系 專業(yè) 應(yīng)用電子技術(shù) 姓名 班級 學(xué)號 指導(dǎo)教師 職稱 指導(dǎo)教師 職稱 設(shè)計時間 2010.11.222011.1.8 摘要近年來隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷深入,同時帶動傳統(tǒng)控制檢測技術(shù)日益更新。在實時檢測和自動控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往作為一個核心部件來使用,僅單片機(jī)方面知識是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu)軟硬件結(jié)合,加以完善。本論文是基于單片機(jī)技術(shù)原理,以單片機(jī)芯片at89s52作為核心控制器,通過硬件電路的制作以及軟件程序的編制,設(shè)計制作出一個定時電源。關(guān)鍵詞:單片機(jī);定時電源;at89s52目錄目錄3第一章 前言41.1設(shè)計任務(wù)41.2 總設(shè)計框圖5第二章 主要元件介紹52.1 at89s52的功能特性描述52.2 at89s52引腳功能62.3 特殊功能寄存器72.4 數(shù)據(jù)存儲器72.5 捕獲方式82.6 自動重裝載方式82.7波特率發(fā)生器82.8可編程始終輸出92.9中斷92.10時鐘振蕩器92.11 模式10212 flash存儲器的編程10第三章 系統(tǒng)設(shè)計113.1 編程方法113.2 數(shù)據(jù)查詢113.3 ready/busy123.4 排阻123.5硬件電路圖13第四章軟件方案設(shè)計164.1 程序設(shè)計16總結(jié)24致謝25參考文獻(xiàn)26附錄1 總系統(tǒng)框圖27附錄2 使用說明書27第一章 前言1.1設(shè)計任務(wù)1. 利用單片機(jī)設(shè)計一定時開關(guān),在24小時內(nèi)的時間里能預(yù)先設(shè)定定時范圍,每天周而復(fù)始地控制用電器具的自動開啟和關(guān)閉。2. 要求最少能獨立控制兩路220v10a的交流負(fù)載。3. 產(chǎn)品的成本應(yīng)盡量低。4. 產(chǎn)品的功能應(yīng)盡量多,最少應(yīng)具有時間顯示和校正、定時顯示和設(shè)置等功能。5. 產(chǎn)品的質(zhì)量應(yīng)可靠、安全。具體性能指標(biāo)如下:供電電源:220v 50hz 使用環(huán)境溫度:-10至40度功率消耗:10a 定時范圍:1分鐘至23小時59分任意設(shè)定最小設(shè)定單位:1分鐘 最小設(shè)定間隙:1分鐘 定時精度:1分鐘 課定時次數(shù):不少于1次工作坊式:連續(xù)工作制6. 設(shè)計并制作單片機(jī)控制電路,要求能夠顯示時間、通過按鍵修改時間和設(shè)置定時。7. 設(shè)計并制作輸出控制電路,要求能控制兩路以上220v/10a的插座。8. 編寫產(chǎn)品使用說明書。1.2 總設(shè)計框圖第二章 主要元件介紹2.1 at89s52的功能特性描述at89s52是一個低功耗,高性能cmos 8位單片機(jī),片內(nèi)含8k可反復(fù)擦寫的程序存儲器和12b的隨機(jī)存儲數(shù)據(jù)存儲器(ram),器件采用atmel公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)mcs-51指令系統(tǒng),片內(nèi)配置通用8位中央處理器(cpu)和flash存儲單元,功能強(qiáng)大的at89s52單片機(jī)課靈活應(yīng)用于各種控制領(lǐng)域。其主要工作特性如下:片內(nèi)程序存儲器含8k的flash程序存儲器,可擦寫壽命為1000次;片內(nèi)程序存儲器256字節(jié)的ram;具有32根可編程i/o口線;具有3個可編程定時器;中斷系統(tǒng)是具有8個中斷源、6個中斷矢量、2個級優(yōu)先權(quán)的中斷結(jié)構(gòu);串行口是具有一個全雙工口的可編程串行通信口;具有一個數(shù)據(jù)指針dptr;低功耗工作模式有空閑模式和掉電模式;具有可編程的3級程序鎖定位;at89s52工作電源電壓為5(1+0.2)v,且典型值為5v;2.2 at89s52引腳功能at89s52引腳圖(1)p0口:p0口是一組8位漏級開路雙向i/o口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個ttl邏輯門電路,對端口p0寫“1”時,可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址的(低八位)和數(shù)據(jù)總線復(fù)用,在在訪問期間激活內(nèi)部上拉電阻。在fiash編程時,p0 口接收指令字節(jié), 而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。(2)p1口:p1口是一個帶有內(nèi)部提供上拉電阻的8位雙向i/o口,p1口輸出緩沖級可驅(qū)動(吸收或輸出)4個ttl邏輯門電路。對端口寫入“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時,可用作輸入口。作為輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(ill)。與at89c51不同之處是,p1.0和p1.1還可分別作為定時/計數(shù)2的外部計數(shù)輸入(p1.0/t2)和輸入(p1.1/t2ex)。flash編程和校驗期間,p1接收低八位地址。(3)p2口:p2口為一個帶有內(nèi)部上拉電阻的8位雙向i/o口,p2口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路。當(dāng)端口p2寫“1”, 通過內(nèi)部的上拉電阻把端口拉到高電平,此時,可用作輸入口。作為輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(ill)。在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器,(例如執(zhí)行movx dptr指令)時,p2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行movx r1指令)時,p2口輸出p2鎖存器的內(nèi)容。flash編程和校驗時p2亦接收高位地址和一些控制信號。(4)p3口:p3是一組帶有內(nèi)部上拉電阻的8位雙向i/o口,p3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路。對p3口寫入“1”時,它們被內(nèi)部上拉為高電平并用作輸入端口。此時,被外部拉低的p3口將用上拉電阻輸出電流(ill)。p3口除了作為一般的i/o口線外,更重要的用途是它的第二功能,p3口還接收一些用于flash閃速存儲器編程和程序校驗的控制信號。(5)rst:復(fù)位輸入。當(dāng)振蕩器工作時,rst引腳出現(xiàn)兩個機(jī)器周期以上高電平使單片機(jī)復(fù)位。(6)ale/prog:當(dāng)訪問外部存儲器或數(shù)據(jù)存儲器時,ale(地址鎖存允許)的輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ale仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號。因此它可對外部輸出的脈沖或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時,將跳過一個ale脈沖。如有必要,可通過對特殊寄存器(sfr)區(qū)中的8eh單元的d0位置位,可禁止ale操作。該位置后,只有一條movx和movc指令才能將ale激活。此外,該引腳會被略微拉高。單片機(jī)執(zhí)行外部程序時,應(yīng)設(shè)置ale禁止位無效。(7)/psen:程序存儲允許(psen)是外部程序存儲器選通信號。當(dāng)at89s52由外部程序存儲器取指令(或數(shù)據(jù))時,每個機(jī)器周期兩次/psen有效即輸出兩個脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器時,將跳過兩次/psen信號。(8)/ea/vpp:外部訪問允許。欲使cpu僅訪問外部程序存儲器(地址為0000h-ffffh),ea端必須保持低電平(接地)。需注意的是:如果加密lb1被編程,復(fù)位時會鎖存ea端狀態(tài)。如/ea端為高電平(接vcc端),cpu則執(zhí)行內(nèi)部程序存儲器中的指令。flash編程時,該引腳也加上+12v編程電源(vpp),當(dāng)然這必須是該器件是使用12v編程電源(vpp)。(9)xtal1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生的輸入器。(10)xtal2:振蕩器反相放大器的輸出端。 2.3 特殊功能寄存器在at89s52片內(nèi)存儲器中,80h-ffh共128個單元為特殊功能寄存器(sfr)。并非所有的地址都被定義,從80h-ffh共128個字節(jié)只有一部分被定義,還有相當(dāng)一部分沒有定義。對沒有定義的單元讀寫將是無效的,讀出的數(shù)據(jù)將不確定,而寫入的數(shù)據(jù)也將丟失。不應(yīng)將數(shù)據(jù)“1”寫入未定義的單元,由于這些單元在將來的產(chǎn)品中可能賦予新的功能,在這種情況下,復(fù)位后這些單元數(shù)值總是“0”。 at89s52除了與at89c51所有的定時/計數(shù)0和定時/計數(shù)1外,還增加了一個定時/計數(shù)2。定時/計數(shù)2的控制和狀態(tài)位位于t2cont2mod,寄存器對(rca02hrcap2l)是定時器2在16位捕捉方式或16為自動重裝載方式下的捕捉/自動重裝載寄存器。2.4 數(shù)據(jù)存儲器at89s52有256個字節(jié)的內(nèi)部ram,80h-ffh高128個字節(jié)與特殊功能寄存器(sfr)地址是重疊的,也就是高128個字節(jié)的ram與特殊功能寄存器的地址死機(jī)相同的,但物理上它們是分開的。當(dāng)一條指令訪問7fh以上的內(nèi)部地址單元時,指令中使用的尋址方式是不同的,也即尋址方式?jīng)Q定是訪問特殊功能寄存器。如果指令是直接尋址方式則為訪問特殊功能寄存器。堆棧操作也是間接尋址方式,所以,高128位數(shù)據(jù)ram亦可作為堆棧區(qū)使用。定時器0和定時器1:at89s52的定時器0和定時器1的工作方式與at89c51相同。定時器2:定時器2是一個16位定時/計數(shù)器。它既可以當(dāng)定時器使用,也可作為外部事件計數(shù)器使用,其工作方式由特殊功能寄存器t2con的c/t2位選擇。定時器2有三種工作方式:捕獲方式,自動重裝載(向上或向下計數(shù))方式和波特率發(fā)生器方式,工作方式由t2con的控制位來選擇。定時器2由兩個8位寄存器th2和tl2組成,在定時器工作方式中,每個機(jī)器周期tl2寄存器的值加1,由于一個機(jī)器周期由12個振蕩時鐘構(gòu)成,因此,計數(shù)速率為振蕩器的1/12。在計數(shù)工作方式時,當(dāng)t2引腳上外部輸入信號產(chǎn)生由1至0的下降延時,寄存器的值加1,在這種工作方式下,每個機(jī)器周期的5sp2期間,對外部輸入進(jìn)行采樣。若在第一個機(jī)器周期中采到的值為1,而在下一個機(jī)器周期中采到的值為0則在緊跟著的下一個機(jī)器周期的s3p1期間寄存器加1.由于識別1至0的跳變需要2個機(jī)器周期(24個振蕩周期),因此,最高計數(shù)速率為振蕩頻率的1/24。為確保采樣的正確性,要求輸入的電平在變化前至少保持一個完整周期的時間,以保證輸入信號至少被采樣過一次。2.5 捕獲方式在捕獲方式下,通過t2con控制位exen2來選擇兩種方式。如果exen2=0,定時器2是一個16位定時器或計數(shù)器,計數(shù)溢出時,對t2con的溢出標(biāo)志tf2置位,同時激活中斷。如果exen2=1,定時器2完成相同的操作,而當(dāng)t2ex引腳外部信號發(fā)生1至0負(fù)跳變時,也出現(xiàn)th2和tl2中的值分別被捕獲到rcap2h和rcap2l中。另外,t2ex引腳信號的跳變使得t2con中的exf2置位,與tf2相仿,exf2也會激活中斷。2.6 自動重裝載方式當(dāng)定時器2工作于16位自動重裝載方式時,能對其編程為向上或向下計數(shù)器方式,這個功能可通過特殊功能寄存器t2con的dcen位(允許向下計數(shù))來選擇。復(fù)位時,dcen位置“0”,定時器2默認(rèn)設(shè)置為向上計數(shù)。當(dāng)dcen位置時,定時器2既可向上計數(shù)也可向下計數(shù),這取決于t2ex引腳的值,當(dāng)dcen=0時,定時器2自動設(shè)置為向上計數(shù),在這種方式下,t2con中的exen2控制位有兩種選擇。若exen2=0,定時器2為向上計數(shù)至0ffffh溢出,置位tf2激活中斷,同時把16位計數(shù)寄存器rcapl2h和rcap2l重裝載,rcapl2h和rcap2l的值可由軟件預(yù)置。若exen2=1,定時器2的16位重裝載由溢出或外部輸入端t2ex從1至0的下降沿觸發(fā)。這個脈沖是exf2置位,如果中斷允許,同樣產(chǎn)生中斷。定時器2的中斷入口地址是002bh-0032h。當(dāng)dcen=1時,允許定時器2向上或向下計數(shù),如圖所示。這種方式下,t2ex引腳控制計數(shù)方向。t2ex引腳為邏輯“1”時,定時器向上計數(shù),當(dāng)計數(shù)到0ffffh向上溢出時,置位tf2,同時把16位計數(shù)寄存器rcap2h和rcap2l重裝載到th2和tl2中。t2ex引腳為邏輯“0”時,計數(shù)溢出,置位tf2,同時將0ffffh數(shù)值重新裝入定時寄存器中。當(dāng)定時/計數(shù)器2向上或向下溢出時,置位exf2。2.7波特率發(fā)生器當(dāng)t2con中的tclk和rclk置位時,定時/計數(shù)器2作為波特率發(fā)生器使用。如果定時/計數(shù)器2作為發(fā)送器或接收器,其發(fā)送和接收的波特率可以是不同的,定時1用于其他功能。若rclk和tclk置位,則定時器2工作于波特率發(fā)生器方式。波特率發(fā)生器的方式與自動重裝載方式相仿,在此方式下,th2翻轉(zhuǎn)使定時器2的寄存器用rcap2h和rcapl中的16為數(shù)值重新裝載,該數(shù)值由軟件設(shè)置。在方式1和方式3中,波特率由定時器2的溢出速度根據(jù)下式確定:方式1和3的波特率=定時器的溢出率/16定時器既能工作于定時方式也能工作于計數(shù)方式,在大多數(shù)的應(yīng)用中,是工作在定時方式(c/t2=0)。定時器2作為波特率發(fā)生器時,與作為定時器的操作是不同的,通常作為定時器時,在每個機(jī)器周期(1/12振蕩頻率)寄存器的值加1,而作為波特率發(fā)生器使用時,在每個狀態(tài)時間(1/2振蕩頻率)寄存器的值加1。波特率的計算公式如下:方式1和3的波特率=振蕩頻率/32*65536-(rcap2h,rcap2l)式中(rcap2h,rcap2l)是rcap3h和rcap2l中的16位無符號數(shù)。t2con中的rclk或tclk=1時,波特率工作方式才有效。在波特率發(fā)生器工作方式中,th2翻轉(zhuǎn)不能使tf2置位,故而不產(chǎn)生中斷。但若exen2置位,且t2ex端產(chǎn)生由1至0的負(fù)跳變,則會使exf2置位,此時并不能將(rcap2h,rcap2l)的內(nèi)容重新裝入th2和tl2中。所以,當(dāng)定時器2作為波特率發(fā)生器使用時,t2ex可作為附加的外部中斷源來使用。需注意的是,當(dāng)定時器2工作于波特率發(fā)生器時,作為定時器運行(tr2=1)時,并不能訪問th2和tl2。因此每個狀態(tài)時間定時器都會加1,對其讀寫將得到一個不確定的數(shù)值。然而,對rcap2則可讀而不可寫,因為寫入操作將是重新裝載,寫入操作可能令寫和重新裝載出錯。在訪問定時器2或rcap2寄存器之前,應(yīng)將定時器關(guān)閉(清除tr2)。2.8可編程始終輸出定時器2可通過編程從p1.0輸出一個占空比為50%的時鐘信號。p1.0引腳除了是一個標(biāo)準(zhǔn)的i/o口外,還可以通過編程使其作為定時/計數(shù)器2的外部時鐘輸入和輸出占空比50%的時鐘脈沖。當(dāng)時鐘振蕩頻率為16mhz時,輸出時鐘頻率范圍為61hz-4mhz。 當(dāng)設(shè)置定時/計數(shù)器2為時鐘發(fā)生器時,c/t2(y2con.1)=0,t2oe(t2mod.1)=1,必須由tr2(t2con.2)啟動或停止定時器。始終輸出頻率取決于振蕩頻率和定時器2捕獲寄存器(rcap2h,rcap2l)的重新裝載值,公式如下:輸出時鐘頻率=振蕩器頻率/4*65536-(rcap2h,rcap2l)在時鐘輸出方式下,定時器2的翻轉(zhuǎn)不會產(chǎn)生中斷,這個特性與作為波特率發(fā)生器使用時相仿。定時器2作為波特率發(fā)生器使用時,還可以作為時鐘發(fā)生器使用,但需注意的是波特率和時鐘輸出頻率不能分開確定,這是因為它們同時使用rcap2h和rcap2l。2.9中斷at89s52共有6個中斷向量:2個外部中斷源(int0和int1),3個定時器中斷(定時器012)和串行口中斷。這些中斷源可通過分別設(shè)置專用寄存器ie的置位或清0來控制每一個中斷的允許或禁止。ie也有一個總禁止位ea,它能控制所有中斷的允許或禁止。注意表5中的ie.6為保留位,在at89c51中ie.5也是保留位。程序員不應(yīng)將“1”寫入這些位,它們是將來at89系列產(chǎn)品作為擴(kuò)展用的。定時器2的中斷是由t2con中的tf2和exf2產(chǎn)生的,當(dāng)轉(zhuǎn)向中斷服務(wù)程序時,這些標(biāo)志位不能被硬件清除,事實上,服務(wù)程序需確定是tf2或exf2產(chǎn)生中斷,而有軟件清除中斷標(biāo)志位。定時器0和定時器1的標(biāo)志位tf0和tf1在定時器溢出那個周期的s5p2狀態(tài)位置,而會在下一個機(jī)器周期才查詢到該中斷標(biāo)志。然而,定時器2的標(biāo)志位tf2在定時器溢出的那個周期的s2p2狀態(tài)位置,并在同一個周期內(nèi)查詢到該標(biāo)志。2.10時鐘振蕩器at89s52中是一個用于構(gòu)成內(nèi)部振蕩器的高增益反向放大器,引腳xtal1和xtal2分別是該放大器份的輸入端和輸出端。這個放大器與作為片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器。外接石英晶體或陶瓷諧振器及電容c1,c2接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。對外接電容c1,c2雖然沒有十分嚴(yán)格的要求,但電容容量的大小會輕微影響振蕩頻率的高低,振蕩器工作的穩(wěn)定性,起振的難易程度及溫度穩(wěn)定性。如果石英晶體,我們推薦電容使用30pf+10pf,而使用陶瓷諧振器建議使用40pf+10pf。用戶也可以采用外部時鐘。采用外部時鐘的電路,這種情況下,外部時鐘脈沖接到xtal1端,即內(nèi)部時鐘發(fā)生器的輸入端,xtal2則懸空。由于外部時鐘信號是通過一個2分頻觸發(fā)器后作為內(nèi)部時鐘信號的,所以對外部時鐘信號的占空比沒有特殊要求,但最小高電平持續(xù)時間和最大的低電平持續(xù)時間應(yīng)符合產(chǎn)品技術(shù)條件的要求。2.11 模式(1)空閑節(jié)電模式:在空閑工作模式狀態(tài), cpu 自身處于睡眠狀態(tài)而所有片內(nèi)的外設(shè)仍保持激活狀態(tài),這種方式由軟件產(chǎn)生。此時,同時將片內(nèi)ram 和所有特殊功能寄存器的內(nèi)容凍結(jié)??臻e模式可由任何允許的中斷請求或硬件復(fù)位終止。由硬件復(fù)位終止空閑狀態(tài)只需兩個機(jī)器周期有效復(fù)位信號,在此狀態(tài)下,片內(nèi)硬件禁止訪問內(nèi)部ram,但可以訪問端口引腳,當(dāng)用復(fù)位終止空閑方式時,為避免可能對端口產(chǎn)生意外寫入,激活空閑模式的那條指令后一條指令不應(yīng)是一條對端口或外部存儲器的寫入指令。(2)掉電模式:在掉電模式下,振蕩器停止工作,進(jìn)入掉電模式的指令是最后一條被執(zhí)行的指令,片內(nèi)ram 和特殊功能寄存器的內(nèi)容在終止掉電模式前被凍結(jié)。退出掉電模式的唯一方法是硬件復(fù)位,復(fù)位后將重新定義全部特殊功能寄存器,但不改變ram中的內(nèi)容,在vcc恢復(fù)到正常工作電平前,復(fù)位應(yīng)無效,且必須保持一定時間以使振蕩器重啟動并穩(wěn)定工作。212 flash存儲器的編程at89s52單片機(jī)內(nèi)部有8k字節(jié)的flash perom,這個flash 存儲陣列出廠時已處于擦除狀態(tài)(即所有存儲單元的內(nèi)容均為ffh),用戶隨時可對其進(jìn)行編程。編程接口可接收高電壓(+12v)或低電壓(vcc)的允許編程信號。低電壓編程模式適合于用戶在線編程系統(tǒng),而高電壓編程模式可與通用eprom編程器兼容。at89s52 單片機(jī)中,有些屬于低電壓編程方式,而有些則是高電壓編程方式,用戶可從芯片上的型號和讀取芯片內(nèi)的簽名字節(jié)獲得該信息。at89s52 的程序存儲器陣列是采用字節(jié)寫入方式編程的,每次寫入一個字節(jié),要對整個芯片內(nèi)的perom 程序存儲器寫入一個非空字節(jié),必須使用片擦除的方式將整個存儲器的內(nèi)容清除。第三章 系統(tǒng)設(shè)計3.1 編程方法編程前,設(shè)置好地址、數(shù)據(jù)及控制信號,at89s52 編程方法如下:1 在地址線上加上要編程單元的地址信號。2 在數(shù)據(jù)線上加上要寫入的數(shù)據(jù)字節(jié)。3 激活相應(yīng)的控制信號。4 在高電壓編程方式時,將ea/vpp 端加上+12v 編程電壓。5 每對flash 存儲陣列寫入一個字節(jié)或每寫入一個程序加密位,加上一個ale/prog 編程脈沖。每個字節(jié)寫入周期是自身定時的,通常約為1.5ms。重復(fù)15 步驟,改變編程單元的地址和寫入的數(shù)據(jù),直到全部文件編程結(jié)束。3.2 數(shù)據(jù)查詢at89s52 單片機(jī)用data palling 表示一個寫周期結(jié)束為特征,在一個寫周期中,如需讀取最后寫入的一個字節(jié),則讀出的數(shù)據(jù)的最高位(p0.7)是原來寫入字節(jié)最高位的反碼。寫周期完成后,所輸出的數(shù)據(jù)是有效的數(shù)據(jù),即可進(jìn)入下一個字節(jié)的寫周期,寫周期開始后,data palling 可能隨時有效。3.3 ready/busy字節(jié)編程的進(jìn)度可通過“rdy/bsy 輸出信號監(jiān)測,編程期間,ale 變?yōu)楦唠娖健癶”后,p3.4(rdy/bsy)端電平被拉低,表示正在編程狀態(tài)(忙狀態(tài))。編程完成后,p3.4 變?yōu)楦唠娖奖硎緶?zhǔn)備就緒狀3.4 排阻排阻,就是若干個參數(shù)完全相同的電阻,它們的一個引腳都連到一起,作為公共引腳,其余引腳正常引出。所以如果一個排阻是由n個電阻構(gòu)成的,那么它就有n+1只引腳,一般來說,最左邊的那個是公共引腳。它在排阻上一般用一個色點標(biāo)出來。排阻一般應(yīng)用在數(shù)字電路上,比如:作為某個并行口的上拉或者下拉電阻用。使用排阻比用若干只固定電阻更方便。 排阻有a型和b型的區(qū)別。a型排阻的引腳總是奇數(shù)的。它的左端有一個公共端(用白色的圓點表示),常見的排阻有4、7、8個電阻,所以引腳共有5或8或9個。b型排阻的引腳總是偶數(shù)的。它沒有公共端,常見的排阻有4個電阻,所以引腳共有8個。排阻的阻值讀法如下:“103”表示:10k,“510”表示:51。以此類推。lg2841結(jié)構(gòu)圖:3.5硬件電路圖(1)電源部分:(2)單片機(jī)部分:(3)開關(guān)控制部分:第四章 軟件方案設(shè)計4.1 程序設(shè)計/*程控定時開關(guān)*/#include/*包含庫函數(shù)*/*七段數(shù)碼管,高電平有效,順序為abcdefg*/unsigned char led=0,0,0,0;/*將四個led定義成一個數(shù)組,用來顯示時、分和秒*/char code num=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;unsigned int counter;/*counter作為定時器中斷次數(shù)的計數(shù)器*/unsigned char n,w=0,flag1=0,flag2=0;/*n為閃爍次數(shù)計數(shù)器,w為顯示計數(shù)器,flag為設(shè)置按鍵計數(shù)器,flag1和flag2均為延時消抖計數(shù)器*/unsigned char k1_on=0,k2_on=0;/*k1_on和k2_on分別為開關(guān)1和開關(guān)2的開啟和關(guān)斷狀態(tài)寄存器*/unsigned char h_date=0.m_data=0,s data=0;/*時鐘的時、分、秒計數(shù)器*/unsigned char hdata1_off=0,mdata1_on=3,hdata2_on=0,mdata_on=7;/*開關(guān)1和開關(guān)2的開啟時間寄存器*/unsigned char hdata1_off=0,mdata1_off=5,hdata2_off=0,mdata_off=9;/*開關(guān)1和開關(guān)2的關(guān)斷時間寄存器*/void display(void);/*申明顯示子程序*/void delay(unsigned int j)/*定義可變延時子程序*/unsigned int i;for(i=0;i23)h1=h1%10;return h1;/*定義時的十位加1函數(shù)*/unsigned char h0_set(unsigned char h0) if(h0%10=3&h0/10=2) h0=h0/10*1;else h0=h0%10+1+h0/10*10;return h0;/*定義時的個位加1函數(shù)*/unsigned char m1_set(unsigned char m1)m1=(m1/10+1)*10+m1%10;if(m1=60)m1=m1%10;return m1;/*定義分的十位加1函數(shù)*/unsigned char m0_set(unsigned char m0) if(m0%10=9) m0=m0/10*10;else m0=m0%10+1+m0/10*10;return m0;/*定義分的個位加1函數(shù)*/void display(void)/*定義顯示子程序*/char code num=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/*定義0-9的led顯示段碼數(shù)組.0x00為不顯示(消隱)*/char code tv=0xfe,0xfd,0xfb,oxf7;/*定義位碼數(shù)組,用于控制顯示碼送到哪個led*/unsigned char k,i;switch(flag)/*根據(jù)設(shè)置所處的模式顯示時鐘*/case 0:load_led(h_data,m_data);break; /*顯示時鐘*/case 1:load_led(h_data,m_data);break; /*顯示修改時鐘設(shè)置*/case 2:load_led(hdata1_on,mdata1_on);break;/*顯示設(shè)置開關(guān)1開啟時間設(shè)*/case 3:load_led(hdata1_off,mdata1_off);break;/*顯示設(shè)置開關(guān)1關(guān)斷時間設(shè)置*/case 4:load_led(hdata2_on,mdata2_on);break;/*顯示設(shè)置開關(guān)2開啟時間設(shè)置*/case 5:load_led(hdata2_off,mdata2_off);break;/*顯示設(shè)置開關(guān)2關(guān)斷時間設(shè)置*/case 6:load_led(hdata1_on,mdata1_on);break;/*顯示設(shè)置開關(guān)1設(shè)置好的開啟時間*/case 7:load_led(hdata1_off,mdata1_off);break;/*顯示設(shè)置開關(guān)1設(shè)置好的關(guān)斷時間*/case 8:load_led(hdata2_on,mdata2_on);break;/*顯示設(shè)置開關(guān)2設(shè)置好的開啟時間*/case 9:load_led(hdata2_off,mdata2_off);break;/*顯示設(shè)置開關(guān)2設(shè)置好的關(guān)斷時間*/default:p1=0xff;load_led(h_data,m_data);break; /* 其他情況下,顯示時鐘*/ n+; /*n用來對顯示的次數(shù)進(jìn)行計數(shù),以便控制對需要設(shè)置的位進(jìn)行閃爍*/for(k=0;k180) /*每送顯示180次則進(jìn)行一次閃爍*/n=0;if(k=w) /*如果送顯示的位是正準(zhǔn)備調(diào)整的位,則需要閃爍顯示,以下兩句是控制閃爍顯示*/if(n50)flag1=0; flag+; /*用flag對調(diào)整鍵按下次數(shù)計數(shù),目的是通過一個按鍵實現(xiàn)多種功能*/if(flag=10) flag=0; /*/if(p3_1=0) /* 移位控制鍵,在4個led上來回移動,選擇需要設(shè)置的led*/ delay(100); /* 消抖*/while(p3_1=0)display()if(flag)/*當(dāng)flag不等于0時,說明處于調(diào)整狀態(tài),此時通過移位鍵選擇調(diào)整哪一個led*/w=w+1; /*移位鍵控制w加1,用于修改位碼,w代表4個led數(shù)碼管的某一位*/if(w=4) w=0; /*/if(p3_2=0) /* 加1操作*/delay(100); /* 消抖*/while(p3_2=0)display();if(flag) /*當(dāng)處于調(diào)整模式時,對所選擇的led進(jìn)行加1*/switch(flag)case 1: if(w=0) h_data=h1_set(h_data);display(); /*校準(zhǔn)時間的時、分*/if(w=1) h_data=h0_set(h_data);display();if(w=2) m_data=m1_set(m_data);display();if(w=3) m_data=m0_set(m_data);display();break; case 2: if(w=0) hdata1_on=h1_set(hdata1_on);display();/* 設(shè)置開關(guān)1開啟時間的時、分*/if(w=1) hdata1_on=h0_set(hdata1_on);display();if(w=2) mdata1_on=m1_set(mdata1_on);display();if(w=3) mdata1_on=m0_set(mdata1_on);display(); /* 設(shè)置開關(guān)1關(guān)斷時間的時、分*/break; case 3: if(w=0) hdata1_off=h1_set(hdata1_off);display();if(w=1) hdata1_off=h0_set(hdata1_off);display();if(w=2) mdata1_off=m1_set(mdata1_off);display();if(w=3) mdata1_off=m0_set(mdata1_off);display();break; case 4: if(w=0) hdata2_on=h1_set(hdata2_on);display(); /*設(shè)置開關(guān)2開啟時間的時、分*/if(w=1) hdata2_on=h0_set(hdata2_on);display();if(w=2) mdata2_on=m1_set(mdata2_on);display();if(w=3) mdata2_on=m0_set(mdata2_on);display(); break; case 5: if(w=0) hdata2_off=h1_set(hdata2_off);display(); /*設(shè)置開關(guān)2關(guān)斷時間的時、分*/if(w=1) hdata2_off=h0_set(hdata2_off);display();if(w=2) mdata2_off=m1_set(mdata2_off);display();if(w=3) mdata2_off=m0_set(mdata2_off);display(); break; default:tr0=1;break; void timer0() interrupt 1 /* 定時器中斷1服務(wù)子程序*/ counter+; /*counter對定時中斷進(jìn)行計數(shù),10000次中斷為1秒*/ if(counter=10000 s_data+; /*個位秒向十位秒進(jìn)位*/ counter=0; if(s_data=60) /*如果秒計滿60則向分進(jìn)位,并將秒清0*/ s_data=0; /*秒清0*/ m_data+; /*分進(jìn)位*/ if(m_data=60) /*如果分計滿60則向時進(jìn)位,并將分清0*/ m_data=0; /*分清0*/ h_data+; /* 時進(jìn)位*/ if(h_data=24) /* 如果時計滿24則將時清0*/ h_data=0; /* 時清0*/ main(void) ie=0x8a; ea|_|_|es|et1|ex1|et0|ex0=10001010/*中斷允許控制*/ tmod=0x02;gate1|c/t|m1|m0|gate0|c/t|m1|m0=00000010/*只有tr0來啟動t0,t0工作于方式2,(自動再裝入的8位計數(shù)器)*/ th0=176 /*計數(shù)常數(shù)寄存器設(shè)置,中斷定時時間為(256+200)x12/f0*/ tl0=-176 /* 定時計數(shù)器裝初值*/ tr0=1; /*啟動定時器t0,tcon為tf1|tr1|tf0|tr0|ie1|it1|ie0|it0*/ p3_6=1; /*關(guān)斷定時開關(guān)1*/ p3_7=1; /*關(guān)斷定時開關(guān)2*/ while(1) /* 以下為死循環(huán)*/ p1=numflag; adjust(); /* 調(diào)用調(diào)整函數(shù)*/ 以下程序語句作用是:將設(shè)定的開啟時間和關(guān)斷時間分別跟當(dāng)前時間進(jìn)行比較,當(dāng)大于開啟時間小于關(guān)斷時間則在p3.6或p3.7輸出低電平使開關(guān)接通,否則輸出搞電平使開關(guān)斷開 k1_on=h_datahdata1_on&h_data=mdata1_on&m_data=mdata1_on&m_datahdata2_on&h_data=mdata2_on&m_data=mdata2_on&m_datamdata2_off,1,0; if(k1_on)p3_6=0;else p3_6=1; if(k2_on)p3_7=0;else p3_7=1; display(); 總結(jié) 這次的畢業(yè)設(shè)計讓我學(xué)到了很多新的知識,不僅拓寬了知識面,還強(qiáng)化了自己的綜合性、實際性。通過實驗使自己掌握了應(yīng)用單片機(jī)
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度洗浴中心會員服務(wù)體系搭建與運營合同4篇
- 2025年度個人住房租賃貸款合同范本3篇
- 個人貸款合同正規(guī)模板(2024年修訂)版B版
- 專屬歌星演出聘請合同范本版B版
- 2024水庫工程建設(shè)項目施工人員培訓(xùn)與管理合同3篇
- 2025年度洛陽租賃房屋租賃合同違約責(zé)任協(xié)議4篇
- 2025年度環(huán)保設(shè)備零星維修服務(wù)合同范本3篇
- 智能工廠的融資規(guī)劃與實施方案
- 二零二五版生物制藥股份公司成立股東臨床試驗協(xié)議3篇
- 2025版停車場車位共享平臺承包運營管理合同樣本3篇
- 氦離子化色譜法測試電氣設(shè)備油中溶解氣體的技術(shù)規(guī)范
- 中國聯(lián)合網(wǎng)絡(luò)通信有限公司招聘筆試題庫2024
- 【社會工作介入精神障礙社區(qū)康復(fù)問題探究的文獻(xiàn)綜述5800字】
- 節(jié)前停工停產(chǎn)與節(jié)后復(fù)工復(fù)產(chǎn)安全注意事項課件
- 設(shè)備管理績效考核細(xì)則
- 中國人民銀行清算總中心直屬企業(yè)2023年招聘筆試上岸歷年典型考題與考點剖析附帶答案詳解
- (正式版)SJT 11449-2024 集中空調(diào)電子計費信息系統(tǒng)工程技術(shù)規(guī)范
- 人教版四年級上冊加減乘除四則混合運算300題及答案
- 合成生物學(xué)技術(shù)在生物制藥中的應(yīng)用
- 消化系統(tǒng)疾病的負(fù)性情緒與心理護(hù)理
- 高考語文文學(xué)類閱讀分類訓(xùn)練:戲劇類(含答案)
評論
0/150
提交評論