三位倒計時器PIC單片機課程設計含全部匯編程序清單_第1頁
三位倒計時器PIC單片機課程設計含全部匯編程序清單_第2頁
三位倒計時器PIC單片機課程設計含全部匯編程序清單_第3頁
三位倒計時器PIC單片機課程設計含全部匯編程序清單_第4頁
三位倒計時器PIC單片機課程設計含全部匯編程序清單_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 . . . 課程設計報告課程名稱:單片機原理與接口技術課程設計 設計題目:三位倒計時器院 系: 機電工程學院 班 級: 2012級電氣工程與其自動化專業(yè) 姓 名: XXX 學 號: 2012XXXX 指導教師: XXXX 設計時間: 2014年X月X日 出勤實物報告總分42 / 46目錄前言1第一章設計方案11.1 設計容與要求11.1.1 設計容11.1.2設計要求11.1.3功能設計21.2硬件設計21.2.1 矩陣鍵盤電路設計21.2.2數(shù)碼管電路設計31.2.3 LED與蜂鳴器電路設計41.2.4單片機主電路設計41.2.5上電電路的設計51.2.6總電路圖51.3總體方案6第二章軟

2、件設計72.1 倒計時部分72.1.1 鍵盤掃描子程序82.1.2 0到9按鍵功能子程序和鍵盤顯示子程序92.1.3 一位轉多位十進制子程序122.1.4 TMR0中斷服務子程序132.1.5 倒計時顯示子程序152.2 附加功能部分152.2.1 暫停和繼續(xù)162.2.2 計數(shù)功能172.2.3 復位和歸零172.3 結束提示部分182.4 程序部分總結18第三章實物照片193.1 實驗板照片193.2 脫機運行照片19第四章問題與體會21結論22參考文獻23附錄:程序清單24前言此次課程設計的容為三位數(shù)的倒計時器的設計。目前倒計時器的發(fā)展已經(jīng)相當先進,我做這次設計的主要目的是想更進一步了解

3、基本電路的設計流程,以提高自己的設計理念,使自己的動手動腦能力有更進一步提高。通過解決現(xiàn)實生活中的問題,鞏固和加深單片機課程中所學的理論知識和實驗能力,加深對單片機軟硬件知識的理解,以獲得初步的應用經(jīng)驗,為以后從事生產(chǎn)和科研工作打下一定的基礎。本次設計注重對單片機工作原理以與鍵盤控制與顯示原理的理解,能夠提高自己的動手能力和設計能力,以培養(yǎng)自己的創(chuàng)新能力,做到理論和實踐相結合。本次設計的重要意義還在于對單片機的部結構和工作狀態(tài)做更進一步的了解,同時還對單片機的接口技術,中斷技術,存儲方式和控制方式有了更深層次的了解。另外,倒計時器在生活中應用廣泛,因此它的功能靈活性和精度的要求就更加顯得重要。

4、通過此次練習,我為自己設下了很多要求,力求此倒計時器的功能完美性和精度精細性,以加深自己對電子產(chǎn)品設計的認知。第一章 設計方案1.1 設計容與要求1.1.1 設計容本次設計的倒計時器需要由4*4矩陣鍵盤、3位數(shù)碼管、LED小燈和蜂鳴器等有關輸入輸出器件組成,要求倒計時的初始值和控制按鍵均由鍵盤輸入,數(shù)碼管顯示倒計時的時間,小燈和蜂鳴器負責終止提示。因此,本次的設計容包括硬件設計,流程框圖與軟件的編寫與調試。1.1.2設計要求根據(jù)以上設計容的介紹與我們的設計目的,總結出以下的設計要求:1.能夠實現(xiàn)255以數(shù)的倒計時;2.倒計時結束,報警提示;3.通過按鍵設置倒計時的初始值;4.精度為微秒級的計時

5、;5.具有“開始”、“暫?!?、“繼續(xù)”、“加一”、“減一”、“復位”等功能鍵;6.計時結束具有重新開始的功能。1.1.3功能設計為實現(xiàn)使用的靈活性和計數(shù)的精準性,我們采用TMR0定時器計時,功能鍵包括計時開始、暫停、繼續(xù)、加一、減一和復位。實現(xiàn)過程如下:當從鍵盤輸入任意三位以包括三位數(shù),數(shù)碼管顯示輸入數(shù)值,按下鍵A倒計時開始,按下鍵B倒計時暫停,按下鍵C倒計時繼續(xù);當發(fā)現(xiàn)計時過程中需要調整計時時,可以在暫?;蚍菚和G闆r下按下鍵D或鍵E實現(xiàn)計數(shù)加一和減一的功能。鍵F的主要功能為當計時需要停止和重新再來時,按下它,計時器重新工作。當?shù)褂嫊r到0時,小燈立即閃爍,同時蜂鳴器鳴叫,小燈閃爍3次以后,倒計

