單片機(jī)定時(shí)器設(shè)計(jì)報(bào)告_第1頁
單片機(jī)定時(shí)器設(shè)計(jì)報(bào)告_第2頁
單片機(jī)定時(shí)器設(shè)計(jì)報(bào)告_第3頁
單片機(jī)定時(shí)器設(shè)計(jì)報(bào)告_第4頁
單片機(jī)定時(shí)器設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一章 緒論l 1.1系統(tǒng)背景u 1.1.1單片機(jī)的介紹單片微型計(jì)算機(jī)簡(jiǎn)稱單片機(jī),是典型的嵌入式微控制器,常用英文字母的縮寫mcu表示單片機(jī),它最早是被用在工業(yè)控制領(lǐng)域。單片機(jī)由芯片內(nèi)僅有cpu的專用處理器發(fā)展而來。最早的設(shè)計(jì)理念是通過將大量外圍設(shè)備和cpu集成在一個(gè)芯片中,使計(jì)算機(jī)系統(tǒng)更小,更容易集成進(jìn)復(fù)雜的而對(duì)體積要求嚴(yán)格的控制設(shè)備當(dāng)中。intel的z80是最早按照這種思想設(shè)計(jì)出的處理器,從此以后,單片機(jī)和專用處理器的發(fā)展便分道揚(yáng)鑣。單片機(jī)又稱單片微控制器,它不是完成某一個(gè)邏輯功能的芯片,而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。相當(dāng)于一個(gè)微型的計(jì)算機(jī),和計(jì)算機(jī)相比,單片機(jī)只缺少了i/o設(shè)備。

2、概括的講:一塊芯片就成了一臺(tái)計(jì)算機(jī)。它的體積小、質(zhì)量輕、價(jià)格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時(shí),學(xué)習(xí)使用單片機(jī)是了解計(jì)算機(jī)原理與結(jié)構(gòu)的最佳選擇。單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,這是別的器件需要費(fèi)很大力氣才能做到的,有些則是花大力氣也很難做到的。一個(gè)不是很復(fù)雜的功能要是用美國(guó)50年代開發(fā)的74系列,或者60年代的cd4000系列這些純硬件來搞定的話,電路一定是一塊大pcb板!但是如果要是用美國(guó)70年代成功投放市場(chǎng)的系列單片機(jī),結(jié)果就會(huì)有天壤之別!只因?yàn)閱纹瑱C(jī)的通過你編寫的程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!u 1.1.

3、2單片機(jī)的應(yīng)用目前單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒有單片機(jī)的蹤跡。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能ic卡,民用豪華轎車的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物等等,這些都離不開單片機(jī)。更不用說自動(dòng)控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械以及各種智能機(jī)械了。因此,單片機(jī)的學(xué)習(xí)、開發(fā)與應(yīng)用將造就一批計(jì)算機(jī)應(yīng)用與智能化控制的科學(xué)家、工程師。 單片機(jī)廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域l 1.2多功能家用定時(shí)器u

4、1.2.1多功能家用定時(shí)器的概述人類最早使用的定時(shí)工具是沙漏或水漏,但在鐘表誕生發(fā)展成熟之后,人們開始嘗試使用這種全新的計(jì)時(shí)工具來改進(jìn)定時(shí)器,達(dá)到準(zhǔn)確控制時(shí)間的目的。 1876年,英國(guó)外科醫(yī)生索加取得一項(xiàng)定時(shí)裝置的專利,用來控制煤氣街燈的開關(guān)。它利用機(jī)械鐘帶動(dòng)開關(guān)來控制煤氣閥門。 定時(shí)器確實(shí)是一項(xiàng)了不起的發(fā)明,使相當(dāng)多需要人控制時(shí)間的工作變得簡(jiǎn)單了許多,家用電器都安裝了定時(shí)器來控制開關(guān)或工作時(shí)間。u 1.2.2多功能家用定時(shí)器的功能與實(shí)現(xiàn)步驟1. 能夠調(diào)整數(shù)字鐘、定時(shí)開啟、關(guān)閉時(shí)間的顯示 當(dāng)時(shí)間分別顯示小時(shí)、分鐘狀態(tài)時(shí),按11鍵,實(shí)現(xiàn)將當(dāng)前顯示的小時(shí)或分鐘減1;按12鍵時(shí),實(shí)現(xiàn)將當(dāng)前顯示的小時(shí)

