基于51單片機(jī)秒表的程序設(shè)計(jì)_第1頁(yè)
基于51單片機(jī)秒表的程序設(shè)計(jì)_第2頁(yè)
基于51單片機(jī)秒表的程序設(shè)計(jì)_第3頁(yè)
基于51單片機(jī)秒表的程序設(shè)計(jì)_第4頁(yè)
基于51單片機(jī)秒表的程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于51單片機(jī)秒表的程序設(shè)計(jì)1設(shè)計(jì)目的:(1)利用單片機(jī)定時(shí)器中斷和定時(shí)器計(jì)數(shù)方式實(shí)現(xiàn)秒、分定時(shí)。(2)通過(guò)led顯示程序的調(diào)整,熟悉8155與8051,8155與led的接口技術(shù),熟悉led動(dòng)態(tài)顯示的控制過(guò)程。(3)通過(guò)鍵盤(pán)程序的調(diào)整,熟悉8155與矩陣式鍵盤(pán)的接口技術(shù),熟悉鍵盤(pán)掃描原理。(4)通過(guò)閱讀和調(diào)試簡(jiǎn)易秒表整體程序,學(xué)會(huì)如何編制含led動(dòng)態(tài)顯示、鍵盤(pán)掃描和定時(shí)器中斷等多種功能的綜合程序,初步體會(huì)大型程序的編制和調(diào)試技巧。2 設(shè)計(jì)步驟與要求 (1)要求:以8位led右邊2位顯示秒,左邊6位顯示0,實(shí)現(xiàn)秒表計(jì)時(shí)顯示。以44矩陣鍵盤(pán)的ke0、ke1、ke2等3鍵分別實(shí)現(xiàn)啟動(dòng)、停止、清零等

2、功能。(2)方法:用單片機(jī)定時(shí)器t0中斷方式,實(shí)現(xiàn)1秒定時(shí);利用單片機(jī)定時(shí)器1方式3計(jì)數(shù),實(shí)現(xiàn)60秒計(jì)數(shù)。用動(dòng)態(tài)顯示方式實(shí)現(xiàn)秒表計(jì)時(shí)顯示,用鍵盤(pán)掃描方式取得ke0、ke1、ke2的鍵值,用鍵盤(pán)處理程序?qū)崿F(xiàn)秒表的啟動(dòng)、停止、清零等功能。(3)軟件設(shè)計(jì):軟件整體設(shè)計(jì)思路是以鍵盤(pán)掃描和鍵盤(pán)處理作為主程序,led動(dòng)態(tài)顯示作為子程序。二者間的聯(lián)系是:主程序查詢有無(wú)按鍵,無(wú)按鍵時(shí),調(diào)用二次led動(dòng)態(tài)顯示子程序(約延時(shí)8ms)后再回到按鍵查詢狀態(tài),不斷循環(huán);有按鍵時(shí),led動(dòng)態(tài)顯示子程序作為按鍵防抖延時(shí)被連續(xù)調(diào)用二次(約延時(shí)16ms),待按鍵處理程序執(zhí)行完后,再回到按鍵查詢狀態(tài),同時(shí)兼顧了按鍵掃描取值的準(zhǔn)確

3、性和led動(dòng)態(tài)顯示的穩(wěn)定性。秒定時(shí)采用定時(shí)器t0中斷方式進(jìn)行,60秒計(jì)數(shù)由定時(shí)器1采用方式3完成,中斷及計(jì)數(shù)的開(kāi)啟與關(guān)閉受控于按鍵處理程序。由上述設(shè)計(jì)思路可設(shè)計(jì)出軟件流程圖如圖1.1所示。(5)程序編制:編程時(shí)置ke0鍵為“啟動(dòng)”,置ke1鍵為“停止”,置ke2鍵為“清零”,因按鍵較少,在處理按鍵值時(shí)未采用散轉(zhuǎn)指令“jmp”,而是采用條件轉(zhuǎn)移指令“cjne”,每條指令后緊跟著一條無(wú)條件跳轉(zhuǎn)指令“ajmp”,轉(zhuǎn)至相應(yīng)的按鍵處理程序,如不是上述3個(gè)按鍵值則跳回按鍵查詢狀態(tài)。8位led顯示的數(shù)據(jù)由顯示緩沖區(qū)30h37h單元中的數(shù)據(jù)決定,順序是從左至右,動(dòng)態(tài)顯示時(shí),每位顯示持續(xù)時(shí)間為1ms,1ms延時(shí)

