單片機作息時間控制器課程設(shè)計_第1頁
單片機作息時間控制器課程設(shè)計_第2頁
單片機作息時間控制器課程設(shè)計_第3頁
單片機作息時間控制器課程設(shè)計_第4頁
單片機作息時間控制器課程設(shè)計_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、湖南工程學(xué)院課 程 設(shè) 計課程名稱 微機原理與應(yīng)用 課題名稱 單片機作息時間控制器 湖南工程學(xué)院課 程 設(shè) 計 任 務(wù) 書課程名稱 微機原理與應(yīng)用 課 題 單片機作息時間控制器 專業(yè)班級 自動化0702 學(xué)生姓名 羅 琦 學(xué) 號 200701020216 指導(dǎo)老師 王迎旭、李曉秀、林國漢 審 批 任務(wù)書下達日期 2010年 6 月 7日任務(wù)完成日期 2010年 6 月 20日設(shè)計內(nèi)容與設(shè)計要求設(shè)計內(nèi)容:本課題要求以單片機為核心,設(shè)計一個具有定時和計數(shù)功能的智能化作息時間控制器。該控制器要求有以下功能:1、 按作息時間接通/斷開電鈴;2、 課間接通/斷開播放音樂設(shè)備;3、 時鐘顯示。設(shè)計要求:1

2、)確定系統(tǒng)設(shè)計方案; 2)進行系統(tǒng)的硬件設(shè)計;3)完成必要的參數(shù)計算與元器件選擇;4)完成應(yīng)用程序設(shè)計;*5)進行部分單元電路幾應(yīng)用程序的調(diào)試;主 要 設(shè) 計 條 件作息時間控制器常用于學(xué)校教學(xué)樓的時間控制,利用單片機內(nèi)部定時器實現(xiàn)時間基準定時,并配合“啟動”、“復(fù)位”等按鍵的操作完成鈴聲、音樂的開/??刂?,顯示的內(nèi)容要求有時、分、秒各兩位。說 明 書 格 式1. 課程設(shè)計任務(wù)書2. 目錄3. 系統(tǒng)總體方案選擇與說明4. 系統(tǒng)結(jié)構(gòu)框圖與工作原理5. 各單元硬件設(shè)計說明及計算方法6. 軟件設(shè)計與說明(包括流程圖)7. 調(diào)試結(jié)果與必要的調(diào)試說明8. 使用說明9. 程序清單10、總結(jié)11、參考文獻附

3、錄附錄a 系統(tǒng)原理圖附錄b 程序清單評分表進 度 安 排設(shè)計時間兩周第一周:星期一 講課,布置課題任務(wù), 借閱有關(guān)資料;星期二 上午:講課及課題介紹;下午:分組進行總體方案討論,初步確定設(shè)計方案;星期三 上午:方案論證與檢查;下午:分組進行總體設(shè)計,硬、軟件功能分配;星期四 硬、軟件流程設(shè)計與計算; 星期五 小系統(tǒng)焊接與調(diào)試;第二周:星期一 分單元調(diào)試調(diào)試;星期二 寫說明書初稿;星期三 檢查設(shè)計情況,修改說明書;星期四 整理資料,準備答辯;星期五 交設(shè)計資料,答辯。參 考 文 獻參考文獻1張迎新.單片微型計算機原理、應(yīng)用及接口技術(shù).國防工業(yè)出版社2房小翠.單片機實用系統(tǒng)設(shè)計技術(shù). 國防工業(yè)出版

4、社3何立民.單片機應(yīng)用系統(tǒng)設(shè)計.北航出版社4王迎旭.單片機原理及及應(yīng)用.機械工業(yè)出版社.2004年、目 錄第一章 引 言71.1簡介及技術(shù)要求 71.2計時方案 71.3鍵盤/顯示方案7第二章 硬件設(shè)計 8 2.1 電路原理圖 82.2 系統(tǒng)工作流程 92.3 系統(tǒng)使用說明 10第三章 系統(tǒng)軟件設(shè)計 103.1 軟件設(shè)計 103.2 系統(tǒng)工作流程 11第四章 程序模塊設(shè)計. 15 4.1主程序模塊 16 4.2定時中斷服務(wù)程序模塊 184.3掃描顯示模塊 224.4鍵掃描子程序 234.5鍵值處理子程序 274.6移位鍵處理程序模塊 30第五章 調(diào)試及分析 32第六章 課程總結(jié) 33參考文獻

