版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。三位倒計時器PIC單片機課程設(shè)計含全部匯編程序清單本科學(xué)生畢業(yè)論文課程設(shè)計報告課程名稱:單片機原理與接口技術(shù)課程設(shè)計 設(shè)計題目: 三位倒計時器 院 系: 機電工程學(xué)院 班 級: 2012級電氣工程及其自動化專業(yè) 姓 名: XXX 學(xué) 號: 2012XXXX 指導(dǎo)教師: XXXX 設(shè)計時間: 2014年X月X日 出勤實物報告總分II目錄前言1第一章 設(shè)計方案11.1 設(shè)計內(nèi)容及要求11.1.1 設(shè)計內(nèi)容11.1.2設(shè)計要求11.1.3功能設(shè)計21.2硬件設(shè)計21.2.1 矩陣鍵盤電路設(shè)計21.2.2數(shù)碼管
2、電路設(shè)計31.2.3 LED及蜂鳴器電路設(shè)計41.2.4單片機主電路設(shè)計41.2.5上電電路的設(shè)計51.2.6總電路圖51.3總體方案6第二章 軟件設(shè)計72.1 倒計時部分72.1.1 鍵盤掃描子程序82.1.2 0到9按鍵功能子程序和鍵盤顯示子程序92.1.3 一位轉(zhuǎn)多位十進制子程序122.1.4 TMR0中斷服務(wù)子程序132.1.5 倒計時顯示子程序152.2 附加功能部分152.2.1 暫停和繼續(xù)162.2.2 計數(shù)功能172.2.3 復(fù)位和歸零172.3 結(jié)束提示部分182.4 程序部分總結(jié)18第三章 實物照片193.1 實驗板照片193.2 脫機運行照片19第四章 問題與體會21結(jié)論
3、22參考文獻23附錄:程序清單24前言此次課程設(shè)計的內(nèi)容為三位數(shù)的倒計時器的設(shè)計。目前倒計時器的發(fā)展已經(jīng)相當(dāng)先進,我做這次設(shè)計的主要目的是想更進一步了解基本電路的設(shè)計流程,以提高自己的設(shè)計理念,使自己的動手動腦能力有更進一步提高。通過解決現(xiàn)實生活中的問題,鞏固和加深單片機課程中所學(xué)的理論知識和實驗?zāi)芰?,加深對單片機軟硬件知識的理解,以獲得初步的應(yīng)用經(jīng)驗,為以后從事生產(chǎn)和科研工作打下一定的基礎(chǔ)。本次設(shè)計注重對單片機工作原理以及鍵盤控制及顯示原理的理解,能夠提高自己的動手能力和設(shè)計能力,以培養(yǎng)自己的創(chuàng)新能力,做到理論和實踐相結(jié)合。本次設(shè)計的重要意義還在于對單片機的內(nèi)部結(jié)構(gòu)和工作狀態(tài)做更進一步的了解
4、,同時還對單片機的接口技術(shù),中斷技術(shù),存儲方式和控制方式有了更深層次的了解。另外,倒計時器在生活中應(yīng)用廣泛,因此它的功能靈活性和精度的要求就更加顯得重要。通過此次練習(xí),我為自己設(shè)下了很多要求,力求此倒計時器的功能完美性和精度精細(xì)性,以加深自己對電子產(chǎn)品設(shè)計的認(rèn)知。第一章 設(shè)計方案1.1 設(shè)計內(nèi)容及要求1.1.1 設(shè)計內(nèi)容本次設(shè)計的倒計時器需要由4*4矩陣鍵盤、3位數(shù)碼管、LED小燈和蜂鳴器等有關(guān)輸入輸出器件組成,要求倒計時的初始值和控制按鍵均由鍵盤輸入,數(shù)碼管顯示倒計時的時間,小燈和蜂鳴器負(fù)責(zé)終止提示。因此,本次的設(shè)計內(nèi)容包括硬件設(shè)計,流程框圖及軟件的編寫與調(diào)試。1.1.2設(shè)計要求根據(jù)以上設(shè)計
5、內(nèi)容的介紹及我們的設(shè)計目的,總結(jié)出以下的設(shè)計要求:1.能夠?qū)崿F(xiàn)255以內(nèi)數(shù)的倒計時;2.倒計時結(jié)束,報警提示;3.通過按鍵設(shè)置倒計時的初始值;4.精度為微秒級的計時;5.具有“開始”、“暫停”、“繼續(xù)”、“加一”、“減一”、“復(fù)位”等功能鍵;6.計時結(jié)束具有重新開始的功能。1.1.3功能設(shè)計為實現(xiàn)使用的靈活性和計數(shù)的精準(zhǔn)性,我們采用TMR0定時器計時,功能鍵包括計時開始、暫停、繼續(xù)、加一、減一和復(fù)位。實現(xiàn)過程如下:當(dāng)從鍵盤輸入任意三位以內(nèi)包括三位數(shù),數(shù)碼管顯示輸入數(shù)值,按下鍵A倒計時開始,按下鍵B倒計時暫停,按下鍵C倒計時繼續(xù);當(dāng)發(fā)現(xiàn)計時過程中需要調(diào)整計時時,可以在暫?;蚍菚和G闆r下按下鍵D或
6、鍵E實現(xiàn)計數(shù)加一和減一的功能。鍵F的主要功能為當(dāng)計時需要停止和重新再來時,按下它,計時器重新工作。當(dāng)?shù)褂嫊r到0時,小燈立即閃爍,同時蜂鳴器鳴叫,小燈閃爍3次以后,倒計時器恢復(fù)初始狀態(tài),無需復(fù)位可以重新使用。按鍵過程中為確保使用人員知道鍵是否按下,按下時蜂鳴器應(yīng)該響起以示提醒。1.2硬件設(shè)計我們設(shè)計的倒計時器需要由鍵盤任意輸入255以內(nèi)三位數(shù),并顯示于數(shù)碼管上,計時按鈕及相關(guān)功能均由鍵盤鍵入,同時為保證鍵盤按下的準(zhǔn)確性,加入按下蜂鳴器提示功能,計時結(jié)束需有小燈和蜂鳴器提醒。因此,設(shè)計電路圖時必須涉及到鍵盤,4位數(shù)碼管,蜂鳴器,LED小燈,同時上電電路和單片機控制電路為必須加入的。1.2.1 矩陣
7、鍵盤電路設(shè)計一般鍵盤控制有4*4、5*5等類型方式,考慮到功能所需和單片機引腳的限制,我們采用4*4矩陣鍵盤。該鍵盤有4個輸入端,4個輸出端,我們習(xí)慣于把它連接在單片機的RC端口。因此,我們將RC的低四位與鍵盤的輸入相連,高四位與輸出相連,以實現(xiàn)鍵盤的正確掃描。圖1-1 鍵盤設(shè)計電路圖1.2.2數(shù)碼管電路設(shè)計數(shù)碼管顯示需送入位選和段選,我們所需為3位顯示,采用4個數(shù)碼管,因此需要將4個位選聯(lián)入單片機中,同時還將有8條段選聯(lián)入其中。習(xí)慣上,我們將段選接入RD的8個端口,4個位選接入RB的1到4位。圖1-2 數(shù)碼管設(shè)計電路圖1.2.3 LED及蜂鳴器電路設(shè)計蜂鳴器的設(shè)計就簡單許多,只需將其一端接入
8、高電平,另一端接入單片機,為保證其正常工作,接入100歐姆的電阻。接入單片機的一端我們可以設(shè)為RE5。小燈同蜂鳴器相似,只需考慮接入的引腳,實驗中我們接入3種顏色的小燈,其引腳分別連至單片機的RE端口的0、1、2位。圖1-3 LED及蜂鳴器電路連接圖1.2.4單片機主電路設(shè)計本次設(shè)計采用的單片機為PIC16F887,其功能強大,應(yīng)用靈活。在使用它進行工作的前提是對其基本的引腳進行分配,這里我們只考慮VCC和GND以及晶振的接入,晶振選擇4MHz的晶振。其具體電路圖如下:圖1-4 單片機接線圖1.2.5上電電路的設(shè)計上電電路采用已有的設(shè)計好的電路,由USB接口供電,其電路圖如下:圖1-5 上電電
9、路1.2.6總電路圖總電路圖如下圖1-6:圖1-6 總電路圖1.3總體方案由以上設(shè)計可知,系統(tǒng)的硬件原理圖如下所示:圖1-7 硬件原理圖設(shè)計時可采用模塊化程序設(shè)計方法。模塊劃分時應(yīng)遵循下述原則:1每個模塊應(yīng)具有獨立的功能,能產(chǎn)生一個明確的結(jié)果;2模塊之間的控制參數(shù)應(yīng)盡量簡單,數(shù)據(jù)參數(shù)應(yīng)盡量少;3根據(jù)模塊的劃分原則,將該程序劃分成6個模塊,如圖1-8所示。主程序鍵盤掃描模塊鍵盤顯示模塊TMR0定時模塊動態(tài)顯示模塊倒計時結(jié)束提示模塊附加功能模塊圖1-8 程序模塊第二章 軟件設(shè)計基于硬件工作的軟件部分的編寫是通過匯編語言實現(xiàn)的。由以上分析可知,該部分大致包括鍵盤掃描,鍵盤顯示,TMR0定時器,動態(tài)顯
10、示,結(jié)束提示和其他功能模塊等六大部分,其中每大部分又包括不等的若干小部分,下面通過總體到局部的過程介紹它的工作原理。2.1 倒計時部分該軟件由鍵入到倒計時的工作過程可由下面框圖表示,此處省略了附加功能部分,只體現(xiàn)出其一般工作狀態(tài)。圖2-1 倒計時器工作流程圖該流程圖表示了軟件工作的大體過程,具體的過程如下子章節(jié)。2.1.1 鍵盤掃描子程序鍵盤連接有4個輸入端和4個輸出端,輸入端連在RC低四位,輸出端連在RC高四位,先讓低四位賦值低電平,若有鍵按下,高四位必有低電平出現(xiàn),之后繼續(xù)判斷具體哪個鍵被按下。以RC0為0為例,若令RC0=0,即判斷第一行是否有鍵按下,依次判斷高四位是否為低電平,若為低電
11、平,則該鍵被按下,轉(zhuǎn)入相應(yīng)功能子程序。以RC0=0為例,框圖如下:圖2-2 鍵盤掃描流程圖程序及注釋如下:JIANPANMOVLW00H;RC口低四位輸出低電平MOVWFPORTCMOVLW0F0HANDWFPORTC,W;屏蔽低四位SUBLW0F0HBTFSCSTATUS,Z;判斷高四位是否為全1RETURN;是,無鍵輸入,返回繼續(xù)判斷CALLDELAY10MS;否,有可能有鍵輸入,延時20毫秒CALLDELAY10MSMOVLW0F0H;再判斷一次是否鍵入ANDWFPORTC,WSUBLW0F0HBTFSCSTATUS,ZRETURN;虛假輸入,返回BCFPORTB,5;確實有鍵輸入,蜂鳴
12、器鳴叫MOVLW0FEH;逐行判斷哪個鍵輸入,首先RC0=0MOVWFPORTCBTFSSPORTC,4;判斷鍵0GOTOJIAN0;是,跳至鍵0功能子程序BTFSSPORTC,5;判斷鍵1GOTOJIAN1;是,跳至鍵1功能子程序BTFSSPORTC,6;判斷鍵2GOTOJIAN2;是,跳至鍵2功能子程序BTFSSPORTC,7;判斷鍵3GOTOJIAN3;是,跳至鍵3功能子程序2.1.2 0到9按鍵功能子程序和鍵盤顯示子程序0到9按鍵的主要作用是輸入我們倒計時的初值,當(dāng)這些按鍵按下時,會調(diào)用鍵盤顯示子程序,將鍵入的數(shù)字通過數(shù)碼管顯示出來。為了判斷按下的次數(shù),設(shè)置變量KEFLAG,每調(diào)用一次
13、鍵子程序變量左移一位,當(dāng)需要顯示時,只需判斷KEFLAG的第幾位為1,就可判斷該鍵入的數(shù)字在數(shù)碼管的哪一個位上顯示。同時,鍵入的位數(shù)不同會調(diào)用不同的鍵盤顯示子程序,我們設(shè)計的三位倒計時器有三個鍵盤顯示子程序,當(dāng)按下一個數(shù)時,調(diào)用XIANSHI1,為靜態(tài)顯示;當(dāng)按下第二個數(shù)時,數(shù)碼管動態(tài)掃描,顯示兩位數(shù),就需要調(diào)用XIANSHI2,同理按下3位數(shù)調(diào)用3位顯示子程序XIANSHI3。0到9按鍵功能子程序的另一個作用就是將該按鍵的標(biāo)號放入指定的變量帶回,為之后的動態(tài)倒計時顯示提供十進制轉(zhuǎn)換所需的數(shù)字。該子程序如下,以0到1為例:;0到9按鍵,用于鍵入數(shù)字JIAN0CALLSFANG;釋放MOVLW0
14、0H;將0放入W寄存器MOVWFNUM8;NUM8帶0返回CALLCHABIAO;調(diào)用查表子程序MOVWFBIAN;BIAN帶0顯示碼返回RLFKEYFLAG,1;鍵按下一次,KEYFLAG左移一位RETURNJIAN1CALLSFANG;釋放MOVLW01H;將1放入W寄存器MOVWFNUM8;NUM8帶1返回CALLCHABIAO;調(diào)用查表子程序MOVWFBIAN;BIAN帶1顯示碼返回RLFKEYFLAG,1;鍵按下一次,KEYFLAG左移一位RETURN該倒計時器將鍵盤鍵入數(shù)字的顯示和倒計時時數(shù)字的顯示分開,即兩者的顯示不是在同一個顯示子程序里。因此這里需要簡要的介紹一下鍵盤顯示子程。
15、左圖展示了鍵的輸入在數(shù)碼管顯示的具體流程,其核心便是三個顯示子程序。對于顯示1子程序,由0到9按鍵功能子程序知,送到這里的變量為該按鍵的顯示碼值,由于為一位顯示,只需將第一位位選打開,將碼值送入,關(guān)閉位選即可。由于多位顯示同樣需要該位的碼值,且新鍵入的變量相同,所以我們應(yīng)將該碼值備份兩份,為多位顯示做準(zhǔn)備。圖2-3 選擇第幾個顯示子程序顯示2子程序和顯示3子程序與顯示1子程序相似,只是送入兩個數(shù)進行動態(tài)掃描。其程序代碼及注釋如下,這里以兩位顯示為例。;鍵盤顯示2子程序,用于2位數(shù)的鍵入顯示XIANSHI2BCFPORTB,1;個位位選打開MOVFBIAN,W;送入段選MOVWFPORTDMOV
16、WFNUM4;同時復(fù)制到NUM4,為3位顯示所用CALLDELAY;延時BSFPORTB,1;個位位選關(guān)閉BCFPORTB,2;十位位選打開MOVFNUM,W;送入段選MOVWFPORTDCALLDELAY;延時BSFPORTB,2;位選關(guān)閉;2個數(shù)組合成十進制兩位數(shù)MOVFNUM8,W;將NUM8放入NUM6,為送數(shù)所用MOVWFNUM6MOVLW00H;十位是否為0SUBWFNUM5,FBTFSSSTATUS,ZCALLJIASHI1;否,調(diào)用加十1子程序MOVFNUM9,W;將NUM9與NUM6相加ADDWFNUM6,WMOVWFNUMB;放入顯示變量里RETURN;加十1子程序JIAS
17、HI1MOVLW.10;NUM9加十ADDWFNUM9,FDECFNUM5,F;NUM5減1BTFSSSTATUS,Z;判斷是否為0GOTOJIASHI1;否,繼續(xù)加十RETURN;是,返回2.1.3 一位轉(zhuǎn)多位十進制子程序由鍵盤顯示子程序我們發(fā)現(xiàn)其后多出一個多個一位數(shù)轉(zhuǎn)化為一個多位數(shù)的轉(zhuǎn)化子程序,它的作用是,在鍵入之后將該多位數(shù)送入倒計時顯示子程序開始倒計時,這是由倒計時顯示子程序決定的,只要送入任意一個三位數(shù),它都能夠?qū)崿F(xiàn)準(zhǔn)確的顯示。該程序的原理是:首先判斷鍵入幾位數(shù),最初鍵入的數(shù)在十位,十位還是百位,然后對其相應(yīng)的加一百或時循環(huán),最后把所有的轉(zhuǎn)化之后的數(shù)加起來,實現(xiàn)多位數(shù)的轉(zhuǎn)化。以三個數(shù)
18、轉(zhuǎn)化為三位數(shù)為例?,F(xiàn)在已知NUM11為第一次鍵入的數(shù),NUM6為第二次鍵入的數(shù),NUM8為第三次鍵入的數(shù),NUM10初值為0,其流程如下。圖2-4 多位數(shù)轉(zhuǎn)化流程圖程序:;進行三個數(shù)到十進制三位數(shù)的轉(zhuǎn)換MOVFNUM8,W;將NUM8復(fù)制到MUM7MOVWFNUM7MOVLW00H;判斷百位數(shù)是否為0SUBWFNUM11,FBTFSSSTATUS,ZCALLJIABAI;不為0,調(diào)用加百子程序MOVLW00H;為0,繼續(xù)判斷十位數(shù)是否為0SUBWFNUM6,FBTFSSSTATUS,ZCALLJIASHI2;不為0,調(diào)用加十2子程序MOVFNUM10,W;將個位數(shù)與NUM10相加ADDWFNU
19、M7,WMOVWFNUMB;組成的數(shù)放入顯示變量NUMBRETURN;加百子程序JIABAIMOVLW.100;NUM10加100ADDWFNUM10,FDECFNUM11,F;NUM11減1BTFSSSTATUS,Z;判斷是否為0GOTOJIABAI;不為0,返回加百RETURN;為0,返回;加十2子程序JIASHI2MOVLW.10;NUM10加10ADDWFNUM10,FDECFNUM6,F;NUM6減1BTFSSSTATUS,Z;是否為0GOTOJIASHI2;否,繼續(xù)加十RETURN;是,返回2.1.4 TMR0中斷服務(wù)子程序為實現(xiàn)精準(zhǔn)定時,我們采用TMR0定時器,它能夠?qū)崿F(xiàn)精確到微
20、秒的計時。但是TMR0定時器所能定時的最長時間為65毫秒,為實現(xiàn)1秒的定時,我們選擇其定時50毫秒,循環(huán)20次的方法。由定時時間=分屏比*指令周期*(256-初值),我們能夠算出當(dāng)分頻比為1:256時使其定時50毫秒時的初值為3DH,當(dāng)TMR0送入初值時該計時器開始計時,當(dāng)計時循環(huán)20次時計數(shù)變量減1,這就是它工作的基本原理。有關(guān)TMR0的中斷控制寄存器主要有OPTION_REG和INTCON,前者可以控制其分頻比,后者用來控制中斷的使能位,為使其正常工作,總中斷和它的使能位必須同時打開?;诖嗽?,我們寫出程序如下:ORG 0x004 ; interrupt vector locationm
21、ovwf w_temp ; save off current W register contentsmovfSTATUS,w ; move status register into W registermovwfstatus_temp ; save off contents of STATUS registerBCFINTCON,T0IF;清TMR0溢出標(biāo)志位DECFSZCOUNTER;循環(huán)減1,是否為0GOTORT;否,中斷返回DECFNUMB;是,計數(shù)變量減1MOVLW.20;循環(huán)數(shù)賦初值20MOVWFCOUNTERRTMOVLW3DH;50毫秒時間常數(shù)初值MOVWFTMR0movf st
22、atus_temp,w ; retrieve copy of STATUS registermovwfSTATUS ; restore pre-isr STATUS register contentsswapf w_temp,fswapf w_temp,w ; restore pre-isr W register contentsretfie ; return from interrupt主程序中有關(guān)部分為:BSF STATUS,RP0;進入體1MOVLW07H;分頻比為1:256MOVWFOPTION_REG2.1.5 倒計時顯示子程序基本的輸入及輔助程序準(zhǔn)備完畢,接下來是主體的顯示程序。前
23、面提到過,顯示程序分為兩部分,前面一部分負(fù)責(zé)鍵盤的顯示,這一部分負(fù)責(zé)計數(shù)變量變化時其顯示的變化。由前面的多個數(shù)轉(zhuǎn)化為多位數(shù)的準(zhǔn)備,我們易知該子程序應(yīng)該具有將多位數(shù)分解為多個數(shù)并分別送入各個位選顯示的功能。其分解子程序工作過程如下,除初值外,其他參數(shù)初值均為0。圖2-5 分解流程圖當(dāng)送入的數(shù)值被分解之后,調(diào)用3位數(shù)碼管顯示子程序,實現(xiàn)3位數(shù)的動態(tài)掃描,當(dāng)計時器計時時間到1秒之后,變量值減1,分解子程序分解,送入顯示,數(shù)碼管顯示三位數(shù)減1,實現(xiàn)了1秒倒計時功能。其子程序在總程序中可查,不再多說。2.2 附加功能部分為增加該倒計時器工作的靈活性,我們增加了一些比如暫停,繼續(xù),加一,減一,復(fù)位和歸零后
24、重新開始等附加功能。2.2.1 暫停和繼續(xù)倒計時的功能是通過TMR0定時器實現(xiàn)的,定時器時間到后顯示變量減1,因此,可通過控制定時器來實現(xiàn)暫停和繼續(xù)功能??刂贫〞r器的中斷開關(guān)是本節(jié)的關(guān)鍵。圖2-6 中斷控制流程圖程序代碼:;B鍵,用于計數(shù)暫停JIANBCALLSFANG;釋放BCFINTCON,5;T0使能關(guān)閉,計數(shù)停止RETURN;C鍵,用于計數(shù)繼續(xù)JIANCCALLSFANG;釋放BSFINTCON,5;T0使能打開,計數(shù)繼續(xù)RETURN2.2.2 計數(shù)功能計數(shù)功能的實現(xiàn)是對計數(shù)變量的控制,運行過程中,變量加一實現(xiàn)顯示加一,變量減一實現(xiàn)顯示減一。其程序如下:;D鍵,用于計數(shù)加一JIANDC
25、ALLSFANG;釋放INCFNUMB;顯示變量加一RETURN;E鍵,用于計數(shù)減一JIANECALLSFANG;釋放DECFNUMB;顯示變量減一RETURN2.2.3 復(fù)位和歸零所謂復(fù)位,是指該鍵按下后一切恢復(fù)初始狀態(tài),計時器可以重新工作。其主要操作是使定時器關(guān)閉,有關(guān)變量初始化,并跳轉(zhuǎn)到按鍵大循環(huán)。;F鍵,用于清零和重新開始JIANFCALLSFANG;調(diào)用釋放子程序BCFINTCON,5;T0使能關(guān)閉,停止計時MOVLW01H;鍵盤次數(shù)判斷恢復(fù)初始值MOVWFKEYFLAGCLRFNUM9;中間變量的初始化CLRFNUM10GOTOLOOP;跳轉(zhuǎn)至LOOP大循環(huán)當(dāng)?shù)褂嫊r為0后,指示燈和
26、蜂鳴器發(fā)出警示,之后計時器恢復(fù)初始狀態(tài),可以重新工作。它的原理同復(fù)位相同,都是參數(shù)的初始化。LIGHTBCFINTCON,5;關(guān)閉T0使能,計時器停止工作CALLSHANSHU;調(diào)用小燈閃爍子程序MOVLW01H;KEYFLAG初始化MOVWFKEYFLAGCLRFNUM9;中間變量的初始化CLRFNUM10GOTOLOOP;跳轉(zhuǎn)至LOOP大循環(huán),重新開始工作2.3 結(jié)束提示部分當(dāng)計時到0時,三色小燈各亮滅一次,且小燈亮起蜂鳴器響起,亮燈關(guān)閉蜂鳴器停止鳴叫。圖2-7 提醒子程序流程圖程序在主程序中可查,不再贅述。2.4 程序部分總結(jié)介紹完所有子程序的工作原理之后,還要將其有機的組合起來。這里采
27、用大循環(huán)的方式,不停地對程序進行掃描,當(dāng)掃描到某一部分發(fā)現(xiàn)需要調(diào)用或跳轉(zhuǎn)時會相應(yīng)的調(diào)用或跳轉(zhuǎn)至其他子程序。這樣就把以上所設(shè)計的子程序連接起來,組成一個整體。第三章 實物照片3.1 實驗板照片將元件按照電路設(shè)計圖焊接完成后如下圖:圖3-1 焊接實物圖3.2 脫機運行照片將程序燒寫進實驗板中,從鍵盤輸入初值123,按下開始鍵,開始倒計時,圖為開始時、計時到119、計時到116時暫停的照片。圖3-2 鍵入初值顯示圖3-3 計時過程記錄圖3-4 計時過程中暫停第四章 問題與體會兩周的單片機課程設(shè)計轉(zhuǎn)瞬即逝,這兩周是我感覺過的最快的兩周。因為每天大部分時間都用在設(shè)計上,而我們對單片機的設(shè)計還不夠熟練,總
28、是花上大量的時間弄明白一個小小的問題,有時一個錯誤會耽誤上半天而無法發(fā)現(xiàn),所以,當(dāng)我們?nèi)〉靡稽c點進步之后才會發(fā)現(xiàn)已經(jīng)過去了很長的時間。這兩周里我們體驗了從焊板到編寫程序,再到燒寫、調(diào)試程序,最終完成我們的設(shè)計的艱辛歷程?;厥渍麄€過程,我會發(fā)現(xiàn)自己的許多不足。首先是對編程軟件的使用不夠熟練,剛開始編寫程序常常不能夠靈活的新建工程,添加文件,遇到意外問題也會不知所措,經(jīng)過兩天的熟悉之后,終于能夠解決這些基本問題。第二個問題是編程過程中經(jīng)常出現(xiàn)理想思維,以為自己的思路能夠走通但是調(diào)試之后才發(fā)現(xiàn)無法實現(xiàn),經(jīng)過無數(shù)遍的理順之后才發(fā)現(xiàn)有些地方是明顯的錯誤,有時是語言的使用錯誤,有時是思路的局限,然而經(jīng)過不
29、斷的發(fā)現(xiàn)問題、解決問題我們的程序逐漸完善。還有一個很嚴(yán)重的問題就是焊接問題,由于焊接的不夠熟練,焊出的焊點不夠圓潤飽滿,偶爾還會出現(xiàn)虛焊的情況。另外,焊接用的導(dǎo)線不夠簡潔,看起來比較混亂??v使有許多的不足與遺憾,這次課程設(shè)計我還是學(xué)到了很多的東西。不僅復(fù)習(xí)了課本上所學(xué)的內(nèi)容,還把理論付諸于實踐,并使我們切身的體會到理論用于實踐時會出現(xiàn)的各種問題,通過解決這些問題,我們處理實際問題的能力有了很大的提高。通過這次課程設(shè)計我了解了電子設(shè)計的基本流程,熟練的掌握了編程軟件和匯編語言的使用,同時鍛煉了我的編程思維,讓我在以后的編程過程中少走一些彎路。學(xué)習(xí)到這些的同時,它也對我的心態(tài)起到了鍛煉的作用,遇到
30、問題時不能一味的抱怨,而是應(yīng)該靜下心來仔細(xì)的分析問題產(chǎn)生的原因,并且找到解決的辦法。它也讓我意識到團隊協(xié)作的重要性,在這次兩周的設(shè)計過程中,我和我的隊友密切協(xié)作才能夠完成最終的結(jié)果。這次課程設(shè)計提高了我們解決實際問題的能力,為我們積累了寶貴的實踐經(jīng)驗。相信這次PIC的單片機課程設(shè)計也促進了我能夠觸類旁通的能力,為其他類型的單片機設(shè)計甚至所有電子類設(shè)計打下了堅實的基礎(chǔ)。結(jié)論本次設(shè)計實現(xiàn)了最初的設(shè)計要求,實際運行結(jié)果與理想一致,計時精準(zhǔn),使用簡單。能夠靈敏的顯示所要輸入的數(shù)字,并能夠精確的計時,有很廣泛的應(yīng)用前景,可以應(yīng)用于跑步計時、辯論賽的計時等各種需要計時的比賽場合,有很強的現(xiàn)實意義。但是該計
31、時器局限于255秒以內(nèi)的的計時,計時長度有限制;而且體積較大,線路較為復(fù)雜,不適合攜帶。出于這些問題,只要時間足夠,可以設(shè)置兩個內(nèi)存空間用于存放計時變量,且把數(shù)碼管擴展為4位甚至更多,就能夠?qū)崿F(xiàn)多達65535秒的計時,當(dāng)然實際生活中很少用到這么長時間的秒用計時。對于后者,只要電路板的編排合理,就可以省去導(dǎo)線連接的步驟,而且能夠?qū)崿F(xiàn)各種形狀的制作,有助于廣大使用者的喜愛。參考文獻1. 李榮正. PIC單片機原理及應(yīng)用M. 北京航空航天大學(xué)出版社,20052. 劉和平.PIC16F887單片機程序設(shè)計及應(yīng)用M.北京航天航空大學(xué)出版社,20053. 王有緒.單片機接口技術(shù)及應(yīng)用系統(tǒng)設(shè)計M.高等教育出
32、版社,20004. 李學(xué)海.PIC單片機實用教程基礎(chǔ)篇M. 北京航天航空大學(xué)出版社,20025. 竇振中.PIC系列單片機原理和程序設(shè)計M.北京航空航天大學(xué)出版社,200026附錄:程序清單list p=16f887 ; list directive to define processor#include <p16f887.inc> ; processor specific variable definitions_CONFIG _CONFIG1,_LVP_OFF&_IESO_OFF&_BOR_OFF&_PWRTE_ON&_WDT_OFF&_
33、XT_OSC;* VARIABLE DEFINITIONSw_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for context savingBIANEQU0X40;鍵盤顯示中間變量KEYFLAGEQU0X43NUMEQU0X44NUM4EQU0X48NUMBEQU0X49;計數(shù)變量GEEQU0X50SHIEQU0X51BAIEQU0X52SHANGEQU0X53YUSHUEQU0X54COUNTEREQU0X55NUM5EQU0X56NUM6EQU0X57NUM7E
34、QU0X58NUM8EQU0X59NUM9EQU0X60NUM10EQU0X61NUM11EQU0X62;*ORG 0x000 ; processor reset vectorclrf PCLATH ; ensure page bits are cleared goto MAIN ; go to beginning of programORG 0x004 ; interrupt vector locationmovwf w_temp ; save off current W register contentsmovfSTATUS,w ; move status register into W
35、registermovwfstatus_temp ; save off contents of STATUS registerBCFINTCON,T0IF;清TMR0溢出標(biāo)志位DECFSZCOUNTER;循環(huán)減1,是否為0GOTORT;否,中斷返回DECFNUMB;是,計數(shù)變量減1MOVLW.20;循環(huán)數(shù)賦初值20MOVWFCOUNTERRTMOVLW3DH;50毫秒時間常數(shù)初值MOVWFTMR0; isr code can go here or be located as a call subroutine elsewheremovf status_temp,w ; retrieve cop
36、y of STATUS registermovwfSTATUS ; restore pre-isr STATUS register contentsswapf w_temp,fswapf w_temp,w ; restore pre-isr W register contentsretfie ; return from interruptMAIN;主程序; remaining code goes hereBSFSTATUS,RP1;16F887初始化BSFSTATUS,RP0CLRFANSELCLRFANSELHBCFSTATUS,RP1BCFSTATUS,RP0CLRFBIAN;變量的初始化
37、CLRFNUM4CLRFNUMCLRFNUM8CLRFNUM9CLRFNUM10MOVLW01H;KEYFLAG初始化,為1MOVWFKEYFLAGBSF STATUS,RP0;進入體1CLRFTRISD;RD設(shè)為輸出MOVLW07H;分頻比為1:256MOVWFOPTION_REGMOVLW0C1H;RB的位1,2,3,4,5設(shè)為輸出MOVWFTRISBMOVLW0F0H;RD低四位輸入,高四位輸出MOVWFTRISCMOVLW08H;RE位1,2,3輸出MOVWFTRISEBCFSTATUS,RP0;進入體0MOVLWB'10100000'打開總中斷和T0中斷使能位MOVW
38、FINTCONMOVLW.20;送入中斷循環(huán)次數(shù)初值為20MOVWFCOUNTERMOVLW0FFH;RB,RD關(guān)閉MOVWFPORTDMOVWFPORTBMOVLW07H;RE關(guān)閉MOVWFPORTECLRFNUM5;清空變量CLRFNUM6CLRFNUM7GOTOLOOP;跳至大循環(huán);動態(tài)計數(shù)顯示子程序,用于倒計時數(shù)的顯示LOOP6CALLCALC;調(diào)用分解子程序CALLDISPLAY;調(diào)用顯示子程序CALLJIANPAN;調(diào)用鍵盤掃描子程序MOVLW00H;計數(shù)變量是否為0SUBWFNUMB,WBTFSCSTATUS,ZCALLLIGHT;是,調(diào)用為0提示及恢復(fù)子程序GOTOLOOP6;
39、否,返回循環(huán);提示子程序,用于計時為0時的提示和程序的重初始化LIGHTBCFINTCON,5;關(guān)閉T0使能,計時器停止工作CALLSHANSHU;調(diào)用小燈閃爍子程序MOVLW01H;KEYFLAG初始化MOVWFKEYFLAGCLRFNUM9;中間變量的初始化CLRFNUM10GOTOLOOP;跳轉(zhuǎn)至LOOP大循環(huán),重新開始工作;分解子程序,多位數(shù)的分解CALCMOVFNUMB,W;顯示變量送入W寄存器CALLDIV10;調(diào)用除十子程序MOVWFGE;將返回數(shù)送入GE,用于個位顯示MOVFSHANG,W;變量SHANG送如W寄存器CALLDIV10;調(diào)用除十子程序MOVWFSHI;返回數(shù)送入
40、SHI,用于十位的顯示MOVFSHANG,W;SHANG送入BAI,用于百位的顯示MOVWFBAIRETURN;顯示子程序DISPLAYMOVFGE,W;個位數(shù)送入W寄存器CALLCHABIAO;查表子程序MOVWFPORTD;碼值送入段選BCFPORTB,1;個位位選打開CALLDELAY;延時BSFPORTB,1;位選關(guān)閉MOVFSHI,WCALLCHABIAO;十位數(shù)查表MOVWFPORTD;送入段選BCFPORTB,2;十位位選打開CALLDELAY;延時BSFPORTB,2;位選關(guān)閉MOVFBAI,WCALLCHABIAO;百位數(shù)查表MOVWFPORTD;送入段選BCFPORTB,3
41、;百位位選打開CALLDELAY;延時BSFPORTB,3;位選關(guān)閉RETURN;除十子程序DIV10MOVWFYUSHU;將值送入YUSHUCLRFSHANG;清空SHANGMOVLW.10DIVLOOPSUBWFYUSHU,F;YUSHU減10INCFSHANG,F;SHANG加1BTFSCSTATUS,C;是否借位GOTODIVLOOP;無,返回繼續(xù)判斷DECFSHANG,F;是,SHANG減1ADDWFYUSHU,W;YUSHU加10放入W返回RETURN;鍵盤掃描及顯示大循環(huán),用于鍵入數(shù)的顯示LOOPCALLJIANPAN;調(diào)用鍵盤掃描子程序BTFSCKEYFLAG,1;是否第一次鍵
42、入CALLXIANSHI1;是,調(diào)用顯示1子程序BTFSCKEYFLAG,2;是否第二次鍵入CALLXIANSHI2;是,調(diào)用顯示2子程序BTFSCKEYFLAG,3;是否第三次鍵入CALLXIANSHI3;是,調(diào)用顯示3子程序BTFSCKEYFLAG,4;是否第四次按下CALLFLAGINI;是,調(diào)用鍵入次數(shù)循環(huán)子程序GOTOLOOP;返回大循環(huán);鍵入次數(shù)循環(huán)子程序FLAGINIMOVLW02H;KEYFLAG恢復(fù)初始值MOVWFKEYFLAGRETURN;查表子程序CHABIAOADDWFPCL,FRETLW0XC0RETLW0XF9RETLW0XA4RETLW0XB0RETLW0X99R
43、ETLW0X92RETLW0X82RETLW0XF8RETLW0X80RETLW0X90;鍵盤顯示1子程序XIANSHI1BCFPORTB,1;位選打開MOVFBIAN,W;送入鍵入數(shù)段選MOVWFPORTDMOVWFNUM;段選復(fù)制到NUM里,為后來使用BSFPORTB,1;關(guān)閉位選MOVFNUM8,W;將加入數(shù)送入NUM5MOVWFNUM5MOVWFNUMB;同時送入顯示變量MOVWFNUM11;為顯示3子程序所用RETURN;鍵盤顯示2子程序,用于2位數(shù)的鍵入顯示XIANSHI2BCFPORTB,1;個位位選打開MOVFBIAN,W;送入段選MOVWFPORTDMOVWFNUM4;同時復(fù)
44、制到NUM4,為3位顯示所用CALLDELAY;延時BSFPORTB,1;個位位選關(guān)閉BCFPORTB,2;十位位選打開MOVFNUM,W;送入段選MOVWFPORTDCALLDELAY;延時BSFPORTB,2;位選關(guān)閉;2個數(shù)組合成十進制兩位數(shù)MOVFNUM8,W;將NUM8放入NUM6,為送數(shù)所用MOVWFNUM6MOVLW00H;十位是否為0SUBWFNUM5,FBTFSSSTATUS,ZCALLJIASHI1;否,調(diào)用加十1子程序MOVFNUM9,W;將NUM9與NUM6相加ADDWFNUM6,WMOVWFNUMB;放入顯示變量里RETURN;加十1子程序JIASHI1MOVLW.1
45、0;NUM9加十ADDWFNUM9,FDECFNUM5,F;NUM5減1BTFSSSTATUS,Z;判斷是否為0GOTOJIASHI1;否,繼續(xù)加十RETURN;是,返回;鍵盤顯示3子程序,用于鍵入3位數(shù)的顯示XIANSHI3BCFPORTB,1;個位位選打開MOVFBIAN,W;送入個位段選MOVWFPORTDCALLDELAY;調(diào)用短時間延時子程序BSFPORTB,1;關(guān)閉個位位選BCFPORTB,2;打開十位位選MOVFNUM4,W;送入十位段選MOVWFPORTDCALLDELAY;延時BSFPORTB,2;關(guān)閉位選BCFPORTB,3;打開百位位選MOVFNUM,W;送入百位段選MOVWFPORTDCALLDELAY;延時BSFPORTB,3;關(guān)閉位選;進行三個數(shù)到十進制三位數(shù)的轉(zhuǎn)換MOVFNUM8,W;將NUM8復(fù)制到MUM7MOVWFNUM7MOVLW00H;判斷百位數(shù)是否為0SUBWFNUM11,FBTFSSSTATUS,ZCALLJIABAI;不為0,調(diào)用加百子程序MOVLW00H;為0,繼續(xù)判斷十位數(shù)是否為0SUBWFNUM6,FBTFSSSTATUS,ZCALLJIASHI2;不為0,調(diào)用加十2子程序MOVF
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《板帶材生產(chǎn)概述》課件
- 《電子交易》課件
- DBJT 13-302-2018 現(xiàn)澆混凝土空心樓蓋應(yīng)用技術(shù)規(guī)程
- 第18課 從九一八事變到西安事變(解析版)
- 名著之魅 解析與啟示
- 體育場館衛(wèi)生消毒流程
- 腫瘤科護士年終總結(jié)
- 2023-2024年項目部安全管理人員安全培訓(xùn)考試題答案典型題匯編
- 2023年-2024年生產(chǎn)經(jīng)營單位安全教育培訓(xùn)試題答案往年題考
- 外貿(mào)公司實習(xí)報告合集九篇
- 65mn彈簧鋼熱處理工藝
- 水電風(fēng)電項目審批核準(zhǔn)流程課件
- 足球教練員素質(zhì)和角色
- 初中八年級語文課件 桃花源記【省一等獎】
- 名校長工作總結(jié)匯報
- 商務(wù)接待禮儀流程
- 護理不良事件用藥錯誤講課
- 新教材人教版高中英語選擇性必修第一冊全冊教學(xué)設(shè)計
- 2024北京大興區(qū)初三(上)期末化學(xué)試卷及答案
- 媒體與新聞法律法規(guī)法律意識與職業(yè)素養(yǎng)
- 推土機-推土機構(gòu)造與原理
評論
0/150
提交評論