畢業(yè)設(shè)計(jì)基于單片機(jī)的可編程作息時(shí)間控制器設(shè)計(jì)樣本_第1頁(yè)
畢業(yè)設(shè)計(jì)基于單片機(jī)的可編程作息時(shí)間控制器設(shè)計(jì)樣本_第2頁(yè)
畢業(yè)設(shè)計(jì)基于單片機(jī)的可編程作息時(shí)間控制器設(shè)計(jì)樣本_第3頁(yè)
畢業(yè)設(shè)計(jì)基于單片機(jī)的可編程作息時(shí)間控制器設(shè)計(jì)樣本_第4頁(yè)
畢業(yè)設(shè)計(jì)基于單片機(jī)的可編程作息時(shí)間控制器設(shè)計(jì)樣本_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

揚(yáng)州大學(xué)能源與動(dòng)力工程學(xué)院題目:可編程作息時(shí)間控制器設(shè)計(jì)課程:?jiǎn)纹瑱C(jī)原理及應(yīng)用課程設(shè)計(jì)專業(yè):電氣工程及其自動(dòng)化班級(jí):姓名:學(xué)號(hào):

第一部分任務(wù)書

《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)任務(wù)書一、課題名稱詳見(jiàn)《單片機(jī)課程設(shè)計(jì)題目(一)》:重要是軟件仿真,運(yùn)用Proteus軟件進(jìn)行仿真設(shè)計(jì)并調(diào)試;《單片機(jī)課程設(shè)計(jì)題目(二)》:重要是硬件設(shè)計(jì),運(yùn)用單片機(jī)周立功實(shí)驗(yàn)箱進(jìn)行設(shè)計(jì)并調(diào)試。二、課程設(shè)計(jì)目課程設(shè)計(jì)是課程教學(xué)中一項(xiàng)重要內(nèi)容,是達(dá)到教學(xué)目的重要環(huán)節(jié),是綜合性較強(qiáng)實(shí)踐教學(xué)環(huán)節(jié),它對(duì)協(xié)助學(xué)生全面牢固地掌握課堂教學(xué)內(nèi)容、培養(yǎng)學(xué)生實(shí)踐和實(shí)際動(dòng)手能力、提高學(xué)生全面素質(zhì)具備很重要意義?!秵纹瑱C(jī)原理及應(yīng)用》是一門理論性、實(shí)用性和實(shí)踐性都很強(qiáng)課程,課程設(shè)計(jì)環(huán)節(jié)應(yīng)占有更加重要地位。單片機(jī)原理及應(yīng)用課程設(shè)計(jì)目是讓學(xué)生在理論學(xué)習(xí)基本上,通過(guò)完畢一種涉及MCS-51單片機(jī)各種資源應(yīng)用并具備綜合功能小系統(tǒng)目的板設(shè)計(jì)與編程應(yīng)用,使學(xué)生不但能將課堂上學(xué)到理論知識(shí)與實(shí)際應(yīng)用結(jié)合起來(lái),并且能進(jìn)一步加深對(duì)電子電路、電子元器件等知識(shí)結(jié)識(shí)與理解,同步在軟件編程、排錯(cuò)調(diào)試、有關(guān)軟件和儀器設(shè)備使用技能等方面得到較全面鍛煉和提高。為此后可以獨(dú)立進(jìn)行某些單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)設(shè)計(jì)工作打下一定基本。通過(guò)單片機(jī)硬件和軟件設(shè)計(jì)、調(diào)試、整頓資料等環(huán)節(jié)培訓(xùn),使學(xué)生初步掌握工程設(shè)計(jì)辦法和組織實(shí)踐基本技能,逐漸熟悉開(kāi)展科學(xué)實(shí)踐程序和辦法。三、課程設(shè)計(jì)內(nèi)容設(shè)計(jì)以89C51單片機(jī)和外圍元器件構(gòu)成單片機(jī)應(yīng)用系統(tǒng),并完畢相應(yīng)軟硬件調(diào)試。1.系統(tǒng)方案設(shè)計(jì):綜合運(yùn)用單片機(jī)課程中所學(xué)到理論知識(shí),學(xué)生依照所選課題任務(wù)、規(guī)定和條件進(jìn)行總體方案設(shè)計(jì)。2.硬件電路設(shè)計(jì):對(duì)方案中以單片機(jī)為核心電路進(jìn)行設(shè)計(jì)計(jì)算,涉及元器件選取和電路參數(shù)計(jì)算,并畫出總體電路圖。3.軟件設(shè)計(jì):依照已設(shè)計(jì)出軟件系統(tǒng)框圖,用匯編語(yǔ)言或C51編制出各功能模塊子程序和整機(jī)軟件系統(tǒng)主程序。4.調(diào)試:在單片機(jī)EDA仿真軟件環(huán)境Proteus下進(jìn)行仿真設(shè)計(jì)并調(diào)試;或在單片機(jī)周立功實(shí)驗(yàn)箱上進(jìn)行有關(guān)設(shè)計(jì)并調(diào)試。四、課程設(shè)計(jì)規(guī)定設(shè)計(jì)一種以單片機(jī)為核心可編程作息時(shí)間控制器:按照給定期間模仿控制,實(shí)現(xiàn)廣播、上下課打鈴、燈光控制(屏幕顯示),同步具備日期和時(shí)鐘顯示。五、進(jìn)度安排序號(hào)內(nèi)容天數(shù)1布置任務(wù),熟悉課題規(guī)定0.52總體方案擬定,硬件電路設(shè)計(jì)1.53軟件編程1.54Proteus仿真,或在周立功實(shí)驗(yàn)箱上調(diào)試25總結(jié),撰寫課程設(shè)計(jì)報(bào)告1.5七、課程設(shè)計(jì)報(bào)告內(nèi)容:總結(jié)設(shè)計(jì)過(guò)程,寫出設(shè)計(jì)報(bào)告,設(shè)計(jì)報(bào)告詳細(xì)內(nèi)容規(guī)定如下:1.課程設(shè)計(jì)目和設(shè)計(jì)內(nèi)容。2.課程設(shè)計(jì)規(guī)定。3.控制系統(tǒng)總框圖及系統(tǒng)工作原理。4.控制系統(tǒng)硬件電路連接圖,電路原理。5.軟件設(shè)計(jì)流程圖及其闡明。6.電路設(shè)計(jì),軟件編程、調(diào)試中遇到問(wèn)題及分析解決辦法。7.實(shí)驗(yàn)成果及其分析。8.體會(huì)。

第二部分課程設(shè)計(jì)報(bào)

