




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
.PAGE.-..-可修遍-摘要隨著單片機技術的飛速開展,在其推動下,現(xiàn)代的電子產(chǎn)品幾乎滲透到了社會的各個領域,有力地推動了社會生產(chǎn)力的開展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高。時間就是金錢、時間就是生命、時間就是勝利……,準確的掌握時間和分配時間對人們來說至關重要,時鐘是我們生活中必不可少的工具。電子鐘的設計方法有很多種,但是基于單片機并通過LCD顯示的電子時鐘具有編程靈活、準確度高、便于攜帶、顯示直觀等特點。利用STC89C52單片機對DS1302時鐘芯片進展讀寫操作并通過1602字符液晶顯示實時時鐘信息,這樣便構(gòu)成了一個單片機電子時鐘。關鍵詞:單片機,電子時鐘,STC89C52,蜂鳴器AbstractWiththerapiddevelopmentofmicroputertechnologyinitspromotion,modernelectronicsintoalmostallareasofsociety,astrongimpetustothedevelopmentofsocialproductiveforcesandsocialimprovementinthelevelofinformation,butalsotofurtherimprovetheperformanceofmodernelectronicproducts.Timeisamoney,timeislife,timeisvictory…Accurategraspoftimeandallocationoftimeiscrucialtopeople,Theclockisnecessaryinourlifetools.ClockDesignTherearemanyways,however,producedbysinglechipelectronicclockismoreflexibleprogramming,andeasyexpansionofelectroniccapabilities,highaccuracy,easytocarry,displayvisualandsoon.Inthispaper,throughtheuseofSTC89C52microcontrollerbyDS1302clockchipsforreadingandwritingoperationandthrough1602characterliquidcrystaldisplayreal-timeclockinformationsothatformingasinglechipelectronicclock.KeyWords:Microcontroller,STC89C52,Electronicclock,buzzer目錄緒論1概述1研究目的1第1章設計要求與方案論證21.1設計要求21.2系統(tǒng)根本方案選擇和論證21.2.1單片機芯片的選擇方案和論證21.2.2顯示模塊選擇方案和論證—————————————21.2.3時鐘芯片的選擇方案和論證21.3電路設計最終方案決定3第2章主要元件介紹32.1STC89C52以及最小系統(tǒng)介紹32.1.1STC89C52主要功能及PDIP封裝42.1.2STC89C52引腳介紹42.1.3STC89C52最小系統(tǒng)42.2DS1302時鐘芯片以及集成時鐘模塊介紹52.2.1DS1302概述62.2.2DS1302引腳介紹62.2.3DS1302使用方法62.2.4時鐘集成模塊部原理圖以及實物圖82.31602字符液晶以及顯示模塊介紹92.3.11602液晶概述92.3.21602引腳介紹102.3.31602字符液晶使用方法112.3.4LCD顯示模塊原理圖13第3章系統(tǒng)硬件設計—————————————143.1電路設計框圖143.2系統(tǒng)硬件概述14第4章系統(tǒng)的軟件設計154.1程序流程框圖15第5章系統(tǒng)測試與總結(jié)175.1系統(tǒng)測試175.2總結(jié)17致18參考文獻18源程序清單18附錄35..-..-可修遍-緒論概述時間,對人們來說是非常珍貴的,準確的掌握時間和分配時間對人們來說至關重要。因此自從時鐘創(chuàng)造的那刻起,就成為人類的好朋友。隨著時間的流逝,科學技術的不斷開展和提高,人們對時間計量的精度要求越來越高,應用越來越廣。怎樣讓時鐘更好、更方便、更準確的顯示時間,這就要求人們不斷設計研發(fā)出新型的時鐘。高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術,因此走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校。數(shù)字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用LED顯示器代替指針進而顯示時間,減小了計時誤差,這種表具有時,分,秒顯示時間的功能,還可以進展時和分的校對,片選的靈活性好。時鐘電路在計算機系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的根底。在單片機的應用系統(tǒng)中,時鐘有兩個方面的含義:一是指為保障系統(tǒng)正常工作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統(tǒng)工作的快慢;二是指系統(tǒng)的標準定時時鐘,即定時時間,它通常有兩種實現(xiàn)方法:一是用軟件實現(xiàn),即用單片機部的可編程定時器/計數(shù)器來實現(xiàn);二是用專門的時鐘芯片實現(xiàn)。研究目的通過利用STC89C52單片機和DS1302芯片以及外圍的按鍵和LCD顯示器等部件,設計一個基于單片機的電子時鐘。設計的電子時鐘通過液晶顯示器顯示,并能通過按鍵對時間以及鬧鐘進展設置。第1章設計要求與方案論證1.1設計要求:具有年、月、日、星期、時、分、秒顯示功能〔〕具備年、月、日、星期、時、分、秒校準功能具有鬧鐘顯示、調(diào)節(jié)設定、鳴叫功能1.2系統(tǒng)根本方案選擇和論證1.2.1單片機芯片的選擇方案和論證:方案一:采用STC89C52芯片作為硬件核心。STC89C52部具有8KBROM存儲空間,512字節(jié)數(shù)據(jù)存儲空間,帶有2K字節(jié)的EEPROM存儲空間,與MCS-51系列單片機完全兼容,STC89C52可以通過串口下載。方案二:采用AT89S52。AT89S52片具有8K字節(jié)程序存儲空間,256字節(jié)的數(shù)據(jù)存儲空間沒有EEPROM存儲空間,也與MCS-51系列單片機完全兼容,具有在線編程可擦除技術。 兩種單片機都完全能夠滿足設計需要,STC89C52相對ATS89C52價格廉價,且抗干擾能力強。考慮到本錢因素,因此選用STC89C52。1.2.2顯示模塊選擇方案和論證:方案一:采用點陣式數(shù)碼管顯示。點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比擬適合,如采用在顯示數(shù)字顯得太浪費,且也相對較高,所以不用此種作為顯示。方案二:采用LED數(shù)碼管動態(tài)掃描。LED數(shù)碼管價格廉價,對于顯示數(shù)字最適宜,但功耗較大,且顯示容量不夠,所以也不用此種方案。方案三:采用LCD液晶顯示屏。液晶顯示屏的顯示功能強大,可顯示大量文字,顯示多樣,清晰可見,且價格適中,所以采用了LCD數(shù)碼管作為顯示。1.2.3時鐘芯片的選擇方案和論證:方案一:直接采用單片機定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約本錢,但是,實現(xiàn)的時間誤差較大。所以不采用此方案。方案二:采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M展計數(shù),而且精度高,工作電壓2.5V~5.5V圍,2.5V時耗電小于300nA.1.3電路設計最終方案決定綜上各方案所述,對此次作品的方案選定:采用STC89C52單片機作為主控制系統(tǒng);采用DS1302作為時鐘芯片;采用1602LCD液晶作為顯示器件。..第2章主要元件介紹2.1STC89C52以及最小系統(tǒng)介紹2.1.1STC89C52主要功能及PDIP封裝STC89C52是由宏晶科技公司生產(chǎn)的與工業(yè)標準MCS-51指令集和輸出管腳相兼容的單片機。STC89C52主要功能如表1所示,其PDIP封裝如圖2所示表1:STC89C52主要功能主要功能特性兼容MCS51指令系統(tǒng)8K可反復擦寫FlashROM32個雙向I/O口256x8bit部RAM3個16位可編程定時/計數(shù)器中斷時鐘頻率0-24MHz2個串行中斷可編程UART串行通道2個外部中斷源共6個中斷源2個讀寫中斷口線3級加密位低功耗空閑和掉電模式軟件設置睡眠和喚醒功能2.1.2STC89C52引腳介紹①主電源引腳〔2根〕VCC(Pin40):電源輸入,接+5V電源GND(Pin20):接地線②外接晶振引腳〔2根〕XTAL1(Pin19):片振蕩電路的輸入端XTAL2(Pin20):片振蕩電路的輸出端③控制引腳〔4根〕RST/VPP(Pin9):復位引腳,引腳上出現(xiàn)2個機器周期的高電平將使單片機復位。ALE/PROG(Pin30):地址鎖存允許信號PSEN(Pin29):外部存儲器讀選通信號EA/VPP(Pin31):程序存儲器的外部選通,接低電平從外部程序存儲器讀指令,如果接高電平那么從部程序存儲器讀指令。④可編程輸入/輸出引腳〔32根〕STC89C52單片機有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個口有8位〔8根引腳〕,共32根。P0口〔Pin39~Pin32〕:8位雙向I/O口線,名稱為P0.0~P0.7P1口〔Pin1~Pin8〕:8位準雙向I/O口線,名稱為P1.0~P1.7P2口〔Pin21~Pin28〕:8位準雙向I/O口線,名稱為P2.0~P2.7P3口〔Pin10~Pin17〕:8位準雙向I/O口線,名稱為P3.0~P3.7圖2:STC89C52PDIP封裝圖2.1.3STC89C52最小系統(tǒng)最小系統(tǒng)是指能進展正常工作的最簡單電路。STC89C52最小應用系統(tǒng)電路如圖3所示。它包含五個電路局部:電源電路、時鐘電路、復位電路、片外程序存儲器選擇電路、輸入/輸出接口電路。其中電源電路、時鐘電路、復位電路是保證單片機系統(tǒng)能夠正常工作的最根本的三局部電路,缺一不可。電源電路芯片引腳VCC一般接上直流穩(wěn)壓電源+5V,引腳GND接電源+5V的負極,電源電壓圍在4~5.5之間,可保證單片機系統(tǒng)能正常工作。時鐘電路單片機引腳18和引腳19外接晶振及電容,STC89C52芯片的工作頻率可在2~33MHz圍之間選,單片機工作頻率取決于晶振XT的頻率,通常選用11.0592MHz晶振。兩個小電容通常取值3pF,以保證振蕩器電路的穩(wěn)定性及快速性。復位電路一般假設在引腳RST上保持24個工作主頻周期的高電平,單片機就可以完成復位,但為了保證系統(tǒng)可靠地復位,復位電路應使引腳RST保持10ms以上的高電平。如圖復位電路帶有上電自動復位功能,當電路上電時,由于C1電容兩端電壓值不能突變,電源+5V會通過電容向RST提供充電電流,因此在RST引腳上產(chǎn)生一高電平,使單片機進入復位狀態(tài)。隨著電容C1充電,它兩端電壓上升使得RST電位下降,最終使單片機退出復位狀態(tài)。正常運行時,可按復位按鈕對單片機復位圖3:STC89C52最小系統(tǒng)2.2DS1302時鐘芯片以及時鐘集成模塊介紹2.2.1DS1302概述DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘芯片,它可以對年、月、日、周日、時、分、秒進展計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用雙電源供電〔主電源和備用電源〕,同時提供了對后背電源進展涓細電流充電的能力。采用三線接口與CPU進展同步通信圖4:DS1302封裝圖2.2.2DS1302引腳介紹各引腳功能為:Vcc:主電源;Vcc2:備用電源。當Vcc2>Vcc1+0.2V時,由Vcc2向DS1302供電;當Vcc2<Vcc1時,由Vcc1向DS1302供電。SCLK:串行時鐘輸入端,控制數(shù)據(jù)的輸入與輸出I/O:三線接口時的雙向數(shù)據(jù)線CE:輸入信號,在讀、寫數(shù)據(jù)期間必須為高2.2.3DS1302使用方法(1)時鐘芯片DS1302的工作原理:DS1302在每次進展讀、寫程序前都必須初始化,先把SCLK端置"0〞,接著把RST端置"1〞,最后才給予SCLK脈沖;讀/寫時序如圖5所示。表2為DS1302的控制字,此控制字的位7必須置1,假設為0那么不能把對DS1302進展讀寫數(shù)據(jù)。對于位6,假設對程序進展讀/寫時RAM=1,對時間進展讀/寫時,CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進展讀操作時,該位為1;該位為0那么表示進展的是寫操作??刂谱止?jié)總是從最低位開場輸入/輸出的。表6為DS1302的日歷、時間存放器容:"CH〞是時鐘暫停標志位,當該位為1時,時鐘振蕩器停頓,DS1302處于低功耗狀態(tài);當該位為0時,時鐘開場運行。"WP〞是寫保護位,在任何的對時鐘和RAM的寫操作之前,WP必須為0。當"WP〞為1時,寫保護位防止對任一存放器的寫操作。(2)DS1302的控制字節(jié)DS1302的控制字如表所示??刂谱止?jié)最高有效位〔位7〕必須是邏輯1,如果它為0,那么不能把數(shù)據(jù)寫入DS1302中,位6如果0,那么表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位〔位0〕如為0表示要進展寫操作,為1表示進展讀操作,控制字節(jié)總是從最低位開場傳輸1RAMA4A3A2A1A0RDCKWR表2:DS1302控制字(3)數(shù)據(jù)輸入輸出〔I/O〕在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開場。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。其讀寫時序如圖示圖5:DS1302讀寫時序〔4〕DS1302存放器DS1302中與時間、日期有關的存放器共有12個,其中7個存放數(shù)據(jù)的格式為BCD碼格式,其讀寫地址如下表所示讀存放器寫存放器Bit7Bit7Bit7Bit7Bit7Bit7Bit7Bit7圍81H80HCH10秒秒00--5983H82H10分分00--5985H84H12010時時0--2324AM/PM1--1287H86H10日日1--3189H88H10月月1--128BH8AH00000周1--78DH8CH10年年00--998FH8EHWP0000000――表3:DS1302時鐘存放器第一行秒存放器,CH為時鐘暫停標志位,該位為1時時鐘停頓,該位為0時時鐘運行第二行分存放器,bit0~bit6表示分鐘數(shù),因采用BCD編碼,所以低四位最大能表示的數(shù)字為9,計數(shù)滿向高三位進1。第三行時存放器,12/24用來定義DS1302小時的運行模式,12小時模式下bit5為1表示PM下午,bit5為0表示AM上午第八行控制存放器,bit7是寫保護位WP,當WP為1時,寫保護位可防止對任一存放器的寫操作,在任何的對時鐘和RAM的寫操作之前,WP位必須為0此外,DS1302還有年份存放器、控制存放器、充電存放器、時鐘突發(fā)存放器及與RAM相關的存放器等。時鐘突發(fā)存放器可一次性順序讀寫除充電存放器外的所有存放器容。DS1302與RAM相關的存放器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM存放器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。2.2.4時鐘集成模塊部原理圖以及實物圖圖6:DS1302部原理圖圖7:DS1302實物圖2.31602字符液晶以及顯示模塊介紹2.3.11602液晶概述工業(yè)字符型液晶,1602是指顯示的容為16*2,即能夠同時顯示兩行,每行16個字符。常見的1602字符液晶有兩種,一種顯示的是綠色背光黑色字體,另一種顯示藍色背光白色字體,目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全一樣的。本課題所用1602液晶模塊,顯示屏是藍色背光白色字體。如圖6所示圖8:1602字符液晶2.3.21602引腳介紹編號符號引腳說明編號符號引腳說明1GND電源地2VCC電源正極3VO液晶顯示比照度調(diào)節(jié)端4RS數(shù)據(jù)/命令選擇端5R/W讀寫選擇6E使能信號7D0數(shù)據(jù)口8D1數(shù)據(jù)口9D2數(shù)據(jù)口10D3數(shù)據(jù)口11D4數(shù)據(jù)口12D5數(shù)據(jù)口13D6數(shù)據(jù)口14D7數(shù)據(jù)口15BLA背光電源正16BLK背光電源負表4:1602字符液晶引腳說明各個引腳具體功能說明:第1腳:GND為地電源。第2腳:VCC接5V正電源。第3腳:VO為液晶顯示器比照度調(diào)整端,接正電源時比照度最弱,接地電源時比照度最高,比照度過高時會產(chǎn)生重影,使用一個1K的電位器調(diào)整比照度。第4腳:RS為存放器選擇,高電平時選擇數(shù)據(jù)存放器,低電平時選擇指令存放器。第5腳:R/W為讀寫信號線,高電平時進展讀操作,低電平時進展寫操作。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:DB0~DB7為8位雙向數(shù)據(jù)線。第15~16腳:背光燈電源。2.3.31602字符液晶使用方法〔1〕根本操作時序操作輸入輸出讀狀態(tài)RS=L,RW=H,E=HD0~D7=狀態(tài)字寫指令RS=L,RW=L,D0~D7=指令碼,E=高脈沖無讀數(shù)據(jù)RS=H,RW=H,E=HD0~D7=數(shù)據(jù)寫數(shù)據(jù)RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖無圖9:1602液晶讀時序圖圖10:1602液晶寫時序圖〔2〕RAM1602液晶控制器芯片部帶有80個8位的RAM緩沖區(qū),其地址和屏幕的對應關系如圖7示圖11〔3〕1602字符液晶字庫
1602液晶模塊部的字符發(fā)生存儲器〔CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如下表所示,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比方大寫的英文字母"A〞的代碼是01000001B〔41H〕,顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母"A〞。高位低位0000001000110100010101100111101010111100110111101111XXXX0000⑴0P\p-タミαPXXXX0001⑵!1AQaq□アチム?qXXXX0010⑶"2BRbr┌イツメβθXXXX0011⑷#3CScs┘ゥテモε∞XXXX0100⑸$4DTdt\ェトャμ?XXXX0101⑹%5EUeuロォナュσoXXXX0110⑺&6FVfvテカニョρ∑XXXX0111⑻’7GWgwアキヌラζⅹXXXX1000⑴(8HXhxィクネリfXXXXX1001⑵)9IYiyウケノル-1yXXXX1010⑶*:JZjzエコハレ?千XXXX1011⑷+;K[k{オサヒロ?萬XXXX1100⑸,<L¥l|セシフヮ?ΠXXXX1101⑹--=M]m}ユスヘソ?÷XXXX1110⑺。>N^n→ヨセホハ?XXXX1111⑻/"O-o←ツソマロ?圖122.3.4LCD顯示模塊原理圖圖13LCD顯示模塊原理圖第3章系統(tǒng)硬件設計..3.1電路設計框圖圖14:硬件框圖3.2系統(tǒng)硬件概述電路以STC89C52單片機最小系統(tǒng)為控制核心,時鐘電路由高精度低功耗的DS1302提供,采用三線接口與CPU進展同步通信,輸入局部采用四個獨立式按鍵S1、S2、S3、S4。1602液晶顯示局部,D0-D7口與單片機P0口相連。具體電路連接,詳見附錄1第4章系統(tǒng)的軟件設計4.1程序流程框圖圖15:主程序框圖圖16:按鍵程序圖第五章系統(tǒng)測試與總結(jié)5.1系統(tǒng)測試從開場準備到寫完論文大概花了一周時間,原理圖和PCB制作花了一天時間,在這期間主要遇到的問題是AltiumDesigner軟件的使用,遇到問題主要到百度上查找答案,PCB做出之后緊接著就是焊接元器件,這局部由于粗心將電解電容正負極焊反,后面經(jīng)過萬用表不斷的測試才判斷出來,及時糾正過來,焊接與硬件調(diào)試大概花了半天時間。緊接著大局部的時間都花費在硬件與軟件的結(jié)合調(diào)試上,在調(diào)試過程中使用自己在網(wǎng)上買的51單片機開發(fā)板上進展一步一步的調(diào)試。由于是第一次做課程設計,同時也是第一次寫這么綜合的程序,所以在調(diào)試過程中遇到很多問題,一局部是關于DS1302與1602的硬件特點以及在硬件的根底之上驅(qū)動程序的調(diào)用,這里主要是網(wǎng)上找資料去學會調(diào)用與編寫,主要是通過網(wǎng)上視頻教學;另一局部是自己做的硬件存在很多誤差,特別是電源供電局部,剛開場是用廢棄的鼠標上的那個USB接口線插在電腦上供電,但由于電源介入硬件的是兩個排針,所以很不穩(wěn)定,1602上總亂碼,或者5個按鍵隨便一個按下都是復位,而且從電腦輸出5V接到硬件系統(tǒng)后只有4.5V了,想了一下,最后拿出上學期期末自己做的電源將它調(diào)節(jié)到6V后,接入硬件系統(tǒng)就能到達5V。5.2總結(jié)通過本次論文設計,使我加深了對單片機的認識,并且熟悉了單片機系統(tǒng)的設計流程,收獲豐碩。功能上根本達標:時鐘與鬧鐘的顯示,調(diào)時間和鬧鐘功能以及鬧鐘鳴叫功能。時鐘與鬧鐘顯示功能,準確度完全可以滿足日常生活顯示時間的需要;調(diào)時間與鬧鐘功能,方便快捷。硬件設施根本符合要求,軟件設計可以配合硬件實現(xiàn)其功能。技術在不斷進步,機械式時鐘已經(jīng)被淘汰,取而代之的是具有高度準確性和直觀性且無機械裝置,具有更長的使用壽命等優(yōu)點的電子時鐘。電子時鐘更具人性化,更能提高人們的生活質(zhì)量,更受人們歡送。機械時代已經(jīng)遠去,電子時代已經(jīng)到來。做為新時代的我們,更應該提高自身能力,適應新時代的開展。知識來自實踐,多從生活中探尋所需要的。從這次的論文設計中,我真正的體會到,知識的重要性,特別是要理論聯(lián)系實際,把我們所學的理論知識運用到實際生活當中,要用知識改變一切。致首先,感學校2年來對我的培養(yǎng)。為我們營造了一個良好的學習氣氛,建立一流的教學設施,使我們身心愉快的投入到學習中。其次,感學院的教師,有了他們的諄諄教導,才使本論文的前期準備以及整個研究過程順利完成。學院教師的嚴謹治學態(tài)度、扎實的理論根底、全身心投入工作的精神以及對學生盡心盡力的態(tài)度給了我極大的幫助與鼓勵,使我受益匪淺。從學院教師的教學態(tài)度上,我學到的不僅僅只有書本上的知識,還有做人的道理。他們嚴肅的科學態(tài)度,嚴謹?shù)闹螌W精神,精益求精的工作作風,深深地感染和鼓勵著我。在此謹向?qū)W院全體教師致以誠摯的意和崇高的敬意。最后,感我的父母多年來給予我的支持和關心,同時感我的舍友和朋友對我的幫助。參考文獻[1]廣第,朱月秀,冷租祁.單片機根底第三版.:航空航天大學〔1——259〕。[2]慶亮.C語言程序設計實用教程.:機械工業(yè),2005.3〔1——100〕。[3]康華光.電子技術根底數(shù)字局部.:高等教育,2008〔1——560〕。[3]康華光.電子技術根底模擬局部.:高等教育,2008〔1——560〕。[4]志忠.數(shù)字電子技術.:高等教育,2003.12〔30——100〕。[4]及力.Protel99SE原理圖與PCB設計教程.:電子工業(yè),2007.8〔48——100〕。[10]欣.電子設計從零開場.:清華大學,2005〔10——200〕。[12]邢小杰.單片機電子時鐘設計.中國科技博覽,2009。源程序清單#include<reg52.h>//52單片機頭文件,規(guī)定了52單片機的存放器和IO口等#include<intrins.h>//_nop_空指令及左右循環(huán)移位子函數(shù)庫#defineucharunsignedchar//宏定義#defineuintunsignedint//宏定義sbitlcden=P2^7;//定義下面通過lcden來操作P2^7口,1602液晶使能控制端sbitlcdwr=P2^5;//定義下面通過lcdrw來操作P2^5口,1602讀寫選擇端sbitlcdrs=P2^6;//定義選數(shù)據(jù)存放器選指令存放器控制端sbitsda=P3^4;//定義DS1302數(shù)據(jù)總線sbitrst=P3^5;//DS1320復位sbitsck=P3^6;//定義時鐘總線sbits1=P1^0;//定義設置按鈕sbits2=P1^1;//定義調(diào)時按鈕sbits3=P1^2;//定義確定按鈕sbits4=P1^3;sbitACC0=ACC^0;sbitACC7=ACC^7;sbitBELL=P1^5;charfen,shi,miao,ri,yue,nian,zhou,s1num,s2num,s4num,flag1,flag2,lshi,lfen;ucharcodetable[]={"2012--"};//要寫入1602液晶的數(shù)據(jù)ucharcodetable1[]={":::"};//字庫中的字可直接以外加""號的形式直接寫入ucharcodetable2[]={"WeleToLcd!"};//歡送界面ucharcodetable3[]={"HappyEveryDay!"}; //歡送界面/*******************************************************************************時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),delay(200);大約延時200ms.delay(500);大約延時500ms*******************************************************************************/voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}/*********************蜂鳴器函數(shù)************************************************/voiddidi(){ uchari;for(i=0;i<60;i++){BELL=0; delay(1); BELL=1; delay(1);}}/*******************向1602液晶中寫一個指令**************************************/voidwrite_(uchar){ lcdwr=0; //lcdwr為讀寫控制端,lcdwr=0,這里可不寫 lcdrs=0;//液晶rs接口為0時,寫指令,rs為1時寫數(shù)據(jù) P0=;//將要寫的指令賦給P0口, delay(5);//由1602讀寫操作時序圖,先將指令賦給P0口,延時后將使能 lcden=1;//端lcden置高,再延時一段時間,然后將lcden置低,這樣指令 delay(5); //就寫入到LCD了 lcden=0;}/****************************向液晶寫數(shù)據(jù)***************************************/voidwrite_data(uchardate)//與寫指令類似,這里lcdrs設為1{ lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0;}/*****************************初使化1602液晶************************************/voidinit_1602(){ lcdwr=0; lcden=0; write_(0x38);//設置LCD為16*2顯示、5*7點陣、8位數(shù)據(jù)接口模式 write_(0x0c);//開顯示、不顯示光標 write_(0x06);//寫一個字符后,地址指針加1 write_(0x01);//顯示清0}/*******************************************************************************/voidgudingtime_1602(){ucharnum; write_(0x80);//將指針指向初始位置 for(num=0;num<16;num++)//循環(huán)函數(shù),用于將"2012--"寫入液晶 write_data(table[num]); write_(0x80+0x40);//將指針指向1602液晶的第二行 for(num=0;num<16;num++)//功能與上同,用于將":::"寫入 write_data(table1[num]);}/**************************顯示歡送界面函數(shù)*************************************/voiddisplaystar(void){ uchari; write_(0x80); for(i=0;i<16;i++) write_data(table2[i]); write_(0x80+0x40); for(i=0;i<16;i++) write_data(table3[i]);}/***************************顯示時間、日期子函數(shù)*********************************/voidwrite_sfm(ucharadd,uchartime)//用于在1602上顯示年、月、日、時、分、秒。Add為顯示位置,time為要顯示的容{ ucharshiwei,gewei; shiwei=time/16;//將從DS1302中讀取的BCD碼數(shù)據(jù)轉(zhuǎn)化成10進制個位和10 gewei=time%16;//進制十位 write_(add+0x80);//定義顯示在液晶的什么位置 write_data(0x30+shiwei);//由1602液晶字庫可知,0~9的數(shù)據(jù)碼分別對應0x30~0x39 write_data(0x30+gewei); //初使化中設定了寫一個字符后,地址指針加1,因此這里}//不用重標寫位/**************************顯示周子函數(shù)*****************************************/voidwrite_zhou(uchartime1)//用于在1602上顯示周信息,與顯示{//時間日期子函數(shù)類似 uchargewei; gewei=time1%16;//一周七天,因此只需個位 write_(0x80+13); write_data(0x30+gewei);}/***************************寫數(shù)據(jù)字節(jié)子函數(shù)************************************/voidInput_1byte(ucharTD)//寫一字節(jié)數(shù)據(jù){uchari;ACC=TD;for(i=8;i>0;i--){sda=ACC0;sck=1;sck=0;ACC=ACC>>1;}}/*************************讀數(shù)據(jù)字節(jié)子函數(shù)**************************************/ucharOutput_1byte(void)//讀一字節(jié)數(shù)據(jù){uchari;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=sda;sck=1;sck=0;}return(ACC);}/***************************寫DS1302數(shù)據(jù)函數(shù)***********************************/voidwrite_1302(ucharDS_ADD,ucharDS_DAT)//寫操作{ rst=0; sck=0; rst=1; Input_1byte(DS_ADD); Input_1byte(DS_DAT); sck=1; rst=0;}/***************************讀DS1302數(shù)據(jù)函數(shù)***********************************/ucharread_1302(ucharDS_ADD)//讀操作{ ucharDS_INF; rst=0; sck=0; rst=1; Input_1byte(DS_ADD); DS_INF=Output_1byte(); sck=1; rst=0; return(DS_INF);}/*************************初始化DS1302子函數(shù)***********************************/voidinital_1302(){write_1302(0x8e,0x00);//制止寫保護write_1302(0x90,0xaa);//定義充電 write_1302(0x80,0x53);//秒write_1302(0x84,0x13);//時 write_1302(0x82,0x43);//分 write_1302(0x8c,0x12);//年 write_1302(0x88,0x06);//月 write_1302(0x86,0x03);//日 write_1302(0x8a,0x06);//星期write_1302(0xc0,0x08);//鬧鐘小時初始化 write_1302(0xfc,0x00);//鬧鐘分鐘初始化 write_1302(0x8e,0x80);//開保護}/********************************************************************************掃描函數(shù)********************************************************************************/voidkeyscan(){ if(s1==0&&s4num==0) //按鍵1按下且s4再次之前未曾按過 { delay(5); if(s1==0&&s4num==0) {flag1=1; s1num++; while(!s1);didi(); if(s1num==1) { write_(0x80+0x40+8);//光標移動到**位置 write_(0x0f);//顯示光標 } if(s1num==2) { write_1302(0x8e,0x00);//制止寫保護 write_1302(0x80,miao);//寫入秒信息 write_1302(0x8e,0x80);//開寫保護 write_(0x80+0x40+5); } if(s1num==3) { write_1302(0x8e,0x00); write_1302(0x82,fen); write_1302(0x8e,0x80); write_(0x80+0x40+2); } if(s1num==4) { write_1302(0x8e,0x00); write_1302(0x88,yue); write_1302(0x8e,0x80); write_(0x80+13); } if(s1num==5) { write_1302(0x8e,0x00); write_1302(0x84,shi); write_1302(0x8e,0x80); write_(0x80+10); } if(s1num==6) { write_1302(0x8e,0x00); write_1302(0x86,ri); write_1302(0x8e,0x80); write_(0x80+7); } if(s1num==7) { write_1302(0x8e,0x00); write_1302(0x8c,nian); write_1302(0x8e,0x80); write_(0x80+4); }if(s1num==8) { flag1=0; s1num=0; write_1302(0x8e,0x00); write_1302(0x8a,zhou); write_1302(0x8e,0x80); write_(0x0c);//不顯示光標 } } } /*******************************************************************************/ if(s1num!=0&&s4num==0)//按鍵1按下*次且s4再次之前未曾按過 { if(s2==0) { delay(5); if(s2==0) { while(!s2);didi(); if(s1num==1) { intx1,x2; x1=miao%16; x2=miao/16; x1++; if(x1==10) { x1=0; x2++; if(x2>=6) x2=0; } miao=x1+x2*16; write_sfm(7+0x40,miao);//將修改的數(shù)送到1602顯示 write_(0x80+0x40+8);//挪回光標 } if(s1num==2) { intx3,x4; x3=fen%16; x4=fen/16; x3++; if(x3==10) { x3=0; x4++; if(x4>=6) x4=0; } fen=x3+x4*16; write_sfm(4+0x40,fen); write_(0x80+0x40+5); } if(s1num==3) { intx5,x6; x5=shi%16; x6=shi/16; x5++; if(x6>=2&&x5>=4) { x5=0; x6=0; } if(x5==10) { x5=0; x6++; } shi=x5+x6*16; write_sfm(1+0x40,shi); write_(0x80+0x40+2); } if(s1num==4) { zhou++; if(zhou==8) zhou=1; write_zhou(zhou); write_(0x80+13); } if(s1num==5) { intx5,x6; x5=ri%16; x6=ri/16; x5++; if(x6>=3&&x5>=1) { x5=1; x6=0; } if(x5==10) { x5=0; x6++; } ri=x5+x6*16; write_sfm(9,ri); write_(0x80+10); } if(s1num==6) { intx5,x6; x5=yue%16; x6=yue/16; x5++; if(x6>=1&&x5>=3) { x5=1; x6=0; } if(x5==10) { x5=0; x6++; } yue=x5+x6*16; write_sfm(6,yue); write_(0x80+7); } if(s1num==7) { intx5,x6; x5=nian%16; x6=nian/16; x5++; if(x6>=2&&x5>=1) { x5=1; x6=0; } if(x5==10) { x5=0; x6++; } nian=x5+x6*16; write_sfm(3,nian); write_(0x80+4); } } } }/*******************************************************************************/ if(s1num!=0||s4num!=0)//在調(diào)整模式下 { if(s3==0)//如果確定鍵按下 { delay(5); if(s3==0)//延時并重新檢測S3是否按下,用于差小誤差 { if(s1num!=0) { while(!s3);didi();//在松手時將調(diào)整后的時間、日期及周信息寫入DS1302,退出調(diào)整模式并隱藏光標,按鍵次數(shù)清0 write_1302(0x8e,0x00); write_1302(0x80,miao); write_1302(0x84,shi); write_1302(0x82,fen); write_1302(0x8a,zhou); write_1302(0x8c,nian);//年 write_1302(0x88,yue);//月 write_1302(0x86,ri); write_1302(0x8e,0x80); flag1=0; write_(0x0c); s1num=0;} if(s4num!=0) { while(!s3);didi();//在松手時將調(diào)整后的時間、日期及周信息寫入DS1302,退出調(diào)整模式并隱藏光標,按鍵次數(shù)清0write_1302(0x8e,0x00); write_1302(0xc0,lshi);write_1302(0xfc,lfen); write_1302(0x8e,0x80); flag2=0; s4num=0; write_(0x0c);} } } }if(s4==0&&s1num==0)//按鍵4按下*次且s1再次之前未曾按過{delay(5); if(s4==0&&s1num==0) { s4num++; flag2=1;while(!s4);didi(); if(s4num==1) { write_(0x80+0x40+14); write_(0x0f); } if(s4num==2) { write_1302(0x8e,0x00);//制止寫保護 write_1302(0xfc,lfen);//鬧鐘初始化 write_1302(0x8e,0x80);//開寫保護 write_(0x80+0x40+11); } if(s4num==3)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療行業(yè)集體采購合同范本
- 匹克聯(lián)營合同范本
- 書試用合同范本
- 養(yǎng)殖投資協(xié)議合同范本
- 代理注冊記賬合同范本
- 個人電器銷售合同范本
- 樂山小區(qū)保安合同范本
- 高等教育內(nèi)部管理體制
- 電子商務平臺在醫(yī)療健康領域的應用與優(yōu)化
- 商品付款合同范本
- 門樓施工方案
- 全國職業(yè)院校技能大賽高職組(康復治療技術賽項)考試及答案
- 2024年08月河北唐山銀行第二批社會招考筆試歷年參考題庫附帶答案詳解
- 2024年山東海洋集團有限公司社會招聘考試真題
- 《感冒中醫(yī)治療》課件
- 研發(fā)費用管理制度內(nèi)容
- 壓力容器設計委托書
- 《眉毛的基本技法》課件
- 2025年幼兒園膳食工作計劃
- 《基于二維激光SLAM的AGV導航系統(tǒng)設計》
- 藥劑學第9版課件:第一章-緒論
評論
0/150
提交評論