5、34附錄 35第1章 引 言因為單片機的種類多,而型號雜,也是我們學(xué)習(xí)中的困難,所以就mcs51系列的產(chǎn)品來說,就是一個典型的學(xué)習(xí)方法。對于類似匯編的單片機編程過程,也是一個十分有趣的過程。為了更好的說明,我以上介紹先從應(yīng)用電路切入,同時介紹它們的使用方法,以便能快速掌握它們的應(yīng)用。1.1簡介及技術(shù)要求校園作息時間控制系統(tǒng)主要用于學(xué)校,對一些以24小時為周期的開關(guān)量進行自動控制。如上下課打鈴及擴音設(shè)備的開與關(guān)、教學(xué)樓照明的定時開與關(guān)、學(xué)生宿舍燈及校園路燈的定時開關(guān)的控制。技術(shù)要求如下:(1) 定時準確,月誤差=10%。(2) 有顯示和校時功能。(3) 具備到時響鈴功能。1.2計時方案采用軟件控

6、制利用mcs-51系列單片機內(nèi)部的定時/計數(shù)器進行中數(shù)年定時,配合軟件延時實現(xiàn)時、分、秒的計時。該方案節(jié)省硬件成本,且能夠使讀者在定時/計數(shù)器的使用、中數(shù)年及程序設(shè)計方面得到鍛煉與提高,因此本系統(tǒng)將采用軟件方法實現(xiàn)計時。1.3鍵盤/顯示方案對于實時時鐘而言,顯示顯然是另一個重要的環(huán)節(jié)。如前所述,通常有兩種顯示方式:動態(tài)顯示和靜態(tài)顯示。直接利用mc51單片機的p0和p2口,led動態(tài)顯示。 該方案硬件連接簡單,但動態(tài)掃描的顯示方式需占用cpu較多的時間,在單片機沒有太多實時測控任務(wù)的情況下可以采用。第2章 硬件設(shè)計考慮到在停電時本機仍需正常走時,故單片機選用coms低功耗產(chǎn)品如mcs51,由于l

7、ed顯示電路耗電量較大,可將其電源與單片機電源分開,從而使得在停電時蓄電池僅對單片機供電,而不對顯示電路供電,延長電池的供電時間。選用典型的并口掃描顯示輸出。用mcs51的p0口和p2口作為段碼和位碼輸出口,并由2片uln2003作為每個端口的反相驅(qū)動。利用p1口的低六位作為6個功能鍵的鍵盤線,p3口部分口作為冬季或夏季作息時間的選擇線、臨時報時處理設(shè)置線和打鈴輸出控制(輸出部分加光電隔離)。2.1電路原理框圖報時鐘電路的核心是mcs51單片機,其內(nèi)部帶有4kb的程序rom,無須外擴程序存儲器。電腦時鐘沒有大量的運算和暫存數(shù)據(jù),現(xiàn)有的128b片內(nèi)ram已能滿足要求,也不必外擴片ram。系統(tǒng)配備

8、5位led顯示和6*1鍵盤,用p1口作為鍵盤接口電路,p2口作為5位led 顯示的位選通口,p0口則作為字形碼輸出口。采用共陰極led數(shù)碼管,p0口、p2口和數(shù)碼管之間串接了反相驅(qū)動芯片uln2003,因此p2口輸出高電平選中相應(yīng)的位,而p0口輸出低電平點亮相應(yīng)的段。p3。2接用戶自設(shè)定報時/作息時間報時的選擇開關(guān),開關(guān)閉合(p3。2為低電平)時,僅對用戶自設(shè)定的時間點進行報時;開關(guān)斷開時,則進行固定的作息時間表報時。 p3。3端口接夏令/冬令作息時間表,p3。3=1時選擇擇冬令作息時間表。p3。4端口外接光電隔離器,驅(qū)動擴音機電源的控制開關(guān),低電平有效。鍵盤部分顯示部分單片機控制部分響鈴及擴

9、音部分 圖2.1 單片機原理框圖2.2系統(tǒng)工作流程本單片機報時控制系統(tǒng)具備以下功能:時鐘顯示。5位led從左到右依次顯示時、分,采用24h計時。 圖2.2 時間顯示圖(4) 鍵盤功能。采用4個獨立按鍵,包括:移位鍵、加1鍵、減1鍵、校時置入鍵。(5) 移位鍵:(p1。0=0)每按動移位鍵一次,小數(shù)點從左向右移動1位。(6) 加1鍵:(p1。1=0)對小數(shù)點所在位的數(shù)什進行十進制加1。(7) 減1鍵:(p1。2=0)對小數(shù)點所在位的數(shù)值進行十進制減1。(8) 校時置入鍵:(p1。3=0)將顯示的時間值置入實時時鐘的計時緩沖區(qū)。 圖2.3 鍵盤功能(9) 揚聲器驅(qū)動電路: 圖2.4 揚聲器驅(qū)動電路