目錄1課題簡(jiǎn)介 11.1課題目 11.2課題規(guī)定 12可編程作息時(shí)間控制器方案設(shè)計(jì) 12.1系統(tǒng)總體簡(jiǎn)介 12.2系統(tǒng)整體框圖 12.3系統(tǒng)工作原理 13可編程作息時(shí)間控制器硬件電路及芯片簡(jiǎn)介 23.1AT89C51單片機(jī) 23.21602LCD液晶顯示屏 33.3其她重要元件 43.4硬件電路設(shè)計(jì)圖 54可編程作息時(shí)間控制器軟件編程設(shè)計(jì) 54.1系統(tǒng)初始化 54.2系統(tǒng)時(shí)間校正 64.3系統(tǒng)時(shí)間設(shè)定 74.4作息時(shí)間設(shè)定 74.5響鈴解決 94.6邏輯控制 104.71602LCD液晶顯示 115實(shí)驗(yàn)與成果分析 115.1實(shí)驗(yàn)調(diào)試 115.2實(shí)驗(yàn)成果 125.3實(shí)驗(yàn)問(wèn)題 146小結(jié)與體會(huì) 15TOC\o"1-3"\h\u1課題簡(jiǎn)介1.1課題目由單片機(jī)AT89C51芯片和LCD顯示屏,輔以必要電路,構(gòu)成一種可編程作息時(shí)間控制器。電子鐘采用采用單片機(jī)來(lái)完畢,LCD顯示“時(shí)”,“分”,LED閃動(dòng)來(lái)做秒計(jì)數(shù),定期時(shí)間到能發(fā)出相應(yīng)提示,從而可以實(shí)現(xiàn)作息時(shí)間控制。當(dāng)前是自動(dòng)化高度發(fā)達(dá)時(shí)代,特別是電子類產(chǎn)品都是靠?jī)?nèi)部控制電路來(lái)實(shí)現(xiàn)對(duì)產(chǎn)品控制,達(dá)到自動(dòng)運(yùn)營(yíng)目,這就需要咱們這里要做設(shè)計(jì)中電器元件及電路支持。1.2課題規(guī)定在keiluVision和proteus上編寫軟件完畢設(shè)計(jì)。以AT89C51單片機(jī)為核心結(jié)合字符型LCD顯示屏可編程作息時(shí)間控制器。按照給定期間模仿控制,實(shí)現(xiàn)廣播、上下課打鈴、燈光控制(屏幕顯示),同步具備日期和時(shí)鐘顯示。上機(jī)調(diào)試程序。寫出設(shè)計(jì)報(bào)告。2可編程作息時(shí)間控制器方案設(shè)計(jì)2.1系統(tǒng)總體簡(jiǎn)介可編程作息時(shí)間控制器是由簡(jiǎn)樸一路鬧鐘基本上增長(zhǎng)至四路可調(diào)鬧鐘,從而實(shí)現(xiàn)依次執(zhí)行作息時(shí)間提示任務(wù)。系統(tǒng)重要是由時(shí)間程序和鬧鐘程序所構(gòu)成,由顯示模塊、時(shí)鐘模塊以及鬧鐘模塊三大某些構(gòu)成。其中時(shí)鐘運(yùn)算模塊要對(duì)時(shí)、分、秒數(shù)值進(jìn)行操作,并且秒算到60時(shí),要自己清零并向分進(jìn)1;分算到60時(shí),要自己清零并向時(shí)進(jìn)1,時(shí)算到24時(shí),要清零,這樣,才干循環(huán)記時(shí)。并在不同狀態(tài)下使得四個(gè)按鍵有著不同功能,從而實(shí)現(xiàn)系統(tǒng)時(shí)間調(diào)節(jié),同步可以在不同狀態(tài)下可以調(diào)節(jié)鬧鐘時(shí)間。當(dāng)定期到達(dá)時(shí)LCD將顯示出當(dāng)前鬧鐘是哪一路,響鈴一分鐘,并可以通過(guò)按鍵提前結(jié)束鬧鐘,恢復(fù)屆時(shí)間顯示狀態(tài)。2.2系統(tǒng)整體框圖LCD顯示揚(yáng)聲器和燈閃廣播單片機(jī)AT89C51按鍵LCD顯示揚(yáng)聲器和燈閃廣播單片機(jī)AT89C51按鍵2.3系統(tǒng)工作原理使用AT89C51單片機(jī)結(jié)合字符型LCD顯示屏設(shè)計(jì)一種簡(jiǎn)易可編程作息時(shí)間控制器,若LCD選取有背光顯示模塊,在夜晚或黑暗場(chǎng)合中也可使用。程序執(zhí)行后工作批示燈LED閃動(dòng),表達(dá)程序開(kāi)始執(zhí)行,同步顯示系統(tǒng)時(shí)間。作息時(shí)間控制器是由4路可調(diào)鬧鐘構(gòu)成,從而實(shí)現(xiàn)打鈴等功能。當(dāng)四路鬧鐘中任一路屆時(shí),均會(huì)點(diǎn)亮燈、打鈴。其中操作鍵K1~K4功能分別為:設(shè)立限制時(shí)間/時(shí)調(diào)節(jié)、顯示鬧鐘設(shè)立時(shí)間/分調(diào)節(jié)、設(shè)立鬧鐘時(shí)間/設(shè)立完畢、鬧鐘更換。3可編程作息時(shí)間控制器硬件電路及芯片簡(jiǎn)介系統(tǒng)重要是由AT89C51單片機(jī)、1602LCD液晶顯示屏以及其她重要元件構(gòu)成,按鍵作為系統(tǒng)控制輸入端,可以進(jìn)行時(shí)間、鬧鐘等內(nèi)容設(shè)定,并通過(guò)液晶顯示屏顯示出時(shí)間等內(nèi)容。3.1AT89C51單片機(jī)本設(shè)計(jì)核心硬件就是8051芯片,這里選取了AT89C51,AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)低電壓,高性能CMOS8位微解決器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)原則MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMELAT89C51是一種高效微控制器,為諸多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉方案。圖3.1AT89C51引腳圖引腳及其功能:P0口:P0口為一種8位漏級(jí)開(kāi)路雙向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口是一種內(nèi)部提供上拉電阻8位雙向I/O口,P1口緩沖器能接受輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接受。P2口:P2口為一種內(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í),它運(yùn)用內(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口也可作為AT89C51某些特殊功能口,如下所示:P3口管腳備選功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時(shí)器0外部輸入)P3.5T1(記時(shí)器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7/RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)P3口同步為閃爍編程和編程校驗(yàn)接受某些控制信號(hào)。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期高電平時(shí)間。ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存容許輸出電平用于鎖存地址地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率1/6。因而它可用作對(duì)外部輸出脈沖或用于定期目。然而要注意是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一種ALE脈沖。如想禁止ALE輸出可在SFR8EH地址上置0。此時(shí),ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。此外,該引腳被略微拉高。如果微解決器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。PSEN:外部程序存儲(chǔ)器選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(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:來(lái)自反向振蕩器輸出。P1.0口接K1按鍵,P1.1口接K2按鍵,P1.2口接K3按鍵,P1.3口接K4按鍵,P2.0口接RS口,P2.1口接RW口,P2.2口接E口,P2.3口接發(fā)光二極管D2陽(yáng)極,P2.4口接發(fā)光二極管D1陽(yáng)極,P2.5口接電阻R3,P3口8個(gè)口依次和LCD數(shù)據(jù)口D0~D7.3.21602LCD液晶顯示屏LM016L液晶模塊采用HD44780控制器。HD44780具備簡(jiǎn)樸而功能較強(qiáng)指令集,可以實(shí)現(xiàn)字符移動(dòng)、閃爍等功能。LM016L與單片機(jī)MCU(MicrocontrollerUnit)通訊可采用8位或者4位并行傳播兩種方式。HD44780控制器由兩個(gè)8位寄存器、指令寄存器(IR)和數(shù)據(jù)寄存器(DR)、忙標(biāo)志(BF)、顯示數(shù)據(jù)RAM(DDRAM)、字符發(fā)生器ROM(CGROM)、字符發(fā)生器RAM(CGRAM)、地址計(jì)數(shù)器(AC)。IR用于寄存指令碼,只能寫入不能讀出;DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動(dòng)寫入DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出數(shù)據(jù)。BF為1時(shí),液晶模塊處在內(nèi)部解決模式,不響應(yīng)外部操作指令和接受數(shù)據(jù)。DDRAM用來(lái)存儲(chǔ)顯示字符,能存儲(chǔ)80個(gè)字符碼。CGROM由8位字符碼生成5*7點(diǎn)陣字符160種和5*10點(diǎn)陣字符32種,8位字符編碼和字符相應(yīng)關(guān)系,可以查看參照文獻(xiàn)[3]中表4。CGRAM是為顧客編寫特殊字符留用,它容量?jī)H64字節(jié)。可以自定義8個(gè)5*7點(diǎn)陣字符或者4個(gè)5*10點(diǎn)陣字符。AC可以存儲(chǔ)DDRAM和CGRAM地址,如果地址碼隨指令寫入IR,則IR自動(dòng)把地址碼裝入AC,同步選取DDRAM或者CGRAM單元。LM016L液圖3.2LCD1602引腳圖晶模塊引腳功能見(jiàn)表:第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示屏對(duì)比度調(diào)節(jié)端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一種10K電位器調(diào)節(jié)對(duì)比度。第4腳:RS為寄存器選取,高電平時(shí)選取數(shù)據(jù)寄存器、低電平時(shí)選取指令寄存器。第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。將respack-81口接電源,2~8口順序和P3口相連接,并和LCD數(shù)據(jù)口D1~D7相接,VSS接地,VDD接電源,VEE接滑動(dòng)變阻器,RS口接P2.0口,RW口接P2.1口,E口接P2.2口。3.3其她重要元件圖3.3獨(dú)立式鍵盤(1)獨(dú)立式鍵盤接口電路:在單片機(jī)應(yīng)用系統(tǒng)中,有時(shí)只需要幾種簡(jiǎn)樸按鍵向系統(tǒng)輸入信息。這時(shí),可將每個(gè)按鍵接在一根I/O接口線上,這種方式連接稱為獨(dú)立式鍵盤。每個(gè)獨(dú)立式按鍵單獨(dú)占有一根I/O接口線,每根I/O接口線工作狀態(tài)不會(huì)影響到其她I/O接口線。這種按鍵接口電路配備靈活,硬件構(gòu)造簡(jiǎn)樸,但每個(gè)按鍵必要占用一根I/O接口線,I/O接口線揮霍較大。故只在按鍵數(shù)量不多時(shí)采用這種按鍵電路。在此電路中,按鍵輸入都采用低電平有效。上拉電阻保證了按鍵斷開(kāi)時(shí),I/O接口線有擬定高電平。當(dāng)I/O接口內(nèi)部有上拉電阻時(shí),外電路可以不配備上拉電阻。蜂鳴器:將蜂鳴器一端電源,另一端接至晶閘管集電極,當(dāng)需要鬧鐘響時(shí),P2.5將發(fā)出有規(guī)律電平使得晶閘管導(dǎo)通,從而使得蜂鳴器發(fā)出聲響。respack-8:上拉電阻鍵K1~K4分別與單片機(jī)P1.0~P1.3口相接。3.4硬件電路設(shè)計(jì)圖圖3.4系統(tǒng)整體電路圖將respack-81口接電源,2~8口順序和P3口相連接,并和LCD數(shù)據(jù)口D1~D7相接。發(fā)光二極管D1和P2.4口相連接用以顯示秒計(jì)時(shí),發(fā)光二極管和P2.3口相連接用以顯示鬧鐘時(shí)廣播,按鍵K1~K4分別與單片機(jī)P1.0~P1.3口相接,以實(shí)現(xiàn)按鍵多功能使用。4可編程作息時(shí)間控制器軟件編程設(shè)計(jì)可編程作息時(shí)間控制器軟件編程重要涉及系統(tǒng)初始化、系統(tǒng)時(shí)間校正、系統(tǒng)時(shí)間設(shè)定、作息時(shí)間設(shè)定、響鈴解決、邏輯控制以及1602LCD液晶顯示,整個(gè)程序中響鈴合理解決以及顯示某些是核心某些,只有解決好鬧鐘及時(shí)響應(yīng)才會(huì)使得整個(gè)可編程作息時(shí)間控制器按照預(yù)定設(shè)計(jì)進(jìn)行工作,同步各個(gè)模塊邏輯上合理分派又將是整個(gè)功能實(shí)現(xiàn)基本。4.1系統(tǒng)初始化sbitK1=P1^0;sbitK2=P1^1;sbitK3=P1^2;sbitK4=P1^3;sbitrs=P2^0;sbitrw=P2^1; sbitlcden=P2^2;sbitLED2=P2^3; sbitled=P2^4;sbitbeep=P2^5;TH0=(65536-50000)/256; TL0=(65536-50000)%256;此段程序重要是是定義電路外部接口,涉及K1~K4按鍵,LCDrs口、rw口、廣播控制端LED2、發(fā)光二極管控制端led以及蜂鳴器控制端beep。將定期器0工作模式選取為工作方式1,同步給定期器裝初值,并且開(kāi)始計(jì)數(shù)。4.2系統(tǒng)時(shí)間校正圖4.1系統(tǒng)時(shí)間校正流程圖程序:TH0=(65536-50000)/256; TL0=(65536-50000)%256;aa++; if(aa==20) {aa=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(9,shi);write_sfm(12,fen);}}一方面初始化時(shí)定期器開(kāi)始工作,當(dāng)計(jì)時(shí)時(shí)間屆時(shí)進(jìn)入中斷服務(wù),由于方式1沒(méi)有自動(dòng)裝初值功能,因而需再次裝入初值,每一次所定期間為50ms,通過(guò)軟件計(jì)數(shù)辦法,當(dāng)計(jì)數(shù)達(dá)到20次時(shí)剛好1秒鐘,如果計(jì)數(shù)不到20次,則再次給定期器裝入初值,直到計(jì)數(shù)達(dá)到20次,把計(jì)數(shù)初值清零,并再次向計(jì)數(shù)器裝初值,重復(fù)執(zhí)行之前操作,同步分加一,并顯示,如果分為60時(shí)則不顯示,先清零然后將時(shí)加一,再顯示分,如果時(shí)不是24時(shí),則直接通過(guò)LCD顯示出來(lái),如果時(shí)剛好為24時(shí),則現(xiàn)需要清零,然后在用LCD顯示出來(lái)。4.3系統(tǒng)時(shí)間設(shè)定圖4.2變化小時(shí)流程圖圖4.3變化分鐘流程圖 程序:if(K1==0) while(!K1) TR0=0;if(K1==0)shi++; if(shi==24)shi=0; if(K2==0) while(!K2);fen++; if(fen==60) fen=0; if(K3==0) TR0=1; 當(dāng)K1被按下時(shí),則修改系統(tǒng)時(shí)間,同步定期器停止工作。開(kāi)始時(shí),光標(biāo)停留在分鐘上,當(dāng)再次按下K1時(shí),光標(biāo)將會(huì)跳到小時(shí)并且小時(shí)位時(shí)間將會(huì)加一,如果時(shí)位數(shù)等于24時(shí),則自動(dòng)清零,從零開(kāi)始再往上加,如果按下K2鍵按下則分鐘自動(dòng)加一,如果分鐘達(dá)到60時(shí)則自動(dòng)清零,從零開(kāi)始往上加,并通過(guò)LCD顯示出此時(shí)狀態(tài)。當(dāng)按下K3鍵時(shí),則退出系統(tǒng)時(shí)間更改,并啟動(dòng)定期器工作,開(kāi)始通過(guò)LCD在第二行顯示出修改后時(shí)間。此程序重要作用就是通過(guò)人為辦法來(lái)設(shè)定系統(tǒng)時(shí)間,使得系統(tǒng)時(shí)間滿足實(shí)際需要。4.4作息時(shí)間設(shè)定圖4.4變化鬧鐘定期小時(shí)流程圖圖4.5變化鬧鐘定期分鐘流程圖程序:if(K3==0) while(!K3); write_sfm(12,fen1); write_sfm(9,shi1); if(K2==0) {write_sfm(12,fen1); write_sfm(9,shi1); while(!K2); write_sfm(12,fen); write_sfm(9,shi); if(K1==0) while(!K1); shi1++; if(shi2==24) shi1=0; write_sfm(9,shi1); if(K2==0) {while(!K2); fen1++; if(fen1==60) fen1=0; write_sfm(12,fen1); if(K3==0) write_sfm(12,fen); write_sfm(9,shi);由于可編程時(shí)間控制器是由四路鬧鐘構(gòu)成,因此只要通過(guò)邏輯上先后順序便可以實(shí)現(xiàn),并且這四路鬧鐘設(shè)定上都是相似,因而在這里將四路鬧鐘選取其中第一路做簡(jiǎn)介。當(dāng)通過(guò)K4鍵進(jìn)入鬧鐘設(shè)定電路后,如果處在廣播鬧鐘時(shí)間設(shè)定期,此時(shí)如果沒(méi)有按下任何開(kāi)核心,LCD將顯示此時(shí)鬧鐘標(biāo)志“GB”并且再其背面顯示當(dāng)前系統(tǒng)時(shí)間,在沒(méi)有按下K3鍵之前,如果按下K2鍵,則LCD將顯示此處鬧鐘時(shí)間,并且在其前面有此路標(biāo)志,如“GB”,松開(kāi)按鍵K2時(shí),LCD將顯示之前狀態(tài);如果按下初次按下K3鍵,則開(kāi)始修改鬧鐘時(shí)間,此時(shí)光標(biāo)在分鐘上閃爍,此時(shí)按下K2鍵則修改鬧鐘分鐘,如果分等于60時(shí),則自動(dòng)清零,否則繼續(xù)往上加;如果按下K1鍵則修改鬧鐘小時(shí),如果小時(shí)數(shù)等于24,則自動(dòng)清零,否則繼續(xù)往上加。當(dāng)?shù)诙伟聪翶3鍵,則完畢次鬧鐘設(shè)定,并顯示之前狀態(tài),如果繼續(xù)按K4鍵則切換到下一路鬧鐘,也可以進(jìn)行上述操作,或者返回系統(tǒng)時(shí)間界面。4.5響鈴解決圖4.6響鈴解決流程圖程序:if((((fen==fen1)&&(shi==shi1))||((fen==fen2)&&(shi==shi2))||((fen==fen3)&&(shi==shi3))||((fen==fen4)&&(shi==shi4)))&&(flag2==1)) if((fen==fen1)&&(shi==shi1)&&(flag2==1))if((((fen==fen1)&&(shi==shi1)&&(flag2==0))||((fen-1==fen1)&&(shi==shi1)))&&(flag4==0))if((fen==fen2)&&(shi==shi2)&&(flag2==1)) if((((fen==fen2)&&(shi==shi2)&&(flag2==0))||((fen-1==fen2)&&(shi==shi2)))&&(flag4==0))if((fen==fen3)&&(shi==shi3)&&(flag2==1))if((((fen==fen3)&&(shi==shi3)&&(flag2==0))||((fen-1==fen3)&&(shi==shi3)))&&(flag4==0))if((fen==fen4)&&(shi==shi4)&&(flag2==1))if((((fen==fen4)&&(shi==shi4)&&(flag2==0))||((fen-1==fen4)&&(shi==shi4)))&&(flag4==0))if(K4==0&&flag3==0)當(dāng)四個(gè)定期鬧鐘任意一路到達(dá)時(shí),在沒(méi)有按下響鈴終結(jié)鍵K4時(shí),flag2都等于1,此時(shí)鬧鐘響起,同步使得flag3等于0。在鬧鐘響鬧完一種周期后將繼續(xù)向下執(zhí)行,并且依照后來(lái)程序鑒定是哪一路鬧鐘在響鬧,執(zhí)行這一路所規(guī)定內(nèi)容,但是無(wú)論哪一路時(shí)間到都會(huì)響鈴并且燈閃,不同是依照判斷選取出時(shí)間到那一路并通過(guò)LCD顯示出來(lái)鬧鐘時(shí)間及某路鬧鐘;此時(shí)若按下K4鍵,則使得flag2等于0,當(dāng)進(jìn)行與否鬧鐘響鬧時(shí)將會(huì)不在響應(yīng),也就是鬧鐘被手動(dòng)關(guān)閉,從而不需要一定要響鈴一分鐘后在關(guān)閉鬧鐘,實(shí)現(xiàn)手動(dòng)關(guān)斷鬧鐘功能。當(dāng)鬧鐘關(guān)斷過(guò)后將及時(shí)跳出,并且使得LCD顯示當(dāng)前時(shí)間。使得可編程時(shí)間控制器可以在響鈴時(shí)可以顯示當(dāng)前鬧鈴及時(shí)間,同步可以手動(dòng)關(guān)斷鬧鈴,并且當(dāng)鬧鈴關(guān)斷過(guò)后可以跳出當(dāng)前顯示返回到系統(tǒng)時(shí)間。 4.6邏輯控制圖4.7邏輯控制流程圖程序:while(1){if((K4==0)&&(flag3==1)){K4num++;if(K4num==5)K4num=0; if(K4num==0){time(); flag4=0;}if(K4num==1){guangbo();flag4=1;}if(K4num==2){shangke(); flag4=1;}if(K4num==3){xiake();flag4=1;}if(K4num==4){dengkong(); flag4=1;}clock();}}只有當(dāng)沒(méi)有一路鬧鐘響鬧時(shí)才會(huì)執(zhí)行此程序,由于在鬧鐘響鬧時(shí)K4鍵將會(huì)作為鬧鐘停止功能鍵使用,因此只有在沒(méi)有鬧鐘響鬧時(shí),K4鍵才會(huì)早為鬧鐘更換,同步變量K4num將作為K4鍵所處鬧鐘或者系統(tǒng)時(shí)間區(qū)別出來(lái),以實(shí)現(xiàn)邏輯上合理。系統(tǒng)剛啟動(dòng)時(shí),按鍵K4處在系統(tǒng)時(shí)間狀態(tài),在此狀態(tài)下可以運(yùn)用之前所簡(jiǎn)介功能進(jìn)行所需要修改,當(dāng)?shù)谝淮伟聪翶4鍵時(shí),就會(huì)進(jìn)入廣播定期控制口,此時(shí)可以依照需要修改所要定期間,并可以顯示自己所定鬧鐘時(shí)間,再次按下K4鍵時(shí),將會(huì)進(jìn)入上課定期鬧鐘,和之前鬧鐘同樣,可以進(jìn)行相似操作,當(dāng)再次按下K4鍵時(shí)將進(jìn)入下課鬧鈴狀態(tài),然后將要進(jìn)入是燈光控制定期,此時(shí)Knum4為4,當(dāng)再次按下K4鍵時(shí),將通過(guò)判斷清零,重新開(kāi)始,以此來(lái)實(shí)現(xiàn)按鍵K4可以更換鬧鐘功能,同步更改鬧鐘時(shí)間功能。4.71602LCD液晶顯示VSS引腳接地,VDD提供電源,VEE接滑動(dòng)變阻器來(lái)控制液晶屏對(duì)比度。RS為寄存器選取,高電平時(shí)選取數(shù)據(jù)寄存器、低電平時(shí)選取指令寄存器。R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。程序:voidwrite_com(ucharcom) {rs=0;rw=0;lcden=0;P3=com;lcden=1;lcden=0;}液晶寫命令函數(shù)voidwrite_date(uchardate) {rs=1;rw=0;lcden=0;P3=date;lcden=1;lcden=0;}液晶寫數(shù)據(jù)函數(shù)當(dāng)需要將內(nèi)容顯示到LCD顯示屏上之前,一方面要向液晶顯示屏輸入寫命令函數(shù),有上硬件分析可以得到LCD液晶顯示上一排地址從80H~8FH,一共16位,下面一排地址從C0H~CFH,同樣是16位,因此在進(jìn)行液晶顯示之前一方面擬定要將成果在哪一位上顯示,然后在調(diào)用液晶寫數(shù)據(jù)函數(shù),只有兩者結(jié)合使用才會(huì)得到想要成果。5實(shí)驗(yàn)與成果分析5.1實(shí)驗(yàn)調(diào)試設(shè)計(jì)規(guī)定:一種以單片機(jī)為核心可編程作息時(shí)間控制器,可以按照給定期間模仿控制,實(shí)現(xiàn)廣播、上下課打鈴、燈光控制(屏幕顯示),同步具備日期和時(shí)鐘顯示。一方面運(yùn)用Keil軟件編輯程序,按上圖要生成目的代碼文獻(xiàn),不斷地調(diào)試程序。聯(lián)調(diào):加載目的代碼文獻(xiàn)打開(kāi)元器件單片機(jī)屬性窗口,在“ProgramFile”欄中添加上面編譯好目的代碼文獻(xiàn)“keil-17.hex”;在“ClockFrequency”欄中輸入晶振頻率為11.0592MHz。每一小塊程序編寫過(guò)后都進(jìn)行聯(lián)調(diào),這樣可以及時(shí)觀測(cè)到自己所編程序與否符合自己目,當(dāng)浮現(xiàn)問(wèn)題時(shí)及時(shí)解決,可以避免當(dāng)有大量問(wèn)題后無(wú)法找出錯(cuò)誤地方,可以提高編程效率,也有助于最后將程序編寫出來(lái)。5.2實(shí)驗(yàn)成果圖5.3廣播定期響鬧時(shí)圖5.4上課定期響鬧圖5.5下課定期響鬧圖5.6燈控定期響鬧圖5.7上課定期設(shè)定5.3實(shí)驗(yàn)問(wèn)題實(shí)驗(yàn)中浮現(xiàn)問(wèn)題最多就是LCD顯示,又是顯示出亂碼,又是是不斷閃爍輸入標(biāo)題,有則是光標(biāo)來(lái)來(lái)回回閃爍而不是固定在某一位,這些問(wèn)題基本上都是由于LCD刷新問(wèn)題上,有時(shí)候由于邏輯上先后順序沒(méi)有做好,有完全是由于缺少必要邏輯區(qū)別,使得顯示在程序執(zhí)行過(guò)程中LCD不單單刷新了我所需要內(nèi)容,也將我此時(shí)不需要內(nèi)容也刷新出來(lái),因此屏幕上內(nèi)容是閃爍,因而我加了4個(gè)基本變量進(jìn)行控制,以此來(lái)實(shí)現(xiàn)所需要刷新。同步整個(gè)延時(shí)又是非常重要,在進(jìn)行按鍵設(shè)定期這個(gè)問(wèn)題就浮現(xiàn)了,有時(shí)候按一下會(huì)會(huì)進(jìn)行幾種需要操作,使得成果不符合我規(guī)定,因此應(yīng)用剛開(kāi)始編寫程序時(shí)不斷恰當(dāng)增長(zhǎng)延時(shí)使得程序徐徐符合規(guī)定。6小結(jié)與體會(huì)通過(guò)本次單片機(jī)課程設(shè)計(jì)讓我學(xué)到了許多新知識(shí),讓我受益匪淺,其中對(duì)1602LCD液晶顯示屏有了非常深刻結(jié)識(shí)。剛開(kāi)始分到課題時(shí),我便開(kāi)始研究這個(gè)課題,由于咱們課題是在題目4基本上改過(guò)來(lái),因而我先研究了一下題目4規(guī)定以及原理,再結(jié)合咱們課題讓我對(duì)這個(gè)課題有了某些理解,下午時(shí)咱們和大多數(shù)同窗同樣先將電路圖畫了出來(lái),但是當(dāng)我做完這個(gè)課題過(guò)后,我很批準(zhǔn)教師意見(jiàn),不應(yīng)當(dāng)及時(shí)畫電路圖,由于咱們對(duì)整個(gè)課題還不是很理解,對(duì)于Proteus軟件也不懂,成果就是咱們用了一下午只畫了一張圖,并且對(duì)于整個(gè)課程設(shè)計(jì)課題理解毫無(wú)協(xié)助。由于咱們對(duì)課題理解有困難,不可以將課題所規(guī)定內(nèi)容完全弄明白,因而咱們向李教師謀求協(xié)助,幫咱們把咱們課題分析了一下,聽(tīng)過(guò)之后咱們基本已經(jīng)理解了這個(gè)課題,但是對(duì)于詳細(xì)實(shí)行還是沒(méi)有頭路,當(dāng)我在實(shí)驗(yàn)室糾結(jié)1602LCD液晶顯示屏究竟是如何工作時(shí),夏教師告訴我Proteus軟件中就有有關(guān)例子,于是我便通過(guò)自己所找到資料以及這個(gè)例子自學(xué)了LCD顯示屏,由于例子是用c語(yǔ)言寫,因此最后我也選取使用c語(yǔ)言來(lái)編寫程序,但是在后來(lái)我所遇到困難遠(yuǎn)遠(yuǎn)不止這些。一方面我要自學(xué)有關(guān)c語(yǔ)言,同步我在網(wǎng)上找到了某些有關(guān)資料學(xué)習(xí)了一下,并結(jié)合李教師對(duì)課題分析,讓我對(duì)這個(gè)課題有了自己思路。一方面,我就把我思路認(rèn)真整頓下來(lái),然后規(guī)劃好每一塊所要完畢任務(wù),然后再用Keil軟件編寫出來(lái),在進(jìn)行聯(lián)調(diào),每一小步調(diào)試都必要做到?jīng)]有問(wèn)題,只有這樣在總聯(lián)調(diào)時(shí)不會(huì)由于問(wèn)題太多而做不出來(lái)。在后來(lái)幾天里我都在學(xué)習(xí)和使用c語(yǔ)言,讓我對(duì)LCD顯示屏有了更多結(jié)識(shí),但是在整個(gè)程序編寫過(guò)程中問(wèn)題基本都處在LCD顯示上,一遍遍嘗試后總會(huì)浮現(xiàn)某些問(wèn)題,曾經(jīng)我也由于最后一點(diǎn)點(diǎn)問(wèn)題想向教師請(qǐng)教,最后自己沒(méi)有解決時(shí)候甚至想放棄,但是最后我還是堅(jiān)持下來(lái),并最后完畢了程序基本規(guī)定,并且通過(guò)了李教師第一次檢查,并對(duì)李教師提出某些不滿足地方進(jìn)行了修改,但是這些修改在進(jìn)過(guò)之前所設(shè)計(jì)中遇到問(wèn)題來(lái)說(shuō)也挺難得,但是我不久就解決掉了,由于我對(duì)自己程序以及LCD顯示屏有了好好地結(jié)識(shí),從而最后實(shí)現(xiàn)了比較好成果,當(dāng)李教師驗(yàn)收過(guò)后感到非常高興,在此我非常感謝李教師對(duì)我設(shè)計(jì)過(guò)程中提供協(xié)助,以及最后對(duì)我設(shè)計(jì)成果承認(rèn)。雖然在這一周半課程設(shè)計(jì)中每時(shí)每刻都讓我在思考我課題,同步由于有關(guān)網(wǎng)絡(luò)資源局限性曾經(jīng)使我在用匯編語(yǔ)言還是應(yīng)用c語(yǔ)言徘徊過(guò),但是當(dāng)我選取其中一種時(shí)我就堅(jiān)持了下來(lái),并通過(guò)不斷地努力在不斷地更改程序,可以說(shuō)整個(gè)課程設(shè)計(jì)是非常痛苦,由于我曾經(jīng)想放棄過(guò),但是我最后還是堅(jiān)持了下來(lái),并通過(guò)自己堅(jiān)持不懈努力完畢本次課題任務(wù)。雖然整個(gè)課程設(shè)計(jì)過(guò)程有點(diǎn)痛苦,但是當(dāng)我看到自己最后成果時(shí)還是很開(kāi)心,由于我這幾天努力沒(méi)有白白揮霍,培養(yǎng)了我獨(dú)立思考能力,提高我自學(xué)以及應(yīng)用能力,這將是我后來(lái)學(xué)習(xí)生活非常寶貴經(jīng)歷。在編寫程序過(guò)程中每一塊認(rèn)真編寫才為后來(lái)整個(gè)程序完畢奠定基本,正如咱們?cè)谄綍r(shí)生活中同樣,只有不斷地積累,才會(huì)為后來(lái)更大收獲打下堅(jiān)實(shí)基本,而本次課程設(shè)計(jì)就可以當(dāng)做我一次小小積累,可以說(shuō)這是我大學(xué)以來(lái)最讓我糾結(jié)一次課程設(shè)計(jì),也是第一種讓我有放棄念頭課程設(shè)計(jì),當(dāng)我最后調(diào)出程序那一刻讓我明白,有時(shí)候在那自暴自棄還不如竭盡自己權(quán)力去解決這個(gè)問(wèn)題,在這過(guò)程中確會(huì)有許多麻煩,有時(shí)會(huì)把本來(lái)沒(méi)有問(wèn)題弄出來(lái),有時(shí)通過(guò)一次次調(diào)試還是達(dá)不到自己規(guī)定,但是只要咱們堅(jiān)持住,不放棄還是會(huì)解決?;仨@一周多單片機(jī)課程設(shè)計(jì),發(fā)現(xiàn)自己程序按模塊劃分還不是很難,和當(dāng)時(shí)剛剛拿到題目時(shí)各種不明白、各種不懂發(fā)現(xiàn)自己真收獲了諸多,并且在看看有關(guān)類似課題時(shí)可以基本找出基本設(shè)計(jì)思路,對(duì)于用到602LCD液晶顯示屏有關(guān)內(nèi)容可以做出有關(guān)反映,這個(gè)顯示屏曾經(jīng)讓我絞盡腦汁仍舊不懂,曾經(jīng)讓我程序漏洞百出,但是最后我征服了它,這是我一大收獲。同步在李教師和夏教師督促下可以準(zhǔn)時(shí)到達(dá)實(shí)驗(yàn)室,從而合理分派和合理使用了課程設(shè)計(jì)時(shí)間。最后,我要非常感謝李教師和夏教師在課程設(shè)計(jì)中提供協(xié)助,以及李教師最后對(duì)我課程設(shè)計(jì)成果必定。