5、或分鐘加1。2. 能過實(shí)現(xiàn)三路定時(shí) 通過按10鍵來選擇顯示的時(shí)間。從而實(shí)現(xiàn)三路定時(shí)的開啟與關(guān)閉,實(shí)現(xiàn)三路定時(shí)功能。3. 既能夠?qū)崿F(xiàn)按鍵輸值,也可用加減鍵來對(duì)其調(diào)時(shí) 當(dāng)在小時(shí)狀態(tài)時(shí),不管是在數(shù)字鐘還是定時(shí)狀態(tài),都可以通過按鍵來對(duì)其調(diào)時(shí),同時(shí)此時(shí)如果覺得時(shí)間按錯(cuò)還可以通過加減鍵進(jìn)行調(diào)整時(shí)間。4. 能夠時(shí)間倒計(jì)時(shí)的秒表功能 當(dāng)一開始接通是,顯示的是60秒倒計(jì)時(shí)功能,這一功能有助于對(duì)準(zhǔn)確時(shí)間更好的把握。5. 能夠顯示今天心情 當(dāng)在時(shí)鐘狀態(tài)時(shí),按加減鍵,可顯示出今天心情。如果按減號(hào)鍵時(shí),顯示sad,并且led燈全滅;如果按加號(hào)鍵時(shí),顯示fine,并且燈全亮。第二章 系統(tǒng)電路設(shè)計(jì)l 2.1 系統(tǒng)總體設(shè)計(jì)框

6、架結(jié)構(gòu) 總體結(jié)構(gòu)圖如下:?jiǎn)纹瑱C(jī)按鍵輸入電路時(shí)鐘電路復(fù)位電路蜂鳴器電路數(shù)碼管顯示電路繼電器電路led顯示電路圖2.1總體結(jié)構(gòu)圖按鍵輸入電路:對(duì)定時(shí)器輸入定時(shí)時(shí)間、時(shí)鐘時(shí)間,并對(duì)其調(diào)整。時(shí)鐘電路:給單片機(jī)一個(gè)時(shí)鐘信號(hào),讓其工作。復(fù)位電路:使單片機(jī)為初始狀態(tài),并從初態(tài)開始工作。led顯示電路:表明定時(shí)器的工作狀態(tài)。數(shù)碼管顯示電路:顯示數(shù)字鐘時(shí)間或定時(shí)時(shí)間或心情。繼電器電路:是用較小的電流去控制較大電流的一種“自動(dòng)開關(guān)”。l 2.2 系統(tǒng)硬件單元電路設(shè)計(jì)u 2.2.1 時(shí)鐘電路設(shè)計(jì) 時(shí)鐘電路對(duì)單片機(jī)是不可缺的,單片機(jī)的每個(gè)功能都要以時(shí)鐘電路為基礎(chǔ)工作。單片機(jī)內(nèi)部自帶一個(gè)時(shí)鐘電路,外部接入定時(shí)控制元件即

7、可構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。其中機(jī)器周期共有12個(gè)振蕩脈沖周期,因此,機(jī)器周期是時(shí)鐘周期的12倍。本實(shí)驗(yàn)中時(shí)鐘電路中使用的晶體是12mhz,則時(shí)鐘周期為(1/12)us,機(jī)器周期為1us。實(shí)驗(yàn)圖如下:時(shí)鐘電路圖: 圖2.2時(shí)鐘電路圖u 2.2.2 復(fù)位電路設(shè)計(jì)復(fù)位操作有上電自動(dòng)復(fù)位、按鍵電平復(fù)位和外部脈沖復(fù)位三鐘方式,本次實(shí)驗(yàn)用的是按鍵電平復(fù)位,利用電容的充放電公式來選擇所需的電容、電阻,能保證復(fù)位信號(hào)高電平持續(xù)時(shí)間大于2個(gè)機(jī)器周期。電路圖如下:復(fù)位電路圖: 圖2.2按鍵電平復(fù)位 u 2.2.3按鍵電路設(shè)計(jì)本課題要用數(shù)碼管顯示數(shù)字鐘、定時(shí)時(shí)間。這就需要鍵盤來設(shè)定,鍵盤可以分為獨(dú)立連接式和矩陣式

8、。本實(shí)驗(yàn)用的是矩陣式。為了減少所以的i/o口,利用三八譯碼器來實(shí)現(xiàn)12個(gè)鍵盤的連接。對(duì)于這種矩陣式的鍵盤連接,掃描時(shí)依次將行線置為低電平,即在置某根行線為低電平時(shí),其它都線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。注意在按鍵時(shí)一定要調(diào)延時(shí)子程序來消除抖動(dòng)。矩陣式鍵盤如下所示:按鍵電路圖:圖2.3按鍵電路u 2.2.4 led顯示電路設(shè)計(jì)本次實(shí)驗(yàn)中要用發(fā)光二極管顯示狀態(tài)。由下圖知發(fā)光二極管陰極以經(jīng)接地,當(dāng)其陽極為高電平時(shí),二極管就發(fā)光顯示所處狀態(tài)。 led顯示電路圖: 圖2.4 led顯示電路圖u 2.2

