電腦鐘的設計與制作_第1頁
電腦鐘的設計與制作_第2頁
電腦鐘的設計與制作_第3頁
電腦鐘的設計與制作_第4頁
電腦鐘的設計與制作_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、長治職業技術學院信息工程系畢業設計說明書設計課題名稱 電腦鐘的設計與制作 專業班級 09 電氣大專班 學生姓名 任 韶 杰 指導教師 史 曙 光 2011年 6月19日畢業設計任務書專業: 電氣自動化技術 班級:09電氣大專班設 計 課 題電腦鐘的設計與制作指 導 教 師史曙光學生姓名任韶杰設計起止時間2011年5月3日-2011年6月19日共五周畢業設計的目的與任務通過畢業設計將前面所學知識融會貫通,鍛煉獨立設計、制作和調試應用系統的能力,深入領會單片機應用系統的軟、硬件調試方法和系統研制開發過程。進一步熟悉單片機特性,掌握單片機硬件系統結構,軟件對硬件的控制功能,熟練掌握MCS-51單片機

2、指令系統的應用及程序設計、開發環境。畢業設計報告內容要求要求利用單片機設計制作電腦鐘。具體指標如下:1、自動計時,由6位LED顯示器顯示時、分、秒。2、具備校準功能,可以直接由09數字鍵設置當前時間。3、具備定時啟鬧功能。4、一天時差不超過1鈔鐘。擬定的工作進度(以周為單位)1、第一周確定課題,收集資料;2、第二周初步確定控制方案;3、第三至六周完成設計任務書要求的設計內容;4、第七周完成畢業設計說明書的編寫工作。任務下達人(簽字):史曙光 日期:2011年5月3日任務接受人(簽字):任韶杰 日期:2011年5月3日信息工程系畢業設計綜合評價表指導教師對設計及說明書的評語指導教師簽字: 年 月

3、 日 畢業設計指導小組意見畢業設計指導小組組長簽字: 年 月 日畢業設計及答辯評語答辯小組組長簽字: 年 月 日備注畢業設計成績答辯小組組長簽字年 月 日目錄摘 要1第一章 概 述21.1 單片機的發展21.2 單片機的應用3第二章 總體方案42.1計時方案42.2鍵盤/顯示方案5第三章 顯示電路介紹63.1數碼管簡介63.2 數碼管工作原理63.3顯示種類63.4 數碼管字形編碼7第四章 硬件設計84.1電路原理圖84.2系統工作流程8第五章 軟件設計115.1系統資源分配115.2軟件流程11第六章 畢業設計心得體會26摘 要時鐘,自從它發明的那天起,就成為人類的朋友,但隨著時間的推移,科

4、學技術的不斷發展,人們對時間計量的精度要求越來越高,應用越來越廣。怎樣讓時鐘更好的為人民服務,這就要求人們不斷設計出新型時鐘。現今,高精度的計時工具大多數都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術,因此走時精度高,穩定性好,使用方便,不需要經常調校,數字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用LED顯示器代替顯示器代替指針顯示進而顯示時間,減小了計時誤差,這種表具有時,分,秒顯示時間的功能,還可以進行時和分的校對,片選的靈活性好。時鐘電路在計算機系統中起著非常重要的作用,是保證系統正常工作的基礎。在一個單片機應用系統中,時鐘有兩方面的含義:一是指為保障系統正常工

5、作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統工作的快慢;二是指系統的標準定時時鐘,即定時時間,它通常有兩種實現方法:一是用軟件實現,即用單片機內部的可編程定時/計數器來實現,但誤差很大,主要用在對時間精度要求不高的場合;二是用專門的時鐘芯片實現,在對時間精度要求很高的情況下,通常采用這種方法。第一章 概 述1.1 單片機的發展1971年微處理器研制成功不久,就出現了單片微型計算機即單片機,但最早的單片機是1位的,處理能力有限。單片機的發展可分為4個階段: 第一階段(1974-1976):單片機初級階段。因為受工藝限制,單片機采用單片的形式而且功能比較簡單。例如

