版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、湖南工程學(xué)院課 程 設(shè) 計(jì)課程名稱 微機(jī)原理與應(yīng)用 課題名稱 單片機(jī)作息時(shí)間控制器 湖南工程學(xué)院課 程 設(shè) 計(jì) 任 務(wù) 書課程名稱 微機(jī)原理與應(yīng)用 課 題 單片機(jī)作息時(shí)間控制器 專業(yè)班級(jí) 自動(dòng)化0702 學(xué)生姓名 羅 琦 學(xué) 號(hào) 200701020216 指導(dǎo)老師 王迎旭、李曉秀、林國(guó)漢 審 批 任務(wù)書下達(dá)日期 2010年 6 月 7日任務(wù)完成日期 2010年 6 月 20日設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求設(shè)計(jì)內(nèi)容:本課題要求以單片機(jī)為核心,設(shè)計(jì)一個(gè)具有定時(shí)和計(jì)數(shù)功能的智能化作息時(shí)間控制器。該控制器要求有以下功能:1、 按作息時(shí)間接通/斷開(kāi)電鈴;2、 課間接通/斷開(kāi)播放音樂(lè)設(shè)備;3、 時(shí)鐘顯示。設(shè)計(jì)要求:1
2、)確定系統(tǒng)設(shè)計(jì)方案; 2)進(jìn)行系統(tǒng)的硬件設(shè)計(jì);3)完成必要的參數(shù)計(jì)算與元器件選擇;4)完成應(yīng)用程序設(shè)計(jì);*5)進(jìn)行部分單元電路幾應(yīng)用程序的調(diào)試;主 要 設(shè) 計(jì) 條 件作息時(shí)間控制器常用于學(xué)校教學(xué)樓的時(shí)間控制,利用單片機(jī)內(nèi)部定時(shí)器實(shí)現(xiàn)時(shí)間基準(zhǔn)定時(shí),并配合“啟動(dòng)”、“復(fù)位”等按鍵的操作完成鈴聲、音樂(lè)的開(kāi)/??刂?,顯示的內(nèi)容要求有時(shí)、分、秒各兩位。說(shuō) 明 書 格 式1. 課程設(shè)計(jì)任務(wù)書2. 目錄3. 系統(tǒng)總體方案選擇與說(shuō)明4. 系統(tǒng)結(jié)構(gòu)框圖與工作原理5. 各單元硬件設(shè)計(jì)說(shuō)明及計(jì)算方法6. 軟件設(shè)計(jì)與說(shuō)明(包括流程圖)7. 調(diào)試結(jié)果與必要的調(diào)試說(shuō)明8. 使用說(shuō)明9. 程序清單10、總結(jié)11、參考文獻(xiàn)附
3、錄附錄a 系統(tǒng)原理圖附錄b 程序清單評(píng)分表進(jìn) 度 安 排設(shè)計(jì)時(shí)間兩周第一周:星期一 講課,布置課題任務(wù), 借閱有關(guān)資料;星期二 上午:講課及課題介紹;下午:分組進(jìn)行總體方案討論,初步確定設(shè)計(jì)方案;星期三 上午:方案論證與檢查;下午:分組進(jìn)行總體設(shè)計(jì),硬、軟件功能分配;星期四 硬、軟件流程設(shè)計(jì)與計(jì)算; 星期五 小系統(tǒng)焊接與調(diào)試;第二周:星期一 分單元調(diào)試調(diào)試;星期二 寫說(shuō)明書初稿;星期三 檢查設(shè)計(jì)情況,修改說(shuō)明書;星期四 整理資料,準(zhǔn)備答辯;星期五 交設(shè)計(jì)資料,答辯。參 考 文 獻(xiàn)參考文獻(xiàn)1張迎新.單片微型計(jì)算機(jī)原理、應(yīng)用及接口技術(shù).國(guó)防工業(yè)出版社2房小翠.單片機(jī)實(shí)用系統(tǒng)設(shè)計(jì)技術(shù). 國(guó)防工業(yè)出版
4、社3何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北航出版社4王迎旭.單片機(jī)原理及及應(yīng)用.機(jī)械工業(yè)出版社.2004年、目 錄第一章 引 言71.1簡(jiǎn)介及技術(shù)要求 71.2計(jì)時(shí)方案 71.3鍵盤/顯示方案7第二章 硬件設(shè)計(jì) 8 2.1 電路原理圖 82.2 系統(tǒng)工作流程 92.3 系統(tǒng)使用說(shuō)明 10第三章 系統(tǒng)軟件設(shè)計(jì) 103.1 軟件設(shè)計(jì) 103.2 系統(tǒng)工作流程 11第四章 程序模塊設(shè)計(jì). 15 4.1主程序模塊 16 4.2定時(shí)中斷服務(wù)程序模塊 184.3掃描顯示模塊 224.4鍵掃描子程序 234.5鍵值處理子程序 274.6移位鍵處理程序模塊 30第五章 調(diào)試及分析 32第六章 課程總結(jié) 33參考文獻(xiàn)
5、34附錄 35第1章 引 言因?yàn)閱纹瑱C(jī)的種類多,而型號(hào)雜,也是我們學(xué)習(xí)中的困難,所以就mcs51系列的產(chǎn)品來(lái)說(shuō),就是一個(gè)典型的學(xué)習(xí)方法。對(duì)于類似匯編的單片機(jī)編程過(guò)程,也是一個(gè)十分有趣的過(guò)程。為了更好的說(shuō)明,我以上介紹先從應(yīng)用電路切入,同時(shí)介紹它們的使用方法,以便能快速掌握它們的應(yīng)用。1.1簡(jiǎn)介及技術(shù)要求校園作息時(shí)間控制系統(tǒng)主要用于學(xué)校,對(duì)一些以24小時(shí)為周期的開(kāi)關(guān)量進(jìn)行自動(dòng)控制。如上下課打鈴及擴(kuò)音設(shè)備的開(kāi)與關(guān)、教學(xué)樓照明的定時(shí)開(kāi)與關(guān)、學(xué)生宿舍燈及校園路燈的定時(shí)開(kāi)關(guān)的控制。技術(shù)要求如下:(1) 定時(shí)準(zhǔn)確,月誤差=10%。(2) 有顯示和校時(shí)功能。(3) 具備到時(shí)響鈴功能。1.2計(jì)時(shí)方案采用軟件控
6、制利用mcs-51系列單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器進(jìn)行中數(shù)年定時(shí),配合軟件延時(shí)實(shí)現(xiàn)時(shí)、分、秒的計(jì)時(shí)。該方案節(jié)省硬件成本,且能夠使讀者在定時(shí)/計(jì)數(shù)器的使用、中數(shù)年及程序設(shè)計(jì)方面得到鍛煉與提高,因此本系統(tǒng)將采用軟件方法實(shí)現(xiàn)計(jì)時(shí)。1.3鍵盤/顯示方案對(duì)于實(shí)時(shí)時(shí)鐘而言,顯示顯然是另一個(gè)重要的環(huán)節(jié)。如前所述,通常有兩種顯示方式:動(dòng)態(tài)顯示和靜態(tài)顯示。直接利用mc51單片機(jī)的p0和p2口,led動(dòng)態(tài)顯示。 該方案硬件連接簡(jiǎn)單,但動(dòng)態(tài)掃描的顯示方式需占用cpu較多的時(shí)間,在單片機(jī)沒(méi)有太多實(shí)時(shí)測(cè)控任務(wù)的情況下可以采用。第2章 硬件設(shè)計(jì)考慮到在停電時(shí)本機(jī)仍需正常走時(shí),故單片機(jī)選用coms低功耗產(chǎn)品如mcs51,由于l
7、ed顯示電路耗電量較大,可將其電源與單片機(jī)電源分開(kāi),從而使得在停電時(shí)蓄電池僅對(duì)單片機(jī)供電,而不對(duì)顯示電路供電,延長(zhǎng)電池的供電時(shí)間。選用典型的并口掃描顯示輸出。用mcs51的p0口和p2口作為段碼和位碼輸出口,并由2片uln2003作為每個(gè)端口的反相驅(qū)動(dòng)。利用p1口的低六位作為6個(gè)功能鍵的鍵盤線,p3口部分口作為冬季或夏季作息時(shí)間的選擇線、臨時(shí)報(bào)時(shí)處理設(shè)置線和打鈴輸出控制(輸出部分加光電隔離)。2.1電路原理框圖報(bào)時(shí)鐘電路的核心是mcs51單片機(jī),其內(nèi)部帶有4kb的程序rom,無(wú)須外擴(kuò)程序存儲(chǔ)器。電腦時(shí)鐘沒(méi)有大量的運(yùn)算和暫存數(shù)據(jù),現(xiàn)有的128b片內(nèi)ram已能滿足要求,也不必外擴(kuò)片ram。系統(tǒng)配備
8、5位led顯示和6*1鍵盤,用p1口作為鍵盤接口電路,p2口作為5位led 顯示的位選通口,p0口則作為字形碼輸出口。采用共陰極led數(shù)碼管,p0口、p2口和數(shù)碼管之間串接了反相驅(qū)動(dòng)芯片uln2003,因此p2口輸出高電平選中相應(yīng)的位,而p0口輸出低電平點(diǎn)亮相應(yīng)的段。p3。2接用戶自設(shè)定報(bào)時(shí)/作息時(shí)間報(bào)時(shí)的選擇開(kāi)關(guān),開(kāi)關(guān)閉合(p3。2為低電平)時(shí),僅對(duì)用戶自設(shè)定的時(shí)間點(diǎn)進(jìn)行報(bào)時(shí);開(kāi)關(guān)斷開(kāi)時(shí),則進(jìn)行固定的作息時(shí)間表報(bào)時(shí)。 p3。3端口接夏令/冬令作息時(shí)間表,p3。3=1時(shí)選擇擇冬令作息時(shí)間表。p3。4端口外接光電隔離器,驅(qū)動(dòng)擴(kuò)音機(jī)電源的控制開(kāi)關(guān),低電平有效。鍵盤部分顯示部分單片機(jī)控制部分響鈴及擴(kuò)
9、音部分 圖2.1 單片機(jī)原理框圖2.2系統(tǒng)工作流程本單片機(jī)報(bào)時(shí)控制系統(tǒng)具備以下功能:時(shí)鐘顯示。5位led從左到右依次顯示時(shí)、分,采用24h計(jì)時(shí)。 圖2.2 時(shí)間顯示圖(4) 鍵盤功能。采用4個(gè)獨(dú)立按鍵,包括:移位鍵、加1鍵、減1鍵、校時(shí)置入鍵。(5) 移位鍵:(p1。0=0)每按動(dòng)移位鍵一次,小數(shù)點(diǎn)從左向右移動(dòng)1位。(6) 加1鍵:(p1。1=0)對(duì)小數(shù)點(diǎn)所在位的數(shù)什進(jìn)行十進(jìn)制加1。(7) 減1鍵:(p1。2=0)對(duì)小數(shù)點(diǎn)所在位的數(shù)值進(jìn)行十進(jìn)制減1。(8) 校時(shí)置入鍵:(p1。3=0)將顯示的時(shí)間值置入實(shí)時(shí)時(shí)鐘的計(jì)時(shí)緩沖區(qū)。 圖2.3 鍵盤功能(9) 揚(yáng)聲器驅(qū)動(dòng)電路: 圖2.4 揚(yáng)聲器驅(qū)動(dòng)電路
10、 2.3 系統(tǒng)的使用說(shuō)明(1) 時(shí)間顯示。通電后,系統(tǒng)自動(dòng)進(jìn)入時(shí)鐘顯示,從00:00:00:開(kāi)始計(jì)時(shí),此時(shí)可以設(shè)定當(dāng)前時(shí)間。(2) 時(shí)間校對(duì)。按下“移位”鍵,小數(shù)點(diǎn)從左向右移動(dòng),每按動(dòng)1次,小數(shù)點(diǎn)便移動(dòng)1位;要修改設(shè)置哪一位,只需將小數(shù)點(diǎn)移到該位,便可用“加1鍵”或“減1鍵”對(duì)該位進(jìn)行數(shù)字設(shè)定;時(shí)間的校對(duì)設(shè)定一共有5位,從左到右依次為星期、小時(shí)十位、小時(shí)個(gè)位、他的十位、分的個(gè)位。設(shè)置正確后“校時(shí)置入鍵”,時(shí)間校正便設(shè)置完成,報(bào)時(shí)鐘開(kāi)始按新設(shè)置的時(shí)間值開(kāi)始走時(shí)和顯示。(3) 用戶報(bào)時(shí)時(shí)間設(shè)置/顯示。用戶可以自行設(shè)定10組報(bào)時(shí)時(shí)間點(diǎn),這時(shí)led顯示的最高位定義為組編號(hào)其他位定義不變;按下“報(bào)時(shí)設(shè)定
11、鍵”,系統(tǒng)根據(jù)“組編號(hào)”將用記設(shè)定的報(bào)時(shí)時(shí)間點(diǎn)(小時(shí)和分)存入內(nèi)部ram相應(yīng)存儲(chǔ)單元中,用戶如需修改和檢查這些報(bào)時(shí)時(shí)間。如需修改,可用“移位鍵”、“加1鍵”,“減1 鍵”來(lái)重新設(shè)定,然后用“報(bào)時(shí)設(shè)定鍵”來(lái)轉(zhuǎn)入并結(jié)束顯示。(4) 報(bào)時(shí)輸出的驅(qū)動(dòng)過(guò)程。在報(bào)時(shí)處理程序上中,一旦當(dāng)前時(shí)間與作息時(shí)間表中的某一時(shí)間點(diǎn)(時(shí)、分值)相同時(shí),則建立f0報(bào)時(shí)標(biāo)志,建立f1放音標(biāo)志,擴(kuò)音機(jī)播放報(bào)時(shí)音樂(lè),并在26h中設(shè)置放音時(shí)間,放音時(shí)間到,則關(guān)閉驅(qū)動(dòng)及清除f1標(biāo)志位,完成1次報(bào)時(shí)驅(qū)動(dòng).第3章 軟件設(shè)計(jì)3.1系統(tǒng)資源分配 (1)為方便閱讀程序,先對(duì)系統(tǒng)的資源分配加以說(shuō)明。1) 定時(shí)器。定時(shí)器0用作時(shí)鐘定時(shí),按方式1工
12、作,每隔100ms溢出中斷1次。2) 片內(nèi)ram及標(biāo)志位的分配與定義見(jiàn)表1表1:地址功能名稱初始化值2fh2bh顯示緩沖區(qū),星期、小時(shí)、分(高位在前)disp0disp400h24h20h計(jì)時(shí)緩沖區(qū),星期、時(shí)、分、秒、100msweek,hour,min,sec,msec00h40h53h用戶報(bào)時(shí)時(shí)間值寄存區(qū)(時(shí)、分)ahour、amin00h61h7fh堆棧區(qū)00hf0h報(bào)時(shí)開(kāi)始標(biāo)志位f0h0f1h放音開(kāi)始標(biāo)志位f1h0f3h分鐘值變更標(biāo)志位f3h0f4h鍵處理標(biāo)志位f4h025h擴(kuò)音機(jī)預(yù)熱時(shí)間25h00h26h播放報(bào)時(shí)音樂(lè)時(shí)間26h00h(2)軟件流程。根據(jù)上述工作流程,軟件設(shè)計(jì)可分為以下
13、幾個(gè)功能模塊:1) 主程序:初始化與鍵盤監(jiān)控。開(kāi)始i/o端口初始化設(shè)置棧指針軟件陷阱處理ram區(qū)清零定時(shí)器、中斷初始化報(bào)時(shí)處理子程序調(diào)用鍵掃描子程序鍵掃描處理子程序調(diào)用顯示子程序如有鍵則進(jìn)行鍵處理判斷是否有f3標(biāo)志返回主程序入口2) 計(jì)時(shí):為定時(shí)器0中斷服務(wù)子程序,完成刷新計(jì)時(shí)緩沖區(qū)的功能。3) 時(shí)間設(shè)置與報(bào)時(shí)設(shè)置:由鍵盤輸入設(shè)置當(dāng)前時(shí)間與定時(shí)啟閉時(shí)間。4) 顯示:完成5位led動(dòng)態(tài)顯示。5) 鍵盤掃描:判斷是否有鍵按下,并求取鍵號(hào)。6) 定時(shí)比較:判斷報(bào)時(shí)時(shí)間到否,如時(shí)間到,則啟動(dòng)報(bào)時(shí)處理程序。7) 其他輔助功能程序,如鍵盤設(shè)置、拆字、合字、冬季或夏季時(shí)間表選擇及假日停止報(bào)時(shí)等。第4章 程序
14、模塊設(shè)計(jì)程序的模塊設(shè)計(jì)非常重要,有很多功能的程序,列表如表2表2 :主程序程序的主體,調(diào)用其他子程序定時(shí)中斷服務(wù)程序進(jìn)行秒,分,時(shí)的累計(jì)計(jì)數(shù),到時(shí)間到時(shí),驅(qū)動(dòng)蜂鳴器及繼電器顯示模塊p0口作為段碼,p2口作為位碼輸出,控制數(shù)碼管。鍵掃描子程序檢測(cè)p1口,判斷是否有鍵按下,如有鍵按下,進(jìn)進(jìn)行延時(shí)去抖動(dòng)并讀取鍵值,存入a中鍵值處理子程序判斷a中的值,根據(jù)a來(lái)選擇調(diào)用哪個(gè)子程序4.1 主程序模塊(main)在主程序模塊中,先對(duì)各端口進(jìn)行初始化,對(duì)內(nèi)部ram區(qū)清零,設(shè)置堆棧和定時(shí)器初值,關(guān)閉顯示器,啟動(dòng)定時(shí)及其中斷。然后檢測(cè)時(shí)鐘分值變更標(biāo)志位f3是否建立,如果已建立,則進(jìn)行報(bào)時(shí)處理,否則再檢測(cè)有無(wú)按鍵按
15、下,若有則進(jìn)行按鍵處理,無(wú)則返回循環(huán)點(diǎn)。 org 0000h start: ajmp main ;跳轉(zhuǎn)入主程序0030h org 000bh ajmp ctcint ;跳轉(zhuǎn)到定時(shí)器t0的中斷服務(wù)程序入口 org 0030hmain: nop ;主程序入口地址:0030h nop nop mov a,#offh ;關(guān)閉各輸出口mov p0,a ;p0口為字形口,低電平有效mov p1,a;p1口作為6個(gè)鍵輸入口mov p2,a ;p2口是字位口,低電平有效mov p3,a ;p3口報(bào)時(shí)方式控制和驅(qū)動(dòng)輸出口setb t0;關(guān)閉報(bào)時(shí)音樂(lè)輸出(t0=1)setb t1 ;關(guān)閉報(bào)時(shí)擴(kuò)音機(jī)電源(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è)置定時(shí)器t0為最高中斷優(yōu)先級(jí)mov ie,#82h;定時(shí)器t0開(kāi)中斷mov tmod,#01h;設(shè)置定時(shí)器t0為方式1mov tl0,#0b0h;設(shè)置定時(shí)器t0初值mov th0,#3chsetb tr0;啟動(dòng)定時(shí)nopnextt: nop mov sp,#60h ;重置堆棧底位置lcall disp
17、;調(diào)用顯示子程序nop ;檢測(cè)標(biāo)志是否出現(xiàn),f3為定時(shí)分鐘值變化的標(biāo)志位jnb 0f3h,next1 ;f3=0,則轉(zhuǎn)鍵掃描,判斷有無(wú)鍵按下nop ;f3=1,調(diào)用報(bào)時(shí)處理子程序setb int0jnb int0 , users;如into=0,則調(diào)用用戶自設(shè)定報(bào)時(shí)點(diǎn)lcall timera;into=1,調(diào)用timera,按作息時(shí)間表報(bào)時(shí)users: noplcall timerb;timerb為用戶自設(shè)定報(bào)時(shí)點(diǎn)報(bào)時(shí)nopnext1:lcall checkey;調(diào)用按鍵掃描子程序,判斷有無(wú)鍵按下jz nextt;無(wú)鍵按下,返回重新掃描noplcall keyacc;有鍵按下,調(diào)用按鍵處理子程
18、序nopsjmp nexttnopnop4.2定時(shí)中斷服務(wù)程序模塊該多好模塊完成下述工作:對(duì)100毫秒(20h)、秒(21h)、分(22h)、小時(shí)(23h)進(jìn)行累計(jì)計(jì)數(shù),如果分值有計(jì)數(shù)變化并且無(wú)鍵按下,則將小時(shí)和分鐘送顯示緩沖區(qū)更新顯示目錄;如有報(bào)是處理標(biāo)志,則對(duì)報(bào)時(shí)擴(kuò)音機(jī)電源和報(bào)時(shí)音樂(lè)輸出分別進(jìn)行定時(shí)控制。ctcint:nop;t0的中斷服務(wù)子程序mov tl0,#0b4h;設(shè)置定時(shí)器t0初值mov th0,#3chpush acc;保護(hù)主程序現(xiàn)場(chǎng)數(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)志位,在鍵處理過(guò)程中不顯示秒點(diǎn)cjne a,#05h,ctnucctnuc: jc lc2;小于0.4s則秒點(diǎn)閃亮,大于0.4s則秒點(diǎn)熄滅clr 6chsjmp lcalc2: setb 6chlca: cjne a,#0eh,rtnh;未計(jì)滿1s則退出中斷mov 20h,#00h;毫秒計(jì)數(shù)單元清零jnb 0f0h,nexte;f0h=1為報(bào)時(shí)擴(kuò)音機(jī)預(yù)熱延時(shí)標(biāo)志位mov a,25h;(25h)中存放報(bào)時(shí)擴(kuò)音機(jī)預(yù)熱延時(shí)時(shí)間值jnz nextfclr ofohclr ofohsetb of1hmov 26h,#1oh ;(26h)中存放
20、報(bào)時(shí)放音的延時(shí)時(shí)間值clr tonexte: jnb of1h,nextf ;(f1h=1)為報(bào)時(shí)放音的延時(shí)標(biāo)志位mov a,26hdec amov 26h,ajnz nextf ;判斷報(bào)時(shí)放音延時(shí)是否結(jié)束clr of1h ;延時(shí)時(shí)間到,清除報(bào)時(shí)放音標(biāo)志位,關(guān)閉報(bào)時(shí)電源setb t1setb t2setb tosetb tonopnextf: nopmov a,21h ;對(duì)秒計(jì)數(shù)單元(21h)進(jìn)行累計(jì)計(jì)數(shù)add a,#01hda amov 21h,acjne a,#06h,rtnh ;判斷分計(jì)數(shù)是否計(jì)滿clr amov 21h,asetb 0f3h ;(f3h)為分值有變更標(biāo)志位next: m
21、ov a,22h ;對(duì)分(22h)進(jìn)行累計(jì)計(jì)數(shù)add a,#01h;da amov 22h,acjne a,#60h,rtdnmov 22h,#00hmov a,23hadd a,#01h ;時(shí)單元加1da amov 23h,a ;對(duì)時(shí)(23h)進(jìn)行累計(jì)計(jì)數(shù)cjne a,#24h,trndmov 23h,#00hmov a,24hadd a,#01h ;星期計(jì)數(shù)單元(24h)加1da amov 24h,acjne a,#07h,rtdnmov 24h,#00hrtdn: nopjnb of3h,rtdh ;確認(rèn)(f3=0)分值無(wú)變更,則返回jb of4h,rtnh ;確認(rèn)(f4=0)正在鍵處理
22、,則返回ldda: nop ;將當(dāng)前的時(shí)間值顯示緩沖區(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碼拆成兩個(gè)字節(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)場(chǎng)數(shù)據(jù)noppop pswpop accreti4.3掃
23、描顯示模塊 該模塊為5位led掃描顯示模塊。p0口為字形碼輸出口,低電平有效;p2口為字位碼輸出口,高電平有。顯示緩沖區(qū)為2fh2bh等5個(gè)字節(jié),2fh存放顯示的星期數(shù),2eh、2dh存放顯示的小時(shí)數(shù),2ch、2bh存放顯示的分鐘數(shù),其數(shù)值范圍在00h0fh內(nèi)時(shí)不顯示該位的小數(shù)點(diǎn),在10h1fh時(shí)則顯示小數(shù)點(diǎn)。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 ;延時(shí)2msdec r0 ;顯示下一個(gè)字符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ù)點(diǎn)時(shí)的字符顯示字形表db 0ffh,0efh、0f7h,0fch,0b9h,0f9h,0f1hnop4.4鍵掃描子程序 檢測(cè)p1口,判斷是否有鍵按下,如有鍵按下,進(jìn)進(jìn)行延時(shí)去抖動(dòng)并讀取鍵值,存入a中。checkeya:nop;鍵掃描子程序nopnopmov p1,#0ffhmov a,p1;判斷是否有鍵按下cpl aanl a,#3fhjz retxlcall disp;延時(shí)去抖動(dòng)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è)定報(bào)時(shí)時(shí)間點(diǎn)置入鍵程序模塊。將顯示緩沖區(qū)2fh2bh中的內(nèi)容壓縮后存入40h為首地址的片內(nèi)ram中,其中2fh為定時(shí)時(shí)間點(diǎn)的編號(hào),2eh、2dh為小時(shí)值,2ch、2bh為分鐘數(shù)值。useset:nopmov r0,#2fhmov r1,#40h ;本次用戶設(shè)定報(bào)時(shí)點(diǎn)首址為40hmov a,r0anl a,#ofhrl aadd a,r1 ;報(bào)時(shí)點(diǎn)編號(hào)乘2加首址,為本次存放的實(shí)際地址mov r1,adec r0nop;定時(shí)設(shè)定時(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ù)點(diǎn)點(diǎn)亮的對(duì)應(yīng)位上進(jìn)行十進(jìn)制減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è)定報(bào)時(shí)時(shí)間點(diǎn)顯示鍵處理模塊。由(2fh)指定的用戶自設(shè)定報(bào)時(shí)點(diǎn)編號(hào),計(jì)算其在ram中存放的地址,再根據(jù)此地址找出該報(bào)時(shí)時(shí)間點(diǎn)的2個(gè)字節(jié)碼,將其4個(gè)半字節(jié)分別存入2eh2bh單元低半字中。dspuse:nopmov r0,#2fh ;自設(shè)定報(bào)時(shí)點(diǎn)編號(hào)由(2fh)指定mov r1,#40h ;用戶設(shè)定報(bào)時(shí)點(diǎn)首址為40hmov a,r0anl a,#0fh
29、rl aadd a,r1 ;報(bào)時(shí)點(diǎn)編號(hào)乘2加首址,為其存放的實(shí)際地址mov r1,adec r0nop ;取定時(shí)設(shè)定時(shí)間并置入顯示緩沖區(qū)nopmov r2,#02hldr: mov a,r1 ;將小時(shí)和分鐘值解壓縮后裝入相應(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 ;是時(shí)鐘校對(duì)鍵轉(zhuǎn)timsetjb acc,useset ;設(shè)置用戶定時(shí)時(shí)間點(diǎn)jb acc5,dspuse ;顯示用戶定時(shí)時(shí)間點(diǎn)nopnopnopretnopiv. 加1鍵處理程序。在小數(shù)點(diǎn)點(diǎn)亮的對(duì)應(yīng)位上進(jìn)行十進(jìn)制加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í)時(shí)間置入程序模塊。將設(shè)定的時(shí)間值置入相應(yīng)的時(shí)間計(jì)數(shù)單元,并以該時(shí)間為起點(diǎn)開(kāi)始計(jì)時(shí)。timset:nop ;校時(shí)時(shí)間置入程序段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ù)點(diǎn)從左向右依次移動(dòng)1位。 小數(shù)點(diǎn)移動(dòng)哪一位,那一位便可用加1或減1鍵進(jìn)行修改數(shù)值。小數(shù)點(diǎn)如移到最右邊1位,若再按1次移位鍵,小數(shù)點(diǎn)自動(dòng)返回到最左邊一位上。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冬季和夏季的處息時(shí)間表區(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)試及分析這里有兩個(gè)問(wèn)題需要特別重視。第一,定時(shí)器溢出產(chǎn)生中斷請(qǐng)求,cpu并不一定立即響應(yīng)中煌,而可能需要延遲一定的中斷響應(yīng)時(shí)間之后才能響應(yīng)中斷,中斷響應(yīng)時(shí)間大約為38個(gè)機(jī)器周期。顯然,這將在定時(shí)時(shí)間中加入額外的延時(shí)時(shí)間,導(dǎo)致計(jì)時(shí)誤差。為了保證計(jì)時(shí)精度,必須采取措施進(jìn)行補(bǔ)償。我們采用增大重裝的定時(shí)
36、器0初值的方法來(lái)減少定時(shí)器0定時(shí)時(shí)間。具體應(yīng)調(diào)整為多大,一般需要通過(guò)調(diào)試來(lái)確定。經(jīng)測(cè)試,定時(shí)器0重裝初值設(shè)為3cb7h3cbfh??梢詽M足精度要求。第二,時(shí)間是按十進(jìn)制遞增,而mcs-51系列單片機(jī)只有二進(jìn)制加法指令,因此用加法指令計(jì)時(shí)必須進(jìn)行二一十進(jìn)制轉(zhuǎn)換。第6章 課程總結(jié)說(shuō)實(shí)話,兩周的時(shí)間說(shuō)長(zhǎng)不長(zhǎng),說(shuō)短也不短,兩周之前,我們對(duì)單片機(jī)僅停留在課本上,在理論層面上,那些芯片的具體應(yīng)用都不知道怎么用,理論跟實(shí)際好像不能結(jié)合起來(lái)。 通過(guò)本次的課程設(shè)計(jì),我學(xué)會(huì)了單片機(jī)的一般設(shè)計(jì)過(guò)程。雖然這一個(gè)系統(tǒng)參考了許多相關(guān)的文章,但是我還是從中學(xué)到了許多知識(shí),并且在該系統(tǒng)中融入了自己的想法。在設(shè)計(jì)系統(tǒng)時(shí)通常都要
37、進(jìn)行系統(tǒng)擴(kuò)展與配置,因此,要完成一個(gè)單片機(jī)的設(shè)計(jì)工作,必須依次做到下述工作:1、硬件電路的設(shè)計(jì)、組裝與調(diào)試;2、應(yīng)用軟件的編寫、調(diào)試;3、完整應(yīng)用軟件的調(diào)試、固化和脫機(jī)運(yùn)行。而在進(jìn)行硬件系統(tǒng)設(shè)計(jì)時(shí)我們應(yīng)當(dāng)盡量做到:1、盡可能的選擇典型電路,并符合單片機(jī)的常規(guī)使用方法;2、在充分滿足系統(tǒng)功能要求前提下,留余地以便于二次開(kāi)發(fā);3、硬件結(jié)構(gòu)設(shè)計(jì)應(yīng)與軟件設(shè)計(jì)方案一并考慮;4、整個(gè)系統(tǒng)相關(guān)器件要力求性能的匹配;5、硬件上要有可靠性與抗干擾設(shè)計(jì);6、充分考慮單片機(jī)的帶載驅(qū)動(dòng)能力。所以本人用單片機(jī)編寫了上面的程序,因?yàn)闀r(shí)間蒼促,如有錯(cuò)誤之處,還望老師理解,并加以批改。通過(guò)這次設(shè)計(jì)使我對(duì)單片機(jī)有了更深入的了解
38、以培養(yǎng)我們的動(dòng)手能力。經(jīng)過(guò)這次的單片機(jī)課程設(shè)計(jì),我覺(jué)得我的動(dòng)手能力得到了一個(gè)很大的提高,特別是對(duì)在芯片熟悉及認(rèn)知方面,在這兩周的實(shí)習(xí)中,王老師給我們的幫助是很大的,我們不懂的地方總能得到王老師細(xì)心的指點(diǎn),這里,我們衷心的感謝我們的王迎旭老師,是您讓我們?cè)诶碚摵蛯?shí)踐之間建立起了一座橋梁,謝謝老師了! 參考文獻(xiàn)1王迎旭.單片機(jī)原理及及應(yīng)用.北京:機(jī)械工業(yè)出版社.2004年2任向民.微機(jī)接口技術(shù)應(yīng)用使用教程.北京:清華大學(xué)出版社.2008年3房小翠.單片機(jī)實(shí)用系統(tǒng)設(shè)計(jì)技術(shù).北京: 國(guó)防工業(yè)出版社4何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北京:北航出版社5張萬(wàn)奎.模擬電子技術(shù).長(zhǎng)沙:湖南大學(xué)出版社,2005附錄:
39、元器件清單:stc89c52rc 一片 max232 一片 24c02 一片 繼電器 一個(gè) 四位數(shù)碼顯示管 一個(gè) 撥碼開(kāi)關(guān) 一個(gè)12m晶振 一個(gè) 三極管 若干 二極管 若干 電阻 若干 電容 若干 程序清單: org 0000h start: ajmp main ;跳轉(zhuǎn)入主程序0030h org 000bh ajmp ctcint ;跳轉(zhuǎn)到定時(shí)器t0的中斷服務(wù)程序入口 org 0030hmain: nop ;主程序入口地址:0030h nop nop mov a,#offh ;關(guān)閉各輸出口mov p0,a ;p0口為字形口,低電平有效mov p1,a;p1口作為6個(gè)鍵輸入口mov p2,a ;
40、p2口是字位口,低電平有效mov p3,a ;p3口報(bào)時(shí)方式控制和驅(qū)動(dòng)輸出口setb t0;關(guān)閉報(bào)時(shí)音樂(lè)輸出(t0=1)setb t1 ;關(guān)閉報(bào)時(shí)擴(kuò)音機(jī)電源(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è)置定時(shí)器t0為最高中斷優(yōu)先級(jí)mov ie,#82h;定時(shí)器t0開(kāi)中斷mov tmod,#01h;設(shè)置定時(shí)器t0為方式1mov tl0,#
41、0b0h;設(shè)置定時(shí)器t0初值mov th0,#3chsetb tr0;啟動(dòng)定時(shí)nopnextt: nop mov sp,#60h ;重置堆棧底位置lcall disp ;調(diào)用顯示子程序nop ;檢測(cè)標(biāo)志是否出現(xiàn),f3為定時(shí)分鐘值變化的標(biāo)志位jnb 0f3h,next1 ;f3=0,則轉(zhuǎn)鍵掃描,判斷有無(wú)鍵按下nop ;f3=1,調(diào)用報(bào)時(shí)處理子程序setb int0jnb int0 , users;如into=0,則調(diào)用用戶自設(shè)定報(bào)時(shí)點(diǎn)lcall timera;into=1,調(diào)用timera,按作息時(shí)間表報(bào)時(shí)users: noplcall timerb;timerb為用戶自設(shè)定報(bào)時(shí)點(diǎn)報(bào)時(shí)nopne
42、xt1:lcall checkey;調(diào)用按鍵掃描子程序,判斷有無(wú)鍵按下jz nextt;無(wú)鍵按下,返回重新掃描noplcall keyacc;有鍵按下,調(diào)用按鍵處理子程序nopsjmp nexttnopnopctcint:nop;t0的中斷服務(wù)子程序mov tl0,#0b4h;設(shè)置定時(shí)器t0初值mov th0,#3chpush acc;保護(hù)主程序現(xiàn)場(chǎng)數(shù)據(jù)push pswnopsetb rs0;選擇新的工作寄存器區(qū)(1區(qū))clr rs1;select 1 areainc 20h;0.1s單元加1mov a,20hjb of4h,lca;(f4h)為鍵處理標(biāo)志位,在鍵處理過(guò)程中不顯示秒點(diǎn)cjne
43、a,#05h,ctnucctnuc: jc lc2;小于0.4s則秒點(diǎn)閃亮,大于0.4s則秒點(diǎn)熄滅clr 6chsjmp lcalc2: setb 6chlca: cjne a,#0eh,rtnh;未計(jì)滿1s則退出中斷mov 20h,#00h;毫秒計(jì)數(shù)單元清零jnb 0f0h,nexte;f0h=1為報(bào)時(shí)擴(kuò)音機(jī)預(yù)熱延時(shí)標(biāo)志位mov a,25h;(25h)中存放報(bào)時(shí)擴(kuò)音機(jī)預(yù)熱延時(shí)時(shí)間值jnz nextfclr ofohclr ofohsetb of1hmov 26h,#1oh ;(26h)中存放報(bào)時(shí)放音的延時(shí)時(shí)間值clr tonexte: jnb of1h,nextf ;(f1h=1)為報(bào)時(shí)放音
44、的延時(shí)標(biāo)志位mov a,26hdec amov 26h,ajnz nextf ;判斷報(bào)時(shí)放音延時(shí)是否結(jié)束clr of1h ;延時(shí)時(shí)間到,清除報(bào)時(shí)放音標(biāo)志位,關(guān)閉報(bào)時(shí)電源setb t1setb t2setb tosetb tonopnextf: nopmov a,21h ;對(duì)秒計(jì)數(shù)單元(21h)進(jìn)行累計(jì)計(jì)數(shù)add a,#01hda amov 21h,acjne a,#06h,rtnh ;判斷分計(jì)數(shù)是否計(jì)滿clr amov 21h,asetb 0f3h ;(f3h)為分值有變更標(biāo)志位next: mov a,22h ;對(duì)分(22h)進(jìn)行累計(jì)計(jì)數(shù)add a,#01h;da amov 22h,acjne a,#60h,rtdnmov 22h,#00hmov a,23hadd a,#01h ;時(shí)單元加1da amov 23h,a ;對(duì)時(shí)(23h)進(jìn)行累計(jì)計(jì)數(shù)cjne a,#24h,trndmov 23h,#00hmov a,24hadd a,#01h ;星期計(jì)數(shù)單元(24h)加1da amov 24h,acjne a,#07h,rtdnmov 24h,#00hrtdn: nopjnb of3h,rtdh ;確認(rèn)(f3=0)分值無(wú)變更,則返回jb of4h,rtnh ;確認(rèn)(f4=0)正在鍵處理,則返回ldda: nop ;將當(dāng)前的時(shí)間值顯示緩沖區(qū)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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度演出票務(wù)銷售代理服務(wù)合同3篇
- 2024年度新能源儲(chǔ)能支付擔(dān)保合同3篇
- 2024年度消防設(shè)施設(shè)計(jì)審查代理服務(wù)合同樣本2篇
- 2024年智能地磅采購(gòu)合同樣本(含定制化軟件解決方案)3篇
- 2024年度綜合金融服務(wù)擔(dān)保借款合同制定指南3篇
- 2024全新外派勞務(wù)派遣與勞動(dòng)保障合同3篇
- 2024年度煙囪工程廢棄物處理與資源化利用合同3篇
- 2024年度國(guó)際原油進(jìn)口與運(yùn)輸一體化服務(wù)合同3篇
- 2024展覽會(huì)場(chǎng)保安服務(wù)與展覽會(huì)期間食品安全監(jiān)督合同3篇
- 2024年大學(xué)生展望未來(lái)的計(jì)劃
- 工行個(gè)人小額貸款合同樣本
- 【8歷期末】安徽省合肥市包河區(qū)智育聯(lián)盟校2023-2024學(xué)年八年級(jí)上學(xué)期1月期末歷史試題
- 醫(yī)療機(jī)構(gòu)并購(gòu)合同模板
- 北師版七年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)考點(diǎn) 清單04 基本平面圖形(12個(gè)考點(diǎn)梳理+題型解讀+提升訓(xùn)練)
- 儀式外包合同范例
- 2025年上半年中科院大連化學(xué)物理研究所金催化研究中心(2302組)招聘1人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024-2025學(xué)年上學(xué)期深圳初中地理七年級(jí)期末模擬卷1
- 黃土高原課件
- 2025年中國(guó)科學(xué)技術(shù)大學(xué)自主招生個(gè)人陳述自薦信范文
- 2024-2030年中國(guó)抗菌肽行業(yè)發(fā)展現(xiàn)狀及前景趨勢(shì)分析報(bào)告
- 學(xué)校2025元旦假期安全教育宣傳課件
評(píng)論
0/150
提交評(píng)論