9、.5 數(shù)碼管顯示電路設(shè)計(jì)實(shí)驗(yàn)中所用的數(shù)碼管為共陰極數(shù)碼管,當(dāng)給其引腳加入高電平時(shí),數(shù)碼管中對(duì)應(yīng)的那一段就亮。圖2.6為外部顯示圖,其內(nèi)部結(jié)構(gòu)如下:圖2.5共陰極數(shù)碼管內(nèi)部結(jié)構(gòu)圖2.6共陰極數(shù)碼管顯示u 2.2.6 繼電器電路設(shè)計(jì) 繼電器是一種電子控制器件,它具有控制系統(tǒng)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路),通常應(yīng)用于自動(dòng)控制電路中,它實(shí)際上是用較小的電流去控制較大電流的一種“自動(dòng)開關(guān)”。故在電路中起著自動(dòng)調(diào)節(jié)、安全保護(hù)、轉(zhuǎn)換電路等作用。圖2.7繼電器電路l 2.3系統(tǒng)硬件總電路總電路圖由時(shí)鐘電路、復(fù)位電路、繼電器電路、鍵盤電路、led顯示電路、數(shù)碼管顯示電路組成來實(shí)現(xiàn)定時(shí)功能。其中四個(gè)

10、數(shù)碼管為共陰極的數(shù)碼管。74ls138為38譯碼器,74ls07為輸出緩沖器,74ls00為與非門,7805為三端穩(wěn)壓器,電容的作用基本都是濾波來減少噪聲對(duì)實(shí)驗(yàn)的影響。電路圖如下:圖2.8總電路圖第三章 系統(tǒng)軟件設(shè)計(jì)l 3.1 系統(tǒng)軟件流程圖u 3.1.1主程序流程圖開始初始化、允許中斷、方式1刷新緩沖區(qū)led顯示是否有鍵按下比較時(shí)間延時(shí)按鍵處理 主程序在執(zhí)行時(shí),通過單片機(jī)內(nèi)部中斷對(duì)程序不斷的掃描判斷、刷新顯示,當(dāng)有鍵按下時(shí),將數(shù)字鐘中的時(shí)間與定時(shí)時(shí)間相比較,然后根據(jù)比較程序顯示狀態(tài),并且還要延時(shí)消除抖動(dòng),之后進(jìn)行按鍵處理,從而顯示不同的狀態(tài),如此周期循環(huán)。u 3.1.2子程序流程圖1.延時(shí)子

11、程序流程圖開始x-x=0t=0t120t+endy 此延時(shí)子程序在實(shí)驗(yàn)中被主程序調(diào)用,當(dāng)有按鍵按下時(shí),調(diào)用此程序可以達(dá)到消除振動(dòng)的作用,避免發(fā)光二極管一直閃爍,此程序延時(shí)時(shí)間不能太短,要不然不能很好的起到消振作用,也不能夠太長(zhǎng),避免按鍵很長(zhǎng)時(shí)間后才反應(yīng)。并且因?yàn)榇顺绦蛴胏語言編程,延時(shí)時(shí)間沒有匯編語言精準(zhǔn)。2.比較子程序流程圖開始時(shí)鐘=定時(shí)開始時(shí)間?led7=1時(shí)鐘=定時(shí)結(jié)束時(shí)間?led7=0end 此程序通過將定時(shí)時(shí)間不斷與數(shù)字鐘時(shí)間相比較來表明定時(shí)器是否開啟。當(dāng)led7亮的時(shí)候表明定時(shí)開啟;當(dāng)led7滅的時(shí)候表明定時(shí)關(guān)閉。 3.刷新緩沖子程序流程圖開始判定f的值值f=-2刷新心情刷新秒表時(shí)

12、間f=-1f=0f=1f=2f=3f=4f=5f=6刷新三路關(guān)閉時(shí)間刷 新三 路開 啟時(shí)間刷新二路關(guān)閉時(shí)間刷新二路開啟時(shí)間刷新一路關(guān)閉時(shí)間刷新一路開啟時(shí)間刷新時(shí)鐘時(shí)間 此程序?yàn)樗⑿戮彌_區(qū)流程圖,其中f為狀態(tài)量,當(dāng)f為不同的值時(shí),數(shù)碼管顯示不同的狀態(tài),同時(shí)此程序不斷的刷新來顯示此狀態(tài)下的數(shù)碼管顯示的值。 4.按鍵處理子程序流程圖開始判斷state的值根據(jù)不同的state值,在不同的狀態(tài)下,按不同的鍵顯示不同的作用。定義狀態(tài)量 此為按鍵處理子程序流程圖,主程序在不停的掃描中,每當(dāng)有按鍵按下時(shí),就會(huì)根據(jù)狀態(tài)量state的值跳轉(zhuǎn)到此程序進(jìn)行處理,此程序中還包含顯示時(shí)所需的狀態(tài)量的定義和加減鍵及鍵值的輸

