定時計數(shù)器設計_第1頁
定時計數(shù)器設計_第2頁
定時計數(shù)器設計_第3頁
定時計數(shù)器設計_第4頁
定時計數(shù)器設計_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、設計數(shù)字鐘,內(nèi)有4組可設置的定時開/關,控制一路開關量輸出。定時開關的設置分為單次操作(2011年6月25日8:00開2011年6月26日18:00關),周期操作(如周三8:00 開,周四16:00關)。數(shù)碼管顯示時間(單位秒)與設置值(單位分鐘),用發(fā)光二極管表示周期與單次操作。任務安排:(1) 設計任務及要求分析(2) 方案比較及認證說明(3) 系統(tǒng)原理闡述,寫出設計方案結(jié)構(gòu)圖。(4) 軟件設計課題需要說明:軟件思想,流程圖,源程序及程序注釋(5) 調(diào)試記錄及結(jié)果分析、(6) 總結(jié)(7) 參考資料5篇以上(8) 附錄:程序清單時間安排:6月24日:安排設計任務;收集資料;方案選擇6月25日

2、:程序設計6月2627日:實驗室內(nèi)調(diào)試程序并演示6月28日:撰寫報告7月1日:交能力拓展訓練報告摘要單片機在電子產(chǎn)品中的應用越來越廣泛,特別是51系列的單片機,由于其使用方便、價格低廉等優(yōu)勢,在市場上占有很大的份額。AT89C51就是51系列中的一個比較成熟的型號,它完全兼容51單片機的指令。本文詳細介紹了基于AT89C51單片機的數(shù)字電子鐘的設計,本電子鐘可以實現(xiàn)日期、時間的顯示和調(diào)整,帶有整點提示和一個鬧鐘,并且可以顯示當前氣溫。本設計包括硬件設計和軟件設計兩部分。主要硬件有:三端穩(wěn)壓器LM7805、AT89C51單片機、字符型液晶顯示模塊HY1602A和若干按鍵等。軟件大致思路為:使用1

3、2MHz的晶振,單片機內(nèi)部的定時器0工作在方式1,每計數(shù)50000個機器周期(即50ms)產(chǎn)生一次中斷,中斷20次就是一秒,這樣就可以實現(xiàn)精確計時的目的,不斷掃描按鍵,如果有按鍵按下,則對按鍵做出相應的響應。關鍵字:單片機; 電子鐘; LCD1602;目錄緒論11 設計方案21.1 設計要求21.2 設計方案論證22 硬件設計32.1 器件選型32.2 器件介紹32.2.1單片機AT89C5132.2.2 LCD1602顯示模塊73 軟件設計93.1 軟件設計思路93.1.1 實現(xiàn)功能93.1.2編程思路93.1.3操作及功能介紹103.2 主程序流程圖114 仿真圖125 設計體會及小結(jié)13

4、參考文獻14緒論隨著人們生活水平的提高和生活節(jié)奏的加快,對時間的要求越來越高,精準數(shù)字計時的消費需求也是越來越多。二十一世紀的今天,最具代表性的計時產(chǎn)品就是電子鐘定時器,它是近代世界鐘表業(yè)界的第三次革命。第一次是擺和擺輪游絲的發(fā)明,相對穩(wěn)定的機械振蕩頻率源使鐘表的走時差從分級縮小到秒級,代表性的產(chǎn)品就是帶有擺或擺輪游絲的機械鐘或表。第二次革命是石英晶體振蕩器的應用,發(fā)明了走時精度更高的石英電子鐘表,使鐘表的走時和月差從分級縮小到秒級。第三次革命就是單片機數(shù)碼計時技術(shù)的應用,使計時產(chǎn)品的走時日差從分級縮小到1/600萬秒,從原有傳統(tǒng)指針計時的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示方式,直觀明了