6、美國仙童公司生產的F8單片機,實際上只包括了8位CPU、64個字節的RAM和2個并行接口。 第二階段(1976-1978):低性能單片機階段。以INTEL公司制造的MCS-48系列單片機為代表,該系列單片機片內集成有8位CPU、8位定時器/計數器、并行I/O接口、RAM和ROM等。但是最大的缺點就是無串行接口,中斷處理比較簡單而且片內RAM和ROM容量較小且尋址范圍不大于4KB。第三階段(1978-1983):高性能單片機階段。這個階段推出的單片機普遍帶有串行接口,多級中斷系統,16位定時器/計數器,片內ROM、RAM容量加大,且尋址范圍可達64KB,有的片內還帶有A/D轉換器。這類單片機的典

7、型代表是INTEL公司的MCS-51系列的8051、Motorola公司的6801和ZILOG公司的Z8等。由于這類單片機的性能價格比高,所以直到現在仍被廣泛使用,是目前應用數量最多的單片機。 第四階段(1983年至今):8位單片機鞏固發展以16位單片機、32位單片機推出階段。此階段的主要特征是:一方面發展16位單片機、32位單片機及專用型單片機;另一方面不斷完善8位高檔單片機,改善其結構,增加其片內器件,以滿足不同用戶的需要。16位單片機的典型產品,如早期Intel公司生產的MCS-96系列單片機,片內帶有多通道10位逐次逼近比較式A/D轉換器和高速輸入/輸出部件,實時處理的能力很強;再如近

8、幾年IT公司推出的MSP430系列微功耗的16位單片,更是降低了功耗,可采用1.8-3.6V電壓供電,并集成了更豐富的片內資源。而32位單片機除了具有更高的集成度外,其晶振已達20MHZ,這使32位單片機的數據處理速度比16位單片機增快許多,性能比8位、16位單片機更加優越,也能處理較復雜的圖形和聲音數據。1.2 單片機的應用工業自動化:在自動化技術中,無論是過程控制技術、數據采集技術還是測控技術,都離不開單片機。在工業自動化的領域中,機電一體化將發揮愈來愈重要的作用,在這種集機械、為電子和計算機技術為一體的綜合技術中,工業自動化也發展到了一個新的高度,出現了無人工廠、機械人作業、網絡化工廠等

9、,不僅將人從繁重的、重復的和危險的工業現場解放了出來,還大大的提高了工作效率,降低了生產成本。智能儀器儀表:目前對儀器儀表的自動化和智能化要求越來越高。在自動化測量儀器儀表中,單片機應用十分普及單片機的使用有助于提高儀器儀表的精度和準確度,簡化結構,減小體積,易于攜帶和使用,加速儀器儀表向數字化、智能化和多功能方面發展。消費類電子產品:該應用主要應用在家電領域。目前家電領域的一個重要發展趨勢是不斷提高其智能化程度。例如,電子游戲機、照相機、電冰箱、電視機、微波爐、手機、洗衣機、空調、IC卡、汽車電子設備等。在這些電子產品中應用單片機后,其功能和性能大大提高、并實現了智能化、最優化控制。通信方面

10、:較高檔的單片機都具有通信接口,因此為單片機在通信設備中的應用創造了很好的條件。例如,在微波通信、短波通信、載波通信、光纖通信、程控交換等通信設備和儀器中都能找到單片機的應用。武器裝備:在現代化的武器裝備中,如飛機、軍艦、坦克、導彈、魚雷制導、智能武器裝備、航天飛機導航系統,都有單片機在其中發揮重要作用。終端及外部設備控制:計算機網絡終端設備,如銀行終端、以及計算機外部設備如打印機、硬盤驅動器、繪圖機、傳真機、復印機等,在這些設備中都使用了單片機。近年來隨著科技的飛速發展,同時帶動自動控制系統日新月異更新,單片機的應用正在不斷地走向深入。第二章 總體方案2.1計時方案方案一:采用實時時鐘芯片。