13、入,按不同的鍵實(shí)現(xiàn)不同的功能。 5.led顯示子程序流程圖開始state=0state=2state=12state=13state=3state=4state=5testate=6state=7state=8state=9state=10state=11心情好,全亮;心情不好,全滅時(shí)鐘的小時(shí)狀態(tài)時(shí)鐘的分鐘狀態(tài)一路定時(shí)開啟的小時(shí)狀態(tài)一路定時(shí)開啟的分鐘狀態(tài)一路定時(shí)關(guān)閉的小時(shí)狀態(tài)一路定時(shí)關(guān)閉的分鐘狀態(tài)二路定時(shí)開啟的小時(shí)狀態(tài)二路定時(shí)開啟的分鐘狀態(tài)二路定時(shí)關(guān)閉的小時(shí)狀態(tài)二路定時(shí)關(guān)閉的分鐘狀態(tài)三路定時(shí)開啟的小時(shí)狀態(tài)三路定時(shí)開啟的分鐘狀態(tài)state=14state=15三路定時(shí)關(guān)閉的小時(shí)狀態(tài)三路定時(shí)關(guān)閉的

14、分鐘狀態(tài) 此為led顯示子程序流程圖,顯示當(dāng)state這個(gè)狀態(tài)量為不同的值時(shí),表明不同的狀態(tài),而這種狀態(tài)通過不同的的發(fā)光二極管顯示出來。這對(duì)于判斷實(shí)驗(yàn)的正確性提供了不可缺少的幫助。 6.數(shù)碼管顯示子程序流程圖開始判定f的值值f=-2顯示心情顯示秒表時(shí)間f=-1f=0f=1f=2f=3f=4f=5f=6顯示三路關(guān)閉時(shí)間顯示三 路開 啟時(shí)間顯示二路關(guān)閉時(shí)間顯示二路開啟時(shí)間顯示一路關(guān)閉時(shí)間顯示一路開啟時(shí)間顯示時(shí)鐘時(shí)間 此為數(shù)碼管顯示的流程圖,此程序與刷新緩沖區(qū)流程圖相似,都與狀態(tài)量f相關(guān)。不同的的f值顯示不同的狀態(tài)所對(duì)應(yīng)的數(shù)值。u 3.1.3中斷程序流程圖1. t0中斷程序流程圖 此圖為t0中斷程序

15、流程圖,用于計(jì)數(shù)器的計(jì)時(shí),一直執(zhí)行中。當(dāng)60秒到時(shí),分加1,秒單元清零,當(dāng)60分到時(shí),時(shí)家1,分單元清零。24時(shí)到時(shí),時(shí)單元清零。 2. t1中斷程序流程圖 開始設(shè)初值鍵按下?掃描并判斷num的值,選擇相應(yīng)的引線設(shè)鍵值、判斷數(shù)碼管的顯示num+此為t1中斷流程圖,用于鍵值判斷和中斷掃描,它一直保持著掃描按鍵判斷是否有鍵按下,然后讓按鍵處理子程序能準(zhǔn)確的進(jìn)行執(zhí)行。l 3.2 系統(tǒng)程序設(shè)計(jì)u 3.2.1系統(tǒng)主程序void main(void)p1=0x00;ea=1; /cpu允許中斷tmod |=0x01;/定時(shí)器0計(jì)時(shí)50ms in 12m crystal 定時(shí)器t0選擇方式0工作其前七位沒影

16、響,開始是什么還是什么,最后一位變成0=方式0th0=0x3c;tl0=0xb0; /初值 0011 1100 1011 0000 65535-15536=49999 50mset0=1; tr0=1; /開啟t0tmod |=0x10; /定時(shí)器1用于動(dòng)態(tài)掃描 t1th1=0xfa; /初值65535-64240=1295 0.13mstl1=0xf0;et1=1; tr1=1; /開啟t1 while(1) refreshtab();led_display();if(!l1|!l0) compare();delay(200);key_process(); /只要有鍵按下,就 比較時(shí)間,延時(shí)

17、后進(jìn)行按鍵處理。 u 3.2.2定時(shí)中斷子程序/* 定時(shí)器0用于數(shù)字鐘的計(jì)時(shí) */ void timer0(void) interrupt 1 th0=0x3c; tl0=0xb0; count+;/重新賦值50ms溢出if(count=10) led1=led1; /led1半秒亮 if (count=20) count=0;second+; /秒加1 20*50=1s if(second=60) second=0;minute+; /分加1if(minute=60) minute=0;hour+; /時(shí)加1 if(hour=24) hour=0; /小時(shí)到24時(shí),清零 /* 定時(shí)器1中斷掃

18、描顯示+鍵值判斷 */void timer1(void) interrupt 3th1=0xfa; tl1=0xf0; 定時(shí)2ms顯示下一個(gè)數(shù)碼管switch(num)case 0: p2=0x0f; if(!l1)keyno=1; if(!l0)keyno=10; seg_display();break; /當(dāng)num為0時(shí),選擇y0,當(dāng)按下l1時(shí),鍵值時(shí)1;當(dāng)按下l0時(shí),鍵值是10,顯示 case 1: p2=0x1f; if(!l1)keyno=4;if(!l0)keyno=7; seg_display();break;/當(dāng)num為0時(shí),選擇y1,當(dāng)按下l1時(shí),鍵值時(shí)4;當(dāng)按下l0時(shí),鍵值

