單片機數(shù)字鐘實訓說明
單片機數(shù)字鐘實訓
1實訓目的:
通過對單片機程序的設計,基本掌握51單片機開發(fā)系統(tǒng)的操作、編程技巧,實現(xiàn)讓學生對單片機的了解從感性認識上升為理性認識。2實訓內(nèi)容:
(1)掌握數(shù)碼管的動態(tài)顯示方法,定時器的具體應用;(2)手動設定時間,理解中斷的具體應用;
*(3)完成程序的設計、調(diào)試過程,嘗試對程序的創(chuàng)新設計。設計思路
(1)用單片機作主控制器,4位LED顯示接口,以用于時鐘顯示。(2)輸出設備分為兩個方面,一是由4位數(shù)碼管組成的時間顯示器,位控制信號由P3.4-P3.7輸出,段控制信號由P2口輸出.
(3)時鐘信號的產(chǎn)生可利用單片機芯片內(nèi)的定時器T0/T1產(chǎn)生定時中斷,進行時分秒的計時,并將信號送到顯示電路LDE上。
(4)校時信號通過P1.0,P1.1,P1.2控制進入校時設置,并將信號送到電路LED上。
四個數(shù)碼管,三個按鍵。一次只能顯示四位數(shù),解決的方案是:(1)分配按鍵:KEY1鍵為模式選擇,每次按下,WAY值加一;(2)選擇模式:mode=0,顯示時分兼設定分鐘;mode=1,顯示時分兼設定小時;mode=2,顯示秒兼設定秒。
(3)例如要顯示時間“12:34:56”顯示的情況為“1234”和“-56-”。3實訓要求:
布局布線要美觀,盡量沒有飛線,沒有交叉;焊點要求牢固、圓潤,沒有焊盤脫落。4實訓報告:
簡述單片機實現(xiàn)的電子鐘的原理,畫出電路圖,簡述程序設計思想,畫出程序流程圖;寫出布局布線過程和心得。有何體會。
實訓中用到的元器件列表。
地1AF地2地3BEDCRCG地4
地1表示是第一個數(shù)碼管的接地端:地2表示是第二個數(shù)碼管的接地端地3表示是第三個數(shù)碼管的接地端:地4表示是第四個數(shù)碼管的接地端
電阻318電容2IC11晶振1
參數(shù)R1-R3R4R5-R12參數(shù)C1,C2參數(shù)U1D1X1
數(shù)值10k1k470數(shù)值30pF數(shù)值AT89C52LED-YELLOW12MHz
發(fā)光二極管ReferencesValue
ReferencesValue
按鍵3個RST管腳需要的元件
可以變換電路形式,形成不同的使用效果。變換形式一:
變換形式二:
變換形式三:
擴展閱讀:基于單片機的 數(shù)字鐘實訓論文說明書1001130525
桂林電子科技大學實訓(論文)說明書
編號:
單片機綜合設計
實訓(論文)說明書
題目:數(shù)字鐘
院(系):信息與通信學院
專業(yè):電子信息工程學生姓名:龐美軍學號:1001130525指導教師:符強、班立新、孫安青、歸發(fā)弟
201*年06月18日桂林電子科技大學實訓(論文)說明書
摘要
我們20世紀末,電子技術獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。
現(xiàn)代生活的人們越來越重視起了時間觀念,可以說是時間和金錢劃上了等號。對于那些對時間把握非常嚴格和準確的人或事來說,時間的不準確會帶來非常大的麻煩,所以以數(shù)碼管為顯示器的時鐘比指針式的時鐘表現(xiàn)出了很大的優(yōu)勢。數(shù)碼管顯示的時間簡單明了而且讀數(shù)快、時間準確顯示到秒。而機械式的依賴于晶體震蕩器,可能會導致誤差。
數(shù)字鐘是采用數(shù)字電路實現(xiàn)對“時”、“分”、“秒”數(shù)字顯示的計時裝置。數(shù)字鐘的精度、穩(wěn)定度遠遠超過老式機械鐘。在這次設計中,我們采用LED數(shù)碼管顯示時、分、秒、年、月、日和鬧鈴,時間以24小時計時方式,年顯示為00~99年,根據(jù)數(shù)碼管動態(tài)顯示原理來進行顯示,用11.0592MHz的晶振產(chǎn)生振蕩脈沖,定時器計數(shù)。在此次設計中,電路具有顯示時間、日歷、鬧鈴的其本功能,還可以實現(xiàn)對他們進行設置和調(diào)整。數(shù)字鐘是其小巧,價格低廉,走時精度高,使用方便,功能多,便于集成化而受廣大消費的喜愛,因此得到了廣泛的使用。
關鍵字:
數(shù)字電子鐘單片機LED顯示時鐘誤差
桂林電子科技大學實訓(論文)說明書
Abstract
20century,electronictechnologyhasexperiencedrapidgrowthinitspromotion,modernelectronicproductalmostpermeatedthesocietyeachdomain,apowerfulimpetustothedevelopmentofthesocialproductiveforcesandtheenhancementofsocialinformatization,andatthesametime,makemodernelectricitywhenzichantofurtherimprovethequality,theproductsrenewaloftherhythmismoreandmorequickly.
Themodernlifeofpeoplepaymoreandmoreattentiontouptheconceptoftime,maysaythattimeandmoneywiththehospital.Forthosewho
Tograspthetimeisverystrictandaccuratepeopleorthings,it"snotaccuratetimewillbringverybigtrouble,sotodigitalthecanalistheclockdisplaythanpointertypeclockshowedalotofadvantage.Digitalpipedisplaytimeandreadsimpleandclearseveralfast,timeshowtotheseconds.Andmechanicaldependentonthecrystaloscillator,couldleadtoerrors.
Adigitalclockisthedigitalcircuittorealize,andpoints,secondsdigitaldisplaytimerdevice.Theprecisionofthedigitalclock,stabilityisfarmorethanoldmechanicalclock.Inthisdesign,weadoptLEDdigitaldisplaytubewhen,minutesandseconds,year,month,dayandalarm,timeto24hourstimerway,theshowforyearsin~99,accordingtotheprincipleofdigitaldynamicdisplaytoshow,with11.0592MHzofcrystalsproduceoscillationpulse,thetimercount.Inthisdesign,thecircuithasashowtime,calendar,thealarmitsthisfunction,alsocanachievethemtosetupandadjust.Adigitalclockisitssmall,thepriceislow,whenthehighprecision,easytouse,thefunctionismuch,facilitateintegrationandtheconsumptionbylove,soithasbeenwidelyused.
Keywords:
DigitalelectricclockmicrocontrollerLEDdisplayclockerror
II桂林電子科技大學實訓(論文)說明書
目錄
引言..........................................................................................................................................................11概述....................................................................................................................................................21.1設計背景................................................................21.2設計內(nèi)容................................................................21.3設計要求................................................................22系統(tǒng)各硬件設計..................................................................................................................................2
2.1硬件主控芯片概述及功能介紹.........................................22.1.1主要特性.............................................................22.1.2管腳說明.............................................................32.1.3振蕩器特性............................................................42.1.4芯片擦除..............................................................52.2四位七段數(shù)碼管管腳識別.................................................52.3系統(tǒng)各模塊電路設計與論..................................................62.3.1按鍵電路.............................................................72.3.2數(shù)碼管顯示電路....................................................72.3.3鬧鈴電路..........................................................8
3系統(tǒng)軟件設計..................................................................9
3.1軟件設計框圖.............................................................................................................................9
3.2主程序.....................................................................10
3.3按鍵處理程序...........................................................113.4中斷初始化............................................................13
4實驗測試結果..................................................................................................................................14
4.1仿真調(diào)試..............................................................14
4.2性能測試與分析...............................................................................................................155實訓總結..........................................................................................................................................15謝辭......................................................................................................................................................17參考文獻................................................................................................................................................18附錄1...................................................................................................................................................19
附錄2......................................................................28附錄3.......................................................................29
III桂林電子科技大學實訓(論文)說明書
引言
20世紀末,電子技術獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當前的時間。忘記了要做的事情,當事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。
目前,單片機正朝著高性能和多品種方向發(fā)展趨勢將是進一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面發(fā)展。下面是單片機的主要發(fā)展趨勢。單片機應用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設計思想和設計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術也稱為微控制技術,是傳統(tǒng)控制技術的一次革命。
單片機模塊中最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。
數(shù)字鐘是采用數(shù)字電路實現(xiàn)對.時,分,秒.數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站,碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應用,使得數(shù)字鐘的精度,遠遠超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關烘箱、通斷動力設備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎的。因此,研究數(shù)字鐘及擴大其應用,有著非,F(xiàn)實的意義。
在數(shù)字鐘的設計過程中,雖然整過程看似很復雜困難,但是我卻學到了很多東西,為以后的其他課題研究與畢業(yè)設計打下了基礎。同時我也知道自己在電路制作中的多方不足,在以后的其他制作項目中我會不斷的完善自我,努力把自己的動手能力提高一個檔次。
桂林電子科技大學實訓(論文)說明書
1概述
1.1設計背景
在現(xiàn)今生活中,時間與人們息息相關,人們常說時間比金錢還要珍貴。所以在人們對時間精準不斷追求下,數(shù)字鐘的研發(fā)也不斷更新。電子數(shù)字鐘因為其電路簡單,具有顯示靈活,操作簡單的特點,已成為人們?nèi)粘I钪校罕夭豢缮俚谋匦杵,廣泛用于個人家庭以及車站、碼頭、劇場、辦公室等公共場所,給人們的生活、學習、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術的發(fā)展和采用了先進的石英技術,使數(shù)字鐘具有走時準確、性能穩(wěn)定、攜帶方便等優(yōu)點,它還用于計時、自動報時及自動控制等各個領域。1.2設計內(nèi)容
本課題是基于單片機設計的數(shù)字鐘,通過STC89C52單片機讀取并控制,在八位數(shù)碼管上顯示相關參數(shù)。1.3設計要求
1、八位數(shù)碼管動態(tài)顯示
2、實現(xiàn)年、月、日、時、分、秒的顯示3、能交替顯示時間和日期或自定義選擇顯示4、時間和日期都可以設定和調(diào)整5、實現(xiàn)鬧鈴設置和鬧鈴功能
6、設置時間和日期時,動態(tài)掃描不受到影響
7、只采用3個獨立按鍵實現(xiàn)所有功
2系統(tǒng)各硬件設計
2.1硬件主控芯片概述及功能介紹
STC89C52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案?臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35Mhz,6T/12T可選。
2.1.1芯片內(nèi)部結構圖
桂林電子科技大學實訓(論文)說明書
圖2-1單片機8052的內(nèi)部結構
圖2-2MCS-52系列單片機的內(nèi)部結構
2.1.2.主要特性
與MCS-51兼容
8K字節(jié)可編程閃爍存儲器壽命:1000寫/擦循環(huán)數(shù)據(jù)保留時間:10年
全靜態(tài)工作:0Hz-35MHz三級程序存儲器鎖定512字節(jié)RAM32可編程I/O線
三個16位定時器/計數(shù)器
桂林電子科技大學實訓(論文)說明書
5個中斷源可編程串行通道
低功耗的閑置和掉電模式片內(nèi)振蕩器和時鐘電路2.1.3.管腳說明
VCC:供電電壓。GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3口也可作為STC89C52的一些特殊功能口,如下表所示:口管腳備選功能
P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時器0外部輸入)
桂林電子科技大學實訓(論文)說明書
P3.5T1(記時器1外部輸入)
P3.6/WR(外部數(shù)據(jù)存儲器寫選通)P3.7/RD(外部數(shù)據(jù)存儲器讀選通)
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。
/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。
桂林電子科技大學實訓(論文)說明書
2.1.4.振蕩器特性
XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。2.1.5.芯片擦除
整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復編程以前,該操作必須被執(zhí)行。
此外,STC89C52設有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止。2.2四位七段數(shù)碼管管腳識別
內(nèi)部的四個數(shù)碼管共用a~dp這8根數(shù)據(jù)線,為人們的使用提供了方便,因為里面有四個數(shù)碼管,所以它有四個公共端,加上a~dp,共有12個引腳,下面便是一個共陰的四位數(shù)碼管的內(nèi)部結構圖(共陽的與之相反)。引腳排列依然是從左下角的那個腳(1腳)開始,以逆時針方向依次為1~12腳,下圖中的數(shù)字與之一一對應。
桂林電子科技大學實訓(論文)說明書
A-11B-7C-4D-2E-1F-10G-5DP-3DIG1-12DIG2-9DIG3-8DIG4-6
1至12腳分別為:edhcg1b23fa4。管腳的數(shù)法:有字面向自己,左下腳為第一腳,逆時針數(shù)。
2.3系統(tǒng)各模塊電路設計與論證
方案:基于STC89C52單片機來制作電子時鐘,其最大的好處就是可最大的調(diào)整時鐘使其的準確度更高。所以根據(jù)課題要求為了得到更好的最確度所以決定選擇該方案作為本設計的方案。,由于51單片機的驅動能力不足以驅動八位共陽數(shù)碼管,因此利用9012PNP三極管進行簡單的驅動,避免電路的設計復雜,從而簡化編程的步驟,并把計時結果通過數(shù)碼管顯示出來
桂林電子科技大學實訓(論文)說明書
2.3.1按鍵電路
圖二按鍵電路
按鍵電路相對簡單,該系統(tǒng)選用單片機的P1口作為按鍵輸入端口,按鍵按下的有效電瓶為低電平,4個按鍵與一端IO口連接另一端直接接到地GND。2.3.2數(shù)碼管顯示電路
數(shù)碼管顯示電路選用單片機的P0口作為段碼輸出,P2口的四位作為位碼的控制端,由于89C52系列單片機的P0口是COMS漏極設計具有吸收大電流作用,該端口無法輸出有效高電平,故在P0口要添加上拉電阻,圖中J0是1K的8段排阻,此外由于P0口驅動能力不足以驅動八位數(shù)碼管,采用三極管9012作為驅動器件,由于9012為PNP型,故采用共陽數(shù)碼管時,低低電平點亮。再者采用上電復位方式設計系統(tǒng)的復位方式,設計原則RC時間常數(shù)大于10毫秒。
桂林電子科技大學實訓(論文)說明書
圖三數(shù)碼管顯示電路
2.3.3鬧鈴電路
鬧鈴電路比較簡單,采用9012PNP三級管驅動蜂鳴器,單片機P1.4管腳連接三極管的基極,當P1.4輸出低電平時,三極管導通,從而驅動蜂鳴器發(fā)出聲音。
圖四鬧鈴電路
桂林電子科技大學實訓(論文)說明書
3系統(tǒng)軟件設計
3.1軟件設計框圖初始化定時計數(shù)器數(shù)碼管顯示當前時鐘值圖五主程序流程圖
堆棧返調(diào)整時間時單元清0,24小時Y天單元清開定時器分單元清0,60分YN天加賦時鐘初值中斷Y秒單元清0,60秒到YN時加N分加N秒加1清顯示緩沖區(qū)恢復初值,開始定時中簡要說明:
(1)實現(xiàn)24小時制電子鐘,8位數(shù)碼管顯示,顯示時分秒;實現(xiàn)年月日日期顯示;實現(xiàn)定時鬧鈴。
(2)顯示格式:23-59-45;年月日顯示格式12-06-18;鬧鈴格式20-01-00(3)通過四只按鍵來調(diào)整時間、日期和鬧鈴
(4)每按一次S1~S4按鍵,蜂鳴器響一聲,如果蜂鳴器響三聲,表明鬧鈴打開(5)P1.3接調(diào)整確認鍵S4,確認后返回時間顯示
(6)P1.2接按鍵S3,P1.1接按鍵S2,P1.0接按鍵S1
(7)時間的調(diào)整:按S1進入時間調(diào)整模式,按S2小時加1,S3為分加1,按S4為調(diào)整確認
(8)鬧鈴的調(diào)整:按S2為鬧鈴顯示和調(diào)整模式,再按S2為小時加1,S3為分加1,按S4為調(diào)整確認
(9)鬧鈴的開/關:當鬧鈴設定按確認鍵S4鍵蜂鳴器響三聲表示鬧鈴開啟,否
桂林電子科技大學實訓(論文)說明書
則鬧鈴處于關閉狀態(tài)
(10)日歷的調(diào)整:按S3鍵,進入日歷的顯示和調(diào)整模式,再按S3為年加一,按S2為月加一,按S1為日加一,按S4為調(diào)整確認
3.2主程序
/********以下是主函數(shù)********/voidmain(void){
P0=0xff;P2=0xff;
timer_init();//調(diào)定時器T0、T1初始化函數(shù)while(1){
if((K1==0)&&(K2_FLAG==0)&&(K3_FLAG==0))//若K1鍵按下時,只進行時鐘調(diào)整,使鬧鈴設置功能失效{
Delay_ms(10);//延時10ms去抖
if((K1==0)&&(K2_FLAG==0)&&(K3_FLAG==0)){
while(!K1);//等待K1鍵釋放beep();//蜂鳴器響一聲K1_FLAG=1;//K1鍵標志位置1,以便進行時鐘調(diào)整}}
if((K2==0)&&(K1_FLAG==0)&&(K3_FLAG==0))//若按下K2鍵時,只進行鬧鈴調(diào)整,使走時調(diào)整失效{
Delay_ms(10);
if((K2==0)&&(K1_FLAG==0)&&(K3_FLAG==0)){
while(!K2);//等待K2鍵釋放beep();K2_FLAG=1;//K2鍵標志位置1,以便進行鬧鈴調(diào)整}}
if((K3==0)&&(K1_FLAG==0)&&(K2_FLAG==0))//若按下K3鍵時,只進行日歷調(diào)整,使走時調(diào)整失效{
Delay_ms(10);
if((K3==0)&&(K1_FLAG==0)&&(K2_FLAG==0)){
while(!K3);//等待K3鍵釋放
桂林電子科技大學實訓(論文)說明書
beep();K3_FLAG=1;//K3鍵標志位置1,以便進行日歷調(diào)整}}
if(K1_FLAG==1)
KeyProcess1();//若K1_FLAG為1,則進行走時調(diào)整if(K3_FLAG==1){
KeyProcess2();//若K3_FLAG為1,則進行日歷調(diào)整continue;}
//year(yeal,mon,day);//調(diào)日歷轉換函數(shù)
if(K2_FLAG==1)//若K2_FLAG為1,則進行鬧鈴調(diào)整{AlarmSet();continue;}
AlarmCheck();//調(diào)鬧鈴檢查函數(shù)conv(hour,min,sec);//調(diào)走時轉換函數(shù)}}
3.3按鍵處理程序
/********以下是按鍵處理函數(shù),用來對時鐘進行設置********/voidKeyProcess1(){
//TR1=0;//若按下K1鍵,則定時器T1關閉,時鐘暫停if(K2==0)//若按下K2鍵{
Delay_ms(10);//延時去抖if(K2==0){
while(!K2);//等待K2鍵釋放beep();
hour++;//小時調(diào)整if(hour==24){
hour=0;}}}
if(K3==0)//若按下K3鍵{
桂林電子科技大學實訓(論文)說明書
Delay_ms(10);if(K3==0){
while(!K3);//等待K3鍵釋放beep();min++;//分鐘調(diào)整if(min==60){
min=0;}}}
if(K4==0)//若按下K4鍵{
Delay_ms(10);if(K4==0){
while(!K4);//等待K4鍵釋放beep();
//TR1=1;//調(diào)整完畢后,時鐘恢復走時K1_FLAG=0;//將K1鍵按下標志位清0}}}
/********以下是按鍵處理函數(shù),用來對日歷進行設置********/voidKeyProcess2(){
year(yeal,mon,day);//調(diào)日歷鈴轉換函數(shù)
if((K3==0)&&(K3_FLAG==1))//若K3鍵按下后(K3_FLAG為1),再按下K3鍵{
Delay_ms(10);//延時去抖if((K3==0)&&(K3_FLAG==1)){
while(!K3);//等待K3鍵釋放beep();
yeal++;//年調(diào)整if(yeal==99){yeal=0;}}}
if((K2==0)&&(K3_FLAG==1))//若按下K3鍵后(K3_FLAG為1),再按下K2鍵{
桂林電子科技大學實訓(論文)說明書
Delay_ms(10);
if((K2==0)&&(K3_FLAG==1)){
while(!K2);//等待K2鍵釋放beep();mon++;//月調(diào)整if(mon==13){mon=1;}}}
if((K1==0)&&(K3_FLAG==1))//若按下K3鍵后(K3_FLAG為1),再按下K1鍵{
Delay_ms(10);
if((K1==0)&&(K3_FLAG==1)){
while(!K1);//等待K1鍵釋放beep();day++;//日調(diào)整if(day==32){day=1;}}}
if(K4==0)//若按下K4鍵{
Delay_ms(10);if(K4==0){
while(!K4);//等待K4鍵釋放beep();K3_FLAG=0;//將K3鍵按下標志位清0
conv(hour,min,sec);//日歷設置完成后,調(diào)走時轉換函數(shù),顯示走時時鐘}}}
3.4中斷初始化
/********以下是定時器T0中斷函數(shù),用于數(shù)碼管的動態(tài)掃描********/voidtimer0()interrupt1{
TH0=0xf8;TL0=0xcc;//重裝計數(shù)初值,定時時間為2msDisplay();//調(diào)顯示函數(shù)
/*********以下是定時器T0/T1初始化函數(shù)********/voidtimer_init()
桂林電子科技大學實訓(論文)說明書
{TMOD=0x11;//定時器0,1工作模式1,16位定時方式TH0=0xf8;TL0=0xcc;//裝定時器T0計數(shù)初值,定時時間為2msTH1=0xdc;TL1=0x00;//裝定時器T1計數(shù)初值,定時時間為10msEA=1;ET0=1;ET1=1;//開總中斷和定時器T0、T1中斷TR0=1;TR1=1;//啟動定時器T0、T1}
4實驗測試結果
4.1仿真調(diào)試
軟件仿真:我們在進行硬件制作前我們都對我們的制作進行了軟件仿真,本次我用了proteus7.2進行了軟件的仿真仿真圖如下圖,根據(jù)仿真圖的顯示結果我的電路設計已經(jīng)達到了課題的要求。
顯示當前時間:23點15分57秒
當前日期:201*年6月18日
當前鬧鈴:11點59分
桂林電子科技大學實訓(論文)說明書
4.2性能測試與分析
本設計是基于MCS的時鐘設計,用2個四位一體的共陽數(shù)碼管做為顯示器,它時實顯示時間值;設計中有4個按鍵,按S1進入時間調(diào)整模式,按S2小時加1,S3為分加1,按S4為調(diào)整確認,按S2為鬧鈴顯示和調(diào)整模式,再按S2為小時加1,S3為分加1,按S4為調(diào)整確認,當鬧鈴設定按確認鍵S4鍵蜂鳴器響三聲表示鬧鈴開啟,否則鬧鈴處于關閉狀態(tài),按S3鍵,進入日歷的顯示和調(diào)整模式,再按S3為年加一,按S2為月加一,按S1為日加一,按S4為調(diào)整確認,這樣的結果與設計要求基本相符,本設計成功。
在電路調(diào)試過程中,我遇到一相對棘手的難題,一是數(shù)碼管反復切換顯示的程序編寫,針對這個問題,我反復閱了各種書籍和自己的程序,虛心向同學請教,發(fā)現(xiàn)自己的系統(tǒng)的各功能的調(diào)轉方面存在著邏輯判斷錯誤;
按鍵和蜂鳴器的檢測,利用輸出引腳附帶的電源和地對電路進行測量,測量結果和理論設計完全符合,這樣所有各個功能子電路均能正常工作,可以下載程序進行系統(tǒng)工作了。
經(jīng)過三天三夜不斷的艱苦奮斗,我設計的數(shù)字鐘系統(tǒng)電路所有功能模塊據(jù)正常工作,單片機STC89C52也能正常讀取數(shù)據(jù),數(shù)碼管正常顯示數(shù)值,指示燈工作正常,按鍵輸入鍵值能被單片機正常讀取。整個系統(tǒng)運行理想,基本實現(xiàn)了課題的設計目的,達到了各項要求。
5實訓總結
本次實訓我所做的是STC89C52數(shù)字鐘設計,從設計電路、連接電路到調(diào)測電路到最后的電路設計完成,都對我所學的知識進行了進行了綜合系統(tǒng)的運用,提高了我整體的設計能力。設計是我們將來必需的技能,這次實習恰恰給我們提供了一個很好的平臺,為以后的學習工作工作奠定了良好的基礎。
首先,通過本次實訓,使我系統(tǒng)綜合運用所學知識。通過查閱資料,向老師請教,與同學討論之后,我一步步地進行編寫程序,修改參數(shù),校正電路,使我對STC89C52數(shù)字鐘設計的整個過程有了很好的掌握。并且通過幫助其他人尋找程序的問題,也讓我對其他的設計有了較好的了解和掌握,其中對定時器/計數(shù)器運用也比較熟悉。同時,通過STC89C52數(shù)字鐘設計,掌握了定時/計數(shù)初值的計算和中斷的使用,并且設置時間和日期時,動態(tài)掃描不受影響,用四個按鍵實現(xiàn)所有功能的調(diào)整,對設計進行了創(chuàng)新。
其次,通過本次實訓,使得我在困難中成長。在本次實訓中我遇到了很多困難,但是在同學們的共同討論下,讓我有機會在困難中艱難前行,解決問題,這樣讓我收獲很大,同時更讓我明白,只有在問題中去尋找答案,去思考,這樣才會學到更多,自身反而得不到提高。在實訓中,通過運用以前老師所講的理論知
桂林電子科技大學實訓(論文)說明書
識以及圖書館的資料,總體而言,我的思路比較清晰,知道自己應該如何去一步一步完成,最終也讓我比較早的完成了程序的編寫與電路的設計,并且通過電路仿真完成了設計,最后通過反復的電路測試實現(xiàn)了設計功能。
再次,在本次實訓中,進一步提高自己硬件的分析能力。在電路調(diào)測的過程中,具有很大的難度,通過反復的測試,對每一個線路點進行檢測,我最終找出了問題的所在及很好地解決了問題。這使得我檢測電路,調(diào)測電路的能力有了很大的提高。
最后,經(jīng)過本次實訓,使我明白合作的愉快和進步。實訓使我再一次的復習了上課所學的知識使理論聯(lián)系了實際,鞏固并深化了對課本基本知識的認識和理解,使理論得以升華。這也讓我更進一步的了解了單片機編程的應用。在完成設計論文的時候我參考了很多資料,通過老師和同學的幫助,我也學會了其他電路的設計方法。通過此次實驗,使我收獲很大,同時也使我獲得了許多經(jīng)驗和教訓:
(1)在設計電路時,設計思路要很清晰,逐個擊破,才能較快較成功地完成整個電路的設計;
(2)在焊接電路板時,不能出現(xiàn)虛焊漏悍,才能使電路板美觀好看,并且實現(xiàn)功能好,為調(diào)測板子節(jié)省了時間;
(3)在調(diào)測電路板時,要耐心仔細,不能忽視每一個細節(jié),保證整體功能的實現(xiàn)情況下,才可以較好地對電路進行更好的創(chuàng)新設計;
從這次實習中,我認識到了親身實踐是我們大學生活很有用也很充實的一步,通過實習能學到在課堂上學不到的很多東西。在課堂上我們僅僅知道該怎么去做,但沒有親自實踐,只能是靠想象,所以有很多東西都難以理解。我發(fā)現(xiàn)很多知識都是以前在課本上學過的,當時印象并不怎么深刻,但是,一經(jīng)實習,似乎都能很容易理解其原理,并能對其有更深的記憶。在實訓的過程中,我發(fā)現(xiàn)了自己的許多不足之處。例如對電路檢測錯誤判斷還不是很確定,檢測時有時候也不是很仔細。這使得我認識到,今后要加強自己的學習,不斷接觸更深層次的知識,把知識綜合運用起來,了解知識并應用知識,不斷地提高自己的動手能力,真正做到理論與實踐的相結合!
桂林電子科技大學實訓(論文)說明書
謝辭
在符強老師、班立新老師、孫安青老師、歸發(fā)弟老師的耐心指導下及同學的幫助下使我順利的完成了本次的課題實訓內(nèi)容。開始老師指導我們課題方案設計,在選題以及研究設計方法上給予的悉心指導,使我盡快理清思路,通過請教老師以及查找資料使我較快的完成了對軟件的編程及調(diào)試和順利完成了論文寫作。整個實訓內(nèi)容都是在老師悉心指導下完成的,老師嚴謹?shù)闹螌W作風、求實的工作態(tài)度使我受益匪淺,更重要的是從老師身上學到了對待任何事情的那種精益求精和一絲不茍的精神和態(tài)度。在本次實訓中,我遇到了很多難題,然而這些難題讓我不斷的學習,在困難中進步,本次實訓同學們幫了我很多忙,通過同學之間的相互幫助,我更加順利地完成了本次實訓,在此感謝我的同學朋友們!在此我要感謝指導教師對我的教導,感謝學校給我們提供實訓的機會!
桂林電子科技大學實訓(論文)說明書
參考文獻
[1]李軍《51系列單片機高級實例開發(fā)指南》北京航空航天大學出版社[2]孫涵芳《MCS51/96系列單片機原理及應用》北京航空航天大學出版社[3]王幸之《AT89系列單片機原理與接口技術》北京航空航天大學出版社[4]歐陽斌林《單片機原理及應用》中國水利水電出版社[5]潭浩強《C程序設計》北京航空航天出版社[6]付曉光《單片機原理與實用技術》清華大學出版社[7]鄒壽彬[8]許熙文19
清華大學出版社高等教育出版社
《電子技術基礎》《電路基礎》桂林電子科技大學實訓(論文)說明書
附錄1
#include
#defineucharunsignedchar#defineuintunsignedint
ucharhour=23,min=59,sec=45;//定義小時、分鐘和秒變量ucharcount_10ms;//定義10ms計數(shù)器sbitK1=P1^0;//定義K1鍵sbitK2=P1^1;//定義K2鍵sbitK3=P1^2;//定義K3鍵sbitK4=P1^3;//定義K4鍵sbitBEEP=P1^4;//定義蜂鳴器
bitK1_FLAG=0;//定義按鍵標志位,當按下K1鍵時,該位置1,K1鍵未按下時,該位為0。
bitK2_FLAG=0;//定義按鍵標志位,當按下K2鍵時,該位置1,K2鍵未按下時,該位為0。
bitK3_FLAG=0;//定義按鍵標志位,當按下K3鍵時,該位置1,K3鍵未按下時,該位為0。
ucharcodebit_tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選表,用來選擇哪一只數(shù)碼管進行顯示ucharcodeseg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xbf};
//0~F、熄滅符和字符"-"的顯示碼(字形碼)uchardisp_buf[8];//定義顯示緩沖單元
bitalarm=0;//設置鬧鈴標志位,為1,鬧鈴功能打開;為0,鬧鈴功能關閉
ucharhour_a=20,min_a=01;//鬧鈴小時、分鐘緩沖區(qū)ucharyeal=12,mon=6,day=18;//定義年、月和日變量uchardays_sum(){
uchara;
switch(mon)//判斷這月有多少天{
case1:a=31;break;case3:a=31;break;case5:a=31;break;case7:a=31;break;case8:a=31;break;case10:a=31;break;case12:a=31;break;case4:a=30;break;case6:a=30;break;
桂林電子科技大學實訓(論文)說明書
case9:a=30;break;case11:a=30;break;
case2:if(yeal%4==0)a=29;elsea=28;break;//是潤年二月加一天}
returna;}
/********以下是延時函數(shù)********/voidDelay_ms(uintxms){
uinti,j;
for(i=xms;i>0;i--)//i=xms即延時約xms毫秒for(j=110;j>0;j--);}
/*********以下是蜂鳴器響一聲函數(shù)********/voidbeep(){
BEEP=0;//蜂鳴器響Delay_ms(100);
BEEP=1;//關閉蜂鳴器Delay_ms(100);}
/********以下是鬧鈴轉換函數(shù),負責將鬧鈴數(shù)據(jù)轉換為適合數(shù)碼管顯示的數(shù)據(jù)********/
voidconv_a(ucharin1,in2)//形參in1、in2接收實參hour_a、min_a傳來的數(shù)據(jù){
disp_buf[0]=in1/10;//鬧鈴小時十位disp_buf[1]=in1%10;//鬧鈴小時個位disp_buf[3]=in2/10;//鬧鈴分鐘十位disp_buf[4]=in2%10;//鬧鈴分鐘個位disp_buf[6]=0;//鬧鈴秒十位disp_buf[7]=0;//鬧鈴秒個位disp_buf[2]=17;//第3只數(shù)碼管顯示"-"(在seg_data表的第17位)
disp_buf[5]=17;//第6只數(shù)碼管顯示"-"}
/********以下是時鐘轉換函數(shù),負責將時鐘數(shù)據(jù)轉換為適合數(shù)碼管顯示的數(shù)據(jù)********/
voidconv(ucharin1,in2,in3)//形參in1、in2、in3接收實參hour、min、sec傳來的數(shù)據(jù){
disp_buf[0]=in1/10;//小時十位disp_buf[1]=in1%10;//小時個位disp_buf[3]=in2/10;//分鐘十位
桂林電子科技大學實訓(論文)說明書
disp_buf[4]=in2%10;//分鐘個位disp_buf[6]=in3/10;//秒十位disp_buf[7]=in3%10;//秒個位disp_buf[2]=17;//第3只數(shù)碼管顯示"-"(在seg_data表的第17位)
disp_buf[5]=17;//第6只數(shù)碼管顯示"-"}
/********以下是日歷轉換函數(shù),負責將日歷數(shù)據(jù)轉換為適合數(shù)碼管顯示的數(shù)據(jù)********/
voidyear(ucharin1,in2,in3)//形參in1、in2、in3接收實參yeal、mon、day傳來的數(shù)據(jù){
disp_buf[0]=in1/10;//年十位disp_buf[1]=in1%10;//年個位disp_buf[3]=in2/10;//月十位disp_buf[4]=in2%10;//月個位disp_buf[6]=in3/10;//日十位disp_buf[7]=in3%10;//日個位disp_buf[2]=17;//第3只數(shù)碼管顯示"-"(在seg_data表的第17位)
disp_buf[5]=17;//第6只數(shù)碼管顯示"-"}
/********以下是鬧鈴檢查函數(shù)********/voidAlarmCheck(){
if(alarm)//若鬧鈴標志位為1{
if((hour==hour_a)&&(min==min_a))//若走時的小時、分鐘與鬧鈴的小時、分鐘相等,則執(zhí)行{
while(K4){beep();}//未按下K4鍵,鬧鈴始終響while(!K4);//等待K4鍵釋放alarm=0;//鬧鈴標志位清0}}}
/********以下是鬧鈴設置函數(shù)********/voidAlarmSet(){
conv_a(hour_a,min_a);//調(diào)鬧鈴轉換函數(shù)
if((K2==0)&&(K2_FLAG==1))//若K2鍵按下后(K2_FLAG為1),再按下K2鍵{
Delay_ms(10);//延時去抖
桂林電子科技大學實訓(論文)說明書
if((K2==0)&&(K2_FLAG==1)){
while(!K2);//等待K2鍵釋放beep();
hour_a++;//小時調(diào)整if(hour_a==24){hour_a=0;}}}
if((K3==0)&&(K2_FLAG==1))//若按下K2鍵后(K2_FLAG為1),再按下K3鍵{
Delay_ms(10);
if((K3==0)&&(K2_FLAG==1)){
while(!K3);//等待K3鍵釋放beep();min_a++;//分鐘調(diào)整if(min_a==60){min_a=0;}}}
if((K4==0)&&(K2_FLAG==1))//若按下K2鍵后(K2_FLAG為1),再按下K4鍵{
Delay_ms(10);
if((K4==0)&&(K2_FLAG==1)){
while(!K4);//等待K4鍵釋放
alarm=~alarm;//鬧鈴標志位取反,使K4鍵具有打開和關閉鬧鈴的功能K2_FLAG=0;//鬧鈴調(diào)整后將K2_FLAG清0
if(alarm==1){beep();beep();beep();}//若鬧鈴開啟(鬧鈴標志位為1),則響三聲
elsebeep();//否則,若鬧鈴關閉(鬧鈴標志位為0),則響一聲
conv(hour,min,sec);//鬧鈴設置完成后,調(diào)走時轉換函數(shù),顯示走時時鐘}}}
/********以下是顯示函數(shù)********/voidDisplay(){
uchartmp;//定義顯示暫存staticuchardisp_sel=0;//顯示位選計數(shù)器,顯示程序通過它得知現(xiàn)正顯
桂林電子科技大學實訓(論文)說明書
示哪個數(shù)碼管,初始值為0
tmp=bit_tab[disp_sel];//根據(jù)當前的位選計數(shù)值決定顯示哪只數(shù)碼管
P2=tmp;//送P2控制被選取的數(shù)碼管點亮
tmp=disp_buf[disp_sel];//根據(jù)當前的位選計數(shù)值查的數(shù)字的顯示碼
tmp=seg_data[tmp];//取顯示碼
P0=tmp;//送到P0口顯示出相應的數(shù)字
disp_sel++;//位選計數(shù)值加1,指向下一個數(shù)碼管if(disp_sel==8)
disp_sel=0;//如果8個數(shù)碼管顯示了一遍,則讓其回0,重新再掃描}
/********以下是定時器T0中斷函數(shù),用于數(shù)碼管的動態(tài)掃描********/voidtimer0()interrupt1{
TH0=0xf8;TL0=0xcc;//重裝計數(shù)初值,定時時間為2msDisplay();//調(diào)顯示函數(shù)}
/********以下是定時器T1中斷函數(shù),用于產(chǎn)生用于產(chǎn)生秒,分鐘,小時和天,月,年信號********/
voidtimer1()interrupt3{
uchara;
TH1=0xdc;TL0=0x00;//重裝計數(shù)初值,定時時間為10mscount_10ms++;//10ms計數(shù)器加1if(count_10ms>=100){
count_10ms=0;//計數(shù)100次后恰好為1s,此時10ms計數(shù)器清0
sec++;//秒加1if(sec==60){
sec=0;
min++;//若到60秒,分鐘加1if(min==60){
min=0;
hour++;//若到60分鐘,小時加1if(hour==24){
hour=0;day++;//大于24時DAY加一時等于0}
桂林電子科技大學實訓(論文)說明書
a=days_sum();
//判斷閏年的公式y(tǒng)eal%400||(yeal%4&&yeal%100!=0)if(day>a)//大于這月的天數(shù)月加一DAY等于1{day=1;mon++;}
if(mon>12)//月大于12年加一月等于1{
mon=1;yeal++;
if(yeal>99)yeal=0;//固定從201*~2099年之間調(diào)整
}}}}}
/********以下是按鍵處理函數(shù),用來對時鐘進行設置********/voidKeyProcess1(){
//TR1=0;//若按下K1鍵,則定時器T1關閉,時鐘暫停if(K2==0)//若按下K2鍵{
Delay_ms(10);//延時去抖if(K2==0){
while(!K2);//等待K2鍵釋放beep();
hour++;//小時調(diào)整if(hour==24){
hour=0;}}}
if(K3==0)//若按下K3鍵{
Delay_ms(10);if(K3==0){
while(!K3);//等待K3鍵釋放beep();min++;//分鐘調(diào)整if(min==60){
桂林電子科技大學實訓(論文)說明書
min=0;}}}
if(K4==0)//若按下K4鍵{
Delay_ms(10);if(K4==0){
while(!K4);//等待K4鍵釋放beep();
//TR1=1;//調(diào)整完畢后,時鐘恢復走時K1_FLAG=0;//將K1鍵按下標志位清0}}}
/********以下是按鍵處理函數(shù),用來對日歷進行設置********/voidKeyProcess2(){
year(yeal,mon,day);//調(diào)日歷鈴轉換函數(shù)
if((K3==0)&&(K3_FLAG==1))//若K3鍵按下后(K3_FLAG為1),再按下K3鍵{
Delay_ms(10);//延時去抖if((K3==0)&&(K3_FLAG==1)){
while(!K3);//等待K3鍵釋放beep();
yeal++;//年調(diào)整if(yeal==99){yeal=0;}}}
if((K2==0)&&(K3_FLAG==1))//若按下K3鍵后(K3_FLAG為1),再按下K2鍵{
Delay_ms(10);
if((K2==0)&&(K3_FLAG==1)){
while(!K2);//等待K2鍵釋放beep();mon++;//月調(diào)整if(mon==13){mon=1;}}
桂林電子科技大學實訓(論文)說明書
}if((K1==0)&&(K3_FLAG==1))//若按下K3鍵后(K3_FLAG為1),再按下K1鍵{
Delay_ms(10);
if((K1==0)&&(K3_FLAG==1)){
while(!K1);//等待K1鍵釋放beep();day++;//日調(diào)整if(day==32){day=1;}}}
if(K4==0)//若按下K4鍵{
Delay_ms(10);if(K4==0){
while(!K4);//等待K4鍵釋放beep();K3_FLAG=0;//將K3鍵按下標志位清0
conv(hour,min,sec);//日歷設置完成后,調(diào)走時轉換函數(shù),顯示走時時鐘}}}
/*********以下是定時器T0/T1初始化函數(shù)********/voidtimer_init()
{TMOD=0x11;//定時器0,1工作模式1,16位定時方式TH0=0xf8;TL0=0xcc;//裝定時器T0計數(shù)初值,定時時間為2msTH1=0xdc;TL1=0x00;//裝定時器T1計數(shù)初值,定時時間為10msEA=1;ET0=1;ET1=1;//開總中斷和定時器T0、T1中斷TR0=1;TR1=1;//啟動定時器T0、T1}
/********以下是主函數(shù)********/voidmain(void){
P0=0xff;P2=0xff;
timer_init();//調(diào)定時器T0、T1初始化函數(shù)while(1){
if((K1==0)&&(K2_FLAG==0)&&(K3_FLAG==0))//若K1鍵按下時,只進行時鐘調(diào)整,使鬧鈴設置功能失效
桂林電子科技大學實訓(論文)說明書
{Delay_ms(10);//延時10ms去抖
if((K1==0)&&(K2_FLAG==0)&&(K3_FLAG==0)){
while(!K1);//等待K1鍵釋放beep();//蜂鳴器響一聲K1_FLAG=1;//K1鍵標志位置1,以便進行時鐘調(diào)整}}
if((K2==0)&&(K1_FLAG==0)&&(K3_FLAG==0))//若按下K2鍵時,只進行鬧鈴調(diào)整,使走時調(diào)整失效{
Delay_ms(10);
if((K2==0)&&(K1_FLAG==0)&&(K3_FLAG==0)){
while(!K2);//等待K2鍵釋放beep();K2_FLAG=1;//K2鍵標志位置1,以便進行鬧鈴調(diào)整}}
if((K3==0)&&(K1_FLAG==0)&&(K2_FLAG==0))//若按下K3鍵時,只進行日歷調(diào)整,使走時調(diào)整失效{
Delay_ms(10);
if((K3==0)&&(K1_FLAG==0)&&(K2_FLAG==0)){
while(!K3);//等待K3鍵釋放beep();K3_FLAG=1;//K3鍵標志位置1,以便進行日歷調(diào)整}}
if(K1_FLAG==1)
KeyProcess1();//若K1_FLAG為1,則進行走時調(diào)整if(K3_FLAG==1){
KeyProcess2();//若K3_FLAG為1,則進行日歷調(diào)整continue;}
//year(yeal,mon,day);//調(diào)日歷轉換函數(shù)
if(K2_FLAG==1)//若K2_FLAG為1,則進行鬧鈴調(diào)整{AlarmSet();continue;}
桂林電子科技大學實訓(論文)說明書
AlarmCheck();//調(diào)鬧鈴檢查函數(shù)conv(hour,min,sec);//調(diào)走時轉換函數(shù)}}
附錄2
桂林電子科技大學實訓(論文)說明書
附錄三
友情提示:本文中關于《單片機數(shù)字鐘實訓說明》給出的范例僅供您參考拓展思維使用,單片機數(shù)字鐘實訓說明:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權問題,請聯(lián)系我們及時刪除。