5、,并增加了全自動日期、星期、溫度以及其他日常附屬信息的顯示功能,它更符合消費者的生活需求!因此,電子鐘定時器的出現(xiàn)帶來了鐘表計時業(yè)界跨躍性的進步。我國生產(chǎn)的電子鐘定時器有很多種,總體上來說以研究多功能電子萬年歷為主,使萬年歷除了原有的顯示時間,日期等基本功能外,還具有鬧鈴,報警等功能。商家生產(chǎn)的電子萬年歷更從質(zhì)量,價格,實用上考慮,不斷的改進電子萬年歷的設計,使其更加的具有市場。除了采用集成化的時鐘芯片外,還有采用MCU的方案,利用STC89系列單片微機制成萬年歷電路,采用軟件和硬件結(jié)合的方法,控制LED數(shù)碼管輸出,分別用來顯示年、月、日、時、分、秒,其最大特點是:硬件電路簡單,安裝方便易于實

6、現(xiàn),軟件設計獨特,可靠。AT89C51是由ATMEL公司推出的一種小型單片機。其主要特點為采用Flash存貯器技術(shù),降低了制造成本,其軟件、硬件與MCS-51完全兼容,可以很快被廣大用戶接受。 1武漢理工大學能力拓展訓練課程設計說明書1 設計方案1.1 設計要求用AT89S52單片機,在1602LCD上顯示年月日、星期、時分秒設計數(shù)字鐘,內(nèi)有4組可設置的定時開/關,控制一路開關量輸出。定時開關的設置分為單次操作(2011年6月25日8:00開2011年6月26日18:00關),周期操作(如周三8:00 開,周四16:00關)。數(shù)碼管顯示時間(單位秒)與設置值(單位分鐘),用發(fā)光二極管表示周期與

7、單次操作。1.2 設計方案論證本設計是純粹的應用性設計,主要以實現(xiàn)計時、定時、溫度顯示等功能為最終目的。設計以Atmel公司的AT89S52為核心,在最小系統(tǒng)的基礎上擴展鍵盤,數(shù)字溫度計,以及LCD顯示模塊,硬件設計簡單節(jié)約,其功能的實現(xiàn)主要靠軟件設計,所以軟件在本設計中是最為重要的,在計時設計思路上有兩種方案可以選取。方案一:選用外部時鐘芯片,單片機只負責其數(shù)據(jù)的存取讀寫以及外部輔助電路的擴展,這種方案的優(yōu)點是計時準確,軟件編寫相對簡單,但其要求對其芯片必須要有比較深的了解方案二:利用單片機的內(nèi)部時鐘和定時器進行計數(shù),這種方案電路簡單,容易實現(xiàn),但時間容易丟失,且長時間計數(shù)會有誤差,而且軟件

8、編寫也相對復雜??紤]到本次設計的目的,采用方案二,并加入了年月日的擴展,由于時間和精力有限年月日只是進行簡單的模擬,沒有精確的進行計算。只是進行適當?shù)臄U展。本設計包括硬件設計和軟件設計兩部分。主要硬件有AT89S52單片機、字符型液晶顯示模塊HY1602A和若干按鍵等。軟件大致思路為:使用12MHz的晶振,單片機內(nèi)部的定時器0工作在方式1,每計數(shù)50000個機器周期(即50ms)產(chǎn)生一次中斷,中斷20次就是一秒,這樣就可以實現(xiàn)精確計時的目的。在把實時數(shù)據(jù)顯示在LCD1602上的同時,不斷掃描按鍵,如果有按鍵按下,則對按鍵做出相應的響應。2 硬件設計2.1 器件選型本設計選取主控MCU為Atme

9、l公司的AT89S52,顯示器件選擇市面上常見的字符型液晶顯示模塊HY1602A。2.2 器件介紹2.2.1單片機AT89C51AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。1.

10、主要特性:與MCS-51 兼容 4K字節(jié)可編程閃爍存儲器 壽命:1000寫/擦循環(huán)數(shù)據(jù)保留時間:10年全靜態(tài)工作:0Hz-24Hz三級程序存儲器鎖定128*8位內(nèi)部RAM32可編程I/O線兩個16位定時器/計數(shù)器5個中斷源 可編程串行通道低功耗的閑置和掉電模式片內(nèi)振蕩器和時鐘電路2.管腳說明: VCC:供電電壓。 GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時

11、,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