11、針對計算機系統對實時時鐘功能的普遍要求,各大芯片生產廠家陸續推出了一系列的實時集成電路,如DS1287、DS12887、DS1320等。這些實時時鐘芯片具備年、月、日、時、分、秒計時功能,計時數據的更新每秒自動進行一次,不需要程序干預。計算機可以通過中斷或查詢方式讀取計時數據并進行顯示,因此計時功能的實現無需占用CPU的時間,程序簡單。此外,實時時鐘芯片多數帶有鋰電池做后備電源,具備永不停止的計時功能:具有可編程方波輸出功能,可用作實時測控系統的采樣信號等;有的實時時鐘芯片內部還帶有非易失性RAM,可用來存放需長期保存但有時也需要變更的數據。由于功能完善,精度高,軟件程序設計相對簡單,且計時不

12、用占用CPU時間,因此,在工業實時測控系統中多采樣用這一類專用芯片來實現實時時鐘功能。方案二:軟件控制。當今單片機廠商琳瑯滿目,產品性能各異。常用的單片機有很多種:Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、臺灣Winbond(華邦)W78系列、荷蘭Pilips的PCF80C51系列、Microchip公司的PIC系列、Zilog的Z86系列、Atmel的AT90S系列、韓國三星公司的KS57C系列4位單片機、臺灣義隆的EM-78系列等。我們最終選用了ATMEL公司的AT89C51單片機。AT89C51是美國ATMEL公司生產的低電壓,高性能CMOS8位

13、單片機,片內含8Kbytes的可反復擦寫的只讀程序存儲器(PEROM)和256bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,與標準MCS-51指令系統及8051產品引腳兼容,片內置通用8位中央處理器(CPU)和FLASH存儲單元,功能強大AT89C51單片機適用于許多較為復雜控制應用場合。所以我們最終選用AT89C51單片機。利用MCS-51內部的定時、計數器進行中斷定時,配合軟件延時實現時、分、秒的計時。該方案節省硬件成本,切可以使我們在定時/計數器的使用、中斷及程序設計方面得到鍛煉與提高,因此本系統將采用軟件方法實現計時。2.2鍵盤/顯示方

14、案對于實時時鐘而言,顯示顯然是另一個重要的環節。通常有兩種顯示方式:動態顯示和靜態顯示。方案一:串口擴展,LED靜態顯示。如圖2.1(a)所示,該方案占用接口資源少,采用串口傳輸實現靜態顯示,顯示亮度有保證,但硬件開銷大,電路復雜,信息刷新速度慢,比較適用于并行口資源較少的場合。 方案二:8155擴展,LED動態顯示。如圖2.1(b)所示,該方案硬件連接簡單,但動態掃描的顯示方式需要占用CPU較多的時間,在單片機沒有太多實時測控任務的情況下可以采用。串行口8031P1口移位寄存器LED1移位寄存器LED24×4鍵盤(a) 靜態顯示框圖80318155鍵盤顯示接口LED顯示4×

15、;4鍵盤(b) 動態顯示框圖圖2.1 顯示方式框圖本系統選擇動態顯示方式。第三章 顯示電路介紹3.1數碼管簡介數碼管由8個發光二極管(以下簡稱字段)構成,通過不同的組合可用來顯示數字0 9、字符A F及小數點“·”。數碼管的外形結構如圖3.1(a)所示。數碼管又分為共陰極和共陽極兩種結構,分別如圖3.1(b)和圖3.1(c)所示。(a) 外型結構;(b) 共陰極;(c)共陽極圖3.1 數碼管結構圖3.2 數碼管工作原理由于我們采用的是共陰極數碼管所以介紹共陰極數碼管的工作原理如下。共陰極數碼管的8個發光二極管的陰極(二極管負端)連接在一起。通常,公共陰極接低電平(一般接地),其它管腳

16、接段驅動電路輸出端。當某段驅動電路的輸出端為高電平時,則該端所連接的字段導通并點亮。根據發光字段的不同組合可顯示出各種數字或字符。此時,要求段驅動電路能吸收額定的段導通電流,還需根據外接電源及額定段導通電流來確定相應的限流電阻。3.3顯示種類靜態顯示靜態顯示是指數碼管顯示某一字符時,相應的發光二極管恒定導通或恒定截止。這種顯示方式的各位數碼管相互獨立,公共端恒定接地(共陰極)或接正電源(共陽極)。每個數碼管的8個字段分別與一個8位I/O口地址相連,I/O口只要有段碼輸出,相應字符即顯示出來,并保持不變,直到I/O口輸出新的段碼。采用靜態顯示方式,較小的電流即可獲得較高的亮度,且占用CPU時間少

