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