




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘要本設(shè)計(jì)的任務(wù)是是設(shè)計(jì)一個(gè)單片機(jī)控制的秒表系統(tǒng)。我們利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合顯示電路、LED數(shù)碼管以及按鍵來(lái)設(shè)計(jì)計(jì)時(shí)器。在設(shè)計(jì)時(shí),我們應(yīng)將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠正確地進(jìn)行加計(jì)數(shù)、減(倒)計(jì)時(shí)、快加和快減等功能,并且結(jié)合相應(yīng)的顯示驅(qū)動(dòng)程序,使數(shù)碼管能夠正確地顯示時(shí)間,暫停和中斷。數(shù)碼管顯示有靜態(tài)顯示和動(dòng)態(tài)顯示兩種方法。動(dòng)態(tài)顯示可以節(jié)省I/O口,硬件電路比較簡(jiǎn)單,但是編程比較復(fù)雜,而且顯示的效果不好;靜態(tài)顯示顯示效果好,編程簡(jiǎn)單,但卻浪費(fèi)I/O口。在我們的設(shè)計(jì)中,因?yàn)镮/O口是足夠使用的,所以我們采用靜態(tài)顯示。同時(shí),為了使我們?cè)O(shè)計(jì)的秒表更加容易操作,我們專門
2、設(shè)置了兩個(gè)指示燈,分別用來(lái)區(qū)分加減計(jì)數(shù)和快加/快減。另外,我們?cè)O(shè)計(jì)的秒表還有同時(shí)記錄四個(gè)數(shù)據(jù)的功能,在秒表的正常運(yùn)行過(guò)程中,我們按下計(jì)數(shù)鍵,秒表會(huì)自動(dòng)記錄一個(gè)數(shù)據(jù),按四次以后,秒表自動(dòng)停止,等待翻頁(yè)鍵的按下來(lái)查詢所記錄的成績(jī)。為了節(jié)省I/O口,我們?cè)谠O(shè)計(jì)時(shí)將快加鍵和上翻鍵,快減鍵和下翻鍵分別用同一個(gè)按鍵來(lái)實(shí)現(xiàn),使用的時(shí)候,通過(guò)設(shè)置鍵的狀態(tài)來(lái)區(qū)分按鍵的功能。秒表設(shè)有復(fù)位鍵,但秒表進(jìn)入死循環(huán)時(shí),按下復(fù)位鍵即可回到初始狀態(tài)。在因?yàn)閱纹瑱C(jī)的I/O口還有剩余,而且我們的程序采用的是模塊化設(shè)計(jì),所以可以很方便的對(duì)程序進(jìn)行擴(kuò)展。通過(guò)WAVE軟件的仿真和PROTEUS的仿真,我們的設(shè)計(jì)能夠?qū)崿F(xiàn)預(yù)想的功能。目
3、錄1 概述31.1 設(shè)計(jì)任務(wù)3 1.2 設(shè)計(jì)要求3 1.3 功能簡(jiǎn)介32 系統(tǒng)總體方案及硬件設(shè)計(jì)52.1 電源電路52.2 晶振電路62.3 復(fù)位電路72.4 顯示電路82.5 鍵盤電路83軟件設(shè)計(jì)93.1 開機(jī)初始化程序93.2 鍵盤掃描程序 103.3 計(jì)時(shí)程序 113.4 快加和快減程序 123.5 翻頁(yè)程序 133.6 暫停程序 143.7 計(jì)數(shù)程序 143.8 記錄數(shù)據(jù)程序 163.9顯示子程序 163.10 10毫秒延時(shí)子程序 163.11 程序流程圖174 Proteus軟件仿真194.1 開機(jī)的仿真圖 194.2 正計(jì)時(shí)仿真圖 194.3 減計(jì)時(shí)仿真圖 204.4 快加快減計(jì)數(shù)
4、仿真圖 214.5 暫停和計(jì)數(shù)仿真圖 224.6 仿真結(jié)果與分析 235課程設(shè)計(jì)體會(huì) 245.1 設(shè)計(jì)中遇到的問(wèn)題及分析 245.2 心得體會(huì) 24參考文獻(xiàn) 26附1:源程序代碼27附2:系統(tǒng)原理圖351 概述1.1 設(shè)計(jì)任務(wù)本次單片機(jī)課程設(shè)計(jì)主要是設(shè)計(jì)一個(gè)單片機(jī)控制的秒表系統(tǒng)。利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合顯示電路、LED數(shù)碼管以及按鍵來(lái)設(shè)計(jì)計(jì)時(shí)器。在設(shè)計(jì)時(shí),我們應(yīng)將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠正確地進(jìn)行加計(jì)數(shù)、減(倒)計(jì)時(shí)、快加和快減等功能,并且結(jié)合相應(yīng)的顯示驅(qū)動(dòng)程序,使數(shù)碼管能夠正確地顯示時(shí)間,暫停和中斷。1.2 設(shè)計(jì)要求 1)能同時(shí)記錄四個(gè)相對(duì)獨(dú)立的時(shí)間,并且
5、能夠通過(guò)一個(gè)按鍵使其分別顯示。 2)使用兩位LED顯示,顯示時(shí)間為0099秒。 3)正常計(jì)數(shù)時(shí),每秒自動(dòng)加1。 4)一個(gè)開始按鍵、一個(gè)復(fù)位按鍵、一個(gè)暫停按鈕和一個(gè)快加按鈕(每10ms快速加一) 。 5)翻頁(yè)按鈕查看四個(gè)不同的計(jì)時(shí)值 。 6)設(shè)置一個(gè)撥位開關(guān),當(dāng)開關(guān)處于不同位置時(shí),分別控制加法和減法計(jì)數(shù) 。 7.添加倒計(jì)時(shí)初始值設(shè)置功能,設(shè)置好初始值后,按開始鍵開始計(jì)時(shí)。 8)添加下翻頁(yè)按鈕,并實(shí)現(xiàn)快減功能 。 9)不同功能通過(guò)功能鍵Setup實(shí)現(xiàn)切換。 設(shè)置 開始 暫停 停止 復(fù)位1.3 功能簡(jiǎn)介1)開機(jī)后,對(duì)單片機(jī)進(jìn)行初始化,然后對(duì)按鈕進(jìn)行掃描。2)設(shè)置按扭用來(lái)設(shè)置快加循環(huán)翻頁(yè)按鈕的功能,為
6、了方便起見,我們還設(shè)計(jì)了一個(gè)紅色的指示燈,當(dāng)燈不亮的時(shí)候,快加循環(huán)翻頁(yè)按鈕實(shí)現(xiàn)循環(huán)循環(huán)翻頁(yè)的功能,當(dāng)燈亮的時(shí)候,該按鈕實(shí)現(xiàn)快加功能。3)快加循環(huán)翻頁(yè)按鈕可以分別實(shí)現(xiàn)快加和循環(huán)翻頁(yè)的功能。4)快減按鈕用來(lái)實(shí)現(xiàn)快減的功能。5)撥位開關(guān)是用來(lái)控制加計(jì)數(shù)和減計(jì)數(shù)的,當(dāng)開關(guān)撥到加位置時(shí),實(shí)現(xiàn)加計(jì)數(shù)功能,當(dāng)開關(guān)撥到減的位置時(shí),實(shí)現(xiàn)減計(jì)數(shù)的功能。為了方便觀察,我們也設(shè)計(jì)了一個(gè)綠色的指示燈,燈亮?xí)r是減計(jì)數(shù),燈不亮?xí)r是加計(jì)數(shù)。6)開始按鈕是用來(lái)控制加計(jì)數(shù)和減計(jì)數(shù)的開始。7)暫停按鈕用來(lái)暫停程序的運(yùn)行,當(dāng)按下暫停鍵時(shí),程序停留在原地,等待再次按下暫停鍵,再次按下暫停鍵后,程序繼續(xù)運(yùn)行。8)計(jì)數(shù)按鈕用來(lái)記錄數(shù)值,每
7、按下一次計(jì)數(shù)按鈕,程序自動(dòng)記錄一個(gè)數(shù)據(jù),并存放到指定內(nèi)存單元中,當(dāng)按下四次以后,程序自動(dòng)停止,然后按快加循環(huán)翻頁(yè)按鈕(此時(shí)必須為翻頁(yè)狀態(tài))查詢記錄數(shù)值。9)復(fù)位按鈕是用來(lái)對(duì)程序復(fù)位,當(dāng)程序出現(xiàn)死循環(huán)的時(shí)候,按下復(fù)位鍵即可跳出死循環(huán),回到程序的開始。2 系統(tǒng)總體方案及硬件設(shè)計(jì)在本系統(tǒng)中,用到的硬件電路主要有電源電路,晶振電路,復(fù)位電路,顯示電路,以及一些按鍵電路等。我們采用的是數(shù)碼管靜態(tài)顯示,用到了P0口和P2口。另外,由于使用P0口驅(qū)動(dòng)顯示器,所以需要在P0口接一組上拉電阻,以保證P0口顯示正常。下面分別對(duì)硬件電路做簡(jiǎn)單介紹:2.1 電源電路電源電路是系統(tǒng)最基本的部分,任何電路都離不開電源部分
8、,單片機(jī)系統(tǒng)也不例外,而且我們應(yīng)該高度重視電源部分,不能因?yàn)殡娫床糠蛛娐繁容^簡(jiǎn)單而有所忽略,其實(shí)有將近一半的故障或制作失敗都和電源有關(guān),電源部分做好才能保證電路的正常工作。對(duì)電源電路來(lái)說(shuō),最重要的就是穩(wěn)壓。以下是兩種穩(wěn)壓電路:1)開關(guān)穩(wěn)壓電源電路開關(guān)穩(wěn)壓電路具有許多優(yōu)點(diǎn):開關(guān)管的損耗很小,電路效率高,一般可達(dá)7085,甚至高于90;特別是可省去電源變壓器,構(gòu)成無(wú)工頻變壓器開關(guān)電源,體積小、重量輕、利于直流電源小型化;穩(wěn)壓范圍寬,當(dāng)電網(wǎng)電壓在130265V變化,且負(fù)載電流作較大幅度變化時(shí),都能達(dá)到良好的穩(wěn)壓效果;利用控制開關(guān)可獲得一路輸入多路輸出以及同極性或反極性輸出等;利用輸出隔離變壓器可得到
9、低壓大電流或高壓小電流穩(wěn)壓電源;應(yīng)用靈活性高、適應(yīng)范圍廣;輸出電壓維持時(shí)間長(zhǎng),交流輸入電壓關(guān)斷后幾十ms內(nèi)仍有直流電壓輸出。開關(guān)穩(wěn)壓電源基本組成方框圖2)集成三端穩(wěn)壓器固定式三端穩(wěn)壓器的輸出電壓是固定的,通用的產(chǎn)品有W7800(正電壓輸出)和W7900(負(fù)電壓輸出)系列,輸出電壓分5V,6V,9V,12V,15V,18V和24V等多種。型號(hào)的后兩位數(shù)字表示穩(wěn)壓器的輸出電壓的數(shù)值,例如W7805,表示輸出電壓為5V;W7915則表示輸出電壓為-15V。這類穩(wěn)壓器的最大輸出電流可達(dá)1.5A。三端穩(wěn)壓器的外形和電路符號(hào)如下圖所示。a.外形圖; b.電路符號(hào)集成三端穩(wěn)壓器輸出電壓擴(kuò)展電路2.2 晶振電
10、路MCS-51單片機(jī)內(nèi)部的振蕩電路是一個(gè)到增益反相放大器,引線 XTAL1和XTAL2分別為 反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入和來(lái)自反向振蕩器的輸出,該反向放大器可以配置為片內(nèi)振蕩器。單片機(jī)內(nèi)部雖然有震蕩電路,但要形成成時(shí)鐘,外部還需要附加電路。石晶振蕩和陶瓷振蕩均可采用.有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度。51單片機(jī)的時(shí)鐘產(chǎn)生方式有兩種,分別為:內(nèi)部時(shí)鐘方式和外部始終方式。利用其內(nèi)部的震蕩電路XTAL1和XTAL2引線上外接定時(shí)元件,內(nèi)部震蕩電路便產(chǎn)生自激震蕩,用示波器可以觀察到XTAL2輸出的時(shí)鐘
11、信號(hào)。在MCS-51單片機(jī)一般常用內(nèi)部時(shí)鐘方式,也就是在XTAL1和XTAL2之間連接晶體震蕩器與電容構(gòu)成穩(wěn)定的自激震蕩器。 晶體和電容決定了單片機(jī)的工作時(shí)間精度為1微秒。晶體可在1.2-12MHz之間選擇。MCS-51單片機(jī)在通常應(yīng)用情況下,使用震蕩頻率為6MHZ的石英晶體,而12MHZ頻率的警惕主要是在高速串行通信情況下才使用,在這里我用的是12MHZ石英晶體。對(duì)電容無(wú)嚴(yán)格要求,但它在取直對(duì)震蕩頻率輸出的穩(wěn)定性、大小及震蕩電路起震蕩速度有一點(diǎn)影響。C1和C2可在20-100PF之間取直,一般情況取30PF。外部時(shí)鐘方式是把外部震蕩信號(hào)源直接接入XTAL1或XTAL2。由于的XT
12、AL2邏輯電平不是TTL的,所以還要接一個(gè)上拉電阻。晶振電路圖如下:2.3 復(fù)位電路MCS-51單片機(jī)的復(fù)位是靠外部電路實(shí)現(xiàn)的。MCS-51單片機(jī)工作之后,只要在他的RST引線上加載10ms以上的高點(diǎn)平,單片機(jī)就能有效地復(fù)位。MCS-51單片機(jī)通常采用上電自動(dòng)復(fù)位、按鍵復(fù)位、以及上電加按鍵復(fù)位等,我們采用的是上電加按鍵復(fù)位方式,這樣做的優(yōu)點(diǎn)是上電后可以直接進(jìn)入復(fù)位狀態(tài),當(dāng)程序出現(xiàn)錯(cuò)誤時(shí),可以隨時(shí)使電路復(fù)位。復(fù)位電路圖如下:2.4 顯示電路顯示電路既可以選用液晶顯示器,也可以選用數(shù)碼管顯示。我們采用的是數(shù)碼管顯示電路。在用數(shù)碼管顯示時(shí),我們有靜態(tài)和動(dòng)態(tài)兩種選擇,靜態(tài)顯示程序簡(jiǎn)單,顯示穩(wěn)定,但是占
13、用端口比較多;動(dòng)態(tài)顯示所使用的端口比較少,可以節(jié)省單片機(jī)的I/O口,但是,動(dòng)態(tài)顯示的程序比較復(fù)雜,需要不斷的掃描,增加了編程的難度。在我們的設(shè)計(jì)中,因?yàn)镮/O口足夠使用,所以我們選擇使用靜態(tài)顯示。顯示電路圖如下:2.5 鍵盤在需要按鍵時(shí),我們可以在I/O口上直接接按鍵,或者通過(guò)I/O口設(shè)計(jì)一個(gè)鍵盤,然后通過(guò)鍵盤掃描程序判斷是否有鍵按下,以及是哪個(gè)鍵按下等。和顯示電路相同,鍵盤掃描電路的優(yōu)點(diǎn)就是節(jié)省I/O口,但編程有些復(fù)雜,為了使程序簡(jiǎn)化,我們采用的是按鍵電路。按鍵電路如下:3 軟件設(shè)計(jì)在設(shè)計(jì)程序之前,我們首先要對(duì)單片機(jī)應(yīng)用系統(tǒng)預(yù)完成的任務(wù)進(jìn)行深入的分析,明確系統(tǒng)的設(shè)計(jì)任務(wù)、功能要求和技術(shù)指標(biāo)。
14、其次,要對(duì)系統(tǒng)的硬件資源和工作環(huán)境進(jìn)行分析。這是單片機(jī)應(yīng)用系統(tǒng)程序設(shè)計(jì)的基礎(chǔ)和條件。經(jīng)過(guò)任務(wù)分析、算法優(yōu)化后,就可以進(jìn)行程序的總體構(gòu)思,確定程序的結(jié)構(gòu)和數(shù)據(jù)形式,并考慮資源的分配和參數(shù)的計(jì)算等。然后根據(jù)程序運(yùn)行的過(guò)程,勾畫出程序執(zhí)行的邏輯順序,用圖形符號(hào)將總體設(shè)計(jì)思路及程序流向繪制在平面圖上,從而使程序的結(jié)構(gòu)關(guān)系直觀明了,便于檢查和修改。應(yīng)用系統(tǒng)的程序由包含多個(gè)模塊的主程序和各種子程序組成。各程序模塊都要完成一個(gè)明確的任務(wù),實(shí)現(xiàn)某個(gè)具體的功能,如:加計(jì)數(shù)、減計(jì)數(shù)、延時(shí)、快加、快減,計(jì)數(shù)和顯示等。模塊化的程序設(shè)計(jì)方法具有明顯的優(yōu)點(diǎn)。把一個(gè)多功能的復(fù)雜的程序劃分為若干個(gè)簡(jiǎn)單的、功能單一的程序模塊,
15、有利于程序的設(shè)計(jì)和調(diào)試,有利于程序的優(yōu)化和分工,提高了程序的閱讀性和可靠性,使程序的結(jié)構(gòu)層次一目了然。下面我們對(duì)每一部分子程序做分別的介紹。3.1 開機(jī)初始化程序 MOV R0,#40H ;設(shè)定寄存器的初始值MOV R1,#44HMOV R3,#00HMOV R4,#00HMOV R7,#64HSETB EA ;開中斷SETB EX0 ;開外部中斷0SETB EX1 ;開外部中斷1SETB PX0SETB PX1SETB ET0 ;開定時(shí)器0MOV P0,#0C0H ;使顯示時(shí)間數(shù)碼管為0MOV P2,#0C0HMOV DPTR,#TABLE ;指定查表啟始地址MOV TMOD,#01H ;設(shè)
16、置定時(shí)器0MOV TH0,#0D8H ;設(shè)定定時(shí)器0的計(jì)數(shù)初值MOV TL0,#0F0HCLR P1.0 ;熄滅指示燈CLR P1.2 ;對(duì)P1.2進(jìn)行清零在開機(jī)初始化程序中,我們要做的是給定時(shí)器裝入初始值,開中斷,設(shè)置各個(gè)寄存器的初始值。3.2 鍵盤掃描程序 KEYGOARD:JB P1.7,START1 ;判斷開始鍵是否按下LCALL DELAY10 ;延時(shí)10毫秒觸點(diǎn)消抖JB P1.7,KEYGOARD;如果是干擾就返回JNB P1.7,$JB P1.3,GN2 ;等待按鍵松開LJMP GN1 ;跳到計(jì)時(shí)程序START1:JB P1.6,START2 ;判斷設(shè)置鍵是否按下LCALL DE
17、LAY10 ;延時(shí)10毫秒觸點(diǎn)消抖JB P1.6,KEYGOARD ;如果是干擾就返回JNB P1.6,$CPL P1.1LJMP KEYGOARD ;返回鍵盤掃描程序START2:JB P1.5,START3 ;判斷快加/上翻按鍵是否按下?LCALL DELAY10 ;延時(shí)10毫秒觸點(diǎn)消抖JB P1.5,START1 ;如果是干擾就返回JB P1.1,KUAIJIAJNB P1.5,$LCALL PAGEUP ;調(diào)用上翻程序LJMP KEYGOARD ;返回鍵盤掃描程序START3:JB P1.4,KEYGOARD ;循環(huán)判斷快減/下翻按鍵是否按下?LCALL DELAY10 ;延時(shí)10毫秒
18、觸點(diǎn)消抖JB P1.4,KEYGOARD ;如果是干擾就返回JB P1.1,KUAIJIANJNB P1.4,$LCALL PAGEDOWN ;調(diào)用下翻程序LJMP KEYGOARD ;返回鍵盤掃描程序 開機(jī)初始化后,程序要對(duì)各個(gè)按鍵進(jìn)行掃描,判斷是否有鍵按下。當(dāng)有按鍵按下來(lái)的時(shí)候,首先要判斷是不是抖動(dòng),如果是抖動(dòng),則不執(zhí)行任何操作,程序繼續(xù)掃描按鍵;如果不是抖動(dòng),就跳到相應(yīng)的子程序去執(zhí)行相應(yīng)的操作。3.3 計(jì)時(shí)程序 ;正計(jì)時(shí) GN1: SETB TR0 ;開定時(shí)器0LOOP:CJNE R0,#44H,LOOP ;判斷是否記夠四個(gè)數(shù)據(jù) DEC R0 CLR EA ;關(guān)中斷 AJMP KEYGO
19、ARD;倒計(jì)時(shí)GN2: SETB P1.2 ;對(duì)P1.2置1 SETB TR0 ;開定時(shí)器0 CJNE R3,#00H,AA ;判斷開始值是不是0 CJNE R4,#00H,AA LJMP KEYGOARD ;如果是0就跳回到鍵盤掃描程序AA: CJNE R3,#00H,AA ;判斷是否減到0 CJNE R4,#00H,AALJMP KEYGOARD ;當(dāng)減到0時(shí)返回鍵盤掃描程序我們?cè)诔绦蛑惺抢枚〞r(shí)器0實(shí)現(xiàn)計(jì)數(shù)的,當(dāng)一秒鐘時(shí)間到的時(shí)候,定時(shí)器自動(dòng)產(chǎn)生中斷,實(shí)現(xiàn)計(jì)數(shù)的功能,在中斷程序中,我們加入顯示程序,使計(jì)數(shù)結(jié)果可以在數(shù)碼管上顯示。在計(jì)數(shù)的過(guò)程中,程序還要判斷已經(jīng)記錄數(shù)據(jù)的個(gè)數(shù),如果沒(méi)有記錄
20、夠四個(gè)數(shù)據(jù),則程序繼續(xù)往下執(zhí)行,如果計(jì)夠四個(gè)數(shù)據(jù),則程序就會(huì)自動(dòng)停止,等待按翻頁(yè)程序查看記錄的結(jié)果。倒計(jì)時(shí)的時(shí)候,程序從計(jì)數(shù)初值開始倒計(jì)時(shí),當(dāng)減到0后,程序就會(huì)自動(dòng)停止。若初始值為0的話,程序就不進(jìn)行減計(jì)數(shù)。3.4 快加和快減程序;快加功能KUAIJIA: F:LCALL DELAY10 ;調(diào)用延時(shí)程序 LCALL XIANSHI ;調(diào)用顯示程序 INC R3 CJNE R3,#0AH,MAN ;判斷個(gè)位到不到9 MOV R3,#00H ;對(duì)個(gè)位賦0 INC R4 CJNE R4,#0AH,MAN ;判斷十位到不到9 MOV R4,#00H ;對(duì)十位賦0 LCALL XIANSHI ;調(diào)用顯示
21、程序 MAN: JB P1.5 ,STOP ;判斷P1.5的狀態(tài) LJMP FSTOP: LCALL XIANSHI LJMP KEYGOARD ;跳回鍵盤掃描程序;快減功能KUAIJIAN: J: LCALL DELAY10 ;調(diào)用延時(shí)程序 LCALL XIANSHI ;調(diào)用顯示程序 DEC R3 CJNE R3,#0FFH,MM ;判斷個(gè)位 MOV R3,#09H DEC R4 CJNE R4,#0FFH,MM ;判斷十位 MOV R4,#09H ;給十位賦9 LCALL XIANSHI ;調(diào)用顯示程序 MM: JB P1.4 ,STOP1 ;判斷P1.4的狀態(tài) LJMP J ;跳轉(zhuǎn)到J
22、STOP1: LCALL XIANSHI ;調(diào)用顯示程序 LJMP KEYGOARD ;跳轉(zhuǎn)到鍵盤掃描程序當(dāng)按下快加按鍵時(shí),程序執(zhí)行快加功能,即每隔10ms加1,若按鍵一直按下不放,則程序一直循環(huán)自加,直到按鍵松開為止??鞙p程序和快加程序的原理相似。3.5 翻頁(yè)程序 PAGEUP: CJNE R0,#43H,LOOP2 ;判斷是否翻到第四個(gè)數(shù) MOV R0,#3FH ;讓指針循環(huán) MOV R1,#43HLOOP2: INC R0 ;指針自加一 INC R1 MOV A,R0 ;將存儲(chǔ)的數(shù)據(jù)輸入的顯示寄存器中 MOV R3,AMOV A,R1 MOV R4,A LCALL XIANSHI ;調(diào)用
23、顯示程序RETPAGEDOWN: ;下翻程序 CJNE R1,#44H,LOOP3 ;循環(huán)的判斷 MOV R0,#44H MOV R1,#48HLOOP3: DEC R0 ;指針自減一 DEC R1 MOV A,R0 ;將數(shù)據(jù)輸入到顯示寄存器中 MOV R3,A MOV A,R1 MOV R4,ALCALL XIANSHI ;調(diào)用顯示程序RET ;返回指令在計(jì)數(shù)過(guò)程中,每按一次計(jì)數(shù)鍵,就會(huì)將一個(gè)數(shù)據(jù)存入到相應(yīng)的內(nèi)存單元中,當(dāng)記錄完四個(gè)數(shù)據(jù)后,我們就可以用翻頁(yè)鍵查看所記錄的成績(jī)。其原理是將存入內(nèi)存的數(shù)據(jù)調(diào)出來(lái)進(jìn)行顯示,每按一次,用于調(diào)數(shù)據(jù)的寄存器自動(dòng)變化。3.6 暫停程序 PAUSE: LCAL
24、L DELAY10;延時(shí)10毫秒消抖 JB P3.2,FAN JNB P3.2,$;等待按鍵松開ZT1: JB P3.2,$;循環(huán)判斷開始按鈕K1是否按下? LCALL DELAY10;延時(shí)10毫秒觸點(diǎn)消抖 JB P3.2,ZT1;如果是干擾就返回 JNB P3.2,$;等待按鍵松開FAN: RETI程序的暫停功能用中斷實(shí)現(xiàn)。當(dāng)暫停按鍵按下后,執(zhí)行中斷程序。在中斷程序中,程序循環(huán)判斷暫停鍵是否再次按下,若沒(méi)有暫停鍵再次按下,則程序在原地循環(huán),若暫停鍵第二次按下,則跳出循環(huán)程序,繼續(xù)執(zhí)行計(jì)數(shù)程序。另外,在暫停程序中,也有消抖程序。3.7 計(jì)數(shù)程序 COUNTING:PUSH ACC ;壓棧保護(hù)
25、PUSH PSW DJNZ R7,PPP ;判斷R7的狀態(tài) MOV R7,#64H JB P1.2 , JIAN ;根據(jù)P1.2的狀態(tài)程序跳到不同的地方 AJMP COUNT ;加計(jì)數(shù)子程序COUNT: INC R3 CJNE R3,#0AH,RETURN ;判斷個(gè)位 MOV R3,#00H INC R4 CJNE R4,#0AH,RETURN ;判斷十位 MOV R4,#00H BBB: MOV TH0,#0D8H ;給定時(shí)器裝入計(jì)數(shù)初值 MOV TL0,#0F0H SETB TR0 LJMP RETURN ;跳出中斷 PPP:MOV TH0,#0D8H ;減計(jì)數(shù)子程序 MOV TL0,#0
26、F0H SETB TR0 LJMP RETURNJIAN: CJNE R3,#00H,AAA ;判斷是否為0 CJNE R4,#00H,AAA AJMP RETURN ;跳出中斷 AAA: DEC R3 CJNE R3,#0FFH,RETURN MOV R3,#09H DEC R4 LJMP BBBRETURN: POP PSW ;彈出堆棧 POP ACC LCALL XIANSHI ;調(diào)用顯示程序 RETI ;跳出中斷當(dāng)定時(shí)器計(jì)數(shù)完以后,就會(huì)形成一次中斷。主程序跳入中斷程序執(zhí)行中斷。首先要判斷要執(zhí)行的是加計(jì)數(shù)還是減計(jì)數(shù),若要進(jìn)行的是加計(jì)數(shù),就跳到COUNT,若要進(jìn)行的是減計(jì)數(shù),就跳到JIAN
27、。加減計(jì)數(shù)是通過(guò)P1.2來(lái)區(qū)分的,若P1.2為高電平,就進(jìn)行減計(jì)數(shù);若P1.2為低電平,就進(jìn)行加計(jì)數(shù)。在進(jìn)行減計(jì)數(shù)時(shí),還要判斷初始值是不是0,若初始值為0,則程序就不往下執(zhí)行。3.8 記錄數(shù)據(jù)程序LCALL DELAY10;延時(shí)10毫秒消抖JB P3.3,FANHUIJNB P3.3,$;等待按鍵松開 MOV A,R3 ;將數(shù)據(jù)輸入顯示寄存器中 MOV R0,AMOV A,R4MOV R1,AINC R0 ;R0自加1INC R1 ;R1自加1FANHUI : RETI ;跳出中斷此段程序的功能是記錄按鍵按下時(shí)的數(shù)據(jù),將個(gè)位數(shù)據(jù)記錄到R0中,十位數(shù)據(jù)記錄到R1中,每記錄一個(gè)數(shù)據(jù),R0和R1中的
28、數(shù)據(jù)會(huì)自動(dòng)加1。3.9顯示子程序 MOV A ,R3 ;掃描個(gè)位上的數(shù)字 MOV DPTR ,#TABLE MOVC A ,A+DPTR MOV P2 ,A MOV A ,R4 ;掃描十位上的數(shù)字 MOV DPTR ,#TABLE MOVC A ,A+DPTR MOV P0 ,ARET我們?cè)O(shè)計(jì)中的數(shù)碼管用的是共陽(yáng)極的數(shù)碼管,所以在顯示之前必須將要顯示的數(shù)字轉(zhuǎn)換為七段碼。七段碼存放在數(shù)據(jù)段TABLE中,當(dāng)使用時(shí),從該數(shù)據(jù)段中直接調(diào)取就行了。寄存器R3中存放著個(gè)位的數(shù),R4中存放的是十位的數(shù)。該程序使用的是靜態(tài)顯示。3.10 10毫秒延時(shí)子程序 DELAY10: MOV R6,#20D2:MOV
29、R5,#248DJNZ R5,$DJNZ R6,D2RET該程序在按鍵消抖程序中用到。3.11 程序流程圖初始化開始撥位開關(guān)電位是否有鍵按下?哪個(gè)鍵?P1.1的電位?P1.1的電位?高低高低快加執(zhí)行上翻功能快減執(zhí)行下翻功能對(duì)P1.1取反低高加計(jì)數(shù)減計(jì)數(shù)計(jì)夠個(gè)數(shù)?關(guān)中斷中斷?再次按下?哪個(gè)中斷暫停記錄數(shù)據(jù)結(jié)束中斷0中斷1否是是否開始計(jì)數(shù)是否計(jì)數(shù)程序結(jié)構(gòu)流程圖4 Proteus軟件仿真我們利用WAVE軟件對(duì)源程序進(jìn)行編譯,編譯成功后,把編譯結(jié)果保存。然后根據(jù)我們的軟件在PROTEUS中設(shè)計(jì)出相應(yīng)的硬件電路,并將該電路保存到與WAVE程序相同的文件夾中,最后將程序裝載到單片機(jī)中,通過(guò)PROTEUS仿
30、真,看程序是否能夠?qū)崿F(xiàn)預(yù)想的功能。主要步驟的PROTEUS仿真圖如下。4.1 開機(jī)的仿真圖4.2 正計(jì)時(shí)仿真圖4.3 減計(jì)時(shí)仿真圖4.4 快加快減計(jì)數(shù)仿真圖4.5 暫停和計(jì)數(shù)仿真圖4.6 仿真結(jié)果與分析通過(guò)PROTEUS仿真,我們的程序能夠?qū)崿F(xiàn)想要所有功能,包括正計(jì)時(shí),倒計(jì)時(shí),數(shù)據(jù)記錄,快加,快減,暫停,查看成績(jī)等功能。在仿真時(shí),應(yīng)注意以下幾個(gè)方面的問(wèn)題:1)PROTEUS仿真圖和用WAVE軟件生成的HEX文件應(yīng)保存在同一個(gè)文件夾里,否則程序不能正確執(zhí)行。2)在運(yùn)行PROTEUS仿真圖之前,必須先裝載文件,要不然程序也無(wú)法正常運(yùn)行。3)在PROTEUS仿真過(guò)程中,硬件復(fù)位電路可能會(huì)不能實(shí)現(xiàn)復(fù)位
31、功能,這對(duì)實(shí)際的硬件電路沒(méi)有影響,需要復(fù)位時(shí)直接將PROTEUS軟件復(fù)位即可。4)由于我們的軟件運(yùn)行是在電腦上進(jìn)行的,所以程序的精確度和電腦有關(guān),在有些運(yùn)行比較慢或者在電腦運(yùn)行程序較多的時(shí)候,秒表的計(jì)時(shí)會(huì)不準(zhǔn)確,這種情況應(yīng)當(dāng)考慮。5)程序在剛啟動(dòng)或者在暫停后繼續(xù)運(yùn)行的時(shí)候,反應(yīng)比較慢,計(jì)時(shí)不準(zhǔn),不知道此問(wèn)題在實(shí)際電路中會(huì)不會(huì)出現(xiàn)。6)在實(shí)現(xiàn)減計(jì)數(shù)功能的時(shí)候,我們的設(shè)計(jì)是時(shí)間到零后自動(dòng)停止計(jì)數(shù),而不是循環(huán)減下去。我覺得這樣更符合現(xiàn)實(shí)的要求。5課程設(shè)計(jì)體會(huì)5.1 設(shè)計(jì)中遇到的問(wèn)題及分析1)在中斷的執(zhí)行過(guò)程中,不能出項(xiàng)長(zhǎng)跳轉(zhuǎn)指令LJMP。當(dāng)中斷程序中出現(xiàn)跳轉(zhuǎn)指令的時(shí)候,程序就不能按照原來(lái)的方式運(yùn)行。
32、若把LJMP命令加到中斷程序的外面,則不會(huì)出現(xiàn)問(wèn)題。2)定時(shí)器的工作模式必須得正確設(shè)置,在這個(gè)程序中,定時(shí)器應(yīng)工作在方式,剛開始沒(méi)對(duì)定時(shí)器的工作模式進(jìn)行設(shè)置,系統(tǒng)默認(rèn)為是方式0,系統(tǒng)運(yùn)行出錯(cuò)。3)程序中的工作寄存器必須不相互沖突,當(dāng)重復(fù)使用同一個(gè)寄存器時(shí),一定要注意對(duì)原來(lái)的數(shù)值進(jìn)行保存,否則程序會(huì)出現(xiàn)意想不到的錯(cuò)誤。我在調(diào)試程序時(shí),沒(méi)注意到調(diào)用的延時(shí)程序中使用的寄存器和主程序有沖突,使顯示結(jié)果出錯(cuò)。4)當(dāng)進(jìn)行倒計(jì)時(shí)的時(shí)候,必須控制程序使其到零的時(shí)候自動(dòng)停止,否則會(huì)出現(xiàn)亂碼,或者循環(huán)計(jì)數(shù),從而失去倒計(jì)時(shí)的意義。5)當(dāng)程序需要顯示的時(shí)候,應(yīng)該用LCALL指令,當(dāng)使用LJMP指令時(shí),程序不能正常執(zhí)行
33、。6)當(dāng)計(jì)數(shù)完成后,R0和R1必須返回到40H和44H單元,否則翻頁(yè)程序無(wú)法正常執(zhí)行,在翻頁(yè)程序執(zhí)行過(guò)程中R0和R1應(yīng)當(dāng)能夠循環(huán)變化,以實(shí)現(xiàn)循環(huán)計(jì)數(shù)。7)不論是正計(jì)數(shù)還是倒計(jì)數(shù),當(dāng)計(jì)數(shù)完成后,必須關(guān)中斷,使程序停止計(jì)數(shù),否則程序無(wú)法停止。8)有些指令在編譯時(shí)會(huì)提示跳轉(zhuǎn)出范圍,比如JB指令和AJMP指令,這時(shí)可以將所調(diào)用的子程序調(diào)換一下位置,或者換用其他的指令。9)在用發(fā)光二極管做指示的時(shí)候,不能將發(fā)光二極管直接接到引腳上,因?yàn)檫@樣當(dāng)你給引腳送高電平的時(shí)候,二極管導(dǎo)通,從而使引腳電平變成低電平,影響程序判斷。解決方法是在二極管上串聯(lián)一個(gè)電阻。10)在使用PROTEUS軟件仿真時(shí),復(fù)位電路不起作用
34、,查閱相關(guān)資料,了解到PROTEUS仿真時(shí)出現(xiàn)這種情況是正常的,在硬件電路中可以實(shí)現(xiàn)復(fù)位功能。硬件系統(tǒng)設(shè)計(jì):5.2 心得體會(huì)通過(guò)本次課程設(shè)計(jì),我學(xué)到了很多東西,這些東西都是平常在課堂上學(xué)不到的。1) 對(duì)MC-51單片機(jī)有了更深入的了解,對(duì)I/O口的使用,晶振電路的接法,以及復(fù)位電路等的掌握都有了很大的提高,這為以后的實(shí)踐打下了良好的基礎(chǔ)。2) 對(duì)一些指令的使用更加熟練了。編程時(shí)體會(huì)最深的就是LCALL指令和LJMP指令,因?yàn)閷?duì)它們使用不當(dāng)?shù)脑挄?huì)使程序進(jìn)入到死循環(huán)當(dāng)中,這時(shí)候連錯(cuò)誤都很難找出來(lái),所以以后編程時(shí)一定要正確使用這兩條指令。3)通過(guò)對(duì)一些資料的查詢和上網(wǎng)搜索,了解了一些比較常用的小程序
35、,比如延時(shí)程序,消抖程序,以及顯示子程序等等,對(duì)以后的編程很有用。4)在課程設(shè)計(jì)過(guò)程中,自己搜索資料的能力有了很大的提高,以前老是覺得編一個(gè)大程序特別難,好多東西都不會(huì),很多指令都不能熟練應(yīng)用,但是在課程設(shè)計(jì)中,所有的問(wèn)題都解決了?,F(xiàn)在如果要是再編程序的話,我起碼已經(jīng)知道應(yīng)從何處下手,需要相關(guān)資料應(yīng)該如何查找,以及如何從別人的東西中找到自己需要的東西。我覺得這是很大的提高。5)通過(guò)課程設(shè)計(jì),我覺得自己利用匯編語(yǔ)言編寫程序的能力有了提高。以前學(xué)習(xí)微機(jī)原理和單片機(jī)時(shí),雖然也學(xué)習(xí)了匯編語(yǔ)言,但那只是最基本的了解,很少有機(jī)會(huì)用匯編語(yǔ)言去編程序,尤其是編比較大的程序,所以對(duì)許多指令都是一知半解,不會(huì)應(yīng)用
36、。在課程設(shè)計(jì)中,基本上用到了所有類型的指令,這就要求對(duì)指令的使用熟練掌握,否則無(wú)法使程序按照自己設(shè)定的方向正常運(yùn)行。6)通過(guò)本次課程設(shè)計(jì),我掌握了要通過(guò)編程實(shí)現(xiàn)某一功能的基本方法。首先,在設(shè)計(jì)程序之前,我們首先要對(duì)單片機(jī)應(yīng)用系統(tǒng)需要完成的任務(wù)進(jìn)行深入的分析,明確系統(tǒng)的設(shè)計(jì)任務(wù)、功能要求和技術(shù)指標(biāo),然后把我們需要完成的任務(wù)分成許多小的子任務(wù),分別實(shí)現(xiàn)。其次,要對(duì)系統(tǒng)的硬件資源和工作環(huán)境進(jìn)行分析。這是單片機(jī)應(yīng)用系統(tǒng)程序設(shè)計(jì)的基礎(chǔ)和條件。經(jīng)過(guò)上面的步驟后,我們就可以進(jìn)行程序的總體構(gòu)思,確定程序的結(jié)構(gòu)和數(shù)據(jù)形式,。然后根據(jù)程序運(yùn)行的過(guò)程,勾畫出程序執(zhí)行的邏輯順序,用圖形符號(hào)將總體設(shè)計(jì)思路及程序流向繪制
37、在平面圖上,從而使程序的結(jié)構(gòu)關(guān)系直觀明了,便于檢查和修改。最后根據(jù)流程圖編寫程序即可。參考文獻(xiàn)1 余發(fā)山 .單片機(jī)原理及應(yīng)用基礎(chǔ) 江蘇徐州:中國(guó)礦業(yè)大學(xué)出版社,2003.50-952 楊寧 單片機(jī)與控制技術(shù) 北京:北京航空航天大學(xué)出版社,2002.32-773 王閃 .AT89系列單片機(jī)原理與接口技術(shù) 北京:北京航空航天大學(xué)出版社,2003.35-68附錄1:秒表源程序ORG 0000HLJMP MAINORG 0003HLJMP PAUSEORG 000BHLJMP COUNTINGORG 0013HLJMP JISHUORG 0030HMAIN:;開機(jī)初始化MOV R0,#40H ;設(shè)定寄
38、存器的初始值MOV R1,#44HMOV R3,#00HMOV R4,#00HMOV R7,#64HSETB EA ;開中斷SETB EX0SETB EX1SETB PX0SETB PX1SETB ET0MOV P0,#0C0H ;使顯示時(shí)間數(shù)碼管為0MOV P2,#0C0HMOV DPTR,#TABLE ;指定查表啟始地址MOV TMOD,#01H ;設(shè)置定時(shí)器0MOV TH0,#0D8HMOV TL0,#0F0HCLR P1.1CLR P1.2;等待按鍵輸入,根據(jù)按鍵的輸入判斷執(zhí)行什么功能KEYGOARD:JB P1.7,START1LCALL DELAY10;延時(shí)10毫秒觸點(diǎn)消抖JB P
39、1.7,KEYGOARD;如果是干擾就返回JNB P1.7,$JB P1.3,GN2;等待按鍵松開LJMP GN1;判斷設(shè)置按鈕是否按下START1:JB P1.6,START2LCALL DELAY10 ;延時(shí)10毫秒觸點(diǎn)消抖JB P1.6,KEYGOARD ;如果是干擾就返回JNB P1.6,$CPL P1.1LJMP KEYGOARDSTART2:JB P1.5,START3 ;循環(huán)判斷開始按鈕K2是否按下?LCALL DELAY10 ;延時(shí)10毫秒觸點(diǎn)消抖JB P1.5,START1 ;如果是干擾就返回JB P1.1,KUAIJIAJNB P1.5,$LCALL PAGEUPLJMP
40、KEYGOARDSTART3:JB P1.4,KEYGOARD ;循環(huán)判斷開始按鈕K2是否按下?LCALL DELAY10 ;延時(shí)10毫秒觸點(diǎn)消抖JB P1.4,KEYGOARD ;如果是干擾就返回JB P1.1,KUAIJIANJNB P1.4,$LCALL PAGEDOWNLJMP KEYGOARD;數(shù)碼管顯示秒表時(shí)間的程序;正計(jì)時(shí)GN1: SETB TR0LOOP:CJNE R0,#44H,LOOP DEC R0 CLR EA AJMP KEYGOARD;倒計(jì)時(shí)GN2: SETB P1.2 SETB TR0 CJNE R3,#00H,AA CJNE R4,#00H,AA LJMP KEY
41、GOARDAA: CJNE R3,#00H,AA CJNE R4,#00H,AA LJMP KEYGOARD;翻頁(yè)功能PAGEUP: CJNE R0,#43H,LOOP2 MOV R0,#3FH MOV R1,#43HLOOP2: INC R0 INC R1 MOV A,R0 MOV R3,A MOV A,R1 MOV R4,A LCALL XIANSHIRETPAGEDOWN: CJNE R1,#44H,LOOP3 MOV R0,#44H MOV R1,#48HLOOP3: DEC R0 DEC R1 MOV A,R0 MOV R3,A MOV A,R1 MOV R4,ALCALL XIANSHI RET;快加功能KUAIJIA: F:LCALL DELAY10 LCALL XIANSHI
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 抗敏修復(fù)的臨床護(hù)理
- 新質(zhì)生產(chǎn)力科普基地
- 描述新質(zhì)生產(chǎn)力
- 2025派遣家政服務(wù)員勞動(dòng)合同模板AA
- 2025年股權(quán)質(zhì)押借款合同范本
- 2204湖北千楚傳媒有限公司實(shí)驗(yàn)室檢測(cè)員招聘1人筆試參考題庫(kù)附帶答案詳解
- 2025年公用設(shè)備工程師之專業(yè)知識(shí)(暖通空調(diào)專業(yè))模考預(yù)測(cè)題庫(kù)(奪冠系列)
- 2025年職測(cè)理論考試106題(附答案)
- 2025年上海崇明區(qū)初三二模語(yǔ)文試題及答案
- 2025魯控環(huán)??萍加邢薰菊衅?0人(山東)筆試參考題庫(kù)附帶答案詳解
- 《國(guó)際貨物運(yùn)輸與保險(xiǎn)》對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué)習(xí)題集
- 2023年江蘇省南京市鼓樓區(qū)中考道德與法治一模試卷及答案解析
- 八字基礎(chǔ)圖文解說(shuō)ppt
- GB/T 28730-2012固體生物質(zhì)燃料樣品制備方法
- GB 5906-1997塵肺的X線診斷
- 智慧教育大數(shù)據(jù)云平臺(tái)建設(shè)方案
- 湖南省鄉(xiāng)鎮(zhèn)衛(wèi)生院街道社區(qū)衛(wèi)生服務(wù)中心地址醫(yī)療機(jī)構(gòu)名單目錄
- 《詩(shī)詞五首漁家傲(李清照)》優(yōu)秀課件
- 初中數(shù)學(xué)北師大七年級(jí)下冊(cè)(2023年新編) 三角形《認(rèn)識(shí)三角形》教學(xué)設(shè)計(jì)
- 現(xiàn)澆箱梁施工危險(xiǎn)源辨識(shí)及分析
- 抗高血壓藥物研究進(jìn)展頁(yè)P(yáng)PT課件
評(píng)論
0/150
提交評(píng)論