版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計</p><p> 課程名稱 單片機(jī)原理與應(yīng)用 </p><p> 課題名稱 電子時鐘 </p><p> 專 業(yè) 電氣工程及其自動化 </p><p> 班 級 &
2、lt;/p><p> 學(xué) 號 </p><p> 姓 名 </p><p> 指導(dǎo)教師 </p><p><b> 年 月 日</b></
3、p><p> 課 程 設(shè) 計 任 務(wù) 書</p><p> 課程名稱 單片機(jī)原理與應(yīng)用 </p><p> 課 題 電子時鐘 </p><p> 專業(yè)班級 </p><p> 學(xué)生姓名
4、 </p><p> 學(xué) 號 </p><p> 指導(dǎo)老師 </p><p> 審 批 </p><p> 任務(wù)書下達(dá)日期 年 月 日</p>
5、<p> 任務(wù)完成日期 年 月 日</p><p><b> 目 錄</b></p><p> 第1章 總體設(shè)計方案選擇與說明1</p><p> 1.1 設(shè)計方案1</p><p> 第2章 系統(tǒng)結(jié)構(gòu)框圖與工作原理2</p><p> 2.1系統(tǒng)結(jié)構(gòu)
6、框圖:2</p><p> 2.2系統(tǒng)工作原理2</p><p> 第3章 硬件電路設(shè)計及說明3</p><p> 3.1鍵盤接口電路3</p><p><b> 3.2顯示電路4</b></p><p> 第4章 軟件設(shè)計與說明5</p><p>
7、 4.1 初始化子程序5</p><p> 4.2 延時子函數(shù)5</p><p> 4.3 鍵盤掃描函數(shù)6</p><p> 4.4 按鍵服務(wù)函數(shù)6</p><p> 4.5 數(shù)碼管顯示函數(shù)8</p><p> 4.6 中斷服務(wù)函數(shù)10</p><p> 4.7 主程序流
8、程圖12</p><p> 第5章 調(diào)試結(jié)果與調(diào)試說明13</p><p><b> 設(shè)計總結(jié)14</b></p><p><b> 參考文獻(xiàn)15</b></p><p><b> 附 錄16</b></p><p> 附錄A:設(shè)計電
9、路圖16</p><p> 附錄B:源程序清單17</p><p> 第1章 總體設(shè)計方案選擇與說明</p><p><b> 1.1 設(shè)計方案</b></p><p> 本系統(tǒng)的硬件主要包括單片機(jī)芯片、數(shù)碼管顯示、按鍵開關(guān)電路,它的硬件電路如原理圖,單片機(jī)采用廣泛的AT89C51,系統(tǒng)時鐘采用12MHz的晶
10、振,8個數(shù)碼管顯示,小時與分鐘、分鐘與秒鐘之間用短橫線間隔,采用共陽極七段式數(shù)碼管,P0口為段選碼輸出端與數(shù)碼管相連,P2口為位選碼輸出端,分別與數(shù)碼管陽極相連。按鍵開關(guān)設(shè)定了6個,通過P1口相連。分別為啟動、停止、復(fù)位、設(shè)置、加、減。</p><p> 整個系統(tǒng)分為:主程序、數(shù)碼管顯示模塊(在本系統(tǒng)中數(shù)碼管采用軟件譯碼動態(tài)顯示,在存儲器中首先建立一張顯示信息的字段碼管,顯示時,先從顯示緩沖區(qū)中取出顯示的信息,
11、然后通過查表程序在字段碼中查出顯示所顯示的信息的字段碼,從P0口將對應(yīng)的位選碼輸出,選中顯示的數(shù)碼管,就能在相應(yīng)的數(shù)碼管上顯示顯示緩沖區(qū)的內(nèi)容。)、定時器/計數(shù)器T1中斷服務(wù)程序、按鍵處理模塊(按鍵處理設(shè)置為:在時鐘正常顯示時,按下【設(shè)置】鍵進(jìn)入秒表模式,若不按秒表的控制鍵啟動、停止、復(fù)位,則在再次按下【設(shè)置】鍵是轉(zhuǎn)入調(diào)秒狀態(tài),再按進(jìn)入調(diào)分,再按進(jìn)入調(diào)時,再按回到正常顯示時鐘狀態(tài)。否則會直接回到正常狀態(tài)。 在調(diào)秒、調(diào)時、調(diào)分狀態(tài)下按下
12、【加】或【減】可進(jìn)行單個加1或單個減1操作,若按下不松1s后會連續(xù)加或連續(xù)減。</p><p> 第2章 系統(tǒng)結(jié)構(gòu)框圖與工作原理</p><p> 2.1系統(tǒng)結(jié)構(gòu)框圖: </p><p> 圖2.1 系統(tǒng)結(jié)構(gòu)框圖</p><p><b> 2.2系統(tǒng)工作原理</b>&l
13、t;/p><p> 利用單片機(jī)定時器完成計時功能,定時器1計時中斷程序每隔10ms中斷一次并當(dāng)作一個計數(shù),設(shè)定定時1秒的中斷計數(shù)初值閥值為100,每中斷一次中斷計數(shù)加1,當(dāng)加到100時,則表示1s到了,秒變量加1,同理再判斷是否1min鐘到了,再判斷是否1h到了。 </p><p> 為了將時間在LED數(shù)碼管上顯示,可采用靜態(tài)顯示法和動態(tài)顯示法,由于靜態(tài)顯示法需要譯碼器,數(shù)據(jù)鎖存
14、器等較多硬件,可采用動態(tài)顯示法實現(xiàn)LED顯示,通過對每位數(shù)碼管的依次掃描,使對應(yīng)數(shù)碼管亮,同時向該數(shù)碼管送對應(yīng)的字碼,使其顯示數(shù)字。由于數(shù)碼管掃描周期很短,由于人眼的視覺暫留效應(yīng),使數(shù)碼管看起來總是亮的,從而實現(xiàn)了各種顯示。</p><p> 第3章 硬件電路設(shè)計及說明</p><p><b> 3.1鍵盤接口電路</b></p><p>
15、 獨立式鍵盤:獨立式鍵盤中,每個按鍵占用一根I/O口線,每個按鍵電路相對獨立。I/O口通過按鍵與地相連,I/O口有上拉電阻,無鍵按下時,引腳端為高電平,有鍵按下時,引腳電平被拉低,I/O口內(nèi)部有上拉電阻時,外部可不接上拉電阻。</p><p> 圖3.1 鍵盤接口電路圖</p><p><b> 3.2顯示電路</b></p><p>
16、 它的連接方式為7段共陽LED顯示器的公共端分別接單片機(jī)的P2口。相應(yīng)的P0口接LED顯示器的a、b、c、d、e、f、g和dp引腳,利用程序進(jìn)行動態(tài)的掃描實現(xiàn)顯示功能。</p><p> 圖3.2 硬件顯示電路圖</p><p> LED數(shù)碼管的原理與接口:</p><p> 八段LED顯示器與單片機(jī)的接口比較簡單,只要將一個8位并行口與顯示器的引腳對應(yīng)相接即
17、可,由8位并行口輸出不同的字節(jié)數(shù)據(jù),顯示出不同的數(shù)字或字符。</p><p> 控制LED顯示出不同的數(shù)字或字符的8位字節(jié)數(shù)據(jù)稱為“段選碼”,共陰極LED與共陽極LED的段選碼互為補(bǔ)碼。數(shù)碼管的接口有靜態(tài)和動態(tài)接口兩種,靜態(tài)接口為固定顯示方式,無閃爍,其電路可采用一個并行口接一個數(shù)碼管,數(shù)碼管的公共端按共陰或共陽分別接地或接電源。</p><p> 動態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方
18、法,當(dāng)循環(huán)顯示的頻率教高時,利用人眼的視覺暫留性,看不出閃爍顯示現(xiàn)象,這種顯示與要一個接口完成字形碼的輸出,另一接口完成各數(shù)碼管的輪流點亮。</p><p> 第4章 軟件設(shè)計與說明</p><p> 4.1 初始化子程序</p><p> 對所用到的存儲單元和寄存器單元進(jìn)行初始化,同時對要使用到的定時器進(jìn)行清零并賦初始值。</p><p&
19、gt;<b> 初始化子程序:</b></p><p> void InitTimer1(void) // 系統(tǒng)初始化 函數(shù)</p><p><b> {</b></p><p> TMOD = 0x10; // 定時器 T1,工作方式1</p><p> TH1 = 0x
20、0D8; // 賦初值 </p><p> TL1 = 0x0F0;</p><p> EA = 1; // 開總中斷</p><p> ET1 = 1; // 開定時器T1中斷</p><p> TR1 = 1; // 開定時器T1</p><p><b
21、> }</b></p><p><b> 4.2 延時子函數(shù)</b></p><p> void delay1(unsigned int de) //延時函數(shù)由于數(shù)碼管暫留</p><p><b> {</b></p><p> unsigned int t;<
22、/p><p> for(t=0;t<de;t++);</p><p><b> }</b></p><p> 4.3 鍵盤掃描函數(shù)</p><p> void key_scan() // 按鍵掃描函數(shù)</p><p><b> {</b></p&g
23、t;<p> if(key_sr1==1) // 第一個按鍵松開</p><p><b> {</b></p><p> key_lock1=0; // 解鎖</p><p> delay_cnt1=0; // 延時計數(shù)清零</p><p><b> }</b>&
24、lt;/p><p> else if(key_lock1==0) // 是否按下,避免重復(fù)觸發(fā)</p><p><b> {</b></p><p> ++delay_cnt1;</p><p> if(delay_cnt1>cnt_delay_cnt1) // 消抖動</p><p&
25、gt;<b> {</b></p><p> delay_cnt1=0;</p><p> key_lock1=1; // 上鎖</p><p> key_sec=1; //觸發(fā)1號鍵</p><p><b> } </b></p><
26、;p><b> }</b></p><p> ......具體請看附錄B 源代碼</p><p><b> }</b></p><p> 4.4 按鍵服務(wù)函數(shù)</p><p> void key_service() // 按鍵服務(wù)函數(shù)</p><p>&l
27、t;b> {</b></p><p> static unsigned char x =0; // 用于連發(fā)頻率控制變量</p><p> switch(key_sec)</p><p><b> {</b></p><p> case 1:// 開始鍵</p>
28、<p> switch (wd_sec)</p><p><b> {</b></p><p> case 2: // 秒表 模式</p><p> start = 1; // 啟動秒表</p><p> sec_sec = 1; // 秒表執(zhí)行標(biāo)志 用于窗口轉(zhuǎn)換選擇<
29、/p><p><b> break;</b></p><p><b> }</b></p><p> key_sec = 0;</p><p><b> break;</b></p><p> case 2: // 停止鍵</p
30、><p> switch (wd_sec)</p><p><b> {</b></p><p> case 2: // 秒表 模式</p><p> start = 0;</p><p> sec_sec = 1;// 秒表執(zhí)行標(biāo)志 用于窗口轉(zhuǎn)換選擇 </p>
31、<p><b> break;</b></p><p><b> }</b></p><p> key_sec = 0;//清除鍵值</p><p><b> break;</b></p><p> case 3: // 復(fù)位鍵</p&
32、gt;<p> switch (wd_sec)</p><p><b> {</b></p><p> case 2: // 秒表 模式</p><p> //qing dong miao biao </p><p> if(!start) // 秒表在停止?fàn)顟B(tài)下 才允許復(fù)位&
33、lt;/p><p><b> {</b></p><p> time_sec = 0;</p><p> time_min = 0;</p><p> timesec = 0;</p><p><b> }</b></p><p> sec_
34、sec = 1; //秒表執(zhí)行標(biāo)志 用于窗口轉(zhuǎn)換選擇 </p><p><b> break;</b></p><p><b> }</b></p><p> key_sec = 0;//清除鍵值</p><p><b> break;</b></p
35、><p> ... ... 具體請看附錄B 源代碼</p><p><b> }</b></p><p> 4.5 數(shù)碼管顯示函數(shù)</p><p> void display() // 顯示函數(shù)</p><p><b> {</b></p>&l
36、t;p> static unsigned char i; </p><p> switch(wd_sec) // 不同模式(窗口)下給顯示緩沖區(qū)的值不同</p><p><b> {</b></p><p> case 1: // 正常顯示時間</p><p> temp[
37、7]=sec%10;</p><p> temp[6]=sec/10;</p><p> temp[4]=min%10;</p><p> temp[3]=min/10;</p><p> temp[1]=hour%10;</p><p> temp[0]=hour/10;</p><p
38、><b> break;</b></p><p> case 2: // 顯示秒表模式</p><p> temp[7]=timesec%10;</p><p> temp[6]=timesec/10;</p><p> temp[4]=time_sec%10;</p><
39、;p> temp[3]=time_sec/10;</p><p> temp[1]=time_min%10;</p><p> temp[0]=time_min/10;</p><p><b> break;</b></p><p> case 3: // 時間調(diào)整 秒 </p>
40、<p> temp[4]=min%10;</p><p> temp[3]=min/10;</p><p> if (biaozhi) // 閃爍標(biāo)志</p><p><b> {</b></p><p> temp[7]=sec%10; // 顯示</p><p&g
41、t; temp[6]=sec/10;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> temp[7]=11 ; // 滅</p><p> temp
42、[6]=11 ;</p><p><b> }</b></p><p> temp[1]=hour%10; // 分離個位</p><p> temp[0]=hour/10; // 分離十位</p><p><b> break;</b></p>
43、<p> case 4:// 時間調(diào)整 分 </p><p><b> ... ...</b></p><p><b> break;</b></p><p> case 5:// 時間調(diào)整 時 </p><p><b> ... ...</b>
44、;</p><p><b> break;</b></p><p><b> }</b></p><p> delay1(1); // 小延時</p><p> P0=0xff; // 關(guān)段碼 </p><p> P2= 0x00; // 關(guān)位碼
45、 用于消影</p><p> delay1(1); // 小延時</p><p> P2=wele[i]; // 位選控制</p><p> P0=table[temp[i]]; //段選控制</p><p> delay1(50); // 延時 視覺暫留</p><p><b>
46、 if(++i>8)</b></p><p><b> i=0;</b></p><p><b> }</b></p><p> 4.6 中斷服務(wù)函數(shù)</p><p> void Timer1Interrupt(void) interrupt 3 // 10 ms
47、中斷函數(shù)</p><p><b> {</b></p><p> static unsigned char time1;</p><p> TH1 = 0x0D8; // 重新裝入初值</p><p> TL1 = 0x0F0;</p><p> if (!(wd_sec == 3 |
48、 wd_sec == 4 | wd_sec == 5 )) </p><p> { // 時間在 調(diào)整過程中不允許走時</p><p> if(++time==100) // 一秒時間到</p><p><b> {</b></p><p><b> time=0; </b
49、></p><p> if(++sec==60) // 一分鐘時間到</p><p><b> {</b></p><p><b> sec=0;</b></p><p> if(++min==60) // 一小時時間到</p><p><b>
50、{</b></p><p><b> min=0;</b></p><p> if(++hour==24) // 一天時間到 </p><p><b> {</b></p><p><b> hour=0; </b></p><p
51、><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
52、 if (wd_sec == 2 && start==1) </p><p> { // 秒表開始計時條件( 在秒表模式且秒表啟動 )</p><p> if (++timesec == 100) // 1秒時間到</p><p><b> {</b></p><p> t
53、imesec =0;</p><p> if (++time_sec == 60) // 1分鐘時間到 </p><p><b> {</b></p><p> time_sec =0;</p><p> time_min++;</p><p><b> }</b>
54、;</p><p><b> }</b></p><p><b> }</b></p><p> if (++time1>= 25) // 時間調(diào)整的閃爍標(biāo)志</p><p><b> {</b></p><p><b&g
55、t; time1=0;</b></p><p> biaozhi = ~biaozhi;</p><p><b> }</b></p><p> key_scan(); // 按鍵掃描 </p><p><b> }</b></p><p>
56、; 4.7 主程序流程圖</p><p> 圖4.1 主程序流程圖</p><p> 第5章 調(diào)試結(jié)果與調(diào)試說明</p><p> 通過proteus 7.7SP2仿真,開始后數(shù)碼管可以正常顯示時間,此時按下【設(shè)置】鍵,可切換到秒表模式,在秒表模式下按【啟動】鍵開始計時,最小值為10ms。按【停止】鍵可以停止計時,按【復(fù)位】鍵可以清零秒表,以便開始下一輪的計
57、時。</p><p> 當(dāng)回到正常顯示模式后,連續(xù)按兩次【設(shè)置】鍵即可進(jìn)入時鐘調(diào)整狀態(tài)。依次調(diào)整秒、分、時。</p><p> 在時鐘調(diào)整的狀態(tài)下,按【加】鍵可以對當(dāng)前閃爍的秒(或分或時)進(jìn)行單個加1操作,若按下不松1s后進(jìn)入連續(xù)加1操作,以實現(xiàn)快速時鐘調(diào)整。</p><p> 調(diào)試過程中的截圖如下:</p><p> 圖 5.1 分
58、鐘調(diào)試過程</p><p><b> 設(shè)計總結(jié)</b></p><p> 通過本次的單片機(jī)課程設(shè)計,我在電路調(diào)試經(jīng)驗等方面增加了很多經(jīng)驗,這些都是在課本上無法學(xué)到得東西。在程序方面,在一些延時子程序等網(wǎng)絡(luò)上有很多現(xiàn)成的資料,我們要充分的利用資源,借鑒別人優(yōu)秀的程序,做出來的程序更加優(yōu)秀。程序方面我覺得寫程序注釋寫得越詳細(xì)越好、不要怕麻煩。這樣方便自己讀懂程序,也是
59、有利于讓別人能讀懂你寫的程序。在反復(fù)確認(rèn)自己的程序正確無誤之后,接下來要做的就是模擬仿真了。我們在書上、網(wǎng)上都查閱了相關(guān)芯片的功能、管腳等信息。仔細(xì)研究芯片的主要功能及管腳接法,這也就為我們后面比較成功地仿真出結(jié)果打好了基礎(chǔ)。當(dāng)仿真出錯時我們反復(fù)檢查線路連接是否有誤,仔細(xì)的觀察相應(yīng)管腳在運(yùn)行時的電位的變化。我相信,不管是什么電路,經(jīng)過如此仔細(xì)的檢查后,任何錯誤不會遺漏。當(dāng)然,這也是我們最終走向成功的原因。</p><
60、p> 在老師的辛勤的指導(dǎo)下,最后我們順利地完成了這次的課程設(shè)計??匆姷秸n本所學(xué)知識得以應(yīng)用,心中滿是歡喜,滿是激動。這次課程設(shè)計加強(qiáng)了我的實際操作能力,提高了我解決實際問題的能力,并對本專業(yè)的課程充滿了濃厚的興趣,及對以后的學(xué)習(xí)充滿了信心,決定在以后的學(xué)習(xí)生活中加強(qiáng)練習(xí),端正心態(tài),迎接新的挑戰(zhàn)。</p><p><b> 參考文獻(xiàn)</b></p><p>
61、 1、《單片機(jī)C語言輕松入門》周堅編 北京航空航天大學(xué)出版社</p><p> 2、《單片機(jī)人機(jī)接口實例》公茂法編著 北京航空航天大學(xué)出版社</p><p> 3、《51系列單片機(jī)應(yīng)用與實踐教程》周向紅編著 北京航空航天大學(xué)出版社</p><p> 4、《單片機(jī)原理與應(yīng)用》王迎旭編著 機(jī)械工業(yè)出版社 </p><p><b
62、> 附 錄</b></p><p><b> 附錄A:設(shè)計電路圖</b></p><p><b> 附錄B:源程序清單</b></p><p><b> /*</b></p><p> 單片機(jī)課程設(shè)計 </p><p>
63、 課題名稱 :基于單片機(jī)的電子時鐘設(shè)計</p><p> 時間 :2013年6月13日</p><p> 硬件 :P0口 接數(shù)碼管的段碼。 P2口 接數(shù)碼的位選 </p><p> 六個獨立按鍵接 P1^0 到 P1^5 口 </p><p> 晶振 12 MHz 單片機(jī) AT89C51&
64、lt;/p><p> 功能 : 利用定時中斷進(jìn)行計時,有正常時間顯示, </p><p> 有秒表啟動、停止、復(fù)位功能 ,時間可以 </p><p><b> 調(diào)整,</b></p><p> 時間調(diào)整 按加鍵時間加1,若不松開,</p><p> 1s后進(jìn)入連續(xù)加1直至松開按鈕
65、。</p><p><b> */</b></p><p> #include <reg51.h></p><p> #define cnt_delay_cnt1 25 //按鍵去抖延時</p><p> void delay1(unsigned int de); // 小延時 數(shù)碼管顯示暫留延時
66、</p><p> void display(); // 顯示函數(shù)</p><p> void key_scan();//按鍵掃描函數(shù)放在中斷函數(shù)里面</p><p> void key_service(); //案件服務(wù)函數(shù)放在主函數(shù)里面</p><p> sbit key_sr1=P1^0;//獨立按鍵輸入 啟動
67、</p><p> sbit key_sr2=P1^1;//獨立按鍵輸入 停止</p><p> sbit key_sr3=P1^2;//。。。。。。 復(fù)位</p><p> sbit key_sr4=P1^3; // 模式</p><p> sbit key_sr5=P1^4; //
68、 加</p><p> sbit key_sr6=P1^5; // 減</p><p> unsigned char key_lock1=0; //按鍵自鎖標(biāo)志</p><p> unsigned char key_lock2=0;</p><p> unsigned char key_lock3=0
69、;</p><p> unsigned char key_lock4=0;</p><p> unsigned char key_lock5=0;</p><p> unsigned char key_lock6=0;</p><p> unsigned int delay_cnt=0; // 6號鍵長按延時 </p>
70、<p> unsigned int delay_cnt_1=0; // 5號鍵長按延時</p><p> unsigned int delay_cnt1=0; //延時計數(shù)器的變量</p><p> unsigned int delay_cnt2=0;</p><p> unsigned int delay_cnt3=0;</p>
71、;<p> unsigned int delay_cnt4=0;</p><p> unsigned int delay_cnt5=0;</p><p> unsigned int delay_cnt6=0;</p><p> unsigned char key_sec=0;//哪個鍵被觸發(fā)</p><p> uns
72、igned char wd_sec = 1;</p><p> bit biaozhi = 1; // 位閃爍用 時間標(biāo)志</p><p> bit start =0; // 秒表開始標(biāo)志</p><p> bit sec_sec = 0; //用來區(qū)分 從秒表模式切換到 正常顯示(1) 還是 調(diào)整時間(0)</p>
73、<p> unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; // 段碼數(shù)組 0到9 + '-' + ' '</p><p> unsigned char code wele[]={0x01,0x02,0x04,0x08,0x1
74、0,0x20,0x40,0x80}; // 數(shù)碼管位選碼</p><p> unsigned char temp[]={0,0,10,0,0,10,0,0}; // 顯示緩沖區(qū) (原先將 '-' 寫入)</p><p> int time=0,sec=0,min=0,hour=0 ; // 定義時間的 變量</p><p>
75、; int timesec=0,time_sec =0, time_min=0; // 定義秒表的變量</p><p> void InitTimer1(void) // 系統(tǒng)初始化 函數(shù)</p><p><b> {</b></p><p> TMOD = 0x10;</p><p> TH1
76、= 0x0D8;</p><p> TL1 = 0x0F0;</p><p><b> EA = 1;</b></p><p><b> ET1 = 1;</b></p><p><b> TR1 = 1;</b></p><p><b&g
77、t; }</b></p><p> void main(void) // 主函數(shù)</p><p><b> {</b></p><p> InitTimer1(); // 初始化</p><p><b> while(1)</b></p><p>
78、<b> { </b></p><p> display(); // 顯示子程序 </p><p> key_service(); //按鍵服務(wù)程序</p><p><b> }</b></p><p><b> }</b><
79、/p><p> void display() // 顯示函數(shù)</p><p><b> {</b></p><p> static unsigned char i; </p><p> switch(wd_sec) // 不同模式(窗口)下給顯示緩沖區(qū)的值不同</p><
80、p><b> {</b></p><p> case 1: // 正常顯示時間</p><p> temp[7]=sec%10;</p><p> temp[6]=sec/10;</p><p> temp[4]=min%10;</p><p> temp[3]=
81、min/10;</p><p> temp[1]=hour%10;</p><p> temp[0]=hour/10;</p><p><b> break;</b></p><p> case 2: // 顯示秒表模式</p><p> temp[7]=timesec%
82、10;</p><p> temp[6]=timesec/10;</p><p> temp[4]=time_sec%10;</p><p> temp[3]=time_sec/10;</p><p> temp[1]=time_min%10;</p><p> temp[0]=time_min/10;<
83、;/p><p><b> break;</b></p><p> case 3: // 時間調(diào)整 秒 </p><p> temp[4]=min%10;</p><p> temp[3]=min/10;</p><p> if (biaozhi) // 閃爍標(biāo)志</p&
84、gt;<p><b> {</b></p><p> temp[7]=sec%10; // 顯示</p><p> temp[6]=sec/10;</p><p><b> }</b></p><p><b> else</b></p>
85、;<p><b> {</b></p><p> temp[7]=11 ; // 滅</p><p> temp[6]=11 ;</p><p><b> }</b></p><p> temp[1]=hour%10; // 分離個位</p&g
86、t;<p> temp[0]=hour/10; // 分離十位</p><p><b> break;</b></p><p> case 4:// 時間調(diào)整 分 </p><p> temp[7]=sec%10;</p><p> temp[6]=sec/10;</p>
87、<p> if (biaozhi) // 閃爍標(biāo)志</p><p><b> {</b></p><p> temp[4]=min%10;</p><p> temp[3]=min/10;</p><p><b> }</b></p><p>&l
88、t;b> else</b></p><p><b> {</b></p><p> temp[4]=11 ;</p><p> temp[3]=11 ;</p><p><b> }</b></p><p> temp[1]=hour%10;
89、</p><p> temp[0]=hour/10;</p><p><b> break;</b></p><p> case 5:// 時間調(diào)整 時 </p><p> temp[7]=sec%10;</p><p> temp[6]=sec/10;</p>&
90、lt;p> temp[4]=min%10;</p><p> temp[3]=min/10;</p><p> if (biaozhi) // 閃爍標(biāo)志</p><p><b> {</b></p><p> temp[1]=hour%10;</p><p> temp[
91、0]=hour/10;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> temp[1]=11;</p><p> temp[0]=11 ;</
92、p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p> delay1(1); </p><p> P0=0xff; // 關(guān)段碼 </p>&
93、lt;p> P2= 0x00; // 關(guān)位碼 用于消影</p><p> delay1(1);</p><p> P2=wele[i]; // 位選</p><p> P0=table[temp[i]]; //段選</p><p> delay1(50); // 延時 視覺暫留</p><
94、;p><b> if(++i>8)</b></p><p><b> i=0;</b></p><p><b> }</b></p><p> void delay1(unsigned int de) //延時函數(shù)</p><p><b>
95、 {</b></p><p> unsigned int t;</p><p> for(t=0;t<de;t++);</p><p><b> }</b></p><p> void key_scan() // 按鍵掃描函數(shù)</p><p><b>
96、 {</b></p><p> if(key_sr1==1) // 第一個按鍵松開</p><p><b> {</b></p><p> key_lock1=0; // 解鎖</p><p> delay_cnt1=0; // 延時計數(shù)清零</p><p>&l
97、t;b> }</b></p><p> else if(key_lock1==0) // </p><p><b> {</b></p><p> ++delay_cnt1;</p><p> if(delay_cnt1>cnt_delay_cnt1) // 消抖動</p>
98、<p><b> {</b></p><p> delay_cnt1=0;</p><p> key_lock1=1;</p><p> key_sec=1;//觸發(fā)1號鍵</p><p><b> } </b></p><p><b>
99、 }</b></p><p> if(key_sr2==1)</p><p><b> {</b></p><p> key_lock2=0;</p><p> delay_cnt2=0;</p><p><b> }</b></p>&
100、lt;p> else if(key_lock2==0)</p><p><b> {</b></p><p> ++delay_cnt2;</p><p> if(delay_cnt2>cnt_delay_cnt1)</p><p><b> {</b></p>
101、<p> delay_cnt2=0;</p><p> key_lock2=1;</p><p> key_sec=2;//觸發(fā)2號鍵</p><p><b> }</b></p><p><b> }</b></p><p> if(key_sr3
102、==1)</p><p><b> {</b></p><p> key_lock3=0;</p><p> delay_cnt3=0;</p><p><b> }</b></p><p> else if(key_lock3==0)</p><
103、;p><b> {</b></p><p> ++delay_cnt3;</p><p> if(delay_cnt3>cnt_delay_cnt1)</p><p><b> {</b></p><p> delay_cnt3=0;</p><p>
104、; key_lock3=1;</p><p> key_sec=3;//觸發(fā)3號鍵</p><p><b> }</b></p><p><b> }</b></p><p> if(key_sr4==1)</p><p><b> {</b&g
105、t;</p><p> key_lock4=0;</p><p> delay_cnt4=0;</p><p><b> }</b></p><p> else if(key_lock4==0)</p><p><b> {</b></p><p
106、> ++delay_cnt4;</p><p> if(delay_cnt4>cnt_delay_cnt1)</p><p><b> {</b></p><p> delay_cnt4=0;</p><p> key_lock4=1;</p><p> key_sec=4
107、;//觸發(fā)4號鍵</p><p><b> }</b></p><p><b> }</b></p><p> if(key_sr5==1)</p><p><b> {</b></p><p> key_lock5=0;</p>
108、<p> delay_cnt5=0;</p><p> delay_cnt_1=0;</p><p><b> }</b></p><p> else //if(key_lock5==0)</p><p><b> {</b></p><p> ++
109、delay_cnt5;</p><p> if(delay_cnt5>cnt_delay_cnt1) //消抖 </p><p><b> {</b></p><p> if(++delay_cnt_1 >100) // 長按延時檢測</p><p><b> {</b&g
110、t;</p><p> key_sec = 11; // 連發(fā)狀態(tài)</p><p><b> }</b></p><p> else if (key_lock5 == 0)</p><p><b> {</b></p><p> key_lock5=1;<
111、/p><p> key_sec = 5; //單發(fā)</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(key_sr6==1)</p><p
112、><b> {</b></p><p> key_lock6=0;</p><p> delay_cnt6=0;</p><p> delay_cnt=0;</p><p><b> }</b></p><p> else// if(1)//(key_loc
113、k6==0)</p><p><b> {</b></p><p> ++delay_cnt6;</p><p> if(delay_cnt6>cnt_delay_cnt1)</p><p><b> {</b></p><p> if(++delay_cnt
114、 >100)</p><p><b> {</b></p><p> key_sec = 12; // 連發(fā)狀態(tài)</p><p><b> }</b></p><p> else if (key_lock6 == 0)</p><p><b>
115、{</b></p><p> key_lock6=1;</p><p> key_sec = 6; //單發(fā)</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
116、;/p><p><b> }</b></p><p> void key_service() // 按鍵服務(wù)函數(shù)</p><p><b> {</b></p><p> static unsigned char x =0;</p><p> switch(key_s
117、ec)</p><p><b> {</b></p><p> case 1:// 開始鍵</p><p> switch (wd_sec)</p><p><b> {</b></p><p> case 2: // 秒表 模式</p&g
118、t;<p> start = 1; // 啟動秒表</p><p> sec_sec = 1; // 秒表執(zhí)行標(biāo)志 用于窗口轉(zhuǎn)換選擇</p><p><b> break;</b></p><p><b> }</b></p><p> key_sec
119、= 0;</p><p><b> break;</b></p><p> case 2: // 停止鍵</p><p> switch (wd_sec)</p><p><b> {</b></p><p> case 2: // 秒表 模式 &l
120、t;/p><p> start = 0;</p><p> sec_sec = 1;// 秒表執(zhí)行標(biāo)志 用于窗口轉(zhuǎn)換選擇 </p><p><b> break;</b></p><p><b> }</b></p><p> key_sec = 0;//清
121、除鍵值</p><p><b> break;</b></p><p> case 3: // 復(fù)位鍵</p><p> switch (wd_sec)</p><p><b> {</b></p><p> case 2: // 秒表 模式&
122、lt;/p><p> if(!start) // 秒表在停止?fàn)顟B(tài)下 才允許復(fù)位</p><p><b> {</b></p><p> time_sec = 0;</p><p> time_min = 0;</p><p> timesec = 0;</p>&l
123、t;p><b> }</b></p><p> sec_sec = 1; //秒表執(zhí)行標(biāo)志 用于窗口轉(zhuǎn)換選擇 </p><p><b> break;</b></p><p><b> }</b></p><p> key_sec = 0;//清除
124、鍵值</p><p><b> break;</b></p><p> case 4: // 菜單鍵 </p><p> switch(wd_sec)</p><p><b> {</b></p><p> case 1: // 正常顯示<
125、;/p><p><b> wd_sec++;</b></p><p> sec_sec = 0;</p><p><b> break;</b></p><p> case 2: // 秒表模式</p><p> if (sec_sec) // 判斷秒表模式
126、是否執(zhí)行了,若執(zhí)行了切換到 正常顯示模式</p><p> wd_sec = 1;</p><p> else // 否則 轉(zhuǎn)到調(diào)時間模式</p><p><b> wd_sec++;</b></p><p><b> break;</b></p><p&
127、gt; case 3: // 調(diào)秒</p><p><b> wd_sec++;</b></p><p><b> break;</b></p><p> case 4: // 調(diào)分 </p><p><b> wd_sec++;</b></p
128、><p><b> break;</b></p><p> case 5: // 調(diào)時</p><p><b> wd_sec=1;</b></p><p> break;</p><p><b> }</b></p
129、><p> key_sec = 0;//清除鍵值</p><p><b> break;</b></p><p> case 5: // 時間單個加</p><p> switch (wd_sec)</p><p><b> {</b></p>
130、<p><b> case 3:</b></p><p> if(++sec >59) //秒上限</p><p><b> sec = 0;</b></p><p><b> break;</b></p><p><b> cas
131、e 4:</b></p><p> if(++min >59) // 分上限</p><p><b> min = 0;</b></p><p><b> break;</b></p><p><b> case 5:</b></p>
132、<p> if (++hour > 23) //時上限</p><p><b> hour = 0;</b></p><p><b> break;</b></p><p><b> }</b></p><p> key_sec = 0; /
133、/清除鍵值</p><p><b> break;</b></p><p> case 6: // 時間單個減</p><p> switch (wd_sec)</p><p><b> {</b></p><p><b> case 3:</
134、b></p><p> if (--sec < 0 )</p><p><b> sec = 59;</b></p><p><b> break;</b></p><p><b> case 4:</b></p><p> i
135、f (--min < 0 )</p><p><b> min = 59;</b></p><p><b> break;</b></p><p><b> case 5:</b></p><p> if (--hour <0)</p><
136、;p> hour = 23;</p><p><b> break;</b></p><p><b> }</b></p><p> key_sec = 0; //清除鍵值</p><p><b> break;</b></p>&l
137、t;p> case 11: // 時間連續(xù)加</p><p> if(++x>80)</p><p><b> {</b></p><p><b> x =0;</b></p><p> switch (wd_sec)</p><p><b&g
138、t; {</b></p><p><b> case 3:</b></p><p> if(++sec >59)</p><p><b> sec = 0;</b></p><p><b> break;</b></p><
139、p><b> case 4:</b></p><p> if(++min >59)</p><p><b> min = 0;</b></p><p><b> break;</b></p><p><b> case 5:</b>&
140、lt;/p><p> if (++hour > 23)</p><p><b> hour = 0;</b></p><p><b> break;</b></p><p><b> }</b></p><p> key_sec = 0
141、; //清除鍵值</p><p><b> }</b></p><p><b> break;</b></p><p> case 12: // 時間連續(xù)減</p><p> if(++x>80)</p><p><b> {<
142、/b></p><p><b> x =0;</b></p><p> switch (wd_sec)</p><p><b> {</b></p><p><b> case 3:</b></p><p> if (--sec <
143、 0 )</p><p><b> sec = 59;</b></p><p><b> break;</b></p><p><b> case 4:</b></p><p> if (--min < 0 )</p><p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子時鐘 課程設(shè)計
- 電子時鐘課程設(shè)計
- 電子時鐘課程設(shè)計
- 課程設(shè)計--電子時鐘
- 課程設(shè)計----電子時鐘設(shè)計
- 電子時鐘課程設(shè)計--數(shù)字電子時鐘焊接調(diào)試報告
- 電子時鐘接口課程設(shè)計
- 電子時鐘課程設(shè)計 (2)
- 電子時鐘課程設(shè)計2
- led電子時鐘課程設(shè)計
- 電子時鐘課程設(shè)計報告
- eda課程設(shè)計---電子時鐘
- 電子時鐘課程設(shè)計 (2)
- 數(shù)字電子時鐘課程設(shè)計
- 數(shù)字電子時鐘課程設(shè)計
- eda課程設(shè)計--電子時鐘
- 電子時鐘課程設(shè)計--proteus環(huán)境下的電子時鐘設(shè)計
- 電子時鐘課程設(shè)計(論文)
- 數(shù)字電子時鐘課程設(shè)計
- 電子時鐘課程設(shè)計 (3)
評論
0/150
提交評論