版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 信息科學(xué)與技術(shù)學(xué)院</b></p><p><b> 單片機原理及應(yīng)用</b></p><p><b> 課程設(shè)計報告</b></p><p> 課題名稱:基于STC89C52單片機電子鐘設(shè)計</p><p> 學(xué)生姓名:
2、 </p><p> 學(xué) 號: </p><p> 專業(yè)年級: </p><p> 指導(dǎo)教師: </p><p> 完成時間: 2013-07-06
3、 </p><p><b> 目 錄</b></p><p> 1.單片機電子鐘系統(tǒng)概述1</p><p> 1.1電子鐘的描述1</p><p> 1.2電子鐘的概述1</p><p><b> 2.題目及要求2</b></p><
4、p><b> 2.1 題目2</b></p><p><b> 2.2要求2</b></p><p> 3.方法選擇與論證2</p><p> 3.1單片機芯片的選擇方案和論證2</p><p> 3.1.1方案一2</p><p> 3.1.2方
5、案二2</p><p> 3.2顯示模塊的選擇與論證3</p><p> 3.2.1方案二3</p><p> 3.2.2方案二3</p><p> 3.2.3方案二3</p><p> 3.3電路設(shè)計最終方案決定3</p><p> 4.硬件原理電路圖的設(shè)計及分析3&
6、lt;/p><p> 4.1 STC89C52J介紹3</p><p> 4.1.1 STC89C52主要功能及PDIP封裝3</p><p> 4.1.2 STC89C52引腳介紹4</p><p> 4.1.3 STC89C52的最小系統(tǒng)5</p><p> 4.2.LCD1602液晶顯示器介
7、紹6</p><p> 4.2.1 LCD1602液晶概述6</p><p> 4.2.2 LCD1602引腳介紹7</p><p> 4.2.3 LCD1602字符液晶使用方法8</p><p><b> 5.系統(tǒng)流程圖9</b></p><p> 5.1 電路設(shè)
8、計框圖9</p><p> 5.2 系統(tǒng)流程圖9</p><p> 5.3 硬件框圖11</p><p><b> 6.編程思路13</b></p><p><b> 7.系統(tǒng)評價13</b></p><p><b> 8.心得體會14&l
9、t;/b></p><p><b> 9.參考文獻14</b></p><p> 10.程序代碼16</p><p> 11.實驗效果圖29</p><p> 基于STC89C52單片機電子鐘設(shè)計</p><p> 1.單片機電子鐘系統(tǒng)概述</p><p&
10、gt;<b> 1.1電子鐘的描述</b></p><p> 數(shù)字電子鐘是采用電子電路實現(xiàn)對年、月、日、時、分、秒數(shù)字顯示的計時裝置,由于數(shù)字集成電路的發(fā)展和石英晶體震蕩器的廣泛應(yīng)用,使得數(shù)字電子鐘的精度遠(yuǎn)遠(yuǎn)超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,成為人們?nèi)粘I钪胁豢扇鄙俚谋匦杵贰?lt;/p><p><b> 1.2電子鐘的概述<
11、;/b></p><p> 20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。隨著科技的發(fā)展和社會的進步,人們對鐘表的要求也越來越高,傳統(tǒng)的鐘表已不能滿足人們的需求。單片機在多功能電子鐘中的應(yīng)用已是非常普遍的,人們對電子鐘的功能及工作順序都非常熟悉。&
12、lt;/p><p> 電子時鐘是采用數(shù)字電路實現(xiàn)對時間、日期數(shù)字顯示的計時裝置,是人們?nèi)粘I钪斜夭豢缮俚谋匦杵?,廣泛用于個人家庭以及車站、航站、劇院、辦公室等公共場所,給人們的生活、學(xué)習(xí)、工作、娛樂帶來極大的方便。</p><p> 縱觀我們現(xiàn)在生活的各個領(lǐng)域,從導(dǎo)彈的導(dǎo)航裝置,到飛機上各個儀表的控制,從計算機的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,到工業(yè)自動化過程的實時控制和數(shù)據(jù)處理;以及我們生活中廣泛
13、使用的各種智能IC卡等,這些都離不開單片機。以前沒有單片機時,這些東西也能做,但是智能使用復(fù)雜的模擬電路、然而這樣做出來的產(chǎn)品不僅體積大,而且成本高,并且由于長期使用,與元件不斷老化,控制精度自然也會達不到標(biāo)準(zhǔn)。在單片機產(chǎn)生后,我們就將控制這些東西變?yōu)橹悄芑?,我們只需要在單片機外圍接一點簡單的接口電路,核心部分只是由人為的寫入程序來完成。這樣產(chǎn)品的體積變小了,成本也降低了。隨著電子技術(shù)的飛速發(fā)展,家用電器和辦公電子設(shè)備逐漸增多,不同的
14、設(shè)備都有自己的控制器,使用起來很不方便。根據(jù)這種實際情況,設(shè)計了一個單片機多功能電子鐘系統(tǒng),他可以避免多種控制器的混淆,利用一個控制器對多路電器進行控制,同時又可以進行時鐘校準(zhǔn),它可以任意設(shè)置時間。這種具有人們所需要的智能化特性的產(chǎn)品減輕了人們的勞動,擴大了數(shù)字化的范圍,為家庭數(shù)字化提供了可能。</p><p><b> 2.題目及要求</b></p><p>&l
15、t;b> 2.1 題目</b></p><p> 基于STC89C52單片機電子鐘設(shè)計</p><p><b> 2.2要求</b></p><p> ?。?)在LCD1602液晶顯示器上顯示年份、月、日、星期、時、分、秒。</p><p> ?。?)年-月-日-星期顯示在第一行,格式XX-XX-
16、XX-星期X;時-分-秒顯示在第二行,格式XX-XX-XX(24小時格式) 。</p><p> ?。?)用按鍵任意更改顯示的時間:</p><p> 1)K13按鍵功能是停止時鐘,進行設(shè)置顯示的時間,光標(biāo)移動。</p><p> 2)在K13按下的時候,K14進行時間的增加。按一次就增加1。</p><p> 3)在K13按下的時候,
17、K15進行時間的減少。按一次就減少1。</p><p><b> 3.方案選擇與論證</b></p><p> 3.1 單片機芯片的選擇方案和論證</p><p> 3.1.1、方案一: </p><p> 采用STC89C52芯片作為硬件核心。STC89C52內(nèi)部具有8KB ROM 存儲空間,512字節(jié)數(shù)據(jù)存儲
18、空間,帶有2K字節(jié)的EEPROM存儲空間,與MCS-51系列單片機完全兼容,STC89C52可以通過串口下載。</p><p> 3.1.2、方案二:</p><p> 采用AT89S52。AT89S52片內(nèi)具有8K字節(jié)程序存儲空間,256字節(jié)的數(shù)據(jù)存儲空間沒有EEPROM存儲空間,也與MCS-51系列單片機完全兼容,具有在線編程可擦除技術(shù)。</p><p>
19、 由兩種單片機都完全能夠滿足設(shè)計需要,而STC89C52相對ATS89C52價格便宜,且抗干擾能力強??紤]到成本因素,因此選用STC89C52。</p><p> 3.2 顯示模塊選擇方案和論證</p><p> 3.2.1、方案一:</p><p> 采用點陣式數(shù)碼管顯示。點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,可用來顯示數(shù)。但體積較大,且價格也相對較高,
20、從便攜實用的角度出發(fā),不采用此種方案。</p><p> 3.2.2、方案二:</p><p> 采用LED數(shù)碼管動態(tài)掃描。LED數(shù)碼管價格便宜,對于顯示數(shù)字最合適,但功耗較大,且顯示容量不夠,所以也不用此種方案。</p><p> 3.2.3、方案三:</p><p> 采用LCD液晶顯示屏。液晶顯示屏的顯示功能強大,可顯示大量文字
21、,顯示多樣,清晰可見,且價格適中,所以采用了LCD數(shù)碼管作為顯示。</p><p> 3.3 電路設(shè)計最終方案決定</p><p> 綜上各方案所述,對此次作品的方案選定: 采用STC89C52單片機作為主控制系統(tǒng);采用1602 LCD液晶作為顯示器件。</p><p> 4.硬件原理電路圖的設(shè)計及分析</p><p> 4.1 S
22、TC89C52介紹</p><p> 4.1.1 STC89C52主要功能及PDIP封裝</p><p> STC89C52是由深圳宏晶科技公司生產(chǎn)的與工業(yè)標(biāo)準(zhǔn)MCS-51指令集和輸出管腳相兼容的單片機。STC89C52主要功能如表4.1所示,其PDIP封裝如圖4.1所示</p><p> 表4.1 STC89C52主要功能</p><
23、p> 4.1.2 STC89C52引腳介紹</p><p> (1) 主電源引腳(2根)</p><p> VCC(Pin40):電源輸入,接+5V電源</p><p> GND(Pin20):接地線</p><p> (2) 外接晶振引腳(2根)</p><p> XTAL1(Pin19):片內(nèi)振
24、蕩電路的輸入端</p><p> XTAL2(Pin20):片內(nèi)振蕩電路的輸出端</p><p> (3) 控制引腳(4根)</p><p> RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn)2個機器周期的高電平將使單片機復(fù)位</p><p> ALE/PROG(Pin30):地址鎖存允許信號</p><p>
25、 PSEN(Pin29):外部存儲器讀選通信號</p><p> EA/VPP(Pin31):程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內(nèi)部程序存儲器讀指令。</p><p> (4) 可編程輸入/輸出引腳(32根)</p><p> STC89C52單片機有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個口有8位
26、(8根引腳),共32根。</p><p> P0口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7</p><p> P1口(Pin1~Pin8):8位準(zhǔn)雙向I/O口線,名稱為P1.0~P1.7 </p><p> P2口(Pin21~Pin28):8位準(zhǔn)雙向I/O口線,名稱為P2.0~P2.7 </p><p>
27、; P3口(Pin10~Pin17):8位準(zhǔn)雙向I/O口線,名稱為P3.0~P3.7</p><p> 圖4.1 STC89C52 PDIP封裝圖</p><p> 4.1.3 STC89C52最小系統(tǒng) </p><p> 最小系統(tǒng)是指能進行正常工作的最簡單電路。STC89C52最小應(yīng)用系統(tǒng)電路如圖4.2所示。它包含五個電路部分:電源電路、時鐘電路、復(fù)位
28、電路、片內(nèi)外程序存儲器選擇電路、輸入/輸出接口電路。其中電源電路、時鐘電路、復(fù)位電路是 保證單片機系統(tǒng)能夠正常工作的最基本的三部分電路,缺一不可。</p><p> (1) 電源電路 芯片引腳VCC一般接上直流穩(wěn)壓電源+5V,引腳GND接電源+5V的負(fù)極,電源電壓范圍在4~5.5之間,可保證單片機系統(tǒng)能正常工作。為提高電路的抗干擾性能,通常在引角Vcc與GND之間接上一個10uF的電解電容和一個0.1uF陶片
29、電容,這樣可抑制雜波串?dāng)_,從而有效確保電路穩(wěn)定性。</p><p> (2) 時鐘電路 單片機引腳18和引腳19外接晶振及電容, STC89C52芯片</p><p> 工作頻率可在2~33MHz范圍之間選,單片機工作頻率取決于晶振XT的頻率,通常選用11.0592MHz晶振。兩個小電容通常取值3pF,以保證振蕩器電路的穩(wěn)定性及快速性。</p><p> (
30、3) 復(fù)位電路 一般若在引腳RST上保持24個工作主頻周期的高電平,單片機就可以完成復(fù)位,但為了保證系統(tǒng)可靠地復(fù)位,復(fù)位電路應(yīng)使引腳RST保持10ms以上的高電平。如圖復(fù)位電路帶有上電自動復(fù)位功能,當(dāng)電路上電時,由于C1電容兩端電壓值不能突變,電源+5V會通過電容向RST提供充電電流,因此在RST引腳上產(chǎn)生一高電平,使單片機進入復(fù)位狀態(tài)。隨著電容C1充電,它兩端電壓上升使得RST電位下降,最終使單片機退出復(fù)位狀態(tài)。正常運行時,可按復(fù)
31、位按鈕對單片機復(fù)位</p><p> 圖4.2 STC89C52最小系統(tǒng)</p><p> 4.2 LCD1602液晶顯示器介紹</p><p> 4.2.1 LCD 1602液晶概述</p><p> 工業(yè)字符型液晶,LCD1602是指顯示的內(nèi)容為16*2,能同時顯示兩行,每行16個字符。常見的1602字符液晶有兩種,一種顯示
32、綠色背光黑色字體,另一種顯示藍(lán)色背光白色字體,目前市面上絕大多數(shù)基于HD44780液晶芯片控制,原理是完全相同的。本課題所用LCD1602液晶模塊,顯示屏是藍(lán)色背光白色字體。如圖4.3所示</p><p> 圖4.3 LCD 1602字符液晶</p><p> 4.2.2 LCD1602引腳介紹(如表4.2)</p><p> 表4.2 LCD1602字符液
33、晶引腳說明</p><p> 各個引腳具體功能說明:</p><p> 第1腳:GND為地電源。</p><p> 第2腳:VCC接5V正電源。</p><p> 第3腳:VO為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生重影,使用一個1K的電位器調(diào)整對比度。</p><p
34、> 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器。</p><p> 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。</p><p> 第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p> 第7~14腳:DB0~DB7為8位雙向數(shù)據(jù)線。</p><
35、p> 第15~16腳:背光燈電源。</p><p> 4.2.3 LCD1602字符液晶使用方法</p><p> ?。?)基本操作時序(如表4.3、圖4.4、5)</p><p> 表4.3 LCD1602字符液晶讀寫狀態(tài)表</p><p> 圖4.4 LCD1602液晶寫時序圖</p><p>
36、 圖4.5 LCD1602液晶讀時序圖</p><p><b> (2)RAM</b></p><p> LCD1602液晶控制器芯片內(nèi)部帶有80個8位的RAM緩沖區(qū),其地址和屏幕的對應(yīng)關(guān)系如圖4.6示</p><p> 圖4.6 RAM緩沖區(qū)</p><p><b> 5.系統(tǒng)流程圖</b&
37、gt;</p><p> 5.1電路設(shè)計框圖(如圖5.1)</p><p><b> 圖5.1 系統(tǒng)框圖</b></p><p> 5.2系統(tǒng)流程圖(如圖5.2)</p><p><b> 5.3硬件框圖</b></p><p> LCD1602 框圖</p&
38、gt;<p> 程序主要實現(xiàn)對信息的顯示,包括年、月、日、星期、時、分、秒等信息,在這里要注意它的讀寫控制指令。其流程圖如圖5.3所示。</p><p> 5.3.2 STC89C52框圖(如圖5.4)</p><p> 圖5.4 STC89C52 框圖</p><p><b> 6、編程思路</b></p>
39、<p> 編程思路是,在確定了時鐘要實現(xiàn)的功能后按照上述各按鍵所實現(xiàn)的效果編寫程序。本程序包含液晶寫指令函數(shù)(write_com())、寫數(shù)據(jù)函數(shù)(write_data())、初始化函數(shù)(init())、寫入時分秒函數(shù)(write_sfm())、寫入月和日函數(shù)(write_nyr())【別指出,由于年包含四位數(shù)字其寫法與月和日不同,故單獨設(shè)置一個寫入年函數(shù)】、寫入星期函數(shù)(write_xq())和鍵盤掃描函數(shù),這些程序圍繞
40、主函數(shù)互相嵌套調(diào)用。</p><p><b> 7、系統(tǒng)評價</b></p><p> 此時鐘設(shè)計是利用STC89C52單片機進行設(shè)計,基本上實現(xiàn)了課程設(shè)計要求實現(xiàn)的功能。</p><p> 硬件部分設(shè)置了的4個按鍵。當(dāng)按鍵K13按下時,進入光標(biāo)顯示狀態(tài),計數(shù)器停止工作,時鐘也停止,進入設(shè)置時間的狀態(tài)。在K13按下的情況,按鍵K14按下時
41、,對應(yīng)光標(biāo)的數(shù)據(jù)隨著K14按鍵的按下的次數(shù)而變化,具體是按鍵一次就是增加一個單位。在K13按下的情況,按鍵K15按下時,對應(yīng)光標(biāo)的數(shù)據(jù)隨著K15按鍵的按下的次數(shù)而變化,具體是按鍵一次就是少一個單位。在增加和減少設(shè)置的選項中也加入了閏年平年的判斷,更利于設(shè)置。K16按下的時候,推出設(shè)置狀態(tài),計數(shù)器工作,開始計時。</p><p> 調(diào)試階段,出現(xiàn)一些問題。比如,實際小時顯示到29才歸零,分鐘顯示到60才進一……
42、,以上問題均一一排除,結(jié)果達到預(yù)期目標(biāo)。但時間有限,1,按鍵問題。我的設(shè)計中,很多功能選擇是通過按鍵開關(guān)實現(xiàn)的。在仿真中發(fā)現(xiàn),調(diào)整數(shù)值時,有時按鍵反應(yīng)太快,按一次,跳了幾下,使設(shè)置時間,日期很不方便。但是仿真多了之后,找到了按鍵(實際上是按鼠標(biāo))的節(jié)奏,對按鍵的掌控力提高了不少,不怎么會出現(xiàn)跳變的情況了。有些開關(guān)我采用了長按鍵的方式來防抖,效果不錯,但是每次都要長按鍵,調(diào)整效率太低,我沒有普及。本來想把所有的按鍵都加延時防抖電路,但仿真
43、中感覺對鍵盤的控制力沒提高多少,有時還是會出問題,這個方案放棄了。索性將板子焊接出來了在調(diào)試軟件吧,仿真畢竟不是那么“真”??!實際電路調(diào)試中,按鍵反應(yīng)沒有出現(xiàn)過于靈敏的問題,基本可控制。</p><p> 出現(xiàn)以上問題,我認(rèn)為是電路板上焊接點太多,接觸不是很好,影響了信號的傳輸時間,從而解決了按鍵問題!也有可能是按鍵質(zhì)量問題,接觸不良。</p><p><b> 8、心得體會
44、</b></p><p> 一分耕耘,一分收獲。只有親自用實踐來驗證這句話,在能得其要領(lǐng)。經(jīng)過這次單片機課程設(shè)計,我從一個單片機實踐的門外漢,已經(jīng)越升為略知一二的新手。雖然還有很多有關(guān)單片機的應(yīng)用有待學(xué)習(xí),但萬變不離其宗,只要深入了解單片的原理,全部知識點,各個細(xì)節(jié),一切設(shè)計皆有可能。</p><p> 在實驗的開始幾天,基本上沒有收獲,不知何從下手,不知所措。為了看得更遠(yuǎn)
45、,不妨站在前人的肩膀上,我在整體思路模糊的情況下,在網(wǎng)上大量招資糧,各種與電子時鐘相關(guān)的文章,我閱讀了不少。隨著涉獵的點滴積累,我對電子時鐘的設(shè)計方案已經(jīng)慢慢醞釀而成。有了方向和不少知識儲備后,在接下來的幾天,幾乎每天都有突破,雖然有時只是一句程序的修改或誕生,但那種收獲的感覺很暖人心。</p><p><b> 9.參考文獻</b></p><p> ?。?)、甕
46、嘉民主編 單片機應(yīng)用開發(fā)技術(shù) 中國電力出版社</p><p> ?。?)、肖婧編著 單片機系統(tǒng)設(shè)計與仿真 北京航空航天大學(xué)出版社</p><p> ?。?)、張曉鄉(xiāng)主編 89C51單片機實用教程 電子工業(yè)出版社</p><p> ?。?)、于海生.微型計算機控制技術(shù)[M] .清華大學(xué)出版社</p><p> ?。?)、孫涵芳.MCS-51系列
47、單片機原理及應(yīng)用[M] .北京航空航天大學(xué)社</p><p> (6)、黃正謹(jǐn).綜合電子設(shè)計與實踐[M] .東南大學(xué)出版社</p><p> ?。?)楊欣等.電子設(shè)計從零開始[M] .清華大學(xué)出版社</p><p> ?。?)、謝嘉奎.電子線路[M] .高等教育出版社</p><p> (8)、王毓銀.?dāng)?shù)字電路邏輯設(shè)計[M] .高等教育出
48、版社</p><p> ?。?)、邱關(guān)源.電路[M] .高等教育出版社</p><p><b> 10.程序代碼</b></p><p> #include<reg52.h></p><p> #define uchar unsigned char</p><p> #defi
49、ne uint unsigned int</p><p> sbit RS = P1^0;</p><p> sbit RW = P1^1;</p><p> sbit E = P1^5;</p><p> sbit s1=P2^4;</p><p> sbit s2=P2^5;</p>&l
50、t;p> sbit s3=P2^6;</p><p> sbit s4=P2^7;</p><p> sbit speaker=P2^0;</p><p> uchar code table[]=" 2099-12-31 MON";</p><p> uchar code table1[]="23
51、:58:50 23:59";</p><p> uchar num,count,shi=23,fen=58,miao=50;</p><p> uchar yue=12,ri=31;</p><p> uint nian=2099;</p><p> uchar s1num,xq;</p><p>
52、; char Nshi=23,Nfen=59,clock;</p><p> void delay(uchar z)</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p>
53、<p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> void write_com(uchar com)</p><p><b> {</b></p><p><b> RS=0;</b></
54、p><p><b> RW=0;</b></p><p><b> P0=com;</b></p><p><b> delay(5);</b></p><p><b> E=0;</b></p><p><b>
55、delay(5);</b></p><p><b> E=1;</b></p><p><b> }</b></p><p> void write_data(uchar date)</p><p><b> {</b></p><p&g
56、t;<b> RS=1;</b></p><p><b> RW=0;</b></p><p><b> P0=date;</b></p><p><b> delay(5);</b></p><p><b> E=0;</b&g
57、t;</p><p><b> delay(5);</b></p><p><b> E=1;</b></p><p><b> }</b></p><p> void init()//初始化</p><p><b> {</b
58、></p><p> delay(15);</p><p> write_com(0x38); </p><p> write_com(0x08); </p><p> write_com(0x01); </p><p> write_com(0x06);</p><p> w
59、rite_com(0x0c); </p><p> write_com(0x01); </p><p> write_com(0x80);</p><p> write_com(0x02);</p><p> for(num=0;num<15;num++)</p><p><b> {<
60、/b></p><p> write_data(table[num]);</p><p> delay(20);</p><p><b> }</b></p><p> write_com(0x80+0x41);</p><p> for(num=0;num<15;num++
61、)</p><p><b> {</b></p><p> write_data(table1[num]);</p><p> delay(20);</p><p><b> }</b></p><p> TMOD=0x01;//t016位計數(shù)器</p>
62、<p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p> TH0=(65536-50000)/256;//賦值初值12MHz晶振</p><p> TL0=(6
63、5536-50000)%256;</p><p><b> }</b></p><p> void write_sfm(uchar add,uchar date)</p><p><b> {</b></p><p> uchar shi,ge;</p><p>
64、shi=date/10;</p><p> ge=date%10;</p><p> write_com(0x80+0x40+add);</p><p> write_data(0x30+shi);//</p><p> write_data(0x30+ge);</p><p><b> }<
65、/b></p><p> void write_nyr(uchar add,uchar date)</p><p><b> {</b></p><p> uchar shi,ge;</p><p> shi=date/10;</p><p> ge=date%10;</p&
66、gt;<p> write_com(0x80+add);</p><p> write_data(0x30+shi);</p><p> write_data(0x30+ge);</p><p><b> }</b></p><p> void write_nian(uchar add,uint
67、year)</p><p><b> {</b></p><p> uint qian,bai,shi,ge;</p><p> qian=year/1000;// 2413/1000=2</p><p> bai=(year%1000)/100;//(2413%1000)=413 413/100=4 </
68、p><p> shi=((year%1000)%100)/10;// 413%100=13 13/10=1 </p><p> ge=(((year%1000)%100))%10;//13%10=3 </p><p> write_com(0x80+add);</p><p> write_data(0x30+qian);</p&g
69、t;<p> write_data(0x30+bai);</p><p> write_data(0x30+shi);</p><p> write_data(0x30+ge);</p><p><b> }</b></p><p> void write_xq1(uchar add)</p
70、><p><b> {</b></p><p> write_com(0x80+add);</p><p> write_data(0x40+0x0d);</p><p> write_data(0x40+0x0f);</p><p> write_data(0x40+0x0e);<
71、/p><p><b> }</b></p><p> void write_xq2(uchar add)</p><p><b> {</b></p><p> write_com(0x80+add);</p><p> write_data(0x54);</p
72、><p> write_data(0x55);</p><p> write_data(0x45);</p><p><b> }</b></p><p> void write_xq3(uchar add)</p><p><b> {</b></p>
73、<p> write_com(0x80+add);</p><p> write_data(0x50+4);</p><p> write_data(0x40+8);</p><p> write_data(0x50+5);</p><p><b> }</b></p><p&g
74、t; void write_xq4(uchar add)</p><p><b> {</b></p><p> write_com(0x80+add);</p><p> write_data(0x57);</p><p> write_data(0x45);</p><p> w
75、rite_data(0x4e);</p><p><b> }</b></p><p> void write_xq5(uchar add)</p><p><b> {</b></p><p> write_com(0x80+add);</p><p> wri
76、te_data(0x46);</p><p> write_data(0x52);</p><p> write_data(0x49);</p><p><b> }</b></p><p> void write_xq6(uchar add)</p><p><b> {&
77、lt;/b></p><p> write_com(0x80+add);</p><p> write_data(0x53);</p><p> write_data(0x41);</p><p> write_data(0x54);</p><p><b> }</b></
78、p><p> void write_xq7(uchar add)</p><p><b> {</b></p><p> write_com(0x80+add);</p><p> write_data(0x53);</p><p> write_data(0x55);</p>
79、<p> write_data(0x4e);</p><p><b> }</b></p><p> void write_naozhong(uchar add,uchar date)</p><p><b> {</b></p><p> uchar shi,ge;<
80、/p><p> shi=date/10;</p><p> ge=date%10;</p><p> write_com(0x80+0x40+add);</p><p> write_data(0x30+shi);</p><p> write_data(0x30+ge);</p><p>
81、;<b> }</b></p><p> void keyscan()</p><p><b> {</b></p><p><b> if(s1==0)</b></p><p><b> {</b></p><p>&l
82、t;b> delay(5);</b></p><p><b> if(s1==0)</b></p><p><b> {</b></p><p><b> s1num++;</b></p><p> while(!s1);</p>&
83、lt;p> if(s1num==1)</p><p><b> {</b></p><p><b> TR0=0;</b></p><p> write_com(0x80+0x40+8);</p><p> write_com(0x0f);</p><p>&
84、lt;b> } </b></p><p> if(s1num==2)</p><p><b> {</b></p><p> write_com(0x80+0x40+5);</p><p><b> }</b></p><p> if
85、(s1num==3)</p><p><b> {</b></p><p> write_com(0x80+0x40+2);</p><p><b> }</b></p><p> if(s1num==4)</p><p><b> {</b>
86、</p><p> write_com(0x80+4);</p><p><b> }</b></p><p> if(s1num==5)</p><p><b> {</b></p><p> write_com(0x80+7);</p><p
87、><b> }</b></p><p> if(s1num==6)</p><p><b> {</b></p><p> write_com(0x80+10);</p><p><b> }</b></p><p> if(s1num
88、==7)</p><p><b> {</b></p><p> write_com(0x80+12); </p><p><b> }</b></p><p> if(s1num==8)</p><p><b> {</b></p>
89、;<p> write_com(0x80+0x40+12); </p><p><b> }</b></p><p> if(s1num==9)</p><p><b> {</b></p><p> write_com(0x80+0x40+15); </p>
90、<p><b> }</b></p><p> if(s1num==10)</p><p><b> {</b></p><p><b> s1num=0;</b></p><p> write_com(0x0c); </p><p
91、><b> TR0=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(s1num!=0)</p><p>&
92、lt;b> {</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s2==0)</b><
93、;/p><p><b> {</b></p><p> while(!s2);</p><p> if(s1num==1)</p><p><b> {</b></p><p><b> miao++;</b></p><p&g
94、t; if(miao==60)</p><p><b> miao=0;</b></p><p> write_sfm(7,miao);</p><p> write_com(0x80+0x40+8);</p><p><b> }</b></p><p>
95、if(s1num==2)</p><p><b> {</b></p><p><b> fen++;</b></p><p> if(fen==60)</p><p><b> fen=0;</b></p><p> write_sfm(4,
96、fen);</p><p> write_com(0x80+0x40+5);</p><p><b> }</b></p><p> if(s1num==3)</p><p><b> {</b></p><p><b> shi++;</b>
97、</p><p> if(shi==24)</p><p><b> {</b></p><p><b> shi=0;</b></p><p> write_sfm(1,shi);</p><p> write_com(0x80+0x40+2);</p>
98、;<p><b> }</b></p><p><b> }</b></p><p> if(s1num==4)</p><p><b> {</b></p><p><b> nian++;</b></p><
99、;p> write_nian(1,nian);</p><p> write_com(0x80+4);</p><p><b> }</b></p><p> if(s1num==5)</p><p><b> {</b></p><p><b>
100、 yue++;</b></p><p> if(yue==13)</p><p><b> yue=1;</b></p><p> write_nyr(6,yue);</p><p> write_com(0x80+7);</p><p><b> }<
101、/b></p><p> if(s1num==6)</p><p><b> {</b></p><p><b> ri++;</b></p><p> if(yue==2&&(nian%4==0)&&ri==29)ri=1; </p>&
102、lt;p> if(yue==2&&(nian%4!=0)&&ri==30)ri=1; </p><p> if((yue==4||yue==6||yue==9||yue==11)&&ri==31)ri=1;</p><p> else if(ri==32)ri=1;</p><p> write_nyr
103、(9,ri);/</p><p> write_com(0x80+10);</p><p><b> }</b></p><p> if(s1num==7)</p><p><b> {</b></p><p><b> xq++;</b>&l
104、t;/p><p> if(xq%7==0)</p><p> write_xq1(12);</p><p> if(xq%7==1)</p><p> write_xq2(12);</p><p> if(xq%7==2)</p><p> write_xq4(12);</p>
105、;<p> if(xq%7==3)</p><p> write_xq3(12);</p><p> if(xq%7==4)</p><p> write_xq5(12);</p><p> if(xq%7==5)</p><p> write_xq6(12);</p><
106、p> if(xq%7==6)</p><p> write_xq7(12);</p><p> write_com(0x80+12);</p><p><b> }</b></p><p> if(s1num==8)</p><p><b> {</b>&l
107、t;/p><p><b> Nshi++;</b></p><p> if(Nshi==24)</p><p><b> Nshi=0;</b></p><p> write_naozhong(11,Nshi);</p><p> write_com(0x80+0x40
108、+11);</p><p><b> }</b></p><p> if(s1num==9)</p><p><b> {</b></p><p><b> Nfen++;</b></p><p> if(Nfen==60)</p>
109、<p><b> Nfen=0;</b></p><p> write_naozhong(14,Nfen);</p><p> write_com(0x80+0x40+14);</p><p><b> }</b></p><p><b> }</b>&
110、lt;/p><p><b> }</b></p><p><b> }</b></p><p><b> {</b></p><p><b> if(s3==0)</b></p><p><b> {</b&g
111、t;</p><p><b> delay(5);</b></p><p><b> if(s3==0)</b></p><p><b> {</b></p><p> while(!s3);</p><p> if(s1num==1)<
112、/p><p><b> {</b></p><p><b> miao--;</b></p><p> if(miao==-1)</p><p><b> {</b></p><p><b> miao=59;</b><
113、/p><p><b> }</b></p><p> write_sfm(7,miao);</p><p> write_com(0x80+0x40+8);</p><p><b> }</b></p><p> if(s1num==2)</p><
114、p><b> {</b></p><p><b> fen--;</b></p><p> if(fen==-1)</p><p><b> fen=59;</b></p><p> write_sfm(4,fen);</p><p>
115、 write_com(0x80+0x40+5);</p><p><b> }</b></p><p> if(s1num==3)</p><p><b> {</b></p><p><b> shi--;</b></p><p> if(s
116、hi==-1)</p><p><b> shi=23;</b></p><p> write_sfm(1,shi);</p><p> write_com(0x80+0x40+2);</p><p><b> }</b></p><p> if(s1num==4)
117、</p><p><b> {</b></p><p><b> nian--;</b></p><p> write_nian(1,nian);</p><p> write_com(0x80+4);</p><p><b> }</b>
118、</p><p> if(s1num==5)</p><p><b> {</b></p><p><b> yue--;</b></p><p> if(yue==0)</p><p><b> yue=12;</b></p>
119、<p> write_nyr(6,yue);</p><p> write_com(0x80+7);</p><p><b> }</b></p><p> if(s1num==6)</p><p><b> {</b></p><p><b&g
120、t; ri--;</b></p><p> if(yue==2&&(nian%4==0)&&ri==0)ri=28; </p><p> if(yue==2&&(nian%4!=0)&&ri==0)ri=29;</p><p> if((yue==4||yue==6||yue==9
121、||yue==11)&&ri==0)ri=30;</p><p> else if(ri==0)ri=31;</p><p> write_nyr(9,ri);</p><p> write_com(0x80+10);</p><p><b> }</b></p><p>
122、 if(s1num==8)</p><p><b> {</b></p><p><b> Nshi--;</b></p><p> if(Nshi<0)</p><p><b> Nshi=23;</b></p><p> write
123、_naozhong(11,Nshi);</p><p> write_com(0x80+0x40+11);</p><p><b> }</b></p><p> if(s1num==9)</p><p><b> {</b></p><p><b> N
124、fen--;</b></p><p> if(Nfen<0)</p><p><b> {</b></p><p><b> Nfen=59;</b></p><p> write_naozhong(14,Nfen);</p><p> write
125、_com(0x80+0x40+14);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
126、; }</b></p><p><b> if(s4==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s4==0)</b></p>
127、<p><b> {</b></p><p> while(!s4);</p><p> if(s1num<=9&&s1num!=0)</p><p><b> {</b></p><p><b> s1num=0;</b><
128、/p><p><b> TR0=1;</b></p><p> write_com(0x0c);</p><p><b> }</b></p><p> if(Nshi==shi&&Nfen==fen)</p><p><b> {</b
129、></p><p><b> clock=0;</b></p><p> speaker=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
130、/p><p><b> }</b></p><p> void alarm()</p><p><b> { </b></p><p> if(Nfen!=fen)clock=1;</p><p> if(clock==1)</p><p>&
131、lt;b> {</b></p><p> if(Nshi==shi&&Nfen==fen)</p><p><b> {</b></p><p> if(count==0) </p><p> speaker=0;</p><p> if(count=
132、=10)</p><p> speaker=1;</p><p><b> }</b></p><p><b> } </b></p><p><b> } </b></p><p> void main()</p><p&
133、gt;<b> {</b></p><p><b> init();</b></p><p><b> while(1)</b></p><p><b> {</b></p><p><b> alarm();</b>&l
134、t;/p><p> keyscan();</p><p> if(count==20)//</p><p><b> {</b></p><p><b> count=0;</b></p><p><b> miao++;</b></p>
135、;<p> if(miao==60)</p><p><b> {</b></p><p><b> miao=0;</b></p><p><b> fen++;</b></p><p> if(fen==60)</p><p>
136、;<b> {</b></p><p><b> fen=0;</b></p><p><b> shi++;</b></p><p> if(shi==24)</p><p><b> {</b></p><p><
137、;b> shi=0;</b></p><p><b> ri++;</b></p><p><b> xq++;</b></p><p> if(yue==2&&(nian%4==0)&&ri==29)</p><p><b>
138、{</b></p><p><b> ri=1; </b></p><p><b> yue++;</b></p><p><b> }</b></p><p> if(yue==2&&(nian%4!=0)&&ri==30)
139、</p><p><b> {</b></p><p><b> ri=1; </b></p><p><b> yue++;</b></p><p><b> }</b></p><p> if((yue==4||yu
140、e==6||yue==9||yue==11)&&ri==31)</p><p><b> {</b></p><p><b> ri=1;</b></p><p><b> yue++;</b></p><p><b> }</b>
141、</p><p> if(ri==32)</p><p><b> {</b></p><p><b> ri=1;</b></p><p><b> yue++;</b></p><p><b> }</b></p
142、><p> if(yue==13)</p><p><b> {</b></p><p><b> yue=1;</b></p><p><b> nian++;</b></p><p> write_nian(1,nian);</p>
143、<p> write_com(0x80+1);</p><p><b> }</b></p><p> write_nyr(6,yue);</p><p> write_com(0x80+6);</p><p> write_nyr(9,ri);</p><p> wri
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機電子鐘課程設(shè)計
- 單片機電子鐘課程設(shè)計報告
- 單片機電子鐘課程設(shè)計報告
- 電子鐘單片機課程設(shè)計
- 電子鐘課程設(shè)計--基于單片機的電子鐘設(shè)計
- 《單片機技術(shù)》電子鐘課程設(shè)計---數(shù)字電子鐘
- 單片機課程設(shè)計--電子鐘
- 單片機課程設(shè)計(電子鐘)
- 單片機課程設(shè)計——數(shù)字電子鐘
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計---智能電子鐘
- 單片機原理課程設(shè)計--電子鐘
- 單片機數(shù)字電子鐘課程設(shè)計
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計-智能電子鐘
- 單片機課程設(shè)計--數(shù)字鐘電子鐘
- 單片機課程設(shè)計--簡單電子鐘設(shè)計
- 單片機課程設(shè)計--數(shù)字電子鐘設(shè)計
- 單片機課程設(shè)計---電子鐘的設(shè)計
評論
0/150
提交評論