6、時器恢復初始狀態(tài),無需復位可以重新使用。按鍵過程中為確保使用人員知道鍵是否按下,按下時蜂鳴器應該響起以示提醒。1.2硬件設計我們設計的倒計時器需要由鍵盤任意輸入255以三位數(shù),并顯示于數(shù)碼管上,計時按鈕與相關功能均由鍵盤鍵入,同時為保證鍵盤按下的準確性,加入按下蜂鳴器提示功能,計時結束需有小燈和蜂鳴器提醒。因此,設計電路圖時必須涉與到鍵盤,4位數(shù)碼管,蜂鳴器,LED小燈,同時上電電路和單片機控制電路為必須加入的。1.2.1 矩陣鍵盤電路設計一般鍵盤控制有4*4、5*5等類型方式,考慮到功能所需和單片機引腳的限制,我們采用4*4矩陣鍵盤。該鍵盤有4個輸入端,4個輸出端,我們習慣于把它連接在單片機

7、的RC端口。因此,我們將RC的低四位與鍵盤的輸入相連,高四位與輸出相連,以實現(xiàn)鍵盤的正確掃描。圖1-1 鍵盤設計電路圖1.2.2數(shù)碼管電路設計數(shù)碼管顯示需送入位選和段選,我們所需為3位顯示,采用4個數(shù)碼管,因此需要將4個位選聯(lián)入單片機中,同時還將有8條段選聯(lián)入其中。習慣上,我們將段選接入RD的8個端口,4個位選接入RB的1到4位。圖1-2 數(shù)碼管設計電路圖1.2.3 LED與蜂鳴器電路設計蜂鳴器的設計就簡單許多,只需將其一端接入高電平,另一端接入單片機,為保證其正常工作,接入100歐姆的電阻。接入單片機的一端我們可以設為RE5。小燈同蜂鳴器相似,只需考慮接入的引腳,實驗中我們接入3種顏色的小燈

8、,其引腳分別連至單片機的RE端口的0、1、2位。圖1-3 LED與蜂鳴器電路連接圖1.2.4單片機主電路設計本次設計采用的單片機為PIC16F887,其功能強大,應用靈活。在使用它進行工作的前提是對其基本的引腳進行分配,這里我們只考慮VCC和GND以與晶振的接入,晶振選擇4MHz的晶振。其具體電路圖如下:圖1-4 單片機接線圖1.2.5上電電路的設計上電電路采用已有的設計好的電路,由USB接口供電,其電路圖如下:圖1-5 上電電路1.2.6總電路圖總電路圖如下圖1-6:圖1-6 總電路圖1.3總體方案由以上設計可知,系統(tǒng)的硬件原理圖如下所示:圖1-7 硬件原理圖設計時可采用模塊化程序設計方法。

9、模塊劃分時應遵循下述原則:1每個模塊應具有獨立的功能,能產(chǎn)生一個明確的結果;2模塊之間的控制參數(shù)應盡量簡單,數(shù)據(jù)參數(shù)應盡量少;3根據(jù)模塊的劃分原則,將該程序劃分成6個模塊,如圖1-8所示。主程序鍵盤掃描模塊鍵盤顯示模塊TMR0定時模塊動態(tài)顯示模塊倒計時結束提示模塊附加功能模塊圖1-8 程序模塊第二章 軟件設計基于硬件工作的軟件部分的編寫是通過匯編語言實現(xiàn)的。由以上分析可知,該部分大致包括鍵盤掃描,鍵盤顯示,TMR0定時器,動態(tài)顯示,結束提示和其他功能模塊等六大部分,其中每大部分又包括不等的若干小部分,下面通過總體到局部的過程介紹它的工作原理。2.1 倒計時部分該軟件由鍵入到倒計時的工作過程可由

10、下面框圖表示,此處省略了附加功能部分,只體現(xiàn)出其一般工作狀態(tài)。圖2-1 倒計時器工作流程圖該流程圖表示了軟件工作的大體過程,具體的過程如下子章節(jié)。2.1.1 鍵盤掃描子程序鍵盤連接有4個輸入端和4個輸出端,輸入端連在RC低四位,輸出端連在RC高四位,先讓低四位賦值低電平,若有鍵按下,高四位必有低電平出現(xiàn),之后繼續(xù)判斷具體哪個鍵被按下。以RC0為0為例,若令RC0=0,即判斷第一行是否有鍵按下,依次判斷高四位是否為低電平,若為低電平,則該鍵被按下,轉入相應功能子程序。以RC0=0為例,框圖如下:圖2-2 鍵盤掃描流程圖程序與注釋如下:JIANPANMOVLW00H;RC口低四位輸出低電平MOVW