12、位地址外部數(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口也可作為AT89C51的一些特殊功能口,如下表所示:備選功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3

13、.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時器0外部輸入)P3.5 T1(記時器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的

14、是:每當用作外部數(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)部程序存

15、儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。3振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。4芯片擦除: 整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,

16、代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復編程以前,該操作必須被執(zhí)行。此外,AT89C51設有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止。2.2.2 LCD1602顯示模塊工業(yè)字符型液晶,能夠同時顯示16x02即32個字符。(16列2行)注:為了表示的方便 ,后文皆以1表示高電平,0表示低電平。1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干

17、個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形(用自定義CGRAM,顯示效果也不好)。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數(shù)字)。市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應用于市面上大部分的字符型液晶屏。管腳功能1602采用標準的16腳接口,其中:第1腳:VSS為電源地第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器對比度調(diào)整

18、端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會 產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。第4腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時讀取信息,負跳變時執(zhí)行指令。第714腳:D0D7為8位雙向數(shù)據(jù)端。第1516腳:空腳或背燈電源。15腳背光正極,16腳背光負極。3.3V或5V工作電壓,對比度可調(diào)內(nèi)含復位電路提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能有80字節(jié)顯示數(shù)據(jù)

19、存儲器DDRAM內(nèi)建有192個5X7點陣的字型的字符發(fā)生器CGROM8個可由用戶自定義的5X7的字符發(fā)生器CGRAM3 軟件設計3.1 軟件設計思路3.1.1 實現(xiàn)功能用AT89S52單片機,在1602LCD上顯示年月日、星期、時分秒。內(nèi)有4組可設置的定時開/關,控制一路開關量輸出。定時開關的設置分為單次操作(2011年6月25日8:00開2011年6月26日18:00關),周期操作(如周三8:00 開,周四16:00關)。具備鬧鐘和時間段的設定功能,鬧鈴方式為蜂鳴器持續(xù)響10秒鐘,或者用按鍵手動關閉響鈴??梢杂面I盤調(diào)整時間、設定開關時間和方式。復位時間是2011年1月1日00:00:00。3

20、.1.2編程思路1. 給以下變量賦初值:年(Year)、月(Month)、日(Day)、時(Hour)、分(Min)、秒(Sec)。2. 因為晶振頻率為12MHz,所以計數(shù)頻率為12MHz/12=1MHz,這就需要計數(shù)器0計數(shù)1000000次才可以達到一秒鐘。我們用定時器0工作在方式1狀態(tài),每次計數(shù)50000次,如此進行20次,即可湊夠一秒鐘。這樣可以得到初始化定時器的控制字:TMOD=0x01,計數(shù)初值65536-50000=15536即 0x3cb0,這樣就可以設計一個計數(shù)一秒的函數(shù)。3. 讀相應變量的值,送入LCD顯示時間等信息。4. 不斷的掃描按鍵,并且響應按鍵輸入。在進入設定模式后,

21、所有時間變量被過渡變量代替,如果確認設置,則過渡變量賦給時間變量,如果取消設置,則還使用原時間變量。3.1.3操作及功能介紹定時器能顯示年月日、星期、時分秒。內(nèi)有4組可設置的定時開/關,控制一路開關量輸出。定時開關的設置分為單次操作(2011年6月25日8:00開2011年6月26日18:00關),周期操作(如周三8:00 開,周四16:00關)。下面具體具體介紹按鍵和LED的功能:1、K1為時間的小時設定鍵,按下后將進入時間的設定,按K1是對時間小時的設定。2、K2為時間的分鐘設定鍵,當處于時間的調(diào)整時,按它可以對時間的分鐘進行調(diào)整,當未處于時間調(diào)整時,按下第一次為開關量的開啟時間,按下第二

