




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 單片機控制系統(tǒng)設(shè)計與調(diào)試實訓(xùn)指導(dǎo)說明書 單片機倒計時秒表系 、 部: 機電工程學(xué)院 學(xué)生姓名: 指導(dǎo)教師: 職稱 專 業(yè): 班 級: 完成時間: 摘 要本文通過倒計時秒表的設(shè)計,闡述了單片機最小系統(tǒng)的概念與設(shè)計,對單片機的定時、中斷等功能模塊的應(yīng)用有進(jìn)一步的理解;本文還闡述了單片機編程的一些方法。關(guān)鍵字:單片機、電子秒表、定時、中斷目錄一、 設(shè)計課題1.1課程設(shè)計題目41.2課程設(shè)計任務(wù)41.2課程涉及研究內(nèi)容4二、 硬件分析設(shè)計42.1單片機的選擇42.2 led顯示器5 2.2.1 led顯示器結(jié)構(gòu)及分類52.2.2 led顯示原理5 2.3鍵盤輸入6三、 關(guān)鍵技術(shù)63.1定時器的使用6
2、3.1.1 作用63.1.2技術(shù)方案63.1.3具體程序?qū)崿F(xiàn)73.2 顯示與鍵盤8 3.2.1顯示8 3.2.2鍵盤93.2.3利用定時中斷實現(xiàn)顯示與查鍵11四、 電路134.1復(fù)位電路144.2電路元件144.3 i/o口線連接15五、 程序設(shè)計165.1程序功能165.2主要變量說明165.3程序流程圖165.4程序源代碼16六、 設(shè)計總結(jié)26七、 參考文獻(xiàn)26一、 設(shè)計課題1.1課程設(shè)計題目 本課程設(shè)計的課題是單片機倒計時秒表的設(shè)計1.2課程設(shè)計任務(wù)本課題的電子秒表系統(tǒng)需要實現(xiàn)以下的功能:1.用開關(guān)控制兩種計時模式的選擇。分別是單計時模式和連續(xù)計8個的計時模式。2.用開關(guān)控制電子秒表的啟
3、動/停止/復(fù)位,七段數(shù)碼管的高2位顯示秒表的秒值,低2位顯示秒表的百分秒值。3.可實現(xiàn)設(shè)定初值的倒計時功能。其中設(shè)計了三種初值調(diào)整方式,分別是增1(減1)、連續(xù)增(連續(xù)減)和快速增(快速減)。上述功能主要是為了講述單片機定時器、鍵盤和led顯示器的使用方法。1.3課題涉及研究內(nèi)容:1.定時器的使用:本實例通過秒表的計時詳細(xì)說明了定時器的使用方法,可以使讀者對單片機定時器的使用有比較深刻的理解。2.鍵盤的使用:本實例通過秒表的啟動/停止/復(fù)位、計時模式的選擇,以及倒計時初值的設(shè)定,講述了獨立式鍵盤的設(shè)計方法和關(guān)鍵技術(shù)。3.led的使用:本實例比較詳細(xì)地介紹了led的顯示原理和方法,并對其編程方法
4、做了一般性的總結(jié)。二、硬件分析設(shè)計一個完整的電子秒表電路就是一個單片機的最小系統(tǒng),該系統(tǒng)由鍵盤輸入電路、單片機、晶振和復(fù)位電路和led顯示電路四個方面構(gòu)成。下面從單片機的選型,led顯示器的選擇以及按鍵功能的設(shè)計這幾個方面來對該系統(tǒng)進(jìn)行進(jìn)一步的分析。2.1 單片機的選擇 對于本實例,由于電子秒表系統(tǒng)在數(shù)據(jù)處理和存儲方面要求不高,所以選取片內(nèi)帶ram和rom的單片機即可,而并不需要在片外擴展ram和rom。在本實例中,選取的是atmel公司的at89s52單片機。at89s52單片機是atmel公司新近推出的高檔型at89s系列單片機中的增強型產(chǎn)品。at89s52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)fl
5、ash,256字節(jié)ram, 32 位i/o 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時鐘電路。另外,at89s52 可降至0hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,cpu 停止工作,允許ram、定時器/計數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,ram內(nèi)容被保存,振蕩器被凍結(jié), 單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。8 位微控制器 8k 字節(jié)在系統(tǒng)可編程 flash at89s52。2.2 led顯示器2.2.1 led顯示器的結(jié)構(gòu)及分類。發(fā)光二極管芯片的適當(dāng)連接的光學(xué)結(jié)構(gòu),可構(gòu)成發(fā)
6、光顯示器的發(fā)光段和發(fā)光點,由這些發(fā)光段或發(fā)光點可以組成數(shù)碼管、符號管、米字管、矩陣管等。通常把數(shù)碼管、符號管、米字管共稱為筆畫顯示器;而把筆畫顯示器和矩陣管統(tǒng)稱為字符顯示器。 數(shù)碼管可以按字高、顏色、結(jié)構(gòu)、各發(fā)光段的連接方式等進(jìn)行分類。 按照各發(fā)光段的連接方式,數(shù)碼管可分為共陽極和共陰極兩種。 所謂的共陽方式就是筆畫顯示器各段發(fā)光管的陽極是公共的,而陰極是互相隔離的。 所謂的共陰方式就是筆畫顯示器各段發(fā)光管的陰極是公共的,而陽極是互相隔離的。2.2.2 led顯示的原理。如圖2-1所示為七段led數(shù)碼管的原理圖,通過該圖可以很容易看出共陽極和共陰極的七段led的工作原理的不同點。對于共陰極的數(shù)
7、碼管,所有發(fā)光二極管的陰極共連后接地,而陽極引出腳用于控制led是否點亮。若陽極引出腳接地,則led被熄滅;若陽極引出腳接高電平,則led被點亮。圖2-1 led數(shù)碼管原理圖共陽極的led正好相反,所有發(fā)光二極管的陽極共連后接高電平,而陽極引出腳用于控制led是否點亮。若陰極引出腳接高電平,則led被熄滅;若陰極引出腳接地,則led被點亮。 因此共陽極和共陰極所需要的字型碼正好相反。 單片機對led管的顯示可以分為靜態(tài)和動態(tài)兩種。靜態(tài)顯示的特點是各led管能同時穩(wěn)定地顯示出各自字符;動態(tài)顯示是指各led輪流一遍一遍顯示各自字符,但由于顯示的切換較快,在人的視覺看來是各led管同時顯示不同字符。
8、 靜態(tài)顯示和動態(tài)顯示各有利弊:靜態(tài)顯示較穩(wěn)定,占用cpu的時間少,但是每個顯示單元都需要單獨的顯示驅(qū)動電路,使用的電路硬件較多;動態(tài)顯示雖然有閃爍感,戰(zhàn)勝cpu時間多,但是使用的硬件少,能節(jié)省線路板的空間。相對而言,動態(tài)顯示在單片機中的應(yīng)用更加廣泛。2.3鍵盤輸入 外部指令對單片機的輸入一般是通過按鍵、鍵盤等輸入器來實現(xiàn)的,而鍵盤的設(shè)計以及編程方法在本例中將會重點介紹。在本例中,是利用鍵盤來實現(xiàn)秒表的啟??刂萍肮δ艿倪x擇:1.按鍵k1。按鍵k1有兩個功能,第一個是在單計時狀態(tài)下控制秒表的啟停;第二個是在倒計時初值設(shè)定的時候用于增加初值。2.按鍵k2。按鍵k2同樣有兩個功能,第一個是在連續(xù)計8個
9、的計時模式下控制秒表的啟停;第二個是在倒計時初值設(shè)定的時候用于減少初值。3.按鍵k3。按鍵k3的功能是設(shè)定秒表的工作方式。在默認(rèn)狀態(tài)下,秒表始終處于準(zhǔn)備計時的狀態(tài),按下k3后秒表進(jìn)入倒計時的狀態(tài),這時通過按鍵k1和k2可以進(jìn)行倒計時初值的調(diào)整,再按下k3則進(jìn)入倒計時。4.按鍵reset.起程序復(fù)位作用。三、關(guān)鍵技術(shù) 單片機電子秒表設(shè)計需要解決三個主要問題:一是有關(guān)單片機定時器的使用;二是如何實現(xiàn)led的動態(tài)掃描顯示;三是編寫倒計時秒表程序。編程可用匯編,也可使用c語言。3.1 定時器的使用3.1.1 作用電子秒表的計數(shù)頻率取決于單片機的定時器,而定時器的使用也是單片機應(yīng)用中的一個關(guān)鍵的技術(shù)。在
10、本例中,秒表的計時和倒計時的實現(xiàn)以及鍵盤的延時消抖都是由單片機中的定時器來實現(xiàn)的。3.1.2 技術(shù)方案 單片機中定時器的使用是一項重要的內(nèi)容,也是一項基本的內(nèi)容。關(guān)于定時器/計數(shù)器的基本結(jié)構(gòu)與操作方式,在此不再贅述。此次設(shè)計重點主要是想通過電子秒表這一實例來說明單片機中定時器的使用。 為了實現(xiàn)秒表的計時,需要利用單片機實現(xiàn)百分之一秒(10ms)的中斷,在中斷程序中實現(xiàn)數(shù)字的變化,并動態(tài)顯示出來。該程序的流程圖如圖3-1圖3-1 流程圖3.1.3具體程序?qū)崿F(xiàn)1.定義/定義共陽極字符編碼表uchar code table10=0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0
11、xf8,0x80,0x98;uint m; /計數(shù)值uint led0,led1,led2,led3;/各位的數(shù)值uchar ms; /用于表示數(shù)碼管顯示位及計算是否10ms到設(shè)定定時器t0的工作方式tmod=0x01; /t0方式1計時1mstl0=0x18;th0=0xfc; ea=1; /開中斷,啟動定時器et0=1;tr0=1;2.動態(tài)顯示字符的子程序void display(void) switch(ms%4) case 0; p3=0xfe; /點亮百分一秒位的led數(shù)碼管 p1=tableled3; /輸出百分一秒位數(shù)值 p1_7=1; break; case 1; p3=0xf
12、d; p1=tableled2; /點亮十分之一秒位的led數(shù)碼管 p1_7=1; /輸出十分之一秒位數(shù)值 break; case 2; p3=0xfb; /點亮秒位的led數(shù)碼管 p1=tableled1; /輸出秒位數(shù)值 p1_7=0; /點亮小數(shù)點位 break; case 3; p3=0xf7; /點亮十秒位的led數(shù)碼管 p1=tableled0; /輸出十秒位數(shù)值 p1_7=1; break; default:return; 3.計算各位顯示字符的子程序void add1(time) uint time; uint n,a; a =time/1000; led0=a; /計算十秒位
13、數(shù)值 n=time%1000; led1=(n/100); /計算秒位數(shù)值 n=n%100; led2=(n/10); /計算十分一秒位數(shù)值 led3=n%10; /計算百分一秒位數(shù)值3.2 顯示與鍵盤3.2.1 顯示 顯示與鍵盤是單片機應(yīng)用中的兩個非常重要的方面。對于本例,顯示采用的是動態(tài)掃描的方法。動態(tài)掃描的方法其實很簡單,就是輪流點亮各數(shù)碼管,同時把各數(shù)碼管所需要的字符送到對應(yīng)的i/o口;而中間需要有一定的延時,原因是單片機每一條指令執(zhí)行的時間很短,如果切換得太快的話,發(fā)光二極管都來不及反應(yīng),在編程上可以加上一個延時子程序來解決。具體的程序如下: uchar delay; for(;)
14、display(); /調(diào)用顯示子程序 for(delay=0;delay=200;delay+); /延時程序 ms+; /點亮下一個數(shù)碼管 這是一個很簡單的動態(tài)顯示程序,完全按照動態(tài)顯示的規(guī)則來編寫的,一般單片機的顯示都采用類似的編程方法。 但是這個程序有一個很大的問題,就是延時程序的出現(xiàn)。延時程序?qū)嶋H上就是使單片機不斷地時行遞減或遞加計數(shù),而在這一段時間內(nèi)單片機是不能做其他任何事情的。這顯然不符合我們實際應(yīng)用的要求,因為在實際的應(yīng)用中單片機除了顯示外還有很多其他的事情是要處理的。實際應(yīng)用時這個顯示程序要進(jìn)行改寫,改寫方法和程序?qū)⒃诤竺嫣岬健?.2.2 鍵盤 單片機系統(tǒng)中為了實現(xiàn)對系統(tǒng)的控
15、制和數(shù)據(jù)的輸入,應(yīng)用系統(tǒng)設(shè)置了鍵盤等輸入設(shè)備,包括單片機復(fù)位作用的復(fù)位鍵,功能轉(zhuǎn)換鍵及數(shù)字輸入鍵等。在這些按鍵里面,除了復(fù)位鍵是專門的復(fù)位電路和復(fù)位功能外,其他的按鍵都是以開關(guān)狀態(tài)來實現(xiàn)功能的。關(guān)于單片機的復(fù)位電路及復(fù)位鍵會在后面的復(fù)位電路分析中提到,這里只是對其他的按鍵的工作原理作講解。 1)鍵盤的工作原理 鍵盤的最根本的功能就是當(dāng)該按鍵按下后,單片機應(yīng)用系統(tǒng)能夠完成該按鍵所設(shè)定的功能。對于一組鍵盤,必定會通過一個接口電路與單片機相連。cpu要檢測是否有鍵盤信息輸入而且要判斷是哪一個鍵被按下,然后根據(jù)鍵值來進(jìn)行相應(yīng)的工作。 2)鍵盤編程的關(guān)鍵技術(shù) 目前,無論是按鍵還是鍵盤,大部分都是利用機械
16、觸點的合、斷作用。機觸點由于彈性作用的影響,在閉合斷開的瞬間均有抖動現(xiàn)象,從而會引起電壓信號的抖動,抖動時間與按鍵的機械特性有關(guān),一般為5-10毫秒。為了確保正確的鍵輸入,必須進(jìn)行消除抖動處理。 常用的按鍵消抖方法有硬件消抖和軟件消抖兩種。 硬件消抖主要可以通過雙穩(wěn)態(tài)電路和濾波電路等消抖電路對按鍵進(jìn)行消抖處理。常用的消抖電路如圖3-2所示圖3-2 軟件消抖電路 通過消抖電路可以實現(xiàn)按鍵的消抖,但是增加了電路的元器件數(shù)目,也增加了硬件的成本。如果按鍵較多,則硬件的開銷將會很大,因此常用的方法是進(jìn)行軟件消抖。 軟件消抖其實也很簡單,就是要查詢該按鍵兩次。第一次查詢到該按鍵按下時,執(zhí)行一段10ms的
17、延時程序,然后再一次查詢該按鍵,如果該按鍵的狀態(tài)仍然為閉合電平狀態(tài),則確認(rèn)鍵真正有按下;若第二次查詢按鍵不是閉合電平狀態(tài),則視為干擾。同理,第一次查詢到該鍵松開時,執(zhí)行一段10ms的延時程序,然后再一次查詢該按鍵,如果該按鍵的狀態(tài)仍然為斷開電平狀態(tài),則確認(rèn)鍵真正有松開;若第二次查詢按鍵不是斷開的電平狀態(tài),則視為干擾。通常情況下一次松開視為一次按鍵動作。軟件消抖的流程圖如圖3-3所示 圖3-3 軟件消抖流程圖查鍵子程序: bit start=0; /start為p1_2按下標(biāo)志位 void scan(void) p2=0xff; /每次讀i/o口輸入數(shù)據(jù)時需先拉高電平 if(p2_1=0) fo
18、r(delay=0;delay=200;delay+); /延時程序 p2=0xff; if(p2_1=0)start=1; /標(biāo)志位置1,確認(rèn)p2_1按下 上面所示的是一般的查鍵程序。但是這個程序同樣有個問題,因為每一次按鍵都有一個延時的子程序,這就造成了這種按鍵查詢方式只能在cpu空閑的時候執(zhí)行,從而造成cpu資源的浪費,而且當(dāng)遇到需要復(fù)合鍵的時候編程就相當(dāng)麻煩。所以有必要進(jìn)行修改。3.2.3 利用定時中斷實現(xiàn)顯示與查鍵 前面所說的動態(tài)顯示和鍵盤掃描會產(chǎn)生浪費單片機資源的問題,用定時中斷進(jìn)行顯示與鍵盤掃描則可以避免這種情況,而且在編程上更加合理且可讀性強。 1) 定時掃描鍵盤的工作方式 定
19、時掃描工作方式的本質(zhì)是中斷方式,第10ms進(jìn)入一次鍵盤掃描子程序。定時掃描的流程圖如圖3-4所示 圖3-4 定時掃描流程圖 上圖為其中一個鍵查鍵的流程圖,cheak為該鍵消抖標(biāo)志位。當(dāng)沒有鍵被按下,則cheak置0,并返回。當(dāng)有按鍵被按下時,則檢查消抖標(biāo)志位cheak,如果該標(biāo)志位為0,則說明了還沒有進(jìn)行消抖處理,將cheak置為1同時返回。因為經(jīng)過10ms才再進(jìn)入一次查鍵,所以相當(dāng)于進(jìn)行了10ms的鍵已經(jīng)經(jīng)過消抖處理,這時等待鍵的釋放從而實現(xiàn)該鍵的功能。 定時掃描鍵盤的子程序如下: bit cheak; /cheak為p_2的消抖標(biāo)志位 bit keydown; /keydown為p2_1按
20、下的標(biāo)志位 bit start; /秒表啟動標(biāo)志位 bit stop; /秒表停止標(biāo)志位 void scan(void) p2=0x0f; /讀入前先將電位拉高 if(p2_1=0) if(cheak=0)cheak=1; /若cheak為0,則將cheak置1并返回 else keydown=1; /若cheak為1,則已消抖,按下標(biāo)志置1 cheak=0; /同時將cheak置0 if(p2_1=0) while(keydown=1) /若p2_1和keydown均為1,則釋放該鍵 keydown=0; if(start=0) start=1;stop=0; elsestart=0;sto
21、p=1; 從上面的子程序可以看出每一次按鍵工作都是以按鍵的釋放為最終結(jié)束,程序檢測到按鍵釋放了才開始實現(xiàn)該按鍵的功能。 2)關(guān)于鍵盤中的組合鍵的用法 有一些單片機系統(tǒng)的設(shè)計由于電路設(shè)計上的限制,不允許設(shè)計多的按鍵;或人們的使用習(xí)慣,常常會用到組合鍵,這種組合在一些小型的儀表中的應(yīng)用也是非常多的。所謂的組合鍵就是通過若干個按鍵的組合來實現(xiàn)更名的功能。這樣的話可以減少按鍵的數(shù)目,同時也可以使操作更加方便。 圖3-5是關(guān)于鍵盤組合鍵的程序流程圖。 圖3-5 程序流程圖 由于上面已經(jīng)給出了定時掃描鍵盤的子程序,所以下面只給出組合鍵功能所要增加的程序段。 if(p2_2=0) if(bcheak=0)b
22、cheak=1; /若bcheak為0,則將bcheak置1并返回 else b_keydown=1; /若bcheak為1,則已消抖,按下標(biāo)志置1 bcheak=0; /同時將bcheak置0 if(keydown=1&b_keydown=1) /若兩鍵同時按下,則實現(xiàn)組合鍵功能 combine=1; 上面的程序段,只要添加到void scan()里面就可以實現(xiàn)p2_1和p2_2同時按下的功能鍵了。當(dāng)兩鍵的按下標(biāo)志位都為1時,證明兩鍵已同時按下,這時將復(fù)合鍵標(biāo)志位combine置1.當(dāng)主程序檢測到combine為1,則執(zhí)行復(fù)合鍵程序。 3)利用定時中斷實現(xiàn)顯示 由于顯示并不是單片機最主要的工
23、作,在顯示程序中耗費大量的時間是不合適的,所以顯示也是在中斷中實現(xiàn)才比較合適。下面是具體的中斷子程序: void time0(void)interrupt 1 using 1 tl0=0x18; th0=0xfc; /重裝計時器數(shù)據(jù) ms+; if(ms=10) /到10ms則執(zhí)行一次鍵盤掃描程序 ms=0; scankey=1; display(); /調(diào)用一次顯示程序 從上面的程序段可以看出每1ms單片機中斷一次,在中斷服務(wù)子程序中實現(xiàn)兩個功能:一是看是否到10ms,若到了則將鍵盤掃描標(biāo)志位scankey置1,則中斷返回后主程序中就會調(diào)用鍵盤掃描程序;二是調(diào)用顯示子程序display(),
24、從display()中可以看出每一次調(diào)用就是點亮一個數(shù)碼管,而每次調(diào)用所耗費的時間是非常短的。四、 電路 圖3-6為單片機倒計時秒表的電路圖。從電路圖可以看出電子秒表的電路并不復(fù)雜,下面對其中一些部分略作說明。 圖3-6 倒計時秒表電路圖 4.1 復(fù)位電路 復(fù)位電路在單片機系統(tǒng)中是必不可少的。所謂的復(fù)位就是將單片機重新啟動,這時單片機內(nèi)部的所有寄存器都回到初始狀態(tài)。本例電路是對應(yīng)的復(fù)位電路如圖4-1所示。 圖4-1 復(fù)位電路 對于at89s52單片機來說,它是高電平復(fù)位,也就是說只要將單片機的reset腳接高電平并保持一定的時間就可以實現(xiàn)單片機的復(fù)位。從上面的電路可以看出實現(xiàn)的是上電復(fù)位和按鍵
25、復(fù)位兩個復(fù)位功能。上電的一瞬間,單片機的reset腳接到高電平,同時電容c1開始充電,經(jīng)過一定的時間后電容充電飽和,10k的下拉電阻把reset腳拉回到低電平狀態(tài),實現(xiàn)了單片機的復(fù)位。同樣道理,在單片機工作的時候按下復(fù)位按鈕,單片機的reset腳接到了高電平,電容c1馬上放電完畢;松開該按鈕后電容c1開始充電,經(jīng)過一定時間后電容充電飽和,10k下拉電阻把reset腳拉回到低電平狀態(tài),實現(xiàn)了單片機的復(fù)位。4.2 電路元件 at89s52:單片機,控制led顯示。 led1led4:七段碼led,用于顯示秒表數(shù)據(jù)。 ss9012:由于數(shù)碼管需要較大的電流驅(qū)動,單靠at89s52的i/o口直接驅(qū)動效
26、果不好,需加放大電路。在本例中,所用的數(shù)碼管為共陰極的,所以三極管選用了ss9012.npn型三極管。當(dāng)然,也可以選用共陽極的數(shù)碼管,則三極管應(yīng)選用pnp型的。 按鍵k1:在正常情況下,用于控制單一計時下秒表的啟動、停止。在倒計時設(shè)定的情況下為倒計時初值的增加按鍵,按一下k1,倒計時初值增加1;按住k1不放,倒計時初值連續(xù)增加;加速連接兩下k1然后不放,則倒計時初值快速增加,增加的速度是連續(xù)增加的10倍。 按鍵k2:在正常情況下,用于控制連續(xù)計時8個的計時模式下秒表的啟動/停止。在倒計時初值設(shè)定的情況下為倒計時初值減少按鍵,按一下k2,倒計時初值減少1;按住k2不放,倒計時初值連續(xù)減少;快速按
27、兩下k2然后不放,則倒計時初值快速減少,減少的速度是連續(xù)減少的10倍。 按鍵k3:用于秒表的功能的選擇,在默認(rèn)情況下,為秒表的計時準(zhǔn)備模式;按下k3后秒表進(jìn)入倒計時狀態(tài),這時通過按鍵k1和k2可以進(jìn)行倒計時初值的調(diào)整,再按下k3則進(jìn)入倒計時。 按鍵reset:在復(fù)位電路中,對單片機起復(fù)位作用。 led5:用于顯示單片機的工作狀態(tài),在準(zhǔn)備計時的時候,led5點亮;在計時的時候,led5閃爍;在倒計時初值設(shè)定和倒計時工作的時候,led5熄滅。 led6:用于顯示單片機的工作狀態(tài),在準(zhǔn)備計時和計時工作的時候,led6熄滅;在倒計時初值設(shè)定的時候,led6點亮;在倒計時工作的時候,led6閃爍。4.3
28、 i/o口線連接 p1.0p1.7:與數(shù)碼管的各個位相連,用于傳送數(shù)碼管的位段碼。 p3.0p3.3:與數(shù)碼管led1led4相連,通過單片機的p3.0p3.3可以控制led的顯示。 p2.1:和按鈕k1相連,用于決定單一計時模式下的秒表啟動/停止和倒計時初值的增加。 p2.0:和按鈕k2相連,用于決定連續(xù)計8個的計時模式下秒表啟動/停止和倒計時初值的減少。 p2.2:和按鈕k3相連,用于單片機工作模式的選擇。 p2.6:和led6相連,用于顯示單片機的工作狀態(tài)。 p2.7:和led5相連,用于顯示單片機的工作狀態(tài)。五、 程序設(shè)計 電子秒表的程序設(shè)計主要有三個方面:第一是利用定時器來完成秒表的
29、定時周期;第二是利用定時中斷來實現(xiàn)鍵盤的掃描,從而確定單片機的工作狀態(tài);第三是利用單片機控制led的輸出顯示。5.1程序功能 電子秒表程序主要完全如下功能: (1)兩種計時模式的啟動/停止/復(fù)位功能的秒表。 (2)可設(shè)定初值的倒計時定時器。5.2主要變量的說明 在程序中用到的關(guān)鍵變量如表5-1所示。 表5-1 在程序中用到的關(guān)鍵變量5.3 程序流程圖 主程序完成的工作是檢測各個標(biāo)志位的狀態(tài),以確定單片機的工作情況。鍵盤查詢和數(shù)據(jù)顯示的部分在定時中斷服務(wù)子程序中完成。 由于程序較大,所以將程序的各個功能模塊的流程圖分別列出。 圖5-1 秒表計時功能。 圖5-1 秒表計時功能流程圖 圖10和圖11
30、:倒計時初值的設(shè)定 圖5-2 倒計時初值設(shè)定 圖5-3 倒計時初值設(shè)定圖12: 倒計時的功能圖5-4 倒計時功能流程圖 5.4 程序源代碼 全部的程序包括了頭文件、變量的定義、主程序及各子程序。 1)頭文件和變量定義 (1)包含reg52.h頭文件。 (2)變量定義: 在程序中用到的變量如表1所示。 /頭文件及變量聲名 #include #define uchar unsigned char #define uint unsigned int /定義各管腳 sbit p2_0=p20; sbit p2_1=p21; sbit p2_2=p22; sbit p1_7=p17; sbit p2_6
31、=p26; sbit p2_7=p27; /各變量的聲名 uchar code table10=0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x98;/段位碼 uchar ms,mm; uint m,tab8; uint led0,led1,led2,led3; /各位的數(shù)字 bit add; bit bit_add1; bit bit_sub; bit scankey; bit cheak; bit keydown; bit fast_add; bit double_key; bit k2_keydown; bit fast_sub; bit d
32、ouble_sub; bit sub; bit k3_keyup; bit k3_keydown; bit count_down; bit start; bit stop; bit eight_start; bit eight_stop; 2)主程序 在主程序中需要完成以下的功能:首先調(diào)用初始化函數(shù)對各個變量進(jìn)行初始化,再對定時器的定時初值進(jìn)行設(shè)定,接著根據(jù)各個標(biāo)志位的值來判斷單片機的工作模式及工作狀態(tài)。鍵盤掃描由scan()來完成,各個位的數(shù)值的計算由add1()來完成。 void main(void) begin1(); /調(diào)用初始化函數(shù) tmod=0x01; tl0=0x18; th0=
33、0xfc; ea=1; et0=1; tr0=1; for(;) if(scankey=1) /進(jìn)行鍵盤掃描 scankey=0; scan(); if(double_key=1) /倒計時初值快速增加 p2_6=0; p2.7=1; m=m+10; add11(m); if(fast_add=1) /倒計時初值連續(xù)增加 p2_6=0; p2_7=1; m+; add1(m); bit_add1=0; if(add=1) /倒計時初值增加1 p2_6=0; p2_7=1; add=0; m+; add1(m); if(double_sub=1) /倒計時初值快速減少 p2_6=0; p2_7=
34、1; m=m-10; add1(m); if(fast_sub=1) /倒計時初值連續(xù)減少 p2_6=0; p2_7=1; m-; add1(m); bit_sub=0; if(sub=1) /倒計時初值減少1 p2_6=0; p2_7=1; sub=0; m-; add1(m); if(start=1) /計時開始 if(mm=0)p2_7=!p2_7; p2_6=1; m+; if(m=6000)m=0; add1(m); if(stop=1)start=0; /計時停止 if(count_down=1) /倒計時開始 if(m0)m-; p2_7=1; if(mm=0)p2_6=!p2_
35、6; 3)初始化子程序 初始化子程序通常是在一開始就被調(diào)用,用來初始化各個變量,同時也顯示了單片機上電后的工作狀態(tài)。雖然有些變量在定義的時候已被默認(rèn)初始化了,但是為了自己檢查方便,還是應(yīng)該加上初始化的子程序。 void beginl(void) fast_add=0; bit_add1=0; mm=0; m=0; ms=0; led0=0; led1=0; led2=0; led3=0; add=0; double_key=0; scankey=0; keydown=0; k3_keydown=0; count_down=0; p2_6=1; p2_7=0; 4)定時器中斷子程序 這里的秒表的
36、計時、鍵盤的掃描及數(shù)值顯示等都是利用定時中斷來完成的。定時時間設(shè)為1ms,用于數(shù)值顯示;同時利用累加的方法實現(xiàn)10ms和200ms的定時,用于鍵盤的掃描及控制顯示燈的閃爍。 void time0(void) tl0=0x18; th0=0xfc; ms+; if(ms=10) ms=0; mm+; if(mm=20)mm=0; scankey=1; display(); 5)顯示子程序 顯示程序其實包括了display()和add1(time)兩個子程序。add1(time)是用來計算數(shù)碼管各個位要顯示的數(shù)值的子程序,display()是查段位碼表及進(jìn)行動態(tài)掃描的子程序。 void add1(
37、time) uint time; uint n,a; a=time/1000; led0=a; /計算十秒位數(shù)值 n=time%10000; led1=(n/100); /計算秒位數(shù)值 n=n%100; led2=(n/10); /計算十分一秒位數(shù)值 led3=n%10; /計算百分一秒位數(shù)值 void display(void) switch(ms%4) case 0; p3=0xfe; p1=tableled3; p1_7=1; break; case 1; p3=0xfd; p1=tableled2; p1_7=1; break; case 2; p3=0xfb; p1=tableled1; p1_7=1; break; case 3; p3=0xf7; p1=tableled0; p1_7=1; break; default:return; 6)鍵盤掃描 鍵盤掃描的子程序完成的任務(wù)是每10ms進(jìn)行一次鍵盤的查詢,根據(jù)查詢的結(jié)果對應(yīng)的標(biāo)志位進(jìn)行賦值。因為要實現(xiàn)比較多的功能,所以鍵盤掃描的子程序比較復(fù)雜。 void scan(
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人工心臟瓣膜及體外性能檢測裝置項目合作計劃書
- 語文期末復(fù)習(xí)與興趣培養(yǎng)計劃
- 2025年核能及配套產(chǎn)品項目合作計劃書
- 數(shù)字資源管理系統(tǒng)優(yōu)化-全面剖析
- 四年級數(shù)學(xué)課程教學(xué)目標(biāo)與計劃
- 六年級語文下冊導(dǎo)學(xué)案編寫計劃
- 供應(yīng)鏈協(xié)同管理-全面剖析
- 第2課時二次根式的除法
- 數(shù)據(jù)分析在社科中的應(yīng)用-全面剖析
- 數(shù)字零售策略優(yōu)化-全面剖析
- 年產(chǎn)8.5萬噸鈣基高分子復(fù)合材料項目可行性研究報告模板-立項備案
- 美育(威海職業(yè)學(xué)院)知到智慧樹答案
- rules in the zoo動物園里的規(guī)則作文
- 《森林防火安全教育》主題班會 課件
- 人工喂養(yǎng)課件教學(xué)課件
- 2024年第三屆浙江技能大賽(信息網(wǎng)絡(luò)布線賽項)理論考試題庫(含答案)
- 2024年同等學(xué)力申碩英語考試真題
- 陳傳明《管理學(xué)原理》(第2版)筆記考點課后答案
- 初中勞動教育-家用電器使用與維護(hù)《電風(fēng)扇的日常使用和維修》教學(xué)設(shè)計
- 七年級信息技術(shù)教案下冊(合集6篇)
- 電子商務(wù)概論(第四版)課件 張潤彤 第7-12章 企業(yè)電子商務(wù)的發(fā)展與管理-電子商務(wù)應(yīng)用案例
評論
0/150
提交評論