10、 2.3 系統(tǒng)的使用說明(1) 時間顯示。通電后,系統(tǒng)自動進入時鐘顯示,從00:00:00:開始計時,此時可以設(shè)定當(dāng)前時間。(2) 時間校對。按下“移位”鍵,小數(shù)點從左向右移動,每按動1次,小數(shù)點便移動1位;要修改設(shè)置哪一位,只需將小數(shù)點移到該位,便可用“加1鍵”或“減1鍵”對該位進行數(shù)字設(shè)定;時間的校對設(shè)定一共有5位,從左到右依次為星期、小時十位、小時個位、他的十位、分的個位。設(shè)置正確后“校時置入鍵”,時間校正便設(shè)置完成,報時鐘開始按新設(shè)置的時間值開始走時和顯示。(3) 用戶報時時間設(shè)置/顯示。用戶可以自行設(shè)定10組報時時間點,這時led顯示的最高位定義為組編號其他位定義不變;按下“報時設(shè)定

11、鍵”,系統(tǒng)根據(jù)“組編號”將用記設(shè)定的報時時間點(小時和分)存入內(nèi)部ram相應(yīng)存儲單元中,用戶如需修改和檢查這些報時時間。如需修改,可用“移位鍵”、“加1鍵”,“減1 鍵”來重新設(shè)定,然后用“報時設(shè)定鍵”來轉(zhuǎn)入并結(jié)束顯示。(4) 報時輸出的驅(qū)動過程。在報時處理程序上中,一旦當(dāng)前時間與作息時間表中的某一時間點(時、分值)相同時,則建立f0報時標(biāo)志,建立f1放音標(biāo)志,擴音機播放報時音樂,并在26h中設(shè)置放音時間,放音時間到,則關(guān)閉驅(qū)動及清除f1標(biāo)志位,完成1次報時驅(qū)動.第3章 軟件設(shè)計3.1系統(tǒng)資源分配 (1)為方便閱讀程序,先對系統(tǒng)的資源分配加以說明。1) 定時器。定時器0用作時鐘定時,按方式1工

12、作,每隔100ms溢出中斷1次。2) 片內(nèi)ram及標(biāo)志位的分配與定義見表1表1:地址功能名稱初始化值2fh2bh顯示緩沖區(qū),星期、小時、分(高位在前)disp0disp400h24h20h計時緩沖區(qū),星期、時、分、秒、100msweek,hour,min,sec,msec00h40h53h用戶報時時間值寄存區(qū)(時、分)ahour、amin00h61h7fh堆棧區(qū)00hf0h報時開始標(biāo)志位f0h0f1h放音開始標(biāo)志位f1h0f3h分鐘值變更標(biāo)志位f3h0f4h鍵處理標(biāo)志位f4h025h擴音機預(yù)熱時間25h00h26h播放報時音樂時間26h00h(2)軟件流程。根據(jù)上述工作流程,軟件設(shè)計可分為以下

13、幾個功能模塊:1) 主程序:初始化與鍵盤監(jiān)控。開始i/o端口初始化設(shè)置棧指針軟件陷阱處理ram區(qū)清零定時器、中斷初始化報時處理子程序調(diào)用鍵掃描子程序鍵掃描處理子程序調(diào)用顯示子程序如有鍵則進行鍵處理判斷是否有f3標(biāo)志返回主程序入口2) 計時:為定時器0中斷服務(wù)子程序,完成刷新計時緩沖區(qū)的功能。3) 時間設(shè)置與報時設(shè)置:由鍵盤輸入設(shè)置當(dāng)前時間與定時啟閉時間。4) 顯示:完成5位led動態(tài)顯示。5) 鍵盤掃描:判斷是否有鍵按下,并求取鍵號。6) 定時比較:判斷報時時間到否,如時間到,則啟動報時處理程序。7) 其他輔助功能程序,如鍵盤設(shè)置、拆字、合字、冬季或夏季時間表選擇及假日停止報時等。第4章 程序

14、模塊設(shè)計程序的模塊設(shè)計非常重要,有很多功能的程序,列表如表2表2 :主程序程序的主體,調(diào)用其他子程序定時中斷服務(wù)程序進行秒,分,時的累計計數(shù),到時間到時,驅(qū)動蜂鳴器及繼電器顯示模塊p0口作為段碼,p2口作為位碼輸出,控制數(shù)碼管。鍵掃描子程序檢測p1口,判斷是否有鍵按下,如有鍵按下,進進行延時去抖動并讀取鍵值,存入a中鍵值處理子程序判斷a中的值,根據(jù)a來選擇調(diào)用哪個子程序4.1 主程序模塊(main)在主程序模塊中,先對各端口進行初始化,對內(nèi)部ram區(qū)清零,設(shè)置堆棧和定時器初值,關(guān)閉顯示器,啟動定時及其中斷。然后檢測時鐘分值變更標(biāo)志位f3是否建立,如果已建立,則進行報時處理,否則再檢測有無按鍵按