22、次為開關量的關閉時間。3、K3為設定時間完成的退出鍵和進入開關量時間的設定鍵,但時間設置完成以后,按下K3鍵將進入正常的計時狀態(tài);當要進入定時任務時間設定時,按下此鍵將進入定時任務開始時間的設定,設定完成后退出進入正常計時,然后再按下此鍵進入定時任務關閉時間的設定。4、K4為定時任務是否開啟的設定鍵,若LED的黃燈是亮的說明任務是開啟的,若沒有亮則是關閉的。5、K5為定時任務運行的方式:周期與單次的切換,若綠燈亮則為周期,沒亮則為單次。6、K6、K7、K8依次為年月日的設定鍵。3.2 主程序流程圖開始定時器0初始化液晶顯示器LCD1602初始化判斷定時掃描鍵盤鬧鐘響開關量開/關 N Y判斷是否

23、有鍵按下 Y N 圖3-1 主程序流程圖4 仿真圖5 設計體會及小結(jié)本設計在Proteus仿真軟件測試成功,但是,此電子鐘有自身的先天缺陷。首先,由于采用單片機內(nèi)部定時器產(chǎn)生時間信號,所以如果時鐘意外掉電,則會丟失當前的時間和鬧鐘等數(shù)據(jù),需要重新設定。由于本人能力和時間有限,只能暫時實現(xiàn)本既定方案。課設也大大鍛煉了我們的自學能力。比如我們要用到的很多芯片,不可能樣樣都在課本上學習過的,學過的畢竟是少數(shù),在以后的學習實踐和工作中,要用的東西五花八門,怎么可能四年都學遍呢?而且像我們學的這門迅速發(fā)展中的學科,知識更新一日千里,要準備好學習一輩子的,在大學里課堂上所學的只是方法,至于其中的內(nèi)容,還要

24、靠自己去挖掘,所謂“師傅領進門,修行在個人”就是這個道理,這才是成年人的學習生活,因此,通過課設,我們掌握了一項很基本但對于我們來講很重要且具有十分深刻意義的技能,就是學會自學,這是前所未有的。參考文獻1王質(zhì)樸,呂運鵬.MCS-51單片機原理接口與應用,北京理工大學出版社,2009.2鄭學堅;周斌.微型計算機原理及應用M.北京:清華大學出版社,20013譚浩強.C程序設計(第三版).北京清華大學出版社,2007.4康光華.電子技術(shù)基礎(模擬部分).北京:高等教育出版社,2004.5 康光華. 電子技術(shù)基礎M. 北京:高等教育出版社,2006:124-135.6 譚浩強. C程序設計M.北京:清

25、華大學出版社,2005:82-135. 附錄1 硬件電路設計圖附錄2 主程序#include<reg52.h>#define uint unsigned int #define uchar unsigned char uint miao,fen,fen1,shi,shi1,flag1,flag2,flag3,aa,K1num,K2num,K3num,K4num,N,i,dan1,k,fen2,shi2,a,m,Month=1,Year=2011,Day=1,K6num,num,Year1,Year2,Day1,Day2,Month1,Month2; /K1num-K1按鍵被按下的標

26、記變量,K2num-K2按鍵被按下的標記變 量,K3num=0-K3按鍵被按下的標記變量sbit K1=P10;/四個按鍵sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit K5=P14;sbit K6=P15;sbit K7=P16;sbit K8=P17;sbit dan=P26;sbit dan2=P27;sbit rs=P20;sbit lcden=P22;sbit led=P23;/發(fā)光二極管控制端sbit beep=P24; /蜂鳴器控制端sbit relay=P25;/繼電器控制端void delay(uint z)/延時函數(shù)uint x,y;for

27、(x=z;x>0;x-)for(y=110;y>0;y-);void write_com(uchar com)/液晶寫命令函數(shù)rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)/液晶寫數(shù)據(jù)函數(shù)rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void write_sfm(uchar add,uchar date)/液晶寫時分秒函數(shù)uchar shi,ge;shi=date%100/10;ge=date%10;wr

28、ite_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge); void write_sfm1(uchar add,uchar date)/液晶寫時分秒函數(shù)uchar shi,ge;shi=date%100/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge); void write_sfm2(uchar add,uchar date)/液晶寫時分秒函數(shù)uchar qian,bai,ge,shi; qian=date/1000; ba