4、由軟件實(shí)現(xiàn),8位顯示約耗時(shí)8ms。主程序、按鍵查詢子程序采用第0組工作寄存器,顯示子程序采用第1組工作寄存器。1秒定時(shí)采用定時(shí)器t0方式1中斷,每50ms中斷一次,用21h做50 ms計(jì)數(shù)單元,每20次為一個(gè)循環(huán),計(jì)滿20次,60秒計(jì)數(shù)單元(20h)計(jì)數(shù)1次。60秒計(jì)數(shù)采用定時(shí)器t1方式2計(jì)數(shù),計(jì)數(shù)脈沖采用軟件置位、復(fù)位p3.5口的方法實(shí)現(xiàn),用20h單元做60秒計(jì)數(shù)單元,如定時(shí)器t1溢出,則20h單元被清零,20h單元的數(shù)據(jù)采用十進(jìn)制計(jì)數(shù),該數(shù)據(jù)被拆成個(gè)位和十位兩個(gè)數(shù)據(jù)后分別送至顯示緩沖區(qū)的30h、31h單元。按照上述思路可編制源程序如下: org 0000h ajmpmain org000b

5、h ajmpcont ;主程序 ;初始化程序main:movtmod,#61h ;置t0方式1定時(shí),t1方式2計(jì)數(shù) movth0,#3ch;t0置初值 movtl0,#0b0h movth1,#0c4h;t1置初值 movtl1,#0c4h movdptr,#4400h ;8155控制口地址送dptr mova,#43h ;設(shè)置8155工作方式字 movxdptr,a;設(shè)置pa、pb口輸出,pc口輸入 mov20h,#00h;60秒計(jì)數(shù)單元置初值 mov21h,#14h ;50ms計(jì)數(shù)單元置初值 movsp,#3fh;堆棧指針置初值 movr2,#08h;led待顯示位數(shù)送r2 movr0,#

6、30h ;顯示緩沖區(qū)首址送r0 star:movr0,#00h;顯示緩沖區(qū)清零 incr0 djnzr2,star clra ;累加器清零 ;鍵盤(pán)查詢程序 key: acallks;調(diào)按鍵查詢子程序判是否有鍵按下 jnzk1 ;有鍵按下轉(zhuǎn)移 acalldisp;無(wú)鍵按下,調(diào)顯示子程序延時(shí) ajmpkey ;繼續(xù)查詢按鍵 ;鍵盤(pán)掃描程序 k1: acalldisp;鍵盤(pán)去抖延時(shí) acalldisp acallks ;再次判別是否有鍵按下 jnzk2 ;有鍵按下轉(zhuǎn)移 ajmpkey ;無(wú)按鍵,誤讀,繼續(xù)查詢按鍵 k2: movr3,#0feh;首列掃描字送r3 movr4,#00h;首列號(hào)送r4

7、k3: movdptr,#4401h;pa口地址送dptr,開(kāi)始列掃描 mova,r3 movxdptr,a;列掃描字送pa口 incdptr ;指向pc口 incdptr movxa,dptr;讀取行掃描值 jbacc.0,l1;第0行無(wú)鍵按下,轉(zhuǎn)查第1行 mova,#00h;第0行有鍵按下,行首鍵號(hào)送a ajmplk ;轉(zhuǎn)求鍵號(hào) l1: jbacc.1,l2;第1行無(wú)鍵按下,轉(zhuǎn)查第2行 mova,#08h;第1行有鍵按下,行首鍵號(hào)送a ajmplk ;轉(zhuǎn)求鍵號(hào) l2: jbacc.2,l3;第2行無(wú)鍵按下,轉(zhuǎn)查第3行 mova,#10h;第2行有鍵按下,行首鍵號(hào)送a ajmplk;轉(zhuǎn)求鍵號(hào)

