




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片機課程設計報告書2021姓 名:班 級:分 數(shù):實驗要求:設計秒表計時系統(tǒng),能夠完成屢次計時,即一次及時可以做到屢次取值,同時在及時停止后能夠自由查閱所記的數(shù)值。 試驗所用語言:C語言試驗環(huán)境:Windows XP Keil uVision3 STC-ISP V35試驗芯片:AT89x51目錄1、設計方案書2、設計理念3、程序流程圖4、程序清單5、外部電路圖6、按鍵說明7、程序運行結果8、思想總結9、參考文獻一、設計方案書:通過不同按鍵的輸入,使計時器完成不同的指令,例如開始計時、記錄當前時間、停止時間、查找記錄、清零等。計時器時間準確。計時范圍盡量大些,有記錄條數(shù)的顯示,當時間計滿自動停
2、止。二、設計理念:對于按鍵,設計按鍵子程序,在主程序中不斷調用子程序。在數(shù)碼管上顯示秒,一個顯示十位,一個顯示各位。在二極管上,高三位顯示記錄條數(shù),其余五位顯示分鐘,同時記錄條數(shù)以二進制數(shù)顯示。計時使用51單片機中斷程序進行定時,使用T0作為計時器。在中斷程序中,每隔一秒將一個全局變量置1,主程序在檢測到其為1時,計時相應加一。顯示時間在數(shù)碼管上的使用數(shù)組輸出。在二極管上的使用按位與的情況。記錄事情通過按鍵子程序讀回其值后,將當時的秒值和分值存入數(shù)組。同時記錄條數(shù)加1。當計時停止后通過上翻鍵和下翻鍵可以在記錄中查找各值。在清零按鍵按下的時候,所有顯示清零,這時秒表可以開始重新計時。在計時階段,
3、上、下翻鍵無法使用,清零鍵無法使用。只有當時間到達上限、停止按鍵按下和記錄條數(shù)慢時計時才停止工作。因為屢次用到數(shù)字顯示,顯示使用子程序調用形式。三、程序流程圖:開 始主程序:設置計數(shù)器 進入無限循環(huán)中NShangyi=1調用按鍵子程序 得值給鍵值根據(jù)鍵值相應得標志位置位NNxiayi=1M值加1Kai=1M值減1計時,檢測tound=1那么計時加1 調用顯示子程序NTing=1根據(jù)m值顯示MM得內容停止計時,保存當前值,kai=0NNZhanting=1Qingling=1將所有位清零保存當前值到MM數(shù)組 同時m加1延時開 始按鍵子程序:NKeyv!=0xff進入循環(huán),等待按鍵放開初始化將P3
4、口值給keyvNNKeyv=0xffKeyv=0xffReturn(0)Return(keyv)結束四、程序清單:#include "at89x51.h"#define uchar unsigned charuchar hex16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; 數(shù)碼管顯示int i,tound; /全局變量uchar key() /按鍵子程序uchar keyv;uchar tmp;keyv=P3; /將P3值給變量if(keyv=0xff)
5、/如果按鍵沒有按下了,返回0return(0);for(i=0;i<1250;i+); /按下延時 防抖動keyv=P3; /從新付值if(keyv=0xff) /如果沒有到達時間,認為無效返回0return(0);else /有按鍵值那么進入循環(huán) for(;) tmp=P3; if(tmp=0xff) /當按鍵放開跳出break;return (keyv); /返回值void xianshi(int miao,int fen,int shu) /顯示子程序 uchar fenx=0x01; P0=hexmiao%10; /在數(shù)碼管上顯示秒 P1=hexmiao/10; fenx=0xf
6、f; /在低位顯示分鐘 利用移位原理 for(i=0;i<fen;i+) fenx=fenx<<1; switch(shu) /在高位顯示當前記錄條數(shù) case 0:fenx=fenx&0xff;break; /通過按位與置位 case 1:fenx=fenx&0xdf;break; case 2:fenx=fenx&0xbf;break; case 3:fenx=fenx&0x9f;break; case 4:fenx=fenx&0x7f;break; case 5:fenx=fenx&0x5f;break; case 6:f
7、enx=fenx&0x3f;break; case 7:fenx=fenx&0x1f; P2=fenx; /將數(shù)碼管顯示指示 void main(void) /主程序uchar jianzhi;int kai=0,ting=0,zhanting=0,shangyi=0,xiayi=0,qingling=1; /標志位int secound=0,minter=0,m=0,n=0; /時間位和記錄條數(shù)位int MM82; /保存狀態(tài)數(shù)組TMOD=0x09; /定義時間計數(shù)器T0TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0
8、=1;EA=1; while(1) /主循環(huán) jianzhi=key(); /讀回鍵值 if(jianzhi=0xfe&&kai=0&&qingling=1) kai=1;secound=0;minter=0;m=0;qingling=0; /當開始按下時,設置標志位if(jianzhi=0xfd&&kai=1) ting=1; /當停止鍵按下時 置位if(jianzhi=0xfb&&kai=1) zhanting=1; /當暫停鍵按下時 置位if(jianzhi=0xf7&&kai=0) shangyi=1; /
9、當上移位鍵按下時 置位 if(jianzhi=0xef&&kai=0) xiayi=1; /當下移位鍵按下時 置位if(jianzhi=0x7f&&kai=0) qingling=1; /當清零鍵按下時 置位if(kai=1&&qingling!=1) /假設開始之后 if(tound=1) /接受中斷傳回得1秒標志位 secound+;tound=0; /秒加一,同時清楚標志位 if(secound=60) /60秒進位 minter+; secound=0; if(zhanting=1) /如果暫停了 MMm0=secound; /保存分秒值
10、 MMm1=minter; m+; /記錄條數(shù)加一 zhanting=0; /去除標志位 xianshi(secound,minter,m); /調用顯示子程序 if(ting=1) /當停止按下時 MMm0=secound; /保存當前值 MMm1=minter; kai=0; /關開值 n=m; ting=0; xianshi(MM00,MM01,0); /顯示最后時間 else if(m!=0&&qingling=0) /在沒有計停止之后 if(shangyi=1) /上移鍵按下 將記錄上移一個 if(n=m) n=0; /為最上一個得時候 回到0 else n+; if
11、(xiayi=1) /下移鍵按下 記錄下移一個 if(n=0) n=m; /為最后一個時 變成最上面得一個 else n-; secound=MMn0; /調出記錄值 minter=MMn1; xianshi(secound,minter,n); /顯示記錄值 if(qingling=1) /當清零鍵按下 m=0; /所有標志位清零 n=0; secound=0; minter=0;kai=0;xianshi(0,0,0); /顯示清零 shangyi=0; xiayi=0; void t0(void) interrupt 1 using 0 /中斷子程序 int shiv;shiv+; /每中斷一次加一if(shiv=20) /20次中斷一次置位,時間為1秒 shiv=0; tound=1; TH0=(65536-50000)/256; /從新置值TL0=(65536-50000)%256; /程序結束五、外部電路圖:見附頁六、按鍵說明: P3-0: 開始按鍵 P3-1:停止按鍵 P3-2:暫停按鍵 P3-3:上移按鍵 P3-4:下移按鍵 P3-7:清零
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論