29、i=date%1000/100;shi=date%100/10;ge=date%10; write_com(0x80+add); write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);void init()/初始化函數(shù)aa=0;/中斷次數(shù)標志K1num=0;/K1按鍵被按下的標記變量K2num=0;/K2按鍵被按下的標記變量K3num=0;/K3按鍵被按下的標記變量K4num=0;flag1=1;/控制lcd屏刷新的變量flag2=1;/控制鬧鐘響鬧和繼電器開啟關閉的標記flag3

30、=1;/控制鬧鐘響起時,按下K4停止鬧鐘響鬧的標記led=1; /發(fā)光二極管初始化relay=0;/繼電器初始化N=100;/系統(tǒng)啟動時,鬧鐘時間到發(fā)出的聲音為連續(xù)三次發(fā)出“嘩”的一聲miao=0;/系統(tǒng)初始化時間fen=0;shi=0;fen1=1;/初始化鬧鐘的時間shi1=0;beep=0;/蜂鳴器初始化lcden=0;/液晶使能端初始化write_com(0x38);/1602液晶初始化,設置16*2顯示。5*7點陣,8位數(shù)據(jù)接口write_com(0x0c);/設置開顯示,不顯示光標write_com(0x06);/寫一個字符后地址指針自動加1write_com(0x01);/顯示清

31、0,數(shù)據(jù)指針清0write_com(0x80);/將數(shù)據(jù)指針定位到第一行,第一個字處/for(num=0;num<15;num+)/顯示鬧鐘標示:TIMING CLOCK/write_date(tablenum);/delay(10);/write_com(0x80+0x40+7);/寫出時間顯示部分的兩個冒號write_date(':'); write_com(0x80+0x40+10);/寫出時間顯示部分的兩個冒號write_date(':'); write_com(0x80+8);/寫出時間顯示部分的兩個冒號write_date('-'

32、;);write_com(0x80+11);/寫出時間顯示部分的兩個冒號write_date('-');write_sfm(8,fen);/送去液晶顯示秒,分,時write_sfm(5,shi);TMOD=0x01;/設置定時器0為工作方式1TH0=(65536-50000)/256;/定時器裝初值TL0=(65536-50000)%256;EA=1;/開總中斷ET0=1;/開定時器0中斷TR0=1;/啟動定時器0void keyscan()/鍵盤掃描函數(shù)if(K1=0&&K3num=0)/判斷K1按下,按下前沒有按下K3鍵,則開始修改時間delay(5);if

33、(K1=0&&K1num=0)K1num=1;while(!K1)/判斷是否松開按鍵,后同if(K1num=1)TR0=0;/關閉計數(shù)器0write_com(0x80+0x40+9);/第一次按下光標定位到分鐘位置write_com(0x0f); /光標開始閃爍if(K3=0&&K3num=0&&K1num=0)/判斷K3首次被按下,則設置鬧鐘delay(5);/延時消抖,后同if(K3=0)flag1=0;write_com(0x80+0x40+9);/第一次按下光標定位到分鐘位置while(!K3);K3num=1;write_sfm(8,f

34、en1);/送去液晶顯示定時的分,時write_sfm(5,shi1);write_com(0x0f);/光標開始閃爍write_com(0x80+0x40+9);/顯示位置回到調(diào)節(jié)處 if(K3=0&&K3num=1&&K1num=0)/判斷K3首次被按下,則設置鬧鐘delay(5);/延時消抖,后同if(K3=0)flag1=0;write_com(0x80+0x40+9);/第一次按下光標定位到分鐘位置while(!K3);K3num=2;write_sfm(8,fen2);/送去液晶顯示定時的分,時write_sfm(5,shi2);write_com(

35、0x0f);/光標開始閃爍write_com(0x80+0x40+9);/顯示位置回到調(diào)節(jié)處if(K1=0&&K1num=1)/判斷K1按下,修改系統(tǒng)時間的小時delay(5);if(K1=0)write_com(0x80+0x40+6);/光標定位到小時位置K1num=1;/置K1num=1while(!K1);shi+; /則調(diào)整時加1if(shi=24) shi=0;/若滿24后將清零write_sfm(5,shi);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+6);/顯示位置重新回到調(diào)節(jié)處if(K2=0&&K1num=1)/判K2按

