




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
皖西學院課程設(shè)計任務(wù)書系別機電學院專業(yè)電氣學生姓名:凌剛學號:2023011047課程設(shè)計題目:基于STC89C51的定時器設(shè)計起迄日期:12月16日~12月28日課程設(shè)計地點:教學實驗樓B502樓指導教師:張磊下達任務(wù)書日期:2023年12月16日基于STC89C51的定時器設(shè)計目錄:課程設(shè)計目的…….............................2課程設(shè)計目的描述要求…………….22.1.設(shè)計描述………………...32.2.設(shè)計要求………………...3課程設(shè)計硬件電路的設(shè)計………….3……………..33.2設(shè)計方案確實定與說明……..…………...3設(shè)計方案的詳細硬件設(shè)計…………….....3硬件電路圖的繪制……….5keil編譯與proteus仿真…………….84.1.keil編譯…………………..84.2.proteus的仿真……………9程序設(shè)計思路和程序框圖………....105.1程序設(shè)計思路……………105.2定時器工作方式設(shè)置……………………115.3特殊功能存放器TCON的設(shè)置………...115.4中斷標號的查詢…………11定時器程序詳細程序框圖……………....12相關(guān)的計算……….…13總結(jié)……………….…138.定時器程序清單……..…………….…149.參考文獻…………....2110.附錄………………..…………….…211課程設(shè)計目的:基于STC89C51的定時器設(shè)計2課程設(shè)計題目描述和要求設(shè)計描述:利用STC89C51等接口芯片設(shè)計定時器,要求通過鍵盤輸入計時時間,按開始鍵開始計時,采用兩位數(shù)碼管顯示計時時間,計時結(jié)束提供一種以上的報警方式。2.2設(shè)計要求:1.選用STC89C51和相關(guān)接口芯片完成相應(yīng)的功能畫出詳細的硬件連接圖給出程序設(shè)計思路,畫出軟件流程圖給出所有程序清單并加上必要注釋完成proteus仿真撰寫設(shè)計報告,調(diào)試報告及設(shè)計心得3.課程設(shè)計硬件電路設(shè)計:設(shè)計工程簡介:定時器設(shè)計,此定時器是一款基于單片機STC89C51的計時工具,手動利用時間加減按鍵設(shè)定定時時間,當檢測到開始計時按鍵按下后,定時器開始倒數(shù)計時,當計時結(jié)束的時候翻開蜂鳴器和報警小燈,再檢測到暫停按鍵按下的時候,關(guān)閉蜂鳴器和報警小燈。設(shè)計方案的選定與說明因為STC89C51芯片I/O口完全能滿足定時器設(shè)計的需求,所以就沒有外接芯片來擴展單片機I/O的使用。硬件電路最根底的是單片機所需要的最小系統(tǒng):電源電路,晶振電路,復位電路。除此之外,單片機通過P0口接上拉電阻后連接了數(shù)碼管的段選,P1^0口和P1^1口分別用作數(shù)碼管十位和個位的位選,P1^2口用作蜂鳴器的控制,P1^3口用作報警小燈的控制,P1^4口P1^5口和P1^6口用作定時器按鍵的控制,風別控制時間的加/連加,減/連減和開始/暫停。3.3設(shè)計方案的詳細硬件設(shè)計:因為對STC89C51有過編程經(jīng)驗,對于用它設(shè)計一個定時器還是有把握的,所有我們在8086和STC89C51這兩款單片機的選擇中選擇了STC89C51。STC89C51它有四個八位I/O口,我們用P0口接了上拉電阻,原因有三點:1:P0口片內(nèi)無上拉電阻2:P0為I/O工作狀態(tài)時,上方FET被關(guān)段,從而輸出腳浮空,因此,P0用于輸出線時為開漏輸出。3:由于片內(nèi)無上拉電阻,上方FET又被關(guān)斷,P0輸出時無法拉升端口電平。考慮到單片機I/O口的驅(qū)動電流問題,—0.16mA,低電平時輸入灌電流,最大20mA左右。因為沒有外接驅(qū)動芯片驅(qū)動數(shù)碼管,為了保護單片機不在高負荷下工作和簡化電路,選擇了共陽數(shù)碼管,數(shù)碼管的公共端連接三極管,根據(jù)一個二極管點亮大約需要電流5—10mA,當一個數(shù)碼管的段和小數(shù)點全部點亮的時候,大約需要電流50—80mA,為使三極管工作在飽和狀態(tài)并到達數(shù)碼管全部顯示時的驅(qū)動電流,基極電流的100倍需要大于發(fā)射極和集電極這間的電流,所以三極管接了一個1K的限流電阻。三級管的開關(guān)作用由P1^0口和P1^1口控制。設(shè)定時間需要按鍵,為了操作方便和編程方便設(shè)計了三個獨立按鍵,每個獨立按鍵設(shè)計了兩種功能。按鍵按下后單片機I/O口被置低,三個按鍵分別用作時間的加,減和定時器的開關(guān),按鍵信號分別由p1^4口p1^5口和p1^6口輸入單片機!電源電路設(shè)計了兩路,一路是用USB接口供電,比擬方便,另一路就是外接電源,可以將3—5V電源正負極接在相應(yīng)插針上對定時器供電!硬件電路圖的繪制: 因為比擬熟悉altiumdesigner這個EDA常用軟件的使用,所以我選擇用這個軟件完成定時器硬件電路原理圖的繪制和PCB的繪制。1.電路原理圖:元件符號根本都是軟件庫文件里面符號,數(shù)碼管用的是遠光的共陽數(shù)碼管,庫文件里面沒有找到這個數(shù)碼管的原理圖,就自己畫了原理圖和封裝。2.PCB圖:PCB排版的時候遵守的幾個原那么:定時器數(shù)碼管要顯而易見便于觀察時間,按鍵操作要方便,布線勁量短和簡單,雙面板布線頂層與底層布線相互垂直3.PCB板3D視圖:4.實物圖:Keil編譯與proteus仿真:4.1.Keil編譯4.2.proteus仿真:將編寫好的c程序加載到keil軟件中,生成的hex文件再加載到proteus的單片機中,仿真完全通過。程序設(shè)計思路與程序框圖:5.1程序設(shè)計思路:在程序中用到了兩個定時器和兩個中斷,定時器0主要用作數(shù)碼管計時,每過一秒,數(shù)碼管顯示時間減一秒,減到零時停止計數(shù)并點亮報警小燈和翻開蜂鳴器報警。它的工作原理是利用程序使定時器0每1毫秒產(chǎn)生一次時間中斷,以1000次時間中斷定義一秒,再利用程序?qū)Φ玫降拿霐?shù)進行計數(shù),再對得到的秒數(shù)分別對10整除和取余數(shù)得到數(shù)碼管顯示的十位和個位,通過定時器0每1毫秒刷新數(shù)碼管一次將秒數(shù)顯示出來,定時結(jié)束后,進入中斷1,點亮小燈和翻開蜂鳴器報警。中斷0主要用作數(shù)碼管的掃描和定時并在定時結(jié)束后翻開報警小燈,報警蜂鳴器以及進入中斷1效勞子程序。定時器1和中斷1用作產(chǎn)生不同頻率的波形送給蜂鳴器讓蜂鳴器報警。主函數(shù)中初始化各個變量和函數(shù)后,首先進入中斷0效勞子程序,然后循環(huán)進行按鍵的掃描。5.2定時器工作方式設(shè)置:5.3特殊功能存放器TCON的設(shè)置:5.4中斷標號的查詢:.定時器程序詳細程序框圖:初始化初始化中斷0效勞子程序定時器0每次定時1毫秒Flag=1定時器開始每秒減1計時,num-1計數(shù)定時器定時次數(shù)numbernumber=1000刷新數(shù)碼管num=0停止計時,點亮報警小燈,翻開蜂鳴器翻開中斷1,進入中斷效勞子程序刷新數(shù)碼管按鍵1按下延時去抖按鍵1放開按鍵1是否長按按鍵長按計時,key_num+1長按模式,計時連加num<99翻開蜂鳴器num<99num+1按鍵2按下延時去抖按鍵2放開按鍵2是否長按按鍵長按計時,key_num+1長按模式,計時連減num>0翻開蜂鳴器num>0num-1YNNNNN按鍵3按下延時去抖按鍵3放開翻開蜂鳴器關(guān)閉蜂鳴器關(guān)閉蜂鳴器num=99Nnum=99num=0num=0YYYYY是YY關(guān)閉蜂鳴器翻開定時標志,計數(shù)加1,關(guān)閉中斷0,關(guān)閉報警小燈count=2暫停計數(shù),熄滅小燈和關(guān)閉蜂鳴器YYNYNNNYNNNYNYNNY定時器1效勞子程序:目的是產(chǎn)生不規(guī)那么的脈沖送給蜂鳴器,讓蜂鳴器以不同響聲報警。定時器1效勞子程序定時器1效勞子程序定時器定時,上下為分別是FE,FRQ定時器定時,上下為分別是FE,FRQFRQ-1FRQ-1蜂鳴器翻開和關(guān)閉相轉(zhuǎn)換蜂鳴器翻開和關(guān)閉相轉(zhuǎn)換相關(guān)計算:定時器每經(jīng)過一個機器周期定時器加1,51單片機的一個機器周期默認包括12個時鐘周期,這次用的定時器0和定時器1都是16位定時器,最高計數(shù)能到達65535,因為用的是11.0592M晶振,所以設(shè)定1毫秒的定時計算如下:12*〔65535-X〕X=64615將十進制的X=64615轉(zhuǎn)換成十六進制得到FC67,定時器的上下位分別是:THXx=FC,TLx=67.7總結(jié):本次試驗是一個基于STC89C51的定時器設(shè)計,根據(jù)老師提供的設(shè)計要求,設(shè)計中需要用到數(shù)碼管,按鍵和報警小燈等,在硬件電路的設(shè)計中考慮了一下上電復位的時候單片機的引腳都置高電平了,接小燈和蜂鳴器和數(shù)碼管的時候都特別注意了一下,防止上電復位對設(shè)計造成影響。在這次設(shè)計中我對三極管和數(shù)碼管的用法和接線有了更加深刻的理解。在寫程序的時候,第一次是一次性把所有的程序給寫完的,包括數(shù)碼管的顯示,按鍵的掃描,中斷的調(diào)用等,但是仿真的時候出不來結(jié)果。然后就一個一個模塊調(diào)試,先調(diào)試的是數(shù)碼管,發(fā)現(xiàn)數(shù)碼管的動態(tài)刷新時間還是有較高要求的,時間太長會閃爍,時間太短會造成重影,用了兩個數(shù)碼管,最后調(diào)整在大約3毫秒。調(diào)試按鍵的時候出現(xiàn)按一次跳變幾個數(shù)的情況,原因是按鍵沒有硬件去抖也沒有軟件去抖,因為軟件去抖也挺好實現(xiàn)的,就決定了在程序里面軟件去抖,最后去抖延時調(diào)整在大約15毫秒,按鍵可以很好的被識別。每個按鍵設(shè)計了兩種功能,對按鍵沒有放開的時候進行了計時,超過2秒就認為到達長按模式,這個調(diào)試的時候也出現(xiàn)過問題,就是按鍵去抖延時太長或者太短的時候,按下去很久數(shù)碼管依舊刷新不了,放開的時候會加1,最后按鍵去抖大約10到15毫秒的時候這個問題就不出現(xiàn)了。本來想讓報警小燈閃爍的,但是在中斷里面加程序的時候出現(xiàn)了死循環(huán),最后就讓小燈常亮了,這是一個缺陷,蜂鳴器程序是在中斷1里面的,本來想加警車報警聲音的,但是延時控制的不是很好,這也是一個缺陷。最后定時器還是能完全實現(xiàn)老師要求的功能的。再同學們?nèi)嶒炇艺{(diào)試的時候,感謝老師對芯片用法的細心指導。8定時器程序清單:#include<reg51.h>//................................................................................////............................全局定義數(shù)據(jù)類型.....................................////..................................................................................//typedefunsignedcharuint8;typedefunsignedintuint16;typedefunsignedlonguint32;//...................................................................................////.........................定義數(shù)碼管顯示數(shù)字和一些全局變量.........................////...................................................................................//uint8codeDuanma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uint8Tempdata[2];uint8num,count;uint32number,frq;//....................................................................................////................................端口的定義..........................................////....................................................................................//sbitSEG1=P1^0; //數(shù)碼管1sbitSEG2=P1^1; //數(shù)碼管2sbitKEY1=P1^4;//獨立按鍵1sbitKEY2=P1^5;//獨立按鍵2sbitKEY3=P1^6; //獨立按鍵3sbitLED=P1^3; //報警小燈sbitBUZZ=P1^2; //蜂鳴器bitflag;//......................................................................................////.....................................函數(shù)聲明.........................................////......................................................................................//voiddelay2x(uint8t);voiddelay(uint8t);voiddisplay(void);voidtimer0_init(void);voidtimer1_init(void);//.....................................................................................////........................................主函數(shù).......................................////.....................................................................................//main(){ uint8key_num=0; //按鍵長按計時,時間到了,表示按鍵長按 flag=0; //計時標志 num=0; //數(shù)碼管計數(shù)初值KEY1=1; //按鍵初始化 KEY2=1; KEY3=1; timer0_init(); //中斷初始化 timer1_init(); while(1) //按鍵的循環(huán)掃描程序 { if(!KEY1) //按鍵1掃描程序,定時器時間加按鍵 { delay(15); //按鍵去抖 BUZZ=0; //按鍵按下后蜂鳴器響一下 if(!KEY1) //判斷按鍵是否按下 { while(!KEY1) //等待按鍵放開和進入長按模式 { BUZZ=0; key_num++; delay(10); if(key_num==200) //判斷是否進入長按模式 { key_num=0; while(!KEY1) { if(num<99) //判斷數(shù)碼管顯示是否到達了最大值99 num++; Tempdata[0]=num/10; //取數(shù)碼管顯示的十位數(shù) Tempdata[1]=num%10; //取數(shù)碼管顯示的個位數(shù) delay(510); //長按延時,調(diào)節(jié)數(shù)碼管顯示不閃爍不重影 } } } BUZZ=1; //蜂鳴器關(guān)閉 key_num=0; if(num<99) num++; } } if(!KEY2) //按鍵2掃描程序,定時器時間減按鍵,同按鍵1 { delay(15); BUZZ=0; if(!KEY2) { while(!KEY2) { BUZZ=0; key_num++; delay(15); if(key_num==200) { //key_num=0; while(!KEY2) { if(num>0) num--; Tempdata[0]=num/10; Tempdata[1]=num%10; delay(510); } } } BUZZ=1; key_num=0; if(num>0) num--; } } Tempdata[0]=num/10; Tempdata[1]=num%10; if(!KEY3) //按鍵3掃描程序,開始暫停按鍵 { delay(15); //按鍵去抖 BUZZ=0; if(!KEY3) { while(!KEY3) BUZZ=0; //翻開蜂鳴器 BUZZ=1; //關(guān)閉蜂鳴器 ET1=0; //關(guān)閉定時器1中斷 TR1=0; //關(guān)閉定時器1的開關(guān) count++; //計數(shù),用于判斷標志位 flag=1; //置標志位,暫停,開始計時和關(guān)閉計時結(jié)束報警功能 if(count==2) { count=0; //暫停計數(shù) flag=0; LED=1; //熄滅小燈 BUZZ=1; //關(guān)閉蜂鳴器 } } } } } //..................................................................................////..............................定時器0中斷效勞子程序...............................////..................................................................................// voidinterrupt_timer0()interrupt1{ TH0=0xfc; //定時器0定時1ms TL0=0x67; if(flag) //判斷是否開始計時 { number++; if(number==1100) //定時1s { if(num) //防止按鍵3誤操作時程序跑飛 { num--; number=0; Tempdata[0]=num/10; Tempdata[1]=num%10; display(); if(num==0) //定時結(jié)束 { flag=0; //不在繼續(xù)定時掃描 Tempdata[0]=0; Tempdata[1]=0; BUZZ=0; //蜂鳴器報警 LED=0; //報警小燈點亮 ET1=1; //翻開定時器1中斷 TR1=1; //翻開定時器1開關(guān) } } } } display(); //刷新數(shù)碼管}//..............................................................................////....................................延時函數(shù)..................................////..............................................................................//voiddelay2x(uint8t){ while(--t);}voiddelay(uint8t){ while(--t) { delay2x(300); delay2x(300); } }//..............................................................................////..............................數(shù)碼管動態(tài)掃描函數(shù)..............................////..............................................................................//voiddisplay(void){ SEG2=0; SEG1=1;//數(shù)碼管給位選 P0=0xff; SEG1=1; P0=Duanma[Tempdata[0]];//數(shù)碼管給段選 delay(2); SEG1=0; SEG2=1; P0=0xff; SEG2=1; P0=Duanma[Tempdata[1]];}//...................................
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAQI 27-2017中小學教室空氣質(zhì)量規(guī)范
- T/CAQI 213-2021飲用水處理裝置除病毒功能技術(shù)規(guī)范
- 蘇寧java開發(fā)工程師面試題及答案
- 亞信java面試題及答案2025年
- 繪畫光影考試題及答案
- 廣東選調(diào)面試題及答案
- 公益崗招聘面試題及答案
- 基礎(chǔ)考試題庫及答案
- 機器檢驗面試題及答案
- 家長面試題問題及答案
- 汽車租賃公司汽車租賃管理制度匯編
- 脊髓損傷康復講義
- 布草洗滌服務(wù)方案完整版
- 氣體安全知識培訓(72張)課件
- 國際慕課學習者使用手冊
- 共線向量與共面向量全面版課件
- JJG(晉) 22-2021 車用甲醇燃料加注機檢定規(guī)程
- 湘美版小學四年級美術(shù)下冊知識點
- 大連市住宅小區(qū)物業(yè)收費等級標準
- 包裝自動線課程設(shè)計含全套資料
- 長輸管道施工
評論
0/150
提交評論