11、FPORTCMOVLW0F0HANDWFPORTC,W;屏蔽低四位SUBLW0F0HBTFSCSTATUS,Z;判斷高四位是否為全1RETURN;是,無鍵輸入,返回繼續(xù)判斷CALLDELAY10MS;否,有可能有鍵輸入,延時20毫秒CALLDELAY10MSMOVLW0F0H;再判斷一次是否鍵入ANDWFPORTC,WSUBLW0F0HBTFSCSTATUS,ZRETURN;虛假輸入,返回BCFPORTB,5;確實有鍵輸入,蜂鳴器鳴叫MOVLW0FEH;逐行判斷哪個鍵輸入,首先RC0=0MOVWFPORTCBTFSSPORTC,4;判斷鍵0GOTOJIAN0;是,跳至鍵0功能子程序BTFSSP

12、ORTC,5;判斷鍵1GOTOJIAN1;是,跳至鍵1功能子程序BTFSSPORTC,6;判斷鍵2GOTOJIAN2;是,跳至鍵2功能子程序BTFSSPORTC,7;判斷鍵3GOTOJIAN3;是,跳至鍵3功能子程序2.1.20到9按鍵功能子程序和鍵盤顯示子程序0到9按鍵的主要作用是輸入我們倒計時的初值,當這些按鍵按下時,會調用鍵盤顯示子程序,將鍵入的數(shù)字通過數(shù)碼管顯示出來。為了判斷按下的次數(shù),設置變量KEFLAG,每調用一次鍵子程序變量左移一位,當需要顯示時,只需判斷KEFLAG的第幾位為1,就可判斷該鍵入的數(shù)字在數(shù)碼管的哪一個位上顯示。同時,鍵入的位數(shù)不同會調用不同的鍵盤顯示子程序,我們設

13、計的三位倒計時器有三個鍵盤顯示子程序,當按下一個數(shù)時,調用XIANSHI1,為靜態(tài)顯示;當按下第二個數(shù)時,數(shù)碼管動態(tài)掃描,顯示兩位數(shù),就需要調用XIANSHI2,同理按下3位數(shù)調用3位顯示子程序XIANSHI3。0到9按鍵功能子程序的另一個作用就是將該按鍵的標號放入指定的變量帶回,為之后的動態(tài)倒計時顯示提供十進制轉換所需的數(shù)字。該子程序如下,以0到1為例:;0到9按鍵,用于鍵入數(shù)字JIAN0CALLSFANG;釋放MOVLW00H;將0放入W寄存器MOVWFNUM8;NUM8帶0返回CALLCHABIAO;調用查表子程序MOVWFBIAN;BIAN帶0顯示碼返回RLFKEYFLAG,1;鍵按下

14、一次,KEYFLAG左移一位RETURNJIAN1CALLSFANG;釋放MOVLW01H;將1放入W寄存器MOVWFNUM8;NUM8帶1返回CALLCHABIAO;調用查表子程序MOVWFBIAN;BIAN帶1顯示碼返回RLFKEYFLAG,1;鍵按下一次,KEYFLAG左移一位RETURN該倒計時器將鍵盤鍵入數(shù)字的顯示和倒計時時數(shù)字的顯示分開,即兩者的顯示不是在同一個顯示子程序里。因此這里需要簡要的介紹一下鍵盤顯示子程。左圖展示了鍵的輸入在數(shù)碼管顯示的具體流程,其核心便是三個顯示子程序。對于顯示1子程序,由0到9按鍵功能子程序知,送到這里的變量為該按鍵的顯示碼值,由于為一位顯示,只需將第

15、一位位選打開,將碼值送入,關閉位選即可。由于多位顯示同樣需要該位的碼值,且新鍵入的變量一樣,所以我們應將該碼值備份兩份,為多位顯示做準備。圖2-3 選擇第幾個顯示子程序顯示2子程序和顯示3子程序與顯示1子程序相似,只是送入兩個數(shù)進行動態(tài)掃描。其程序代碼與注釋如下,這里以兩位顯示為例。;鍵盤顯示2子程序,用于2位數(shù)的鍵入顯示XIANSHI2BCFPORTB,1;個位位選打開MOVFBIAN,W;送入段選MOVWFPORTDMOVWFNUM4;同時復制到NUM4,為3位顯示所用CALLDELAY;延時BSFPORTB,1;個位位選關閉BCFPORTB,2;十位位選打開MOVFNUM,W;送入段選M