15、下,若有則進行按鍵處理,無則返回循環(huán)點。 org 0000h start: ajmp main ;跳轉(zhuǎn)入主程序0030h org 000bh ajmp ctcint ;跳轉(zhuǎn)到定時器t0的中斷服務(wù)程序入口 org 0030hmain: nop ;主程序入口地址:0030h nop nop mov a,#offh ;關(guān)閉各輸出口mov p0,a ;p0口為字形口,低電平有效mov p1,a;p1口作為6個鍵輸入口mov p2,a ;p2口是字位口,低電平有效mov p3,a ;p3口報時方式控制和驅(qū)動輸出口setb t0;關(guān)閉報時音樂輸出(t0=1)setb t1 ;關(guān)閉報時擴音機電源(t1=1)

16、cjne sp,#07h,not1mov r0,#7fhmov r1,#7dh ;否則ram清零初始化clr aloop0: mov r0,a dec r0djnz r1, loop0 ;從內(nèi)部ram區(qū)03h到7fh均清零not1: mov sp,#60h ;設(shè)置棧指針mov ip,#02h;設(shè)置定時器t0為最高中斷優(yōu)先級mov ie,#82h;定時器t0開中斷mov tmod,#01h;設(shè)置定時器t0為方式1mov tl0,#0b0h;設(shè)置定時器t0初值mov th0,#3chsetb tr0;啟動定時nopnextt: nop mov sp,#60h ;重置堆棧底位置lcall disp

17、;調(diào)用顯示子程序nop ;檢測標(biāo)志是否出現(xiàn),f3為定時分鐘值變化的標(biāo)志位jnb 0f3h,next1 ;f3=0,則轉(zhuǎn)鍵掃描,判斷有無鍵按下nop ;f3=1,調(diào)用報時處理子程序setb int0jnb int0 , users;如into=0,則調(diào)用用戶自設(shè)定報時點lcall timera;into=1,調(diào)用timera,按作息時間表報時users: noplcall timerb;timerb為用戶自設(shè)定報時點報時nopnext1:lcall checkey;調(diào)用按鍵掃描子程序,判斷有無鍵按下jz nextt;無鍵按下,返回重新掃描noplcall keyacc;有鍵按下,調(diào)用按鍵處理子程

18、序nopsjmp nexttnopnop4.2定時中斷服務(wù)程序模塊該多好模塊完成下述工作:對100毫秒(20h)、秒(21h)、分(22h)、小時(23h)進行累計計數(shù),如果分值有計數(shù)變化并且無鍵按下,則將小時和分鐘送顯示緩沖區(qū)更新顯示目錄;如有報是處理標(biāo)志,則對報時擴音機電源和報時音樂輸出分別進行定時控制。ctcint:nop;t0的中斷服務(wù)子程序mov tl0,#0b4h;設(shè)置定時器t0初值mov th0,#3chpush acc;保護主程序現(xiàn)場數(shù)據(jù)push pswnopsetb rs0;選擇新的工作寄存器區(qū)(1區(qū))clr rs1;select 1 areainc 20h;0.1s單元加1

19、mov a,20hjb of4h,lca;(f4h)為鍵處理標(biāo)志位,在鍵處理過程中不顯示秒點cjne a,#05h,ctnucctnuc: jc lc2;小于0.4s則秒點閃亮,大于0.4s則秒點熄滅clr 6chsjmp lcalc2: setb 6chlca: cjne a,#0eh,rtnh;未計滿1s則退出中斷mov 20h,#00h;毫秒計數(shù)單元清零jnb 0f0h,nexte;f0h=1為報時擴音機預(yù)熱延時標(biāo)志位mov a,25h;(25h)中存放報時擴音機預(yù)熱延時時間值jnz nextfclr ofohclr ofohsetb of1hmov 26h,#1oh ;(26h)中存放

20、報時放音的延時時間值clr tonexte: jnb of1h,nextf ;(f1h=1)為報時放音的延時標(biāo)志位mov a,26hdec amov 26h,ajnz nextf ;判斷報時放音延時是否結(jié)束clr of1h ;延時時間到,清除報時放音標(biāo)志位,關(guān)閉報時電源setb t1setb t2setb tosetb tonopnextf: nopmov a,21h ;對秒計數(shù)單元(21h)進行累計計數(shù)add a,#01hda amov 21h,acjne a,#06h,rtnh ;判斷分計數(shù)是否計滿clr amov 21h,asetb 0f3h ;(f3h)為分值有變更標(biāo)志位next: m