19、是7,顯示case 2: p2=0x2f;if(!l1)keyno=3;if(!l0)keyno=12;seg_display();break;/當(dāng)num為0時(shí),選擇y2,當(dāng)按下l1時(shí),鍵值時(shí)3;當(dāng)按下l0時(shí),鍵值是12,顯示case 3: p2=0x3f;if(!l1)keyno=5;if(!l0)keyno=8;seg_display();break;/當(dāng)num為0時(shí),選擇y3,當(dāng)按下l1時(shí),鍵值時(shí)5;當(dāng)按下l0時(shí),鍵值是8,顯示case 4: p2=0x4f;if(!l1)keyno=2;if(!l0)keyno=11;seg_display();break;/當(dāng)num為0時(shí),選擇y4,

20、當(dāng)按下l1時(shí),鍵值時(shí)2;當(dāng)按下l0時(shí),鍵值是11,顯示case 5: p2=0x5f;if(!l1)keyno=6;if(!l0)keyno=9;seg_display();break;/當(dāng)num為0時(shí),選擇y5,當(dāng)按下l1時(shí),鍵值時(shí)6;當(dāng)按下l0時(shí),鍵值是9,顯示default: break;num+; if(num=6)num=0;/當(dāng)num為6時(shí)清零u 3.2.3時(shí)間比較子程序void compare(void) if(sg0=sg4&sg1=sg5&sg2=sg6&sg3=sg7&flog=1) led7=1; /當(dāng)數(shù)字鐘時(shí)間與一路定時(shí)的開啟時(shí)間相同時(shí),led7亮 if(sg0=sg8

21、&sg1=sg9&sg2=sg10&sg3=sg11&flog=1) led7=0;/當(dāng)數(shù)字鐘時(shí)間與一路定時(shí)的關(guān)閉時(shí)間相同時(shí),led7滅 if(sg0=sg12&sg1=sg13&sg2=sg14&sg3=sg15&flog=1) led7=1;/當(dāng)數(shù)字鐘時(shí)間與二路定時(shí)的開啟時(shí)間相同時(shí),led7亮 if(sg0=sg16&sg1=sg17&sg2=sg18&sg3=sg19&flog=1) led7=0;/當(dāng)數(shù)字鐘時(shí)間與二路定時(shí)的關(guān)閉時(shí)間相同時(shí),led7滅 if(sg0=sg20&sg1=sg21&sg2=sg22&sg3=sg23&flog=1) led7=1;/當(dāng)數(shù)字鐘時(shí)間與三路定時(shí)的開啟

22、時(shí)間相同時(shí),led7亮 if(sg0=sg24&sg1=sg25&sg2=sg26&sg3=sg27&flog=1) led7=0;/當(dāng)數(shù)字鐘時(shí)間與三路定時(shí)的關(guān)閉時(shí)間相同時(shí),led7滅u 3.2.4延時(shí)子程序void delay( uint x) /自定義延時(shí)約0.1ms ,大約為120*x uint t;while(-x)for(t=0;t120;t+) ; u 3.2.5刷新緩沖區(qū)子程序void refreshtab(void) if(f=-2) xq0=tabkx0; xq1=tabkx1; xq2=tabkx2; xq3=tabkx3;/當(dāng)f=-2時(shí),數(shù)碼管刷新顯示今天心情 if(f=

23、-1) mb0=tabsecond/10; mb1=tabsecond%10; /當(dāng)f=-1時(shí),數(shù)碼管刷新顯示倒計(jì)時(shí)的秒表 if(f=0) timetab0=tabsg0;timetab1=tabsg1;timetab2=tabsg2; timetab3=tabsg3;/當(dāng)f=0時(shí),數(shù)碼管刷新顯示數(shù)字鐘時(shí)間if(f=1)stab0=tabsg4; stab1=tabsg5;stab2=tabsg6;stab3=tabsg7;/當(dāng)f=1時(shí),數(shù)碼管刷新顯示一路定時(shí)開啟時(shí)間if(f=2) ftab0=tabsg8; ftab1=tabsg9;ftab2=tabsg10;ftab3=tabsg11;/