17、,編程簡單,顯示便于監測和控制,但其占用的接口線多,硬件電路復雜,成本高,只適合于顯示位數較少的場合。 動態顯示動態顯示是一位一位地輪流點亮各位數碼管,這種逐位點亮顯示器的方式稱為位掃描。通常,各位數碼管的段選線相應并聯在一起,由一個8位的I/O口控制;各位的位選線(公共陰極或陽極)由另外的I/O口線控制。動態方式顯示時,各數碼管分時輪流選通,要使其穩定顯示,必須采用掃描方式,即在某一時刻只選通一位數碼管,并送出相應的段碼,在另一時刻選通另一位數碼管,并送出相應的段碼。依此規律循環,即可使各位數碼管顯示將要顯示的字符。雖然這些字符是在不同的時刻分別顯示,但由于人眼存在視覺暫留效應,只要每位顯示

18、間隔足夠短就可以給人以同時顯示的感覺。采用動態顯示方式比較節省I/O口,硬件電路也較靜態顯示方式簡單,但其亮度不如靜態顯示方式,而且在顯示位數較多時,CPU要依次掃描,占用CPU較多的時間。3.4 數碼管字形編碼要使數碼管顯示出相應的數字或字符,必須使段數據口輸出相應的字形編碼。共陰極LED顯示字型碼如表3-1所示:顯示字符共陰極顯示字符共陰極03FH96FH106HA77H25BHB7CH34FHC39H466HD5EH56DHE79H67DHF71H707H87FH表3-1 LED顯示字型碼表第四章 硬件設計4.1電路原理圖電腦鐘電路的核心是89C51單片機,其內部帶有4KB的FLASHR

19、OM,無須外擴展存儲器;電腦時鐘沒有大量的運算和暫存數據,現有的128B片內RAM已能滿足要求,也不必擴展片外RAM。系統配備6位LED顯示和4×3鍵盤,采用8155作為鍵盤/顯示接口電路。利用8155的A口作為6位LED顯示的位選接口,其中PA0PA5分別對應位LED0LED5,B口則作為段選口,C口的3位為鍵盤輸入口,對應02行,A口同時用作鍵盤的列掃描口。由于采用共陰極數碼管,因此口輸出低電平選中相應的位,而B口輸出高電平點亮相應的段。P1.0接蜂鳴器,低電平驅動蜂鳴器鳴叫啟鬧。由圖4.1可見,8155的地址分配如下:由控制寄存器:8000H,定義為PORTA口:8001H,定

20、義為PORTAB口:8002H,定義為PORTBC口:8003H,定義為PORTC如果使用本書配備的實驗板實現該電腦鐘,需將8511地址改變為控制寄存器:4400HA口:4401HB口:4402HC口:4403H并通過引出的P1口外接一個蜂鳴器電路,或是用P1口上的發光二極管模擬鬧鐘功能。需要指出的是,實驗板使用的是8031芯片,使用外擴程序存儲器EPROM2764,因此其EA腳必須接地。原理圖如圖4.1所示。4.2系統工作流程本電腦鐘具備以下功能:(1) 時鐘顯示:6位LED從左到右依次顯示時、分、秒,才用24小時計時(2) 鍵盤功能:采用4×3鍵盤,包括:圖4.1原理圖09 數字

21、鍵,鍵號為00H09HC/R鍵 時間設定/啟動計時,鍵號為0AHALM鍵鬧鐘設置/啟鬧/停鬧鍵,鍵號為0BH其工作流程如下:(1) 時間顯示:上電后,系統自動進入時鐘顯示,從00:00:00開始計時,此時可以設定當前時間。(2) 時間調整:按下C/R鍵,系統停止計時,進入時間設定狀態,系統保持原有顯示,等待鍵入當前時間。按下09數字鍵可以順序設置時、分、秒,并在相應LED管上顯示設置值,直至6位設置完畢。系統將自動由設定后的時間開始計時顯示。(3) 鬧鐘設置/啟鬧/停鬧:ALM鍵,系統繼續計時,顯示00:00:00,進入鬧鐘設置狀態,等待鍵入啟鬧時間。按下09數字鍵可以順序進行相應的時間設置,