21、ov a,22h ;對分(22h)進行累計計數(shù)add a,#01h;da amov 22h,acjne a,#60h,rtdnmov 22h,#00hmov a,23hadd a,#01h ;時單元加1da amov 23h,a ;對時(23h)進行累計計數(shù)cjne a,#24h,trndmov 23h,#00hmov a,24hadd a,#01h ;星期計數(shù)單元(24h)加1da amov 24h,acjne a,#07h,rtdnmov 24h,#00hrtdn: nopjnb of3h,rtdh ;確認(f3=0)分值無變更,則返回jb of4h,rtnh ;確認(f4=0)正在鍵處理

22、,則返回ldda: nop ;將當(dāng)前的時間值顯示緩沖區(qū)nopmov r0,#24h ;(24h、23h、22h、)送(2fh2bh)mov r1,#2fhmov r2,#02hmov a,r0 anl a,#0fhmov r1,adec r0dec r1ld1: mov a,r0 ;將1字節(jié)壓縮的bcd碼拆成兩個字節(jié),數(shù)數(shù)值存放在低字節(jié)內(nèi)anl a,#of0hswap amov r1,adec r1mov a,r0anl a,#0fhmov r1,adec r0dec r1djnz r2,ld1noprtnh:nop ;中斷返回,并恢復(fù)現(xiàn)場數(shù)據(jù)noppop pswpop accreti4.3掃

23、描顯示模塊 該模塊為5位led掃描顯示模塊。p0口為字形碼輸出口,低電平有效;p2口為字位碼輸出口,高電平有。顯示緩沖區(qū)為2fh2bh等5個字節(jié),2fh存放顯示的星期數(shù),2eh、2dh存放顯示的小時數(shù),2ch、2bh存放顯示的分鐘數(shù),其數(shù)值范圍在00h0fh內(nèi)時不顯示該位的小數(shù)點,在10h1fh時則顯示小數(shù)點。disp:nop ;disp為顯示子程序nop mov a,#00h ;關(guān)閉顯示mov p2,a ;p2口為字位碼輸出口mov a,#0ffh mov p0,a ;p0口為字形碼輸出口nopnopmov r0,#2fh ;顯示子程序nop mov r1,#10h ;位控制字loop1:

24、mov a,r1nopmov p2,a ;輸出位控制字mov p2,amov dptr,#tablemov a,r0 ;取顯示緩沖區(qū)中的顯示字符數(shù)movc a,a+dptr ;查表轉(zhuǎn)換成字型代碼cpl amov p0,a ;輸出字形碼mov r2,#00hloop2: djnz r2,loop2 ;延時2msdec r0 ;顯示下一個字符mov a,r1clr crrc amov r1,ajnz loop1 ;判斷5位掃描顯示一遍是否完成ret nopnoptable:db 7fh,6fh,77h,7ch,39h,5eh,79h,71h db 0bfh,86h,0dbh,0cfh,0e6h,0

25、edh,0fdh,87h ;帶小數(shù)點時的字符顯示字形表db 0ffh,0efh、0f7h,0fch,0b9h,0f9h,0f1hnop4.4鍵掃描子程序 檢測p1口,判斷是否有鍵按下,如有鍵按下,進進行延時去抖動并讀取鍵值,存入a中。checkeya:nop;鍵掃描子程序nopnopmov p1,#0ffhmov a,p1;判斷是否有鍵按下cpl aanl a,#3fhjz retxlcall disp;延時去抖動lcall dispmov a,p1cpl aanl a,#3fhjz retxmov r6,a;當(dāng)前值存放在r6中k1: lcall disp;等待釋放按鍵mov a,p1cpl

26、aanl a,#3fhjnz k1mov a,r6nopnopretx:retnopi. 用戶自設(shè)定報時時間點置入鍵程序模塊。將顯示緩沖區(qū)2fh2bh中的內(nèi)容壓縮后存入40h為首地址的片內(nèi)ram中,其中2fh為定時時間點的編號,2eh、2dh為小時值,2ch、2bh為分鐘數(shù)值。useset:nopmov r0,#2fhmov r1,#40h ;本次用戶設(shè)定報時點首址為40hmov a,r0anl a,#ofhrl aadd a,r1 ;報時點編號乘2加首址,為本次存放的實際地址mov r1,adec r0nop;定時設(shè)定時間置入子程序nopmov r2,#02hldd: mov a,r0;an