8、 l3: jbacc.3,next;第3行無(wú)鍵按下,轉(zhuǎn)查下一列 mova,#18h ;第3行有鍵按下,行首鍵號(hào)送a ajmplk lk: adda,r4;形成鍵碼送a pushacc;鍵碼入棧保護(hù) k4: acalldisp acallks;等待鍵釋放 jnzk4 ;未釋放,等待 popacc ;鍵釋放,彈棧送a ajmppr;轉(zhuǎn)鍵盤(pán)處理程序 next:incr4 ;修改列號(hào) mova,r3 jnbacc.3,key;4列掃描完返回按鍵查詢狀態(tài) rla;未掃描完,改為下列掃描字 movr3,a;掃描字暫存r3 ajmpk3;轉(zhuǎn)列掃描程序 ;鍵盤(pán)處理程序 pr: cjnea,#00h,pr01;

9、不是ke0鍵碼,轉(zhuǎn)ke1鍵 ajmpke0;轉(zhuǎn)ke0鍵處理程序 pr01:cjnea,#01h,pr02;不是ke1鍵碼,轉(zhuǎn)ke2鍵 ajmpke1;轉(zhuǎn)ke1鍵處理程序 pr02:cjnea,#02h,pr03;不是ke2鍵碼,返回按鍵查詢 ajmpke2;轉(zhuǎn)ke2鍵處理程序 pr03:ajmpkey ke0: setbtr0;啟動(dòng)定時(shí)器t0 setbtr1;啟動(dòng)定時(shí)器t1 setbet0;允許定時(shí)器t0中斷 setbea;開(kāi)中斷 ajmpkey ;返回鍵盤(pán)查詢狀態(tài) ke1: clrea;關(guān)中斷 clret0;禁止定時(shí)器t0中斷 clrtr1;關(guān)定時(shí)器t1 clrtr0;關(guān)定時(shí)器t0 ajmp

10、key ke2: clrea ;關(guān)中斷 ajmpmain;返回主程序進(jìn)行初始化 ;按鍵查詢子程序 ks: movdptr,#4401h ;置8155pa口地址 mova,#00h movxdptr,a;全掃描字#00h送pa口 incdptr ;指向pc口 incdptr movxa,dptr;讀入pc口狀態(tài) cpla ;變正邏輯,高電平表示有鍵按下 anla,#0fh ;屏蔽高4位 ret ;返回,a0表示有鍵按下 ;led動(dòng)態(tài)顯示子程序 disp:pushacc;a入棧保護(hù) setbrs0;保護(hù)第0組工作寄存器,啟用第1組工作寄存器 movr2,#08h ;led待顯示位數(shù)送r2 movr

11、1,#00h;設(shè)定顯示時(shí)間 movr3,#7fh;選中最右端led movr0,#30h;顯示緩沖區(qū)首址送r0 mova,r0;秒顯示個(gè)位送a disp1:movdptr,#tab;指向字形表首址 movca,a+dptr;查表取得字形碼 movdptr,#4402h;指向8155pb口(段碼口) movxdptr,a;字形碼送pb口 mova,r3 ;取位選字 movdptr,#4401h;指向8155pa口(位選口) movxdptr,a;位碼送pa口 djnzr1,$;延時(shí)0.5ms djnzr1,$;延時(shí)0.5ms rra;位選字移位 movr3,a;移位后的位選字送r3 incr0