16、OVWFPORTDCALLDELAY;延時BSFPORTB,2;位選關閉;2個數(shù)組合成十進制兩位數(shù)MOVFNUM8,W;將NUM8放入NUM6,為送數(shù)所用MOVWFNUM6MOVLW00H;十位是否為0SUBWFNUM5,FBTFSSSTATUS,ZCALLJIASHI1;否,調用加十1子程序MOVFNUM9,W;將NUM9與NUM6相加ADDWFNUM6,WMOVWFNUMB;放入顯示變量里RETURN;加十1子程序JIASHI1MOVLW.10;NUM9加十ADDWFNUM9,FDECFNUM5,F;NUM5減1BTFSSSTATUS,Z;判斷是否為0GOTOJIASHI1;否,繼續(xù)加十R

17、ETURN;是,返回2.1.3一位轉多位十進制子程序由鍵盤顯示子程序我們發(fā)現(xiàn)其后多出一個多個一位數(shù)轉化為一個多位數(shù)的轉化子程序,它的作用是,在鍵入之后將該多位數(shù)送入倒計時顯示子程序開始倒計時,這是由倒計時顯示子程序決定的,只要送入任意一個三位數(shù),它都能夠實現(xiàn)準確的顯示。該程序的原理是:首先判斷鍵入幾位數(shù),最初鍵入的數(shù)在十位,十位還是百位,然后對其相應的加一百或時循環(huán),最后把所有的轉化之后的數(shù)加起來,實現(xiàn)多位數(shù)的轉化。以三個數(shù)轉化為三位數(shù)為例。現(xiàn)在已知NUM11為第一次鍵入的數(shù),NUM6為第二次鍵入的數(shù),NUM8為第三次鍵入的數(shù),NUM10初值為0,其流程如下。圖2-4 多位數(shù)轉化流程圖程序:;

18、進行三個數(shù)到十進制三位數(shù)的轉換MOVFNUM8,W;將NUM8復制到MUM7MOVWFNUM7MOVLW00H;判斷百位數(shù)是否為0SUBWFNUM11,FBTFSSSTATUS,ZCALLJIABAI;不為0,調用加百子程序MOVLW00H;為0,繼續(xù)判斷十位數(shù)是否為0SUBWFNUM6,FBTFSSSTATUS,ZCALLJIASHI2;不為0,調用加十2子程序MOVFNUM10,W;將個位數(shù)與NUM10相加ADDWFNUM7,WMOVWFNUMB;組成的數(shù)放入顯示變量NUMBRETURN;加百子程序JIABAIMOVLW.100;NUM10加100ADDWFNUM10,FDECFNUM11

19、,F;NUM11減1BTFSSSTATUS,Z;判斷是否為0GOTOJIABAI;不為0,返回加百RETURN;為0,返回;加十2子程序JIASHI2MOVLW.10;NUM10加10ADDWFNUM10,FDECFNUM6,F;NUM6減1BTFSSSTATUS,Z;是否為0GOTOJIASHI2;否,繼續(xù)加十RETURN;是,返回2.1.4TMR0中斷服務子程序為實現(xiàn)精準定時,我們采用TMR0定時器,它能夠實現(xiàn)精確到微秒的計時。但是TMR0定時器所能定時的最長時間為65毫秒,為實現(xiàn)1秒的定時,我們選擇其定時50毫秒,循環(huán)20次的方法。由定時時間=分屏比*指令周期*(256-初值),我們能夠

20、算出當分頻比為1:256時使其定時50毫秒時的初值為3DH,當TMR0送入初值時該計時器開始計時,當計時循環(huán)20次時計數(shù)變量減1,這就是它工作的基本原理。有關TMR0的中斷控制寄存器主要有OPTION_REG和INTCON,前者可以控制其分頻比,后者用來控制中斷的使能位,為使其正常工作,總中斷和它的使能位必須同時打開?;诖嗽?,我們寫出程序如下:ORG 0x004 ; interrupt vector locationmovwf w_temp ; save off current W register contentsmovfSTATUS,w ; move status register i