36、下,修改系統(tǒng)時間的分鐘delay(5);if(K2=0)write_com(0x80+0x40+9);/光標定位到分鐘位置K1num=1;while(!K2);fen+; /則調(diào)整分加1if(fen=60)fen=0;/若滿60后將清零write_sfm(8,fen);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+9);/顯示位置重新回到調(diào)節(jié)處 if(K6=0&&K6num=0)/判斷K3首次被按下,則設置鬧鐘delay(5);/延時消抖,后同if(K6=0)flag1=0;write_com(0x80+4);/第一次按下光標定位到分鐘位置while(!K6

37、);K6num=1;write_sfm2(4,Year);/送去液晶顯示定時的分,時write_sfm1(9,Month);write_sfm1(12,Day);write_com(0x0f);/光標開始閃爍write_com(0x80+7);/顯示位置回到調(diào)節(jié)處if(K6=0&&K6num=1)/判斷K1按下,修改系統(tǒng)時間的小時delay(5);if(K6=0)write_com(0x80+7);/光標定位到小時位置K6num=1;/置K1num=1while(!K6);Year+; /則調(diào)整時加1if(shi=9000) Year=0;/若滿24后將清零write_sfm2

38、(4,Year);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+7);/顯示位置重新回到調(diào)節(jié)處if(K7=0&&K6num=1)/判K2按下,修改系統(tǒng)時間的分鐘delay(5);if(K7=0)write_com(0x80+10);/光標定位到分鐘位置K6num=1;while(!K7);Month+; /則調(diào)整分加1if(Month>12)Month=0;/若滿60后將清零write_sfm1(9,Month);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+10);/顯示位置重新回到調(diào)節(jié)處if(K8=0&&K6num=1)/判K2按下

39、,修改系統(tǒng)時間的分鐘delay(5);if(K8=0)write_com(0x80+13);/光標定位到分鐘位置K6num=1;while(!K8);Day+; /則調(diào)整分加1if(Day>30)Day=0;/若滿60后將清零write_sfm1(12,Day);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+13);/顯示位置重新回到調(diào)節(jié)處if(K1num=1|K3num=2)/當設置時間或鬧鐘時,K3被按下設置完成。if(K3=0)/判斷K3按下delay(5);if(K3=0)K1num=0;K3num=0;K6num=0;while(!K3);write_com(0x0c

40、);/取消光標閃TR0=1;/啟動定時器使時鐘開始走flag1=1;/flag=1.則修改系統(tǒng)時間時液晶顯示的系統(tǒng)時間值,flag=0,則為修改鬧鐘時間時,屏幕顯示的是修改鬧鐘時間的值write_sfm(8,fen);/送去液晶顯示分,時write_sfm(5,shi);if(K2=0&&K1num=0&&K3num=0&&m=0)/K2被按下時顯示定時時間delay(5);m+;if(K2=0&&m=1)while(K2=0)write_sfm(8,fen1);/送去液晶顯示定時的分,時write_sfm(5,shi1);whi

41、le(!K2);write_sfm(8,fen);/K2松開顯示當前時間write_sfm(5,shi); if(K2=0&&K1num=0&&K3num=0&&m=1)/K2被按下時顯示定時時間delay(5);m+;if(K2=0&&m=2)while(K2=0)write_sfm(8,fen2);/送去液晶顯示定時的分,時write_sfm(5,shi2); while(!K2);write_sfm(8,fen);/K2松開顯示當前時間write_sfm(5,shi);m=0; if(K1=0&&K3num=

42、1)/修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時delay(5);if(K1=0)write_com(0x80+0x40+6);/光標定位到小時位置K3num=2;while(!K1);shi1+; /則調(diào)整定時的時加1if(shi1=24)/若滿24后將清零shi1=0;write_sfm(5,shi1);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+6);/顯示位置重新回到調(diào)節(jié)處if(K2=0&&K3num=2)/卸螷2按下,修改鬧鐘時間的分鐘delay(5);if(K2=0)write_com(0x80+0

43、x40+9);/光標定位到分鐘位置K3num=3;while(!K2);fen1+; /則調(diào)整分加1if(fen1=60)/若滿60后將清零fen1=0;write_sfm(8,fen1);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+9);/顯示位置重新回到調(diào)節(jié)處if(K6=0&&K3num=3)/修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時delay(5);if(K6=0)write_com(0x80+7);/光標定位到小時位置K3num=4;while(!K6);Year1+; /則調(diào)整定時的時加1if(Ye

44、ar1=24)/若滿24后將清零Year1=0;write_sfm2(5,Year1);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+7);/顯示位置重新回到調(diào)節(jié)處if(K7=0&&K3num=4)/卸螷2按下,修改鬧鐘時間的分鐘delay(5);if(K7=0)write_com(0x80+10);/光標定位到分鐘位置K3num=5;while(!K7);Month1+; /則調(diào)整分加1if(Month1=12)/若滿60后將清零Month1=0;write_sfm1(9,Month1);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+9);/顯示位置重新回