24、當(dāng)f=2時(shí),數(shù)碼管刷新顯示一路定時(shí)關(guān)閉時(shí)間if(f=3)stab10=tabsg12;stab11=tabsg13;stab12=tabsg14;stab13=tabsg15;/當(dāng)f=3時(shí),數(shù)碼管刷新顯示二路定時(shí)開啟時(shí)間if(f=4) ftab10=tabsg16; ftab11=tabsg17; ftab12=tabsg18;ftab13=tabsg19;/當(dāng)f=4時(shí),數(shù)碼管刷新顯示二路定時(shí)關(guān)閉時(shí)間if(f=5) stab20=tabsg20; stab21=tabsg21; stab22=tabsg22;stab23=tabsg23;/當(dāng)f=5時(shí),數(shù)碼管刷新顯示三路定時(shí)開啟時(shí)間if(f=6

25、) ftab20=tabsg24; ftab21=tabsg25; ftab22=tabsg26;ftab23=tabsg27;/當(dāng)f=6時(shí),數(shù)碼管刷新顯示三路定時(shí)關(guān)閉時(shí)間u 3.2.6按鍵處理子程序void key_process(void)/根據(jù)不同狀態(tài)量state的值,在不同的狀態(tài)按不同的鍵實(shí)現(xiàn)不同的功能,能夠按鍵輸值 時(shí)刻別忘時(shí)間顯示的范圍 switch(state) case 0:if(keyno=11)kx0=5;kx1=10;kx2=11;kx3=15;h=0; if(keyno=12)kx0=12;kx1=1;kx2=13;kx3=14;h=1; /心情狀態(tài) if(keyno=

26、10)state=2;f=0; break;case 2: if(keyno2|(sg0=2&sg14)sg0=sg1=0; if(sg25)sg2=sg3=0;if(n3)n=4; /用可以改變按鍵計(jì)數(shù)器初值 if(keyno=11)sg1=sg1+1;if(sg0=2&sg1=4)sg0=sg1=0;/加1鍵 if(keyno=12)sg1=sg1-1;if(sg0!=0&sg1=-1)sg0=sg0-1;sg1=9; if(sg0=0&sg1=-1)sg0=2;sg1=3;/減1鍵,時(shí)間設(shè)定范圍 if(keyno=10)state=3; break;/case3:if(keyno=11)

27、sg3=sg3+1;if(sg39)sg2=sg2+1;sg3=0;if(sg2=6) sg2=sg30; /加1鍵 if(keyno=12)sg3=sg3-1;if(sg2!=0&sg3=-1)sg2=sg2-1;sg3=9; if(sg2=0&sg3=-1)sg2=5;sg3=9; /減1鍵 if(keyno=10)state=4;f=1;break;case 4: if(keyno4)sg4=sg5=0; if(sg65)sg6=sg7=0;if(n7)n=8; if(keyno=11)sg5=sg5+1;if(sg5=6)sg4=sg5=0; if(keyno=12)sg5=sg5-1

28、;if(sg4!=0&sg5=-1)sg4=sg4-1;sg5=9; if(sg4=0&sg5=-1)sg4=2;sg5=3; if(keyno=10)state=5;flog=0; break; case5:if(keyno=11)sg7=sg7+1;if(sg79)sg6=sg6+1;sg7=0;if(sg6=6) sg6=sg7=0; if(keyno=12)sg7=sg7-1;if(sg6!=0&sg7=-1)sg6=sg6-1;sg7=9;if(sg6=0&sg7=-1)sg6=5;sg7=9; if(keyno=10)flog=1;state=6;f=2; break; /case

29、 6: if(keyno=10)state=7; if(keyno4)sg8=sg9=0; if(sg105)sg10=sg11=0;if(n11)n=12; if(keyno=11)sg9=sg9+1;if(sg5=6)sg8=sg9=0; if(keyno=12)sg9=sg9-1;if(sg8!=0&sg9=-1)sg8=sg8-1;sg9=9; if(sg8=0&sg8=-1)sg8=2;sg9=3; flog=0; break;case7:if(keyno=11)sg11=sg11+1;if(sg119)sg10=sg10+1;sg11=0;if(sg10=6) sg10=sg11=

30、0; if(keyno=12)sg11=sg11-1; if(sg10!=0&sg11=-1)sg10=sg10-1;sg11=9;if(sg10=0&sg11=-1)sg10=5;sg11=9; if(keyno=10)flog=1;state=8;f=3; break;case 8: if(keyno2|(sg12=2&sg134)sg12=sg13=0; if(sg145)sg14=sg15=0;if(n15)n=16; /用可以改變按鍵計(jì)數(shù)器初if(keyno=11)sg13=sg13+1;if(sg12=2&sg13=4)sg12=sg13=0; if(keyno=12)sg13=s

31、g13-1;if(sg12!=0&sg13=-1)sg12=sg12-1;sg13=9; if(sg12=0&sg12=-1)sg12=2;sg13=3; if(keyno=10)state=9;flog=0; break;/case9: if(keyno=11)sg15=sg15+1;if(sg159)sg14=sg14+1;sg15=0;if(sg14=6)sg14=sg15=0; if(keyno=12)sg15=sg15-1; if(sg14!=0&sg15=-1)sg14=sg14-1;sg15=9; if(sg14=0&sg15=-1)sg14=5;sg15=9; if(keyno

32、=10)flog=1;state=10;f=4;break;case 10: if(keyno2|(sg16=2&sg174)sg16=sg17=0; if(sg185)sg18=sg19=0;if(n19)n=20; /用可以改變按鍵計(jì)數(shù) if(keyno=11)sg17=sg17+1;if(sg16=2&sg17=4)sg16=sg17=0; .if(keyno=12) sg17=sg17-1;if(sg16!=0&sg17=-1)sg16=sg16-1;sg17=9; if(sg16=0&sg17=-1)sg16=2;sg17=3; if(keyno=10)state=11;flog=0

33、; break;/ case11:if(keyno=11)sg19=sg19+1;if(sg199)sg18=sg18+1;sg19=0;if(sg18=6)sg18=sg19=0; if(keyno=12)sg19=sg19-1;if(sg18!=0&sg18=-1)sg18=sg18-1;sg19=9;if(sg18=0&sg19=-1)sg18=5;sg19=9; if(keyno=10)flog=1;state=12;f=5; break;case 12:if(keyno2|(sg10=2&sg214)sg20=sg21=0; if(sg225)sg22=sg23=0;if(n23)n

34、=24; if(keyno=11)sg21=sg21+1;if(sg20=2&sg21=4)sg20=sg21=0; if(keyno=12)sg21=sg21-1;if(sg20!=0&sg21=-1)sg20=sg20-1;sg21=9; if(sg20=0&sg21=-1)sg20=2;sg21=3; if(keyno=10)state=13; flog=0; break;/case13:if(keyno=11)sg23=sg23+1;if(sg239)sg22=sg22+1;sg23=0;if(sg22=6)sg22=sg23=0; if(keyno=12)sg23=sg23-1;if

35、(sg22=0&sg23=-1)sg22=5;sg23=9;if(sg23!=0&sg24=-1)sg23=sg23-1;sg24=9; if(keyno=10)flog=1;state=14;f=6; break;case 14: if(keyno4)sg24=sg25=0; if(sg265)sg26=sg27=0;if(n27)n=0; if(keyno=11)sg25=sg25+1;if(sg25=6)sg24=sg25=0; if(keyno=12)sg25=sg25-1;if(sg24!=0&sg25=-1)sg24=sg24-1;sg25=9; if(sg24=0&sg25=-1

36、)sg24=2;sg25=3;if(keyno=10)state=15; flog=0; break;case15:if(keyno=11)sg27=sg27+1;if(sg279)sg27=sg27+1;sg28=0;if(sg26=6) sg26=sg27=0;if(keyno=12)sg27=sg27-1;if(sg26=0&sg27=-1)sg26=5;sg27=9;if(sg26!=0&sg27=-1)sg26=sg26-1;sg27=9; if(keyno=10)flog=1;state=2;f=0; break; / default: break; u 3.2.7數(shù)碼管顯示子程序

37、void seg_display(void) /根據(jù)不同的f值,數(shù)碼管來顯示不同是時(shí)間 if(f=-2) p0=xqnum;if(f=-1) p0=mbnum;if(f=0) p0=timetabnum; /分別顯示的是心情、秒表、數(shù)字鐘if(f=1) p0=stabnum; if(f=2) p0=ftabnum; if(f=3) p0=stab1num;/分別顯示的是一路定時(shí)開啟、關(guān)閉,二路定時(shí)開啟時(shí)間if(f=4) p0=ftab1num;if(f=5) p0=stab2num;if(f=6) p0=ftab2num;/分別顯示的是二路關(guān)閉,三路開啟、關(guān)閉時(shí)間u 3.2.8 led顯示子程

38、序void led_display(void) switch(state) case 0:if(h=0)led3=0;led6=0;led7=0;/心情不好時(shí),燈全滅 if(h=1) led2=1;led3=1;led4=1;led5=1;led6=1;led7=1; break; /心情好時(shí)燈全部亮case 2:led2=1;led3=0;led4=0;led5=0;led6=0;led7=0;break;/數(shù)字鐘的時(shí)鐘狀態(tài)case 3:led2=0;led3=1;break; case 4:led2=1;led3=0;led4=1;break; /數(shù)字鐘的分鐘狀態(tài)、一路定時(shí)開啟的的時(shí)鐘狀態(tài)

39、case 5:led2=0;led3=1;break; case 6:led2=1;led3=0;break; /一路定時(shí)開啟的的分鐘狀態(tài)、一路定時(shí)關(guān)閉的時(shí)鐘狀態(tài) case 7:led2=0;led3=1;break; case 8:led2=1;led3=0;led4=0;led5=1;break; /二路路定時(shí)關(guān)閉的的分鐘狀態(tài)、二路定時(shí)開啟的時(shí)鐘狀態(tài)case 9:led2=0;led3=1;break; case 10:led2=1;led3=0;led4=0;break; /二路定時(shí)開啟的的分鐘狀態(tài)、二路定時(shí)關(guān)閉的時(shí)鐘狀態(tài)case 11:led2=0;led3=1;break; case

40、 12:led2=1;led3=0;led5=0;led6=1;break; /二路定時(shí)關(guān)閉的的分鐘狀態(tài)、三路路定時(shí)開啟的時(shí)鐘狀態(tài)case 13:led2=0;led3=1;break; case 14:led2=1;led3=0;led5=0;break; /三路定時(shí)開啟的的分鐘狀態(tài)、三路定時(shí)關(guān)閉的時(shí)鐘狀態(tài)case 15:led2=0;led3=1;break; default: break; /三路定時(shí)關(guān)閉的的分鐘狀態(tài)第四章 實(shí)驗(yàn)結(jié)果和分析l 4.1實(shí)驗(yàn)使用的儀器設(shè)備與元件u 4.1.1實(shí)驗(yàn)使用的儀器設(shè)備 焊烙鐵、能夠給單片機(jī)燒入程序的電腦、電源u 4.1.2實(shí)驗(yàn)使用的元件如圖所示l 4.

41、2測(cè)試結(jié)果分析這次實(shí)驗(yàn)中,在自己沒編寫程序前,用同學(xué)給的基本程序,輸入+5v后,檢查電路板的焊接問題和數(shù)碼管的好壞,接好后發(fā)現(xiàn)電路板是好的,首先顯示秒表的發(fā)光二極管能夠一直閃亮;其次就是顯示電路通電標(biāo)志是二極管也能夠正常發(fā)亮;再就是數(shù)碼管能夠完整的顯示,調(diào)加減鍵時(shí),所有的數(shù)碼管都能夠顯示正確的數(shù)據(jù),這說明數(shù)碼管是好的,焊接也問題。然后寫完程序后,燒入自己的程序,再連接電路,所以的效果都與仿真中的效果相同,能夠顯示我所需的狀態(tài)。但是,就是當(dāng)用銀色發(fā)光二極管時(shí),由于亮度太強(qiáng),自己將其更改為另一種顏色,雖然這是一件比較簡(jiǎn)單的事,但這說明在焊電路板時(shí),應(yīng)該注意元件的選擇并且明白元件的屬性來減少調(diào)試中出

42、現(xiàn)的問題。結(jié)束語對(duì)于本次課題-家用定時(shí)器的設(shè)計(jì)已經(jīng)完成了,達(dá)到了自己預(yù)想中的效果了。定時(shí)器的選擇上選擇了4個(gè)數(shù)碼管顯示當(dāng)前狀態(tài)時(shí)間,led顯示目前狀態(tài),通過34的陣列式鍵盤來設(shè)定時(shí)間,數(shù)字鐘、三路定時(shí)初始實(shí)現(xiàn)顯示為0000,然后通過鍵盤來輸入數(shù)字鐘和定時(shí)器的時(shí)間,當(dāng)設(shè)定好時(shí)間后,當(dāng)定時(shí)器的時(shí)間與數(shù)字鐘時(shí)間第一次一樣時(shí),表明一路定時(shí)開始了,此時(shí)led7變亮,當(dāng)定時(shí)器時(shí)間再次與數(shù)字鐘時(shí)間一樣時(shí),表明一路定時(shí)結(jié)束,同時(shí)led7燈滅。led7表示是否處于定時(shí)狀態(tài)。二路、三路與此類似。當(dāng)定時(shí)器開啟時(shí),繼電器常開變成常閉,成導(dǎo)通狀態(tài),動(dòng)態(tài)數(shù)碼管顯示help you,定時(shí)器達(dá)到了定時(shí)效果,能夠控制電風(fēng)扇,臺(tái)燈等等家用電器,具有一定的實(shí)用功能。但是,在本設(shè)計(jì)自己也在軟件程序上走了一點(diǎn)路,剛開始編寫程序時(shí),沒有頭緒,在同學(xué)幫忙講解之后,自己編寫了一路程序,數(shù)字鐘,定時(shí)時(shí)間都是靠加減鍵來調(diào)的,這樣覺得太過麻煩,并且在使用中如果一直用某幾個(gè)鍵,會(huì)導(dǎo)致按鍵不靈的情況,因此想用其他九個(gè)鍵來實(shí)現(xiàn)鍵值的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論