21、nto W registermovwfstatus_temp ; save off contents of STATUS registerBCFINTCON,T0IF;清TMR0溢出標志位DECFSZCOUNTER;循環(huán)減1,是否為0GOTORT;否,中斷返回DECFNUMB;是,計數(shù)變量減1MOVLW.20;循環(huán)數(shù)賦初值20MOVWFCOUNTERRTMOVLW3DH;50毫秒時間常數(shù)初值MOVWFTMR0movf status_temp,w ; retrieve copy of STATUS registermovwfSTATUS ; restore pre-isr STATUS regi

22、ster contentsswapf w_temp,fswapf w_temp,w ; restore pre-isr W register contentsretfie ; return from interrupt主程序中有關部分為:BSF STATUS,RP0;進入體1MOVLW07H;分頻比為1:256MOVWFOPTION_REG2.1.5倒計時顯示子程序基本的輸入與輔助程序準備完畢,接下來是主體的顯示程序。前面提到過,顯示程序分為兩部分,前面一部分負責鍵盤的顯示,這一部分負責計數(shù)變量變化時其顯示的變化。由前面的多個數(shù)轉化為多位數(shù)的準備,我們易知該子程序應該具有將多位數(shù)分解為多個數(shù)并

23、分別送入各個位選顯示的功能。其分解子程序工作過程如下,除初值外,其他參數(shù)初值均為0。圖2-5 分解流程圖當送入的數(shù)值被分解之后,調用3位數(shù)碼管顯示子程序,實現(xiàn)3位數(shù)的動態(tài)掃描,當計時器計時時間到1秒之后,變量值減1,分解子程序分解,送入顯示,數(shù)碼管顯示三位數(shù)減1,實現(xiàn)了1秒倒計時功能。其子程序在總程序中可查,不再多說。2.2 附加功能部分為增加該倒計時器工作的靈活性,我們增加了一些比如暫停,繼續(xù),加一,減一,復位和歸零后重新開始等附加功能。2.2.1 暫停和繼續(xù)倒計時的功能是通過TMR0定時器實現(xiàn)的,定時器時間到后顯示變量減1,因此,可通過控制定時器來實現(xiàn)暫停和繼續(xù)功能??刂贫〞r器的中斷開關是

24、本節(jié)的關鍵。圖2-6 中斷控制流程圖程序代碼:;B鍵,用于計數(shù)暫停JIANBCALLSFANG;釋放BCFINTCON,5;T0使能關閉,計數(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ù)加一JIANDCALLSFANG;釋放INCFNUMB;顯示變量加一RETURN;E鍵,用于計數(shù)減一JIANECALLSFANG;釋放DECFNUMB;顯示變量減一RETURN2.2.3復位和歸

25、零所謂復位,是指該鍵按下后一切恢復初始狀態(tài),計時器可以重新工作。其主要操作是使定時器關閉,有關變量初始化,并跳轉到按鍵大循環(huán)。;F鍵,用于清零和重新開始JIANFCALLSFANG;調用釋放子程序BCFINTCON,5;T0使能關閉,停止計時MOVLW01H;鍵盤次數(shù)判斷恢復初始值MOVWFKEYFLAGCLRFNUM9;中間變量的初始化CLRFNUM10GOTOLOOP;跳轉至LOOP大循環(huán)當?shù)褂嫊r為0后,指示燈和蜂鳴器發(fā)出警示,之后計時器恢復初始狀態(tài),可以重新工作。它的原理同復位一樣,都是參數(shù)的初始化。LIGHTBCFINTCON,5;關閉T0使能,計時器停止工作CALLSHANSHU;調

26、用小燈閃爍子程序MOVLW01H;KEYFLAG初始化MOVWFKEYFLAGCLRFNUM9;中間變量的初始化CLRFNUM10GOTOLOOP;跳轉至LOOP大循環(huán),重新開始工作2.3 結束提示部分當計時到0時,三色小燈各亮滅一次,且小燈亮起蜂鳴器響起,亮燈關閉蜂鳴器停止鳴叫。圖2-7 提醒子程序流程圖程序在主程序中可查,不再贅述。2.4 程序部分總結介紹完所有子程序的工作原理之后,還要將其有機的組合起來。這里采用大循環(huán)的方式,不停地對程序進行掃描,當掃描到某一部分發(fā)現(xiàn)需要調用或跳轉時會相應的調用或跳轉至其他子程序。這樣就把以上所設計的子程序連接起來,組成一個整體。第三章 實物照片3.1