22、并在相應LED管上顯示設置值,直至6位設置完畢。這將啟動定時啟鬧功能,并恢復時間顯示。定時時間到,蜂鳴器鳴叫,直至重新按下ALM鍵停鬧,并取消鬧鐘設置。第五章 軟件設計5.1系統資源分配為方便閱讀程序,先對系統的資源分配加以說明。(1)定時器:定時器0用作時鐘定時,按方式1工作,每隔100ms溢出中斷一次。(2)片內RAM及標志位的分配與定義見表5-1。地址功能名稱初始化值30H35H顯示緩沖區,小時、分、秒(高位在前)DISP0DISP500H3CH3FH計時緩沖區,時、分、秒、100msHOUR,MIN,SEC,MSEC00H40H42H鬧鐘值寄存區,時、分、秒AHOUR,AMIN,ASE

23、CFFH50H7FH堆棧區PSW.5計時允許位(1:禁止,0:允許)F00PSW.1鬧鐘標志位(1:正在響鬧,2:未響鬧)F10表5-1電子鐘控制軟件片內RAM及標志位分配表5.2軟件流程根據上述工程流程,軟件設計可分為以下幾個功能模塊:(1) 主程序:初始化與鍵盤監控。(2) 計時:為定時器0中斷服務子程序,完成刷新計時緩沖區的功能。(3) 時間設置與鬧鐘設置:由鍵盤輸入設置當前時間與定時啟鬧時間。(4) 顯示:完成6位動態顯示。(5) 鍵盤掃描:判斷是否有鍵按下,并求取鍵號。(6) 定時比較:判斷啟鬧時間到否?如時間到,則啟動蜂鳴器鳴叫。(7) 其它輔助功能子程序,如鍵盤設置、拆字、合字、

24、時間合法性檢測等。下面分模塊進行軟件設計:(1)主程序模塊MAIN:流程圖如圖5.1所示。NYYYN開始定義堆棧區8155、定時器0、數據緩沖區、鬧鐘標志位初始化是C/R鍵調用定時比較程序停鬧清零鬧鐘標志請用鍵掃描子程序是ALM鍵鬧鐘標志位=1地址指針指向鬧鐘值寄存區調用時間設置/鬧鐘定時程序地址指針指向計時緩沖區圖5.1 主程序流程圖(2)計時程序模塊CLOCK:流程圖如圖5.2所示。如前所述,系統定時采用定時器與軟件循環相結合的方法。定時器0每隔100ms溢出中斷一次,則循環中斷10次延時時間為1s,上述過程重復60次為1分,分計時60次為1小時,小時計時24次則時間重新回到00:00:0

25、0:。設系統使用6MHz的晶振,定時器0工作在方式1,則100ms定時對應的定時器初值可由下式計算得到:定時時間=(216-定時器0初值)×(12/fosc)時間校正重裝定時器0初值循環次數減1滿10次秒單位加160秒到秒單位清零分單位加160分到分單位清零小時單位加1小時單位清零24小時到打、到恢復現場返回保護現場因此,定時器0初值=3CB0H,即TH0=3CH,TL0=0B0H當系統使用其它頻率的晶振時,可以由上式計算相應的定時器0初值,也可以改變定時時間。例如當系統晶振為12MHz時,同樣的初值對應的定時時間為50ms,則循環中斷次數為20次時,延時時間為1s.這里有兩個問題需

26、要特別重視。NNNYY第一,定時器溢出產生中斷請求,CPU并不一定立即響應中斷,而可能需要延遲一個中斷響應時間之后才能響應中斷,中斷響應時間大約38個機器周期。顯然,這將在定時時間中加入額外的延時時間,導致計時誤差。為了保證計時精度,必須采取措施經行補償。我們采用增大重裝的定時器0初值的方法來減少定時器0定時時間。具體應調整為多大,一般需要通過調試來確定。經測試,定時器0重裝初值設為3CB7H3CBFH可以滿足精度要求。Y第二,時間是按十進制遞增,而MCS-51單片機只有二進制加法指令,因此用加法指令計時必須進行二十進制轉換。N(3)時間設置程序和鬧鐘定時程序模塊MODIFY:流程圖如圖5.3