參考文獻(xiàn)[1]張毅剛主編,單片機(jī)原理及應(yīng)用,北京:高等教誨出版社,[2]陳濤編著,單片機(jī)應(yīng)用及C51程序設(shè)計(jì),北京:機(jī)械工業(yè)出版社,[3]周潤(rùn)景主編,PROTEUS入門實(shí)用教程,北京:機(jī)械工業(yè)出版社,[4]皮大能主編,單片機(jī)課程設(shè)計(jì)指引書,北京:北京理工大學(xué)出版社,[5]樓然苗主編,單片機(jī)實(shí)驗(yàn)與課程設(shè)計(jì)(Proteus仿真版),浙江:浙江大學(xué)出版社,

附錄設(shè)計(jì)程序#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharUinti,miao,fen,fen1,fen2,fen3,fen4,shi,shi1,shi2,shi3,shi4,flag1,flag2,flag3,flag4,flag5,aa,K1num,K2num,K3num,K4num,N; //K1num-K1按鍵被按下標(biāo)記變量,K2num-K2按鍵被按下標(biāo)記變量,K3num=0-K3按鍵被按下標(biāo)記變量ucharcodetable[]="H.I.TCHINA";//定義初始上電時(shí)液晶默認(rèn)顯示狀態(tài)ucharcodetable2[]="TIME";ucharcodeAlarm_0[]="GBDS";ucharcodeAlarm_1[]="SKDS";ucharcodeAlarm_2[]="XKDS";ucharcodeAlarm_3[]="DKDS"; ucharcodeAlarm_00[]="GB";ucharcodeAlarm_11[]="SK";ucharcodeAlarm_22[]="XK";ucharcodeAlarm_33[]="DK"; ucharcodedeng[]="LIGHTING";sbitK1=P1^0; //四個(gè)按鍵sbitK2=P1^1;sbitK3=P1^2;sbitK4=P1^3;sbitrs=P2^0;sbitrw=P2^1; //燈光控制端sbitlcden=P2^2;sbitLED2=P2^3; //廣播控制端sbitled=P2^4;///發(fā)光二極管控制端sbitbeep=P2^5; //蜂鳴器控制端voiddelay(uintz) //延時(shí)函數(shù){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--) ; }voidwrite_com(ucharcom)//液晶寫命令函數(shù){rs=0;rw=0;lcden=0;P3=com;delay(5);lcden=1;delay(5);lcden=0; }voidwrite_date(uchardate)//液晶寫數(shù)據(jù)函數(shù){rs=1;rw=0;lcden=0;P3=date;delay(5);lcden=1;delay(5);lcden=0; }voidwrite_sfm(ucharadd,uchardate) //液晶寫時(shí)分秒函數(shù){ucharshi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}voidinit() //初始化函數(shù){uintnum; //寫液晶循環(huán)控制變量aa=0; //中斷次數(shù)標(biāo)志K1num=0; //K1按鍵被按下標(biāo)記變量K2num=0; //K2按鍵被按下標(biāo)記變量K3num=0; //K3按鍵被按下標(biāo)記變量K4num=0;//K4按鍵被按下標(biāo)記變量flag1=1; //控制lcd屏刷新變量flag2=1;//控制鬧鐘響鬧啟動(dòng)關(guān)閉標(biāo)記flag3=1;//控制鬧鐘響起時(shí),按下K4停止鬧鐘響鬧標(biāo)記flag4=1;//進(jìn)入鬧鐘設(shè)立時(shí)標(biāo)記變量flag5=1;//進(jìn)入時(shí)間設(shè)立時(shí)標(biāo)記變量led=1; //發(fā)光二極管初始化LED2=0; //廣播初始化rw=0; N=100; //系統(tǒng)啟動(dòng)時(shí),鬧鐘時(shí)間到發(fā)出聲音為持續(xù)三次發(fā)出“嘩”一聲miao=0; //系統(tǒng)初始化時(shí)間fen=0;shi=7;fen1=6; //初始化鬧鐘時(shí)間shi1=7;fen2=8; //初始化鬧鐘時(shí)間shi2=7;fen3=10; //初始化鬧鐘時(shí)間shi3=7;fen4=12; //初始化鬧鐘時(shí)間shi4=7;beep=0; //蜂鳴器初始化lcden=0; //液晶使能端初始化write_com(0x38); //1602液晶初始化,設(shè)立16*2顯示。5*7點(diǎn)陣,8位數(shù)據(jù)接口write_com(0x0c);//設(shè)立開(kāi)顯示,不顯示光write_com(0x06); //寫一種字符后地址指針自動(dòng)加1write_com(0x01);//顯示清0數(shù)據(jù)指針清0write_com(0x80); //將數(shù)據(jù)指針定位到第一行,第一種字處for(num=0;num<15;num++) //顯示鬧鐘標(biāo)示:H.I.TCHINA{write_date(table[num]);delay(10); }write_com(0x80+0x40+11);//寫出時(shí)間顯示某些兩個(gè)冒號(hào)write_date(':');write_com(0x80+0x40+14);write_date('');write_com(0x80+0x40+15);write_date('');write_sfm(12,fen); //送去液晶顯示秒分時(shí)write_sfm(9,shi);TMOD=0x01; //設(shè)立定期器0為工作方式1TH0=(65536-50000)/256;//定期器裝初值TL0=(65536-50000)%256;EA=1; //開(kāi)總中斷ET0=1; //開(kāi)定期器0中斷TR0=1; }voidxianshi() //系統(tǒng)時(shí)間顯示{write_com(0x80+0x40);for(i=0;i<9;i++)write_date(table2[i]);write_com(0x80+0x40+11);//寫出時(shí)間顯示某些兩個(gè)冒號(hào)write_date(':');write_com(0x80+0x40+14);write_date('');write_com(0x80+0x40+15);write_date('');write_sfm(12,fen); //送去液晶顯示秒分時(shí)write_sfm(9,shi);}voidtime() //更改系統(tǒng)時(shí)間{if( (K1num==0)&&(flag3==1)){write_com(0x80+0x40);for(i=0;i<9;i++)write_date(table2[i]); } if(K1==0)//判斷K1按下,則開(kāi)始修改時(shí)間{delay(5);flag5=1;if(K1==0&&K1num==0){K1num=1; while(!K1) //判斷與否松開(kāi)按鍵,后同if(K1num==1){TR0=0; //關(guān)閉計(jì)數(shù)器0write_com(0x0f); //光標(biāo)開(kāi)始閃爍write_com(0x80+0x40+13);} } }if(K1==0&&K1num==1) //判斷K1按下,修改系統(tǒng)時(shí)間小時(shí){delay(5);if(K1==0){write_com(0x80+0x40+10); //光標(biāo)定位到小時(shí)位置K1num=1; //置K1num=1while(!K1);shi++; //則調(diào)節(jié)時(shí)加1if(shi==24)shi=0; //若滿24后將清零write_sfm(9,shi); //每調(diào)節(jié)一次送液晶顯示write_com(0x80+0x40+10);} } if(K2==0&&K1num==1) //判K2按下,修改系統(tǒng)時(shí)間分鐘{delay(5);if(K2==0){write_com(0x80+0x40+13); //光標(biāo)定位到分鐘位置K1num=1;while(!K2);fen++; //則調(diào)節(jié)分加1if(fen==60) fen=0;//若滿60后將清零write_sfm(12,fen); //每調(diào)節(jié)一次送液晶顯示write_com(0x80+0x40+13); } }if(K1num==1) //當(dāng)設(shè)立時(shí)間或鬧鐘時(shí),K3被按下設(shè)立完畢。{ if(K3==0) //判斷K3按下{delay(5);if(K3==0){ flag5=0;K1num=0;while(!K3);write_com(0x0c); //取消光標(biāo)閃TR0=1; //啟動(dòng)定期器使時(shí)鐘開(kāi)始走flag1=1;//flag=1.則修改系統(tǒng)時(shí)間時(shí)液晶顯示系統(tǒng)時(shí)間值,flag=0,則為修改鬧鐘時(shí)間時(shí),屏幕顯示是修改鬧鐘時(shí)間值flag1=1;write_com(0x80+0x40+11);write_date(':');write_com(0x80+0x40+14);write_date('');write_com(0x80+0x40+15);write_date(''); } } }}voidguangbo()//廣播定期{if(K3num==0){write_com(0x80+0x40);for(i=0;i<9;i++)write_date(Alarm_00[i]); }if(K3==0&&K3num==0) //判斷K3初次被按下,則設(shè)立鬧鐘{delay(5); //延時(shí)消抖,后同if(K3==0){ flag1=0;write_com(0x80+0x40+13); //第一次按下光標(biāo)定位到分鐘位置while(!K3);K3num=1;write_com(0x80+0x40);for(i=0;i<9;i++)write_date(Alarm_0[i]);write_sfm(12,fen1); //送去液晶顯示定期分,時(shí)write_sfm(9,shi1);write_com(0x0f); //光標(biāo)開(kāi)始閃爍write_com(0x80+0x40+13); //顯示位置回到調(diào)節(jié)處} } if(K2==0&&K3num==0) //K2被按下時(shí)顯示定期時(shí)間{ delay(5);if(K2==0){ write_sfm(12,fen1); //送去液晶顯示定期分,時(shí)write_sfm(9,shi1);while(!K2); write_sfm(12,fen);//K2松開(kāi)顯示當(dāng)前時(shí)間write_sfm(9,shi);} }if(K1==0&&K3num==1) //修改小時(shí),判斷K1鍵按下,K3num=1,表達(dá)K3按鍵按下,則此時(shí)修改是鬧鐘時(shí)間小時(shí){delay(5);if(K1==0){ write_com(0x80+0x40+10); //光標(biāo)定位到小時(shí)位置K3num=1;while(!K1);shi1++; //則調(diào)節(jié)定期時(shí)加1if(shi2==24) //若滿24后將清零shi1=0;write_sfm(9,shi1); //每調(diào)節(jié)一次送液晶顯示write_com(0x80+0x40+10); //顯示位置重新回到調(diào)節(jié)處} } if(K2==0&&K3num==1)//按鍵2按下,修改鬧鐘時(shí)間分鐘{ delay(5);if(K2==0){ write_com(0x80+0x40+13); //光標(biāo)定位到分鐘位置K3num=1;while(!K2);fen1++; //則調(diào)節(jié)分加1if(fen1==60) //若滿60后將清零fen1=0;write_sfm(12,fen1);//每調(diào)節(jié)一次送液晶顯示write_com(0x80+0x40+13); //顯示位置重新回到調(diào)節(jié)處} }if(K3num==1) //當(dāng)設(shè)立鬧鐘時(shí),K3被按下設(shè)立完畢。{ if(K3==0) //判斷K3按下{ delay(5);if(K3==0){ K1num=0;K3num=0;while(!K3);write_com(0x0c); //光標(biāo)停止閃爍 flag1=1; //flag=1.則修改系統(tǒng)時(shí)間時(shí)液晶顯示系統(tǒng)時(shí)間值,flag=0,則為修改鬧鐘時(shí)間時(shí),屏幕顯示是修改鬧鐘時(shí)間值write_sfm(12,fen);//送去液晶顯示分,時(shí)write_sfm(9,shi);write_com(0x80+0x40+11);write_date(':');write_com(0x80+0x40+14);write_date('');write_com(0x80+0x40+15);write_date('');}} }}voidshangke() //上課定期{if( K3num==0){write_com(0x80+0x40);for(i=0;i<9;i++)write_date(Alarm_11[i]); } if(K3==0&&K3num==0) //判斷K3初次被按下,則設(shè)立鬧鐘{ delay(5); //延時(shí)消抖,后同if(K3==0){ flag1=0;write_com(0x80+0x40+13); //第一次按下光標(biāo)定位到分鐘位置while(!K3);K3num=1;write_com(0x80+0x40);for(i=0;i<9;i++)write_date(Alarm_1[i]);write_sfm(12,fen2); //送去液晶顯示定期分,時(shí)write_sfm(9,shi2);write_com(0x0f); //光標(biāo)開(kāi)始閃爍 write_com(0x80+0x40+13); //顯示位置回到調(diào)節(jié)處}} if(K2==0&&K3num==0) //K2被按下時(shí)顯示定期時(shí)間{ delay(5);if(K2==0){ write_sfm(12,fen2); //送去液晶顯示定期分,時(shí)write_sfm(9,shi2);while(!K2); write_sfm(12,fen); //K2松開(kāi)顯示當(dāng)前時(shí)間write_sfm(9,shi); } }if(K1==0&&K3num==1) //修改小時(shí),判斷K1鍵按下,K3num=1,表達(dá)K3按鍵按下,則此時(shí)修改是鬧鐘時(shí)間小時(shí){ delay(5);if(K1==0){ write_com(0x80+0x40+10); //光標(biāo)定位到小時(shí)位置K3num=1;while(!K1);shi2++; //則調(diào)節(jié)定期時(shí)加1if(shi2==24) //若滿24后將清零shi1=0;write_sfm(9,shi2); //每調(diào)節(jié)一次送液晶顯示write_com(0x80+0x40+10); //顯示位置重新回到調(diào)節(jié)處} } if(K2==0&&K3num==1) //按鍵2按下,修改鬧鐘時(shí)間分鐘{ delay(5);if(K2==0){ write_com(0x80+0x40+13); //光標(biāo)定位到分鐘位置K3num=1;while(!K2);fen2++; //則調(diào)節(jié)分加1if(fen1==60) //若滿60后將清零fen1=0;write_sfm(12,fen2); //每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+13); //顯示位置重新回到調(diào)節(jié)處} }if(K3num==1) //當(dāng)設(shè)立時(shí)間或鬧鐘時(shí),K3被按下設(shè)立完畢。{ if(K3==0) //判斷K3按下{ delay(5);if(K3==0){K1num=0;K3num=0;while(!K3);write_com(0x0c); //光標(biāo)停止閃爍 flag1=1; //flag=1.則修改系統(tǒng)時(shí)間時(shí)液晶顯示系統(tǒng)時(shí)間值,flag=0,則為修改鬧鐘時(shí)間時(shí),屏幕顯示是修改鬧鐘時(shí)間值write_sfm(12,fen);//送去液晶顯示分,時(shí)write_sfm(9,shi);write_com(0x80+0x40+11);write_date(':');write_com(0x80+0x40+14);write_date('');write_com(0x80+0x40+15);write_date('');}}}}voidxiake() //下課定期{ if( K3num==0){ write_com(0x80+0x40);for(i=0;i<9;i++)write_date(Alarm_22[i]); } if(K3==0&&K3num==0) //判斷K3初次被按下,則設(shè)立鬧鐘{delay(5); //延時(shí)消抖,后同if(K3==0){ flag1=0;write_com(0x80+0x40+13); //第一次按下光標(biāo)定位到分鐘位置while(!K3);K3num=1;write_com(0x80+0x40);for(i=0;i<9;i++)write_date(Alarm_2[i]);write_sfm(12,fen3); //送去液晶顯示定期分,時(shí)write_sfm(9,shi3);write_com(0x0f); //光標(biāo)開(kāi)始閃爍write_com(0x80+0x40+13); //顯示位置回到調(diào)節(jié)處}}if(K2==0&&K3num==0) //K2被按下時(shí)顯示定期時(shí)間{delay(5);if(K2==0){ write_sfm(12,fen3); //送去液晶顯示定期分,時(shí)write_sfm(9,shi3);while(!K2); write_sfm(12,fen); //K2松開(kāi)顯示當(dāng)前時(shí)間write_sfm(9,shi);} }if(K1==0&&K3num==1) //修改小時(shí),判斷K1鍵按下,K3num=1,表達(dá)K3按鍵按下,則此時(shí)修改是鬧鐘時(shí)間小時(shí){ delay(5); if(K1==0){ write_com(0x80+0x40+10); //光標(biāo)定位到小時(shí)位置K3num=1;while(!K1);shi3++; //則調(diào)節(jié)定期時(shí)加1if(shi3==24) //若滿24后將清零shi1=0;write_sfm(9,shi3); //每調(diào)節(jié)一次送液晶顯示write_com(0x80+0x40+10); //顯示位置重新回到調(diào)節(jié)處} }if(K2==0&&K3num==1) //卸螷2按下,修改鬧鐘時(shí)間分鐘{ delay(5);if(K2==0){ write_com(0x80+0x40+13); //光標(biāo)定位到分鐘位置K3num=1;while(!K2);fen3++; //則調(diào)節(jié)分加1if(fen1==60) //若滿60后將清零fen1=0;write_sfm(12,fen3);//每調(diào)節(jié)一次送液晶顯示write_com(0x80+0x40+13); } } if(K3num==1) //當(dāng)設(shè)立時(shí)間或鬧鐘時(shí),K3被按下設(shè)立完畢。{ if(K3==0) //判斷K3按下{delay(5);if(K3==0){ K1num=0;K3num=0;while(!K3);write_com(0x0c); //光標(biāo)停止閃爍 flag1=1;write_sfm(12,fen);//送去液晶顯示分,時(shí)write_sfm(9,shi);write_com(0x80+0x40+11);write_date(':');write_com(0x80+0x40+14);write_date('');write_com(0x80+0x40+15);write_date('');}}}}voiddengkong() //燈光控制{if(K3num==0){write_com(0x80+0x40);for(i=0;i<9;i++)write_date(Alarm_33[i]); } if(K3==0&&K3num==0) //判斷K3初次被按下,則設(shè)立鬧鐘{delay(5); //延時(shí)消抖,后同if(K3==0){flag1=0;write_com(0x80+0x40+13); //第一次按下光標(biāo)定位到分鐘位置while(!K3);K3num=1;write_com(0x80+0x40);for(i=0;i<9;i++)write_date(Alarm_3[i]);write_sfm(12,fen4); //送去液晶顯示定期分,時(shí)write_sfm(9,shi4);write_com(0x0f); //光標(biāo)開(kāi)始閃爍write_com(0x80+0x40+13); //顯示位置回到調(diào)節(jié)處} }if(K2==0&&K3num==0) //K2被按下時(shí)顯示定期時(shí)間{delay(5);if(K2==0){write_sfm(12,fen4); //送去液晶顯示定期分,時(shí)write_sfm(9,shi4);while(!K2); write_sfm(12,fen); //K2松開(kāi)顯示當(dāng)前時(shí)間write_sfm(9,shi);} }if(K1==0&&K3num==1) //修改小時(shí),判斷K1鍵按下,K3num=1,表達(dá)K3按鍵按下,則此時(shí)修改是鬧鐘時(shí)間小時(shí){delay(5);if(K1==0){write_com(0x80+0x40+10); //光標(biāo)定位到小時(shí)位置K3num=1;while(!K1);shi4++; //則調(diào)節(jié)定期時(shí)加1if(shi4==24) //若滿24后將清零shi1=0;write_sfm(9,shi4); //每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+10); //顯示位置重新回到調(diào)節(jié)處} }if(K2==0&&K3num==1) //按鍵2按下,修改鬧鐘時(shí)間分鐘{ delay(5);if(K2==0){ write_com(0x80+0x40+13); //光標(biāo)定位到分鐘位置K3num=1;while(!K2);fen4++; //則調(diào)節(jié)分加1if(fen1==60) //若滿60后將清零fen1=0;write_sfm(12,fen4); //每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+13); //顯示位置重新回到調(diào)節(jié)處} }if(K3num==1) //當(dāng)設(shè)立時(shí)間或鬧鐘時(shí),K3被按下設(shè)立完畢。{ if(K3==0) //判斷K3按下{ delay(5);if(K3==0){K1num=0;K3num=0;while(!K3);write_com(0x0c); //光標(biāo)停止閃爍 flag1=1;//flag=1.write_sfm(12,fen);//送去液晶顯示分,時(shí)write_sfm(9,shi);write_com(0x80+0x40+11);write_date(':');write_com(0x80+0x40+14);write_date('');write_com(0x80+0x40+

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論