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