27、所示。Y圖5.2 計時程序流程圖將鍵盤輸入的6位時間值合并為3位壓縮BCD碼(時、分、秒)送入及時緩沖區和鬧鐘寄存區,作為當前及時起始時間和鬧鐘計時時間。該該模塊的入口為計時緩沖區或鬧鐘值寄存取得首地址,置入R1忠程序調用一個鍵盤設置子程序KEYIN(如圖5.4所示將鍵入的6 位時間值送入鍵盤設置緩沖區,然后用合字子程序COMB將鍵盤設置緩沖區中的6位BCD碼合并為3位壓縮BCD碼,送入計時緩沖區或鬧鐘值寄存區。該程序同時作為時間之合法性檢測程序,若鍵盤輸入的小時值大于23,分和秒值大于59,則不合法,將取消保護現場調用鍵盤設置子程序ACALL KEYIN調用合字程序ACALL COMB恢復現

28、場返回圖5.3 時間設置/鬧鐘定時流程圖圖5.4 鍵盤設置子程序流程圖YN保護現場調用鍵盤掃描程序ACALL KEYSCAN顯示緩沖區首地址送R0鍵盤輸入次數送R7鍵號送R0顯示緩沖區地址加1INC R0循環次數減1循環次數到恢復現場返回YY掃描鍵盤有鍵按下NN調用顯示程序調用定時比較程序有鍵按下求取鍵號返回調用顯示程序調用定時比較程序調用顯示程序調用定時比較程序圖5.5 鍵盤掃描流程圖本次設置,清零重新開始計時。 (4)鍵盤掃描程序模塊KEYSCAN流程圖如圖5.5所示。判斷是否有鍵按下,無鍵按下則循環等待;有鍵按下則求取鍵號并將鍵號送入A累加器返回。程序中的去抖延時和循環等待延時都用DIS

29、PLAY子程序來代替,從而保證隨時刷新顯示。(5) 顯示程序模塊DISPLAY:流程圖如圖5.5所示。將顯示緩沖區中的6位BCD碼用動態掃描方式顯示。為此,必須首先將3字節計時緩沖區中的時、分、秒壓縮BCD碼拆分為6字節(時、分、秒的十位、個位分別占有一字節)BCD這一功能由拆字子程序SEPA來實現。需要注意的是,當按下時間或鬧鐘設置鍵后,在6位設置完成之前,應顯示鍵入的數據,而不顯示當前時間。為此,我們設置了一個計時顯示允許標志位F0,在時間/鬧鐘設置期間F0=1,不調用SEPA,即調用SEPA 刷新顯示緩沖區的前提條件是F0=0。圖5.6 顯示流程圖保護現場允許顯示計時時間動態掃描顯示返回

30、調用拆字程序NY(6)定時比較程序模塊ALARM:流程圖如圖5.7所示。將當前時間(計時緩沖區的值)與預設的啟鬧時間(鬧鐘設置寄存區的值)比較,二者完全相同時,啟動蜂鳴器鳴叫,并置位鬧鐘標志位。返回后,待重新按下ALM鍵停鬧,并清零鬧鐘標志。保護現場恢復現場鬧鐘值與計時值秒單位相等鬧鐘值與計時值分單位相等啟鬧鬧鐘標志置位鬧鐘值與計時值小時單位相等圖5.7 定時比較流程圖返回NNNYYY(7)拆字程序SEPA與合字程序COMB:如前所述,拆字程序的功能是將3字節計時緩沖區中的時、分、秒壓縮BCD碼拆分為6字節(時、分、秒的個位、十位分別占有一字節)位壓縮BCD碼送入計時緩沖區或鬧鐘值寄存區,同時

31、檢測時間值得合法性。下面給出各模塊的源程序。;*主程序*ORG 0000HAJMP MAINORG 000BHAJMP CLOCKORG 0030HPORT EQU 8000HPORTA EQU 8001HPORTB EQU 8002HPORTC EQU 8003HDISP0 EQU 30HDISP1 EQU 31HDISP2EQU 32HDISP3EQU33HDISP4EQU34HDISP5EQU35HHOUREQU3CHMINEQU3DHSECEQU3EHMSECEQU3FHAHOUREQU40HAMINEQU41HASECEQU42HF1BITPSW.1MAIN:MOVSP,#50H;設

32、置堆棧區MOVXDPTR,#PORTMOVA,#03HMOVXDPTR,A;8155初始化CLRF1;清零鬧鐘標志位CLRF0;允許計時顯示MOVAHOUR,#0FFHMOVAMIN,#0FFHMOVASEC,#0FFHMOVR7,#10HMOVR0,#DISP0CLRALOOP:MOVRO,AINCR0DINZR7,LOOP;設置初值MOVTMOD,#01HMOVTL0,#0B0HMOVTH0,#3CH;定時器0初始化,定時時間100msSETBTR0;啟動定時器SETBEASETBET0;開中斷BEGIN:ACALLALARM;調用定時比較ACALLKEYSCAN;調用鍵盤掃描CJNEA,

33、#0AH,NEXT1;是CLRRET鍵否CLRTR0;是則暫時停止計時MOV R1,#HOUR;地址指針指向計時緩沖區首地址AJMP MODNEXT1:CJNEA,#0BH,BEGIN;是ALARM鍵否JB F1,NEXT2;鬧鐘正在鬧響否MOV R1,#AHOUR;地址指針指向鬧鐘值寄存區首地址MOD:SETBF0 ;置位時間設置/鬧鐘定時標志,禁止顯示計時時間ACALLMODIFY ;調用時間設置/鬧鐘定時程序SETBTR0 ;重新開始計時AJMPBEGINNEXT2:SETBP1.0;鬧鐘正在響鬧,停鬧 CLRF1;清零鬧鐘標志 AJMPBEGIN;*時間設置/鬧鐘定時模塊MODIFY*

34、MODIFY: ACALL KEYIN ;調用鍵盤設置子程序ACALL COMB ;調用合字子程序 RET鍵盤設置子程序KEYIN:KEYIN: PUSH PSW PUSH ACC SETB RS1 ;保護現場 MOV R0,#DISP0 ;R0指向顯示緩存區首地址 MOV R7,#06H ;設置鍵盤輸入次數L1: CLR RS1 ACALL KEYSCAN ;調用鍵盤掃描程序取按下的鍵號 SETB RS1 CJNE A,#0AH, L2 ;鍵入數合法性檢測(是否大于9)L2: JNC L1 ;大于9,重新輸入 MOV R0,A ;鍵號送顯示緩沖區 INC R0 DINZ R7,L1 ;6位時

35、間輸入完否,未完繼續,否則返回 POP ACC POP PSW CLR RS1 ;恢復現場 ERT;*鍵盤掃描 子程序KEYSCAN*KEYSCAN: ACALL TEST ;判斷按鍵是否按下子程序TEST JNZ REMOV;有鍵按下調消抖延時 ACALL DISPLAY ACALL ALARM AJMP KEYSCAN;無鍵按下繼續判斷是否按鍵REMOV: ACALL DISPLAY;調用顯示子程序延時消抖 ACALL ALARM ACALL TEST;再判是否有鍵按下 JNZ LIST;有鍵按下轉逐列掃描 ACALL DISPLAY ACALL ALARM AJMP KEYSCAN;無按

36、鍵按下繼續判斷是否按鍵LIST: MOV R2, #OFEH;首列掃描字送R2 MOV R3, #00H;首列鍵號送R3LINE0:MOV DPTR, #PORTA ;DPTR指針指向8155的A口 MOV A, R2;首列掃描字送R2 MOVX DPTR, A;首列掃描字送8155的A口 MOV DPTR, #PORTC;DPTR指針指向8155的C口 MOVX A, DPTR ;讀入C口地行狀態 JB ACC.0, LINE1;第0行鍵無鍵按下轉第1行 MOV A, #00H ;第0行有鍵按下,行首鍵號送A AJMP TRYK;求鍵號LINE1: JB ACC.1, LINE2 ;第1行鍵

37、無鍵按下,轉第2行 MOV A, #04H ;第1行有鍵按下,行首鍵號送A AJMP TRYK ;求鍵號LINE2: JB ACC.2, NEXT ;第2行鍵無鍵按下,轉第3行 MOV A, #08H ;第2行有鍵按下,行首鍵號送A AJMP TRYK ;求鍵號NEXT: INC R3 ;掃描下一列 MOV A, R2 ;列掃描字送A JNB ACC.3, EXIT;4列掃描完,重新進行下一輪掃描 RL A ;4列未掃描完,掃描字左移掃描下一列 MOV R2, A ;掃描字送A AJMP LINE0 ;轉向掃描下一列EXIT: AJMP KEYSCAN ;等待下一次按鍵TRYK: ADD A,

38、 R3 ;按公式計算鍵碼,求得鍵號 PUSH ACC ;鍵號入棧保護LETK: ACALL TEST ;等待按鍵釋放 JNZ LETK ;按鍵未釋放,繼續等待 POP ACC ;按鍵釋放,鍵號出棧 RET ;鍵盤掃描結束,返回TEST: MOV DPTR, #PORTA ;DPTR指針指向8155的A口 MOV A, #00H MOVX DPTR, A;全掃描字00H送8155的A口 MOV DPTR, #PORTC ;DPTR指針指向8155的C口 MOVX A, DPTR;讀入C口行狀態 CPL A;A取反,以高電平表示有鍵按下 ANL A, #07H;屏蔽高5位 RET;*顯示子程序DI

39、SPLAY*DISPLAY: JB F0, DISP ;允許時間顯示標志F0=1轉DISP ACALL SEPA ;否則調用SEPA刷新顯示緩沖區DISP: PUSH PSW ;動態掃描顯示子程序 PUSH ACC SETB RS0 MOV DPTR, #PORTA MOV A, #0FFH MOVX DPTR, A;關顯示 MOV R0,#DISP0 MOV R7, #00H MOV R6, #06H MOV R5,#0FEHDIS1: MOV DPTR, #TAB MOV A, R0 MOVC A, A+DPTR MOV DPTR, #PORTB MOVX DPTR, A MOV DPTR

40、, #PORTA MOV A, R5 MOVX DPTR, AHRE: DJNZ R7, HERE INC R0 MOV A, R5 DJNZ R6, DIS1 CLR RS0 POP ACC POP PAW RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH, 6FH,77H,7CH,39H,5EH,79H,71H ;共陰極字形碼表;*合字子程序COMB*COMB: MOV R0, #DISP1 ;R0指向顯示緩沖區小時低位 ACALL COMB1 ;合字 CJNE A, #24H,CHK ;小時大于24否CHK: JNC EXIT1 ;大于2

41、4則取消本次設置,推出 MOV R1, A ;否則小時送計時緩沖區/鬧鐘值寄存區小時單元 INC R1 MOV R0,#DISP3 ;R0指向顯示緩沖區分低位 ACALL COMB1 CJNE A, #60H, CHK1CHK1:JNC EXIT1 MOV R1, A INC R1 MOV R0,#DISP5 ;R0指向顯示緩沖區秒低位 ACALL COMB1 CJNE A, #60H, CHK2CHK2:JNC EXIT1 MOV R1,A RETEXIT1: AJMP MAIN ;輸入不合法退出,重新清零計時COMB1: MOV A, R0 ANL A, #0FH ;取出低位 MOV 43

42、H, A ;暫存于43H單元 DEC R0 ;指向高位 MOV A, R0 ANL A, #0FH SWAP A ;高位送高4位 ORL A, 43H ;高低位合并 RET;*拆字子程序SEPA* SEPA: PUSH PSW PUSH ACC SETB RS0 MOV R0,#DISP5 ;指向顯示緩沖區秒低位 MOV A, SEC ACALL SEPA1 MOV A,MIN ACALL SEPA1 MOV A, HOUR ACALL SEPA1 POP ACC POP PSW CLR RS0 RETSEPA1: MOV 44H, A ;暫存44H ANL A, #0FH ;取出低位 MOV R0, A ;送顯示緩沖區低位 DEC R0 ;指向顯示緩沖區高位 MOV A, 44H ANL A, #0F0H ;取出高位 SWAP A ;

溫馨提示

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

評論

0/150

提交評論