12、;指向下一位緩沖區(qū)地址 mova,r0;緩沖區(qū)數(shù)據(jù)送a djnzr2,disp1;未掃描完,繼續(xù)循環(huán) clrrs0 ;恢復(fù)第0組工作寄存器 popacc ;a彈棧,恢復(fù)現(xiàn)場(chǎng) ret tab:db3fh,06h,5bh,4fh,66h;共陰極led字形表 db6dh,7dh,07h,7fh,6fh ;定時(shí)器中斷服務(wù)程序 cont:push acc ;保護(hù)現(xiàn)場(chǎng) mov th0,#3ch ;定時(shí)器t1重置初值 mov tl0,#0b0h mov a,20h ;秒計(jì)數(shù)器送a ajmp cont1ren:ajmp ren1 cont1:djnz21h,ren;1秒定時(shí)未到,中斷返回 mov21h,#14

13、h;重置50ms計(jì)數(shù)初值 clrp3.5 ;軟件產(chǎn)生定時(shí)器t1計(jì)數(shù)脈沖 nop nop setbp3.5 inca ;1秒計(jì)數(shù)值加1 daa ;換算為10進(jìn)制計(jì)數(shù) jbctf1,cont2;60秒到,轉(zhuǎn)清零 cont3:mov20h,a;計(jì)數(shù)值送60秒計(jì)數(shù)單元20h anla,#0fh ;屏蔽高4位 mov30h,a;秒表個(gè)位待顯示數(shù)據(jù)送顯示緩沖區(qū) mova,20h swapa;60秒計(jì)數(shù)單元高、低4位數(shù)據(jù)互換 anla,#0fh ;屏蔽高4位 mov31h,a;秒表十位待顯示數(shù)據(jù)送顯示緩沖區(qū) ajmpren1 cont2:mova,#00h ajmpcont3 ren1:popacc;恢復(fù)現(xiàn)

14、場(chǎng) ret;中斷返回 end3 總結(jié)與分析 (1)實(shí)驗(yàn)采用七段碼led設(shè)計(jì)(數(shù)碼管),顯示直觀;采用定時(shí)器中斷,計(jì)時(shí)更準(zhǔn)確;功能齊全,可隨時(shí)啟動(dòng)、停止、清零,后者智能化程度更高。 (2)設(shè)計(jì)、調(diào)試大型程序時(shí),需先根據(jù)要求劃分模塊,優(yōu)化結(jié)構(gòu);再根據(jù)各模塊特點(diǎn)確定何為主程序,何為子程序,何為中斷服務(wù)程序,相互間如何調(diào)用;再根據(jù)各模塊性質(zhì)和功能將各模塊細(xì)化,設(shè)計(jì)出程序流程圖;最后才根據(jù)各模塊流程圖編制具體程序。調(diào)試時(shí)應(yīng)先調(diào)主程序,實(shí)現(xiàn)最基本最主要的功能,在此基礎(chǔ)上再將各模塊功能往主程序上堆砌,直至各模塊聯(lián)調(diào)、統(tǒng)調(diào),實(shí)現(xiàn)全部功能。本例子將整個(gè)程序劃分為鍵盤(pán)程序,動(dòng)態(tài)顯示程序,秒計(jì)時(shí)程序三大模塊,根據(jù)各自的特點(diǎn)確定鍵盤(pán)程序?yàn)橹鞒绦?,?dòng)態(tài)顯示程序?yàn)樽映绦?,秒?jì)時(shí)程序?yàn)槎〞r(shí)器中斷服務(wù)程序。主程序又細(xì)分為初始化程序,鍵盤(pán)查詢程序,鍵盤(pán)掃描程序,鍵盤(pán)處理程序四大部分。三大模塊之間的關(guān)系是:鍵盤(pán)程序在無(wú)鍵按下時(shí),不斷調(diào)用動(dòng)態(tài)顯示子程序;在有鍵按下時(shí),先調(diào)用動(dòng)態(tài)顯示子程序消抖,再進(jìn)入鍵盤(pán)處理程序,控制中斷服

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論