27、實驗板照片將元件按照電路設計圖焊接完成后如下圖:圖3-1 焊接實物圖3.2 脫機運行照片將程序燒寫進實驗板中,從鍵盤輸入初值123,按下開始鍵,開始倒計時,圖為開始時、計時到119、計時到116時暫停的照片。圖3-2 鍵入初值顯示圖3-3 計時過程記錄圖3-4 計時過程中暫停第四章 問題與體會兩周的單片機課程設計轉瞬即逝,這兩周是我感覺過的最快的兩周。因為每天大部分時間都用在設計上,而我們對單片機的設計還不夠熟練,總是花上大量的時間弄明白一個小小的問題,有時一個錯誤會耽誤上半天而無法發(fā)現(xiàn),所以,當我們取得一點點進步之后才會發(fā)現(xiàn)已經(jīng)過去了很長的時間。這兩周里我們體驗了從焊板到編寫程序,再到燒寫、

28、調試程序,最終完成我們的設計的艱辛歷程?;厥渍麄€過程,我會發(fā)現(xiàn)自己的許多不足。首先是對編程軟件的使用不夠熟練,剛開始編寫程序常常不能夠靈活的新建工程,添加文件,遇到意外問題也會不知所措,經(jīng)過兩天的熟悉之后,終于能夠解決這些基本問題。第二個問題是編程過程中經(jīng)常出現(xiàn)理想思維,以為自己的思路能夠走通但是調試之后才發(fā)現(xiàn)無法實現(xiàn),經(jīng)過無數(shù)遍的理順之后才發(fā)現(xiàn)有些地方是明顯的錯誤,有時是語言的使用錯誤,有時是思路的局限,然而經(jīng)過不斷的發(fā)現(xiàn)問題、解決問題我們的程序逐漸完善。還有一個很嚴重的問題就是焊接問題,由于焊接的不夠熟練,焊出的焊點不夠圓潤飽滿,偶爾還會出現(xiàn)虛焊的情況。另外,焊接用的導線不夠簡潔,看起來比

29、較混亂??v使有許多的不足與遺憾,這次課程設計我還是學到了很多的東西。不僅復習了課本上所學的容,還把理論付諸于實踐,并使我們切身的體會到理論用于實踐時會出現(xiàn)的各種問題,通過解決這些問題,我們處理實際問題的能力有了很大的提高。通過這次課程設計我了解了電子設計的基本流程,熟練的掌握了編程軟件和匯編語言的使用,同時鍛煉了我的編程思維,讓我在以后的編程過程中少走一些彎路。學習到這些的同時,它也對我的心態(tài)起到了鍛煉的作用,遇到問題時不能一味的抱怨,而是應該靜下心來仔細的分析問題產(chǎn)生的原因,并且找到解決的辦法。它也讓我意識到團隊協(xié)作的重要性,在這次兩周的設計過程中,我和我的隊友密切協(xié)作才能夠完成最終的結果。

30、這次課程設計提高了我們解決實際問題的能力,為我們積累了寶貴的實踐經(jīng)驗。相信這次PIC的單片機課程設計也促進了我能夠觸類旁通的能力,為其他類型的單片機設計甚至所有電子類設計打下了堅實的基礎。結論本次設計實現(xiàn)了最初的設計要求,實際運行結果與理想一致,計時精準,使用簡單。能夠靈敏的顯示所要輸入的數(shù)字,并能夠精確的計時,有很廣泛的應用前景,可以應用于跑步計時、辯論賽的計時等各種需要計時的比賽場合,有很強的現(xiàn)實意義。但是該計時器局限于255秒以的的計時,計時長度有限制;而且體積較大,線路較為復雜,不適合攜帶。出于這些問題,只要時間足夠,可以設置兩個存空間用于存放計時變量,且把數(shù)碼管擴展為4位甚至更多,就

31、能夠實現(xiàn)多達65535秒的計時,當然實際生活中很少用到這么長時間的秒用計時。對于后者,只要電路板的編排合理,就可以省去導線連接的步驟,而且能夠實現(xiàn)各種形狀的制作,有助于廣大使用者的喜愛。參考文獻1. 榮正. PIC單片機原理與應用M. 航空航天大學,20052. 和平.PIC16F887單片機程序設計與應用M.航天航空大學,20053. 王有緒.單片機接口技術與應用系統(tǒng)設計M.高等教育,20004. 學海.PIC單片機實用教程基礎篇M. 航天航空大學,20025. 竇振中.PIC系列單片機原理和程序設計M.航空航天大學,2000附錄:程序清單list p=16f887 ; list direc

32、tive to define processor#include <p16f887.inc> ; processor specific variable definitions_CONFIG _CONFIG1,_LVP_OFF&_IESO_OFF&_BOR_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC;* VARIABLE DEFINITIONSw_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for