27、l a,#0fhswap amov r7,adec r0mov a,r0anl a,#0fhadd a,r7mov r1,adec r0inc r1djnz r2,lddnopclr 0f4hnopretnopii. 減1鍵處理。在小數(shù)點點亮的對應(yīng)位上進行十進制減1處理。 subone: nopnopjnb 7ch,sch74mov r0,#2fhsjmp sub1sch74: nopjnb 74h,sch6cmov r0,#2ehsjmp sub1sch6c:nop jnb 6ch,sch64mov r0,#2dhsjmp sub1sch5c: nop jnb 64h,sch5cmov ro

28、,#2chsjmp sub1sch5c: nopjnb 5ch,err1mov r0,#2bhsjmp sub1nopnoperr1:retnopsub1:nopmov a,r0add a,#99hda axchd a,r0retiii. 用戶自設(shè)定報時時間點顯示鍵處理模塊。由(2fh)指定的用戶自設(shè)定報時點編號,計算其在ram中存放的地址,再根據(jù)此地址找出該報時時間點的2個字節(jié)碼,將其4個半字節(jié)分別存入2eh2bh單元低半字中。dspuse:nopmov r0,#2fh ;自設(shè)定報時點編號由(2fh)指定mov r1,#40h ;用戶設(shè)定報時點首址為40hmov a,r0anl a,#0fh

29、rl aadd a,r1 ;報時點編號乘2加首址,為其存放的實際地址mov r1,adec r0nop ;取定時設(shè)定時間并置入顯示緩沖區(qū)nopmov r2,#02hldr: mov a,r1 ;將小時和分鐘值解壓縮后裝入相應(yīng)顯示單元中swap axchd a,r0dec r0inc r1djnz r2,ldrnopclr 0f4hnopretnop4.5鍵值處理子程序 keyacc: nop;鍵值處理子程序 nop;按鍵處理子程序jb acc0,shiftp ;是移位功能鍵轉(zhuǎn)shiftpjb acc1,addone ;是加1鍵,轉(zhuǎn)addonejb acc2,subone ;是減1鍵,轉(zhuǎn)subo

30、nejb acc3, timset ;是時鐘校對鍵轉(zhuǎn)timsetjb acc,useset ;設(shè)置用戶定時時間點jb acc5,dspuse ;顯示用戶定時時間點nopnopnopretnopiv. 加1鍵處理程序。在小數(shù)點點亮的對應(yīng)位上進行十進制加1處理。addone:nopnopjnb 7ch,sech74mov r0,#2fhsjmp add1sech74:nopjnb 74h,sech6cmov r0,#2ehsjmp add1sech64c:nopjnp 6ch,sech64mov r0,#2bhsjmp add1nopnoperr2: retnopadd1: nopmov a,r0

31、add a,#01hda axchd a,r0retv. 校時時間置入程序模塊。將設(shè)定的時間值置入相應(yīng)的時間計數(shù)單元,并以該時間為起點開始計時。timset:nop ;校時時間置入程序段nopmov r0,#2fhmov r1,#24hmov r2,#02hmov a,r0anl a,#0fhmov r1,adec r0dec r1ld1: mov a,r0anl a,#0fhswap amov r7,adec r0mov a,r0anl a,0fhadd a,r7mov r1,adec r0dec r1djnz r2,ld1mov 21h,#00hclr 0f4hretnopnop4.6移位

32、鍵處理程序模塊 將小數(shù)點從左向右依次移動1位。 小數(shù)點移動哪一位,那一位便可用加1或減1鍵進行修改數(shù)值。小數(shù)點如移到最右邊1位,若再按1次移位鍵,小數(shù)點自動返回到最左邊一位上。shiftp:nopjb 0f4h,nxterr:setb 0f4hsetb 5chclr 6chnxt: nop jnb 7ch,chk74clr 7chsetb 74hretchk74: nopjnb 74h,chk6cclr 74hsetb 74hsetb 6chretchk6c: nopjnb 6ch ,chk64clr 6chsetb 64hretchk64: nopjnb 64h,chk64clr 6chse

33、tb 5chretchk5c: nopjnb 5ch,errclr 5chsetb 7chret冬季和夏季的處息時間表區(qū)table2:db 06h,00h,06h,20h,60h,40h,07h,10h,07h,15h;冬令db 07h,20h,07h,50h,07h,58h,08h,00h,08h,45hdb 08h,53h,08h,55h,09h,40h,09h,55h,09h,58hdb 10h,00h,10h,45h,10h,53h,10h,55h,11h,40hdb 13h,00h,13h,13h,13h,15h,14h,00h,14h,13hdb 14h,15h,15h,00h,1