45、到調(diào)節(jié)處 if(K8=0&&K3num=5)/卸螷2按下,修改鬧鐘時間的分鐘delay(5);if(K8=0)write_com(0x80+13);/光標定位到分鐘位置K3num=6;while(!K8);Day1+; /則調(diào)整分加1if(Day1>30)/若滿60后將清零Day1=1;write_sfm1(12,Day1);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+12);/顯示位置重新回到調(diào)節(jié)處if(K1=0&&K3num=6)/修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時delay(5);if

46、(K1=0)write_com(0x80+0x40+6);/光標定位到小時位置K3num=7;while(!K1);shi2+; /則調(diào)整定時的時加1if(shi2=24)/若滿24后將清零shi2=0;write_sfm(5,shi2);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+6);/顯示位置重新回到調(diào)節(jié)處if(K2=0&&K3num=7)/卸螷2按下,修改鬧鐘時間的分鐘delay(5);if(K2=0)write_com(0x80+0x40+9);/光標定位到分鐘位置K3num=8;while(!K2);fen2+; /則調(diào)整分加1if(fen2=

47、60)/若滿60后將清零fen2=0;write_sfm(8,fen2);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+9);/顯示位置重新回到調(diào)節(jié)處 if(K1=0&&K3num=9)/修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時delay(5);if(K6=0)write_com(0x80+7);/光標定位到小時位置K3num=10;while(!K6);Year2+; /則調(diào)整定時的時加1if(Year2>5000)/若滿24后將清零shi2=0;write_sfm2(4,Year2);/每調(diào)節(jié)一次送液

48、晶顯示一下write_com(0x80+4);/顯示位置重新回到調(diào)節(jié)處if(K7=0&&K3num=11)/卸螷2按下,修改鬧鐘時間的分鐘delay(5);if(K7=0)write_com(0x80+10);/光標定位到分鐘位置K3num=12;while(!K7);Month2+; /則調(diào)整分加1if(Month2>12)/若滿60后將清零Month2=1;write_sfm1(8,Month2);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+10);/顯示位置重新回到調(diào)節(jié)處 if(K8=0&&K3num=12)/卸螷2按下,修改鬧鐘時間的分

49、鐘delay(5);if(K8=0)write_com(0x80+13);/光標定位到分鐘位置K3num=8;while(!K8);Day2+; /則調(diào)整分加1if(Day2>30)/若滿60后將清零Day2=1;write_sfm1(12,Day2);/每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+13);/顯示位置重新回到調(diào)節(jié)處K3num=0;if(K4=0&&flag3=1)/當鬧鐘響起時,按下K4停止響鬧,當鬧鐘響起時候flag3置為1delay(5);if(K4=0)flag2=0;flag3=0;/此處需置flag3為1,否則鬧鐘沒有響起的時候按下K4鍵,程序會執(zhí)行此句if(K4=0&&flag3)/K4按下設置鬧鐘的狀態(tài)為ON或OFF,flag3=1,表示鬧鐘此時沒響起。K4num=0,表示此時為ON狀態(tài)。 delay(10);if(K4=0) k+;if(k=1) K4num=1;dan=1; delay(10);if(k=2) K4num=0;dan=0;k=0;if(K5=0)delay(10)

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論