33、context savingBIANEQU0X40;鍵盤顯示中間變量KEYFLAGEQU0X43NUMEQU0X44NUM4EQU0X48NUMBEQU0X49;計數(shù)變量GEEQU0X50SHIEQU0X51BAIEQU0X52SHANGEQU0X53YUSHUEQU0X54COUNTEREQU0X55NUM5EQU0X56NUM6EQU0X57NUM7EQU0X58NUM8EQU0X59NUM9EQU0X60NUM10EQU0X61NUM11EQU0X62;*ORG 0x000 ; processor reset vectorclrf PCLATH ; ensure page bits ar

34、e 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 registermovwfstatus_temp ; save off contents of STATUS registerBCFINTCON,T0IF;清TMR0溢出標志位DECFSZCOUNTER;循環(huán)減1,是否為0GOTORT;否,中

35、斷返回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 copy of STATUS registermovwfSTATUS ; restore pre-isr STATUS register contentsswapf w_temp,fswapf w_temp,w ; restore pre-isr

36、W register contentsretfie ; return from interruptMAIN;主程序; remaining code goes hereBSFSTATUS,RP1;16F887初始化BSFSTATUS,RP0CLRFANSELCLRFANSELHBCFSTATUS,RP1BCFSTATUS,RP0CLRFBIAN;變量的初始化CLRFNUM4CLRFNUMCLRFNUM8CLRFNUM9CLRFNUM10MOVLW01H;KEYFLAG初始化,為1MOVWFKEYFLAGBSF STATUS,RP0;進入體1CLRFTRISD;RD設為輸出MOVLW07H;分頻比

37、為1:256MOVWFOPTION_REGMOVLW0C1H;RB的位1,2,3,4,5設為輸出MOVWFTRISBMOVLW0F0H;RD低四位輸入,高四位輸出MOVWFTRISCMOVLW08H;RE位1,2,3輸出MOVWFTRISEBCFSTATUS,RP0;進入體0MOVLWB'10100000'打開總中斷和T0中斷使能位MOVWFINTCONMOVLW.20;送入中斷循環(huán)次數(shù)初值為20MOVWFCOUNTERMOVLW0FFH;RB,RD關閉MOVWFPORTDMOVWFPORTBMOVLW07H;RE關閉MOVWFPORTECLRFNUM5;清空變量CLRFNUM

38、6CLRFNUM7GOTOLOOP;跳至大循環(huán);動態(tài)計數(shù)顯示子程序,用于倒計時數(shù)的顯示LOOP6CALLCALC;調用分解子程序CALLDISPLAY;調用顯示子程序CALLJIANPAN;調用鍵盤掃描子程序MOVLW00H;計數(shù)變量是否為0SUBWFNUMB,WBTFSCSTATUS,ZCALLLIGHT;是,調用為0提示與恢復子程序GOTOLOOP6;否,返回循環(huán);提示子程序,用于計時為0時的提示和程序的重初始化LIGHTBCFINTCON,5;關閉T0使能,計時器停止工作CALLSHANSHU;調用小燈閃爍子程序MOVLW01H;KEYFLAG初始化MOVWFKEYFLAGCLRFNUM

39、9;中間變量的初始化CLRFNUM10GOTOLOOP;跳轉至LOOP大循環(huán),重新開始工作;分解子程序,多位數(shù)的分解CALCMOVFNUMB,W;顯示變量送入W寄存器CALLDIV10;調用除十子程序MOVWFGE;將返回數(shù)送入GE,用于個位顯示MOVFSHANG,W;變量SHANG送如W寄存器CALLDIV10;調用除十子程序MOVWFSHI;返回數(shù)送入SHI,用于十位的顯示MOVFSHANG,W;SHANG送入BAI,用于百位的顯示MOVWFBAIRETURN;顯示子程序DISPLAYMOVFGE,W;個位數(shù)送入W寄存器CALLCHABIAO;查表子程序MOVWFPORTD;碼值送入段選B

40、CFPORTB,1;個位位選打開CALLDELAY;延時BSFPORTB,1;位選關閉MOVFSHI,WCALLCHABIAO;十位數(shù)查表MOVWFPORTD;送入段選BCFPORTB,2;十位位選打開CALLDELAY;延時BSFPORTB,2;位選關閉MOVFBAI,WCALLCHABIAO;百位數(shù)查表MOVWFPORTD;送入段選BCFPORTB,3;百位位選打開CALLDELAY;延時BSFPORTB,3;位選關閉RETURN;除十子程序DIV10MOVWFYUSHU;將值送入YUSHUCLRFSHANG;清空SHANGMOVLW.10DIVLOOPSUBWFYUSHU,F;YUSHU

41、減10INCFSHANG,F;SHANG加1BTFSCSTATUS,C;是否借位GOTODIVLOOP;無,返回繼續(xù)判斷DECFSHANG,F;是,SHANG減1ADDWFYUSHU,W;YUSHU加10放入W返回RETURN;鍵盤掃描與顯示大循環(huán),用于鍵入數(shù)的顯示LOOPCALLJIANPAN;調用鍵盤掃描子程序BTFSCKEYFLAG,1;是否第一次鍵入CALLXIANSHI1;是,調用顯示1子程序BTFSCKEYFLAG,2;是否第二次鍵入CALLXIANSHI2;是,調用顯示2子程序BTFSCKEYFLAG,3;是否第三次鍵入CALLXIANSHI3;是,調用顯示3子程序BTFSCKE

42、YFLAG,4;是否第四次按下CALLFLAGINI;是,調用鍵入次數(shù)循環(huán)子程序GOTOLOOP;返回大循環(huán);鍵入次數(shù)循環(huán)子程序FLAGINIMOVLW02H;KEYFLAG恢復初始值MOVWFKEYFLAGRETURN;查表子程序CHABIAOADDWFPCL,FRETLW0XC0RETLW0XF9RETLW0XA4RETLW0XB0RETLW0X99RETLW0X92RETLW0X82RETLW0XF8RETLW0X80RETLW0X90;鍵盤顯示1子程序XIANSHI1BCFPORTB,1;位選打開MOVFBIAN,W;送入鍵入數(shù)段選MOVWFPORTDMOVWFNUM;段選復制到NUM

43、里,為后來使用BSFPORTB,1;關閉位選MOVFNUM8,W;將加入數(shù)送入NUM5MOVWFNUM5MOVWFNUMB;同時送入顯示變量MOVWFNUM11;為顯示3子程序所用RETURN;鍵盤顯示2子程序,用于2位數(shù)的鍵入顯示XIANSHI2BCFPORTB,1;個位位選打開MOVFBIAN,W;送入段選MOVWFPORTDMOVWFNUM4;同時復制到NUM4,為3位顯示所用CALLDELAY;延時BSFPORTB,1;個位位選關閉BCFPORTB,2;十位位選打開MOVFNUM,W;送入段選MOVWFPORTDCALLDELAY;延時BSFPORTB,2;位選關閉;2個數(shù)組合成十進制

44、兩位數(shù)MOVFNUM8,W;將NUM8放入NUM6,為送數(shù)所用MOVWFNUM6MOVLW00H;十位是否為0SUBWFNUM5,FBTFSSSTATUS,ZCALLJIASHI1;否,調用加十1子程序MOVFNUM9,W;將NUM9與NUM6相加ADDWFNUM6,WMOVWFNUMB;放入顯示變量里RETURN;加十1子程序JIASHI1MOVLW.10;NUM9加十ADDWFNUM9,FDECFNUM5,F;NUM5減1BTFSSSTATUS,Z;判斷是否為0GOTOJIASHI1;否,繼續(xù)加十RETURN;是,返回;鍵盤顯示3子程序,用于鍵入3位數(shù)的顯示XIANSHI3BCFPORTB

45、,1;個位位選打開MOVFBIAN,W;送入個位段選MOVWFPORTDCALLDELAY;調用短時間延時子程序BSFPORTB,1;關閉個位位選BCFPORTB,2;打開十位位選MOVFNUM4,W;送入十位段選MOVWFPORTDCALLDELAY;延時BSFPORTB,2;關閉位選BCFPORTB,3;打開百位位選MOVFNUM,W;送入百位段選MOVWFPORTDCALLDELAY;延時BSFPORTB,3;關閉位選;進行三個數(shù)到十進制三位數(shù)的轉換MOVFNUM8,W;將NUM8復制到MUM7MOVWFNUM7MOVLW00H;判斷百位數(shù)是否為0SUBWFNUM11,FBTFSSSTATUS,ZCALLJIABAI;不為0,調用加百子程序MOVLW00H;為0,繼續(xù)判斷十位數(shù)是否為0SUBWFNUM6,FBTFSSSTATUS,ZCALLJIASHI2;不為0,調用加十2子程序MOVFNUM10,W;將個位數(shù)與NUM10相加ADDWFNUM7,WMOVWFNUMB;組成的數(shù)放入顯示變量NUMBRETURN;加百子程序JIABAIMOVLW.100;NUM10加100ADDWFNUM10,FDECFNUM11,F;NUM11減1BTFSSSTATUS,Z;判斷是否為0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論