34、5h,13h,15h,15h,16h,00hdb 17h,30h,18h,15h,19h,00h,19h,35h,19h,40hdb 20h,30h,21h、00h,21h,30h,0ffh,0ffh,0ffhtable3:db 06h,00h,06h,20h,06h,40h,07h,10h,07h,15h;夏令db 07h,20h,07h,50h,07h,58h,08h,00h,08h,45hdb 08h,53h,08h,55h,09h,40h,09h,55h,09h,58hdb 10h,00h,10h,45h,10h,53h,10h,55h,11h,40hdb 13h,45h,13h,58

35、h,14h,00h,14h,45h,14h,50hdb 14h,58h,15h,00h,15h,45h,15h,53h,15h,55hdb 17h,25h,19h,00h,19h,35h,19h,40h,21h,00hdb 21h,30h,22h,00h,0ffh,0ffh,0ffh,0ffh第5章 調(diào)試及分析這里有兩個問題需要特別重視。第一,定時器溢出產(chǎn)生中斷請求,cpu并不一定立即響應(yīng)中煌,而可能需要延遲一定的中斷響應(yīng)時間之后才能響應(yīng)中斷,中斷響應(yīng)時間大約為38個機器周期。顯然,這將在定時時間中加入額外的延時時間,導(dǎo)致計時誤差。為了保證計時精度,必須采取措施進行補償。我們采用增大重裝的定時

36、器0初值的方法來減少定時器0定時時間。具體應(yīng)調(diào)整為多大,一般需要通過調(diào)試來確定。經(jīng)測試,定時器0重裝初值設(shè)為3cb7h3cbfh。可以滿足精度要求。第二,時間是按十進制遞增,而mcs-51系列單片機只有二進制加法指令,因此用加法指令計時必須進行二一十進制轉(zhuǎn)換。第6章 課程總結(jié)說實話,兩周的時間說長不長,說短也不短,兩周之前,我們對單片機僅停留在課本上,在理論層面上,那些芯片的具體應(yīng)用都不知道怎么用,理論跟實際好像不能結(jié)合起來。 通過本次的課程設(shè)計,我學(xué)會了單片機的一般設(shè)計過程。雖然這一個系統(tǒng)參考了許多相關(guān)的文章,但是我還是從中學(xué)到了許多知識,并且在該系統(tǒng)中融入了自己的想法。在設(shè)計系統(tǒng)時通常都要

37、進行系統(tǒng)擴展與配置,因此,要完成一個單片機的設(shè)計工作,必須依次做到下述工作:1、硬件電路的設(shè)計、組裝與調(diào)試;2、應(yīng)用軟件的編寫、調(diào)試;3、完整應(yīng)用軟件的調(diào)試、固化和脫機運行。而在進行硬件系統(tǒng)設(shè)計時我們應(yīng)當(dāng)盡量做到:1、盡可能的選擇典型電路,并符合單片機的常規(guī)使用方法;2、在充分滿足系統(tǒng)功能要求前提下,留余地以便于二次開發(fā);3、硬件結(jié)構(gòu)設(shè)計應(yīng)與軟件設(shè)計方案一并考慮;4、整個系統(tǒng)相關(guān)器件要力求性能的匹配;5、硬件上要有可靠性與抗干擾設(shè)計;6、充分考慮單片機的帶載驅(qū)動能力。所以本人用單片機編寫了上面的程序,因為時間蒼促,如有錯誤之處,還望老師理解,并加以批改。通過這次設(shè)計使我對單片機有了更深入的了解

38、以培養(yǎng)我們的動手能力。經(jīng)過這次的單片機課程設(shè)計,我覺得我的動手能力得到了一個很大的提高,特別是對在芯片熟悉及認知方面,在這兩周的實習(xí)中,王老師給我們的幫助是很大的,我們不懂的地方總能得到王老師細心的指點,這里,我們衷心的感謝我們的王迎旭老師,是您讓我們在理論和實踐之間建立起了一座橋梁,謝謝老師了! 參考文獻1王迎旭.單片機原理及及應(yīng)用.北京:機械工業(yè)出版社.2004年2任向民.微機接口技術(shù)應(yīng)用使用教程.北京:清華大學(xué)出版社.2008年3房小翠.單片機實用系統(tǒng)設(shè)計技術(shù).北京: 國防工業(yè)出版社4何立民.單片機應(yīng)用系統(tǒng)設(shè)計.北京:北航出版社5張萬奎.模擬電子技術(shù).長沙:湖南大學(xué)出版社,2005附錄:

39、元器件清單:stc89c52rc 一片 max232 一片 24c02 一片 繼電器 一個 四位數(shù)碼顯示管 一個 撥碼開關(guān) 一個12m晶振 一個 三極管 若干 二極管 若干 電阻 若干 電容 若干 程序清單: org 0000h start: ajmp main ;跳轉(zhuǎn)入主程序0030h org 000bh ajmp ctcint ;跳轉(zhuǎn)到定時器t0的中斷服務(wù)程序入口 org 0030hmain: nop ;主程序入口地址:0030h nop nop mov a,#offh ;關(guān)閉各輸出口mov p0,a ;p0口為字形口,低電平有效mov p1,a;p1口作為6個鍵輸入口mov p2,a ;

40、p2口是字位口,低電平有效mov p3,a ;p3口報時方式控制和驅(qū)動輸出口setb t0;關(guān)閉報時音樂輸出(t0=1)setb t1 ;關(guān)閉報時擴音機電源(t1=1)cjne sp,#07h,not1mov r0,#7fhmov r1,#7dh ;否則ram清零初始化clr aloop0: mov r0,a dec r0djnz r1, loop0 ;從內(nèi)部ram區(qū)03h到7fh均清零not1: mov sp,#60h ;設(shè)置棧指針mov ip,#02h;設(shè)置定時器t0為最高中斷優(yōu)先級mov ie,#82h;定時器t0開中斷mov tmod,#01h;設(shè)置定時器t0為方式1mov tl0,#

41、0b0h;設(shè)置定時器t0初值mov th0,#3chsetb tr0;啟動定時nopnextt: nop mov sp,#60h ;重置堆棧底位置lcall disp ;調(diào)用顯示子程序nop ;檢測標(biāo)志是否出現(xiàn),f3為定時分鐘值變化的標(biāo)志位jnb 0f3h,next1 ;f3=0,則轉(zhuǎn)鍵掃描,判斷有無鍵按下nop ;f3=1,調(diào)用報時處理子程序setb int0jnb int0 , users;如into=0,則調(diào)用用戶自設(shè)定報時點lcall timera;into=1,調(diào)用timera,按作息時間表報時users: noplcall timerb;timerb為用戶自設(shè)定報時點報時nopne

42、xt1:lcall checkey;調(diào)用按鍵掃描子程序,判斷有無鍵按下jz nextt;無鍵按下,返回重新掃描noplcall keyacc;有鍵按下,調(diào)用按鍵處理子程序nopsjmp nexttnopnopctcint:nop;t0的中斷服務(wù)子程序mov tl0,#0b4h;設(shè)置定時器t0初值mov th0,#3chpush acc;保護主程序現(xiàn)場數(shù)據(jù)push pswnopsetb rs0;選擇新的工作寄存器區(qū)(1區(qū))clr rs1;select 1 areainc 20h;0.1s單元加1mov a,20hjb of4h,lca;(f4h)為鍵處理標(biāo)志位,在鍵處理過程中不顯示秒點cjne

43、a,#05h,ctnucctnuc: jc lc2;小于0.4s則秒點閃亮,大于0.4s則秒點熄滅clr 6chsjmp lcalc2: setb 6chlca: cjne a,#0eh,rtnh;未計滿1s則退出中斷mov 20h,#00h;毫秒計數(shù)單元清零jnb 0f0h,nexte;f0h=1為報時擴音機預(yù)熱延時標(biāo)志位mov a,25h;(25h)中存放報時擴音機預(yù)熱延時時間值jnz nextfclr ofohclr ofohsetb of1hmov 26h,#1oh ;(26h)中存放報時放音的延時時間值clr tonexte: jnb of1h,nextf ;(f1h=1)為報時放音

44、的延時標(biāo)志位mov a,26hdec amov 26h,ajnz nextf ;判斷報時放音延時是否結(jié)束clr of1h ;延時時間到,清除報時放音標(biāo)志位,關(guān)閉報時電源setb t1setb t2setb tosetb tonopnextf: nopmov a,21h ;對秒計數(shù)單元(21h)進行累計計數(shù)add a,#01hda amov 21h,acjne a,#06h,rtnh ;判斷分計數(shù)是否計滿clr amov 21h,asetb 0f3h ;(f3h)為分值有變更標(biāo)志位next: mov a,22h ;對分(22h)進行累計計數(shù)add a,#01h;da amov 22h,acjne a,#60h,rtdnmov 22h,#00hmov a,23hadd a,#01h ;時單元加1da amov 23h,a ;對時(23h)進行累計計數(shù)cjne a,#24h,trndmov 23h,#00hmov a,24hadd a,#01h ;星期計數(shù)單元(24h)加1da amov 24h,acjne a,#07h,rtdnmov 24h,#00hrtdn: nopjnb of3h,rtdh ;確認(f3=0)分值無變更,則返回jb of4h,rtnh ;確認(f4=0)正在鍵處理,則返回ldda: nop ;將當(dāng)前的時間值顯示緩沖區(qū)n

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論