版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 一 摘要單片計算機即單片微型計算機。(Single-Chip Microcomputer ),是 集CPU ,RAM ,ROM ,定時,計數(shù)和多種接口于一體的微控制器。他體積小,成本低,功能強,廣泛應用于智能產(chǎn)品和工業(yè)自動化上。而51 單片機是各單片機中最為典型和最有代表性的一種。這次畢業(yè)設計通過對它的學習,應用,從而達到學習、設計、開發(fā)軟、硬的能力。二 說明系統(tǒng)由AT89C51、LED 數(shù)碼管、按鍵、發(fā)光二極管等部分構成,能實現(xiàn)時間的調整、定時時間的設定,輸出等功能。系統(tǒng)的功能選擇由SB0、SB1、SB2、SB3、SB4 完成。其中SB0為時間校對,定時器調整功能鍵,按SB 0 進入調整狀
2、態(tài)。SB1 為功能切換鍵。第一輪按動SB1 依次進入一路、二路、三路定時時間設置提示程序,按SB3 進入各路定時調整狀態(tài)。定時時間到,二極管發(fā)亮。到了關斷時間后滅掉。如果不進入繼續(xù)按SB1 鍵,依次進入時間 年 位校對、 月 位校對、 日 位校對、 時 位校對、 分 位校對、 秒 位校對狀態(tài)。不管是進入那種狀態(tài),按動SB2 皆可以使被調整位進行不進位增量加1 變化。各預置量設置完成后,系統(tǒng)將所有的設置存入RAM 中,按SB1 退出調整狀態(tài)。上電后,系統(tǒng)自動進入計時狀態(tài),起始于 00 時 00 分。SB4 為年月日顯示轉換鍵,可使原來顯示時分秒轉換顯示年月日。三、電路原理分析1. 顯示原理電原理
3、圖見附圖1。由6 個共陰極的數(shù)碼管組成時、分、秒的顯示。P0 口的8 條數(shù)據(jù)線P0.0 至P0.7 分別與兩個CD4511 譯碼的ABCD 口相接,P2 口的 P2.0 至P2.2 分別通過電阻R10 至R13 與VT1 至VT3 的基極相連接。這樣通過P0 口送出一個存儲單元的高位、低位BCD顯示代碼,通過P2 口送出掃描選通代碼輪流點亮LED1 至LED6,就會將要顯示的數(shù)據(jù)在數(shù)碼管中顯示出來。從P0 口輸出的代碼是BCD 碼,從P2 口輸出的就是位選碼。這是掃描顯示原理。2 鍵盤及讀數(shù)原理鍵盤是人與微機打交道的主要設備,按鍵的讀取容易引起誤動作。可采用軟件去抖動的方法處理,軟件的觸點在閉
4、合和斷開的時候會產(chǎn)生抖動,這時觸點的邏輯電平是不穩(wěn)定的,如不采取妥善處理的話,將引起按鍵命令錯誤或重復執(zhí)行,在這里采用軟件延時的方法來避開抖動,延時時間20ms.3 連擊功能的實現(xiàn)按下某鍵時,對應的功能鍵解釋程序得到執(zhí)行,如操作者沒有釋放按鍵,則對應的功能會反復執(zhí)行,好象連續(xù)執(zhí)行,在這里我們采用軟件延時250ms,當按鍵沒釋放則執(zhí)行下一條對應程序。利用連擊功能,能實現(xiàn)快速調時操作。四、程序設計思想和相關指令介紹本系統(tǒng)的主程序主要完成時間顯示和定時輸出判斷功能。而年月日顯示和各時間單元進位,時間設定時,調定時間設定時等功能全部在中斷服務程序中完成。1數(shù)據(jù)與代碼轉換。由前述可知,從P2 口輸出位選
5、碼,從P0 口輸出段選碼,LED 就會顯示出數(shù)字來。但P0口的輸出的數(shù)據(jù)是要BCD 碼,各存儲單元存儲的是二進制數(shù),也就是和要顯示出的字符表達的含義是不一致的??梢?,將要顯示的存儲單元的數(shù)據(jù)直接送到P0 口去驅動LED 數(shù)碼管顯示是不能正確表達的,必須在系統(tǒng)內部將要顯示的數(shù)據(jù)經(jīng)過BCD 碼行轉換后,將各個單元數(shù)據(jù)的段選代碼送入P0 口,給CD4511 譯碼后去驅動數(shù)碼管顯示。具體轉換過程如下:我們先將要顯示的數(shù)據(jù)裝入累加器A 中,再將A 中的數(shù)據(jù)轉換成高低兩位的BCD 碼,再放回A 中,然后將A 中的值輸出。如:有一個單元存儲了45 這樣一位數(shù),則需轉換成四位的BCD 碼:(0100)(010
6、1)然后放入A 中。 A 中BCD 碼,高位四位代表4低四位代表5同時送給兩個譯碼器中,譯碼后 45 字就在兩個LED 中顯示出來。2計時功能的實現(xiàn)與中斷服務程序時間的運行依靠定時中斷子程序對時鐘單元數(shù)值進位調整來實現(xiàn)的。計數(shù)器T0 打開后,進入計時,滿100 毫秒后,重裝定時。中斷一次,滿一秒后秒進位,滿60 秒后即為1 分鐘,分鐘單元進位,60 分到了后,時單元進位,24 小時滿后,天單元進位。這樣然后根據(jù)進率,得到年、月、日、時、分、秒存儲單元的值,并經(jīng)譯碼后,通過掃描程序送LED 中顯示出來,實現(xiàn)時鐘計時功能。累加是用指令INC 來實現(xiàn)的。進入中斷服務程序以后,執(zhí)行PUSH PSW 和
7、PUSH A 將程序狀態(tài)寄存器PSW 的內容和累加器A 中的數(shù)據(jù)保存起來,這便是所謂的 保護現(xiàn)場 . 以保護現(xiàn)場和恢復現(xiàn)場時存取關鍵數(shù)據(jù)的存儲區(qū)叫做堆棧。在軟件的控制之下,堆??稍谄瑑萊AM 中的任一區(qū)間設定,而堆棧的數(shù)據(jù)存取與一般的RAM 存取又有區(qū)別,對它的操作,要遵循 后進先出 的原則。3 時間控制功能與比較指令系統(tǒng)的另一功能就是實現(xiàn)對執(zhí)行設備的定時開關控制,其主要控制思想是這樣的:先將執(zhí)行設備開啟的時間和關閉時間置入RAM 某一單元,在計時主程序當中執(zhí)行幾條比較指令,如果當前計時時間與執(zhí)行設備的設定開啟時間相等,就執(zhí)行一條 CLR 指令,將對應的那路P3 置為高電位,開啟;如果當前計時
8、時間與執(zhí)行設備設定的關閉時間相等,就執(zhí)行SETB對應的P3 置低電位,二極管截止,。實現(xiàn)此控制功能用到的比較指令為CJNE A,#direct,rel,其轉移條件是累加器A 中的值與立即數(shù)不等則轉移。參考文獻1、 謝自美,電子線路設計、實驗、測試 武漢:華中理工大學出版社,20002、 何書森、何華斌實用數(shù)字電路原理與設計速成福州:福建科學技術出版社,2000.63、 白駒衍, 單片計算機及應用北京:電子工業(yè)出版社, 1999.2五:程序SEC EQU 32H ;秒 即時時間 偽指令MIN EQU 31H ;分HOUR EQU 30H ;時DAY EQU 35H ;日MON EQU 34H ;
9、月YEAR EQU 33H ;年MIN_1 EQU 41H ;分 定時器1 路、開存儲單元HOUR_1 EQU 42H ;時DAY_1 EQU 43H ;MON_1 EQU 44H ;YEAR_1 EQU 45H ;MIN_11 EQU 40H ;分 定時器1 路、關存儲單元HOUR_11 EQU 46H ;時DAY_11 EQU 47H ;日MON_11 EQU 48H ;月YEAR_11 EQU 49H ;年;*ORG 0000Hljmp MAINORG 0003H ;中斷轉換顯示年月日、INT0(SB4 鍵)LJMP SHOWORG 000BH ;計數(shù)中斷 T0、方式1LJMP TIME
10、ORG 0013HLJMP CHANGE; 調整時間、定時、INT1(SB0 鍵);-主程序ORG 0030HMAIN:;-初始化付值MOV YEAR , #02MOV MON , #05MOV DAY , #01MOV HOUR , #00MOV MIN , #00MOV SEC , #00CLR 40H ;定時單元1 路清零CLR 41HCLR 42HCLR 43HCLR 44HCLR 45HCLR 46HCLR 47HCLR 48HCLR 49H;-開中斷MOV TMOD , #01H ;計數(shù)、模式1、T0MOV TL0, #0B0H ;100SM 計數(shù)定時MOV TH0, #3CH ;
11、clr p3.0MOV 20H, #0AH ;10 次*100SMSETB PT0 ;T0 為最高級SETB TR0 ;允許計數(shù)SETB ET0 ;允許T0 中斷SETB EX0 ;允許INT0 中斷SETB EX1 ;允許INT1 中斷SETB EA ;開總中斷;-顯示、定時器啟動判斷LOOP:MOV R1, #30H; 存儲單元MOV R4, #01H; 位選通MOV R3, #03H; 三組顯示NEXT:MOV A , R1 ;MOV B , #10 ;將存儲單元轉換成兩高低兩組的BCD 碼DIV ABSWAP AORL A, BMOV P0, A;輸出MOV P2, R4INC R1
12、;下一單元MOV A, R4 ;RL A ;位移MOV R4, ALCALL DE5SM ;延時0.5SMDJNZ R3, NEXT ;全掃描顯示一偏;-判斷定時輸出(只編寫了一路)CJNE R7, #88H,LOOP ;是8 則開,否則、定時已關、轉;-開MOV A, YEARCJNE A, YEAR_1, LOOP_1;年比較,不等轉關MOV A, MONCJNE A, MON_1, LOOP_1MOV A, DAYCJNE A , DAY_1,LOOP_1MOV A, HOURCJNE A, HOUR_1,LOOP_1MOV A, MINCJNE A, MIN_1, LOOP_1CPL
13、P3.0;-關LOOP_1:MOV A, YEARCJNE A, YEAR_11, LOOP;年比較MOV A, MONCJNE A, MON_11, LOOPMOV A, DAYCJNE A , DAY_11,LOOPMOV A, HOURCJNE A, HOUR_11,LOOPMOV A, MINCJNE A, MIN_11, LOOPCPL P3.0LJMP LOOP;-年月日顯示中斷子程序SHOW:PUSH PSWpush ACCPUSH BPUSH 01HPUSH 02HPUSH 03HPUSH 04HMOV R2, #0FFH ;中斷掃描次數(shù)TURN: MOV R1 , #33HM
14、OV R4 , #01HMOV R3 , #03HNEXT_1:MOV A, R1MOV B , #10DIV ABSWAP AORL A, BMOV P0, AMOV P2, R4INC R1RL AMOV R4 ,ALCALL DE5SMDJNZ R3, NEXT_1DJNZ R2, TURN ;反復顯示一定時間后返回POP 04HPOP 03HPOP 02HPOP 01HPOP BPOP ACCPOP PSWRETI;-計數(shù)中斷服務子程序TIME:PUSH PSWPUSH ACCPUSH BPUSH 06HMOV TH0 , #3CH;重裝計數(shù)MOV TL0 , #0BH;DJNZ 20
15、H, OUT ;轉到中斷跳出pop 程序MOV 20H, #0AH ; 重裝:100*10=1000;-進位程序INC SECMOV R6, SEC ;CJNE R6, #60, OUT;比較MOV SEC , #00 ;INC MINMOV R6, MINCJNE R6, #60, OUTMOV MIN , #00INC HOURMOV R6 , HOURCJNE R6 , #25 , OUTMOV HOUR ,#00INC DAYMOV R5, MONCJNE R5, #1, MON_22;是否1 月、不是轉2 月MOV R5, DAYCJNE R5, #32, OUT ; 本月是否益出I
16、NC MONMOV DAY,#1LJMP OUTOUT:POP 06HPOP BPOP ACCPOP PSWRETIMON_22:MOV R5, MONCJNE R5 , #2 , MON_33;是否2 月、不是轉3 月MOV A, YEAR ;判斷是否瑞年MOV B, #4DIV ABMOV A , BJNZ OUT_1;不是則轉(A 不為零則轉)MOV R5 ,DAYCJNE R5,#30, OUT;如是瑞年、判斷是否到29 天INC MONMOV DAY ,#1LJMP OUTOUT_1:MOV R5, DAYCJNE R5, #29, OUT ;平年二月判斷INC MONMOV DAY
17、 , #1LJMP OUTMON_33:MOV R5, MONCJNE R5, #3 , MON_44MOV R5, DAYCJNE R5 , #32, OUTINC MONMOV DAY , #1LJMP OUTMON_44:MOV R5, MONCJNE R5,#4, MON_55MOV R5, DAYCJNE R5 ,#31,OUTINC MONMOV DAY , #1LJMP OUTMON_55:MOV R5,MONCJNE R5,#5, MON_66MOV R5,DAYCJNE R5,#32,OUTINC MONMOV DAY,#1LJMP OUTMON_66:MOV R5, MON
18、CJNE R5,#6, MON_77MOV R5, DAYCJNE R5 ,#31,OUTINC MONMOV DAY , #1LJMP OUTMON_77:MOV R5, MONCJNE R5,#7, MON_88MOV R5, DAYCJNE R5,#32,L1INC MONMOV DAY , #1L1: LJMP OUTMON_88:MOV R5, MONCJNE R5,#8, MON_99MOV R5, DAYCJNE R5 ,#32,L2INC MONMOV DAY , #1L2: LJMP OUTMON_99:MOV R5, MONCJNE R5,#9, MON_00MOV R5,
19、DAYCJNE R5 ,#31,L3INC MONMOV DAY , #1L3: LJMP OUTMON_00:MOV R5, MONCJNE R5,#10, MON_AAMOV R5, DAYCJNE R5 ,#32,L4INC MONMOV DAY , #1L4: LJMP OUTMON_AA:MOV R5, MONCJNE R5,#11, MON_BBMOV R5,DAYCJNE R5,#31,L5INC MONMOV DAY , #1L5: LJMP OUTMON_BB:MOV R5, DAYCJNE R5 ,#32,L6INC YEARMOV MON, #1MOV DAY , #1L
20、6:LJMP OUT;-按SB2定時器年單元加1 子程序SB3_2: LJMP SHOW_2 ;二路沒編返回SB3_3: LJMP SHOW_3 ;三路沒編返回SB3_1:MOV A , YEAR_1 ; 調時年單元MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #01HLCALL READLCALL DE250SMCJNE A, 01H, SB3_1CJNE A, #0FBH, KEY2_7 ;按SB2 轉年調整LJMP MON_111 ;按SB1 往下調月單元KEY2_7:CJNE A, #0FDH, SB3_1INC YEAR_1 ; 1 路年
21、單元加1MOV R5,YEAR_1CJNE R5,#09,SB3_1 ;益出MOV YEAR_1, #00HAJMP SB3_1 ;-月單元加1 子程序MON_111:MOV A , MON_1 ; 調時月單元顯示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #02HLCALL READLCALL DE250SMCJNE A, 01H, MON_111CJNE A, #0FBH, KEY2_8 ;按SB2 轉月調整LJMP DAY_111KEY2_8:CJNE A,#0FDH,MON_111INC MON_1 ;1 路月單元加1MOV R5,MON
22、_1CJNE R5,#13,MON_111;益出MOV MON_1, #01HAJMP MON_111 ; 轉到月顯;_-日單元加1 子程序DAY_111:MOV A , DAY_1 ; 調時日單元顯示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #04HLCALL READLCALL DE250SMCJNE A, 01H,DAY_111CJNE A, #0FBH, KEY2_9 ;按SB2 轉日調整LJMP HOUR_111KEY2_9: CJNE A,#0FDH,DAY_111INC DAY_1 ;1 組日單元加1MOV R5, DAY_1
23、CJNE R5,#32,DAY_111;益出MOV DAY_1, #01HAJMP DAY_111 ; 轉到日顯;-按SB2 時單元加1 子程序HOUR_111:MOV A , HOUR_1 ; 調時時單元顯示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #01HLCALL READLCALL DE250SMCJNE A, 01H,HOUR_111CJNE A, #0FBH, KEY2_10 ; 按SB2 轉時調整LJMP MIN_111KEY2_10:CJNE A,#0FDH,HOUR_111INC HOUR_1MOV R5,HOUR_1CJ
24、NE R5,#24,HOUR_111;益出MOV HOUR_1, #00HAJMP HOUR_111 ; 轉到時顯;-分單元加1 子程序MIN_111:MOV A , MIN_1 ; 調時分單元、并顯示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #02HLCALL READLCALL DE250SMCJNE A, 01H,MIN_111CJNE A, #0FBH, KEY2_11 ;按SB2 轉分調整AJMP OFF_CH ;按SB3 往下調定時:關單元KEY2_11: CJNE A, #0FDH, MIN_111INC MIN_1 ;1 路
25、分單元加1MOV R5, MIN_1CJNE R5,#60,MIN_111;益處MOV MIN_1, #00HAJMP MIN_111 ; 轉到分顯年單元調整OFF_CH: MOV A , YEAR_11 ; 調時年單元MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #01HLCALL READLCALL DE250SMCJNE A, 01H, OFF_CHCJNE A, #0FBH, KEY2_F7 ;按SB2 轉年調整LJMP MON_OFF ;按SB1 往下調月單元KEY2_F7:CJNE A, #0FDH, OFF_CHINC YEAR_11
26、 ; 1 路年單元加1MOV R5,YEAR_11CJNE R5,#09,OFF_CH ;益出MOV YEAR_11, #00HAJMP OFF_CH ;-月單元加1 子程序MON_OFF:MOV A , MON_11 ; 調時月單元顯示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #02HLCALL READLCALL DE250SMCJNE A, 01H, MON_OFFCJNE A, #0FBH, KEY2_F8 ;按SB2 轉月調整LJMP DAY_OFFKEY2_F8:CJNE A,#0FDH,MON_OFFINC MON_11 ;1 路
27、月單元加1MOV R5,MON_11CJNE R5,#13,MON_OFF;益出MOV MON_11, #01HAJMP MON_OFF ; 轉到月顯;_-日單元加1 子程序DAY_OFF:MOV A , DAY_11 ; 調時日單元顯示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #04HLCALL READLCALL DE250SMCJNE A, 01H,DAY_OFFCJNE A, #0FBH, KEY2_F9 ;按SB2 轉日調整LJMP HOUR_OFFKEY2_F9: CJNE A,#0FDH,DAY_OFFINC DAY_11 ;
28、1 組日單元加1MOV R5, DAY_11CJNE R5,#32,DAY_OFF;益出MOV DAY_11, #01HAJMP DAY_OFF ; 轉到日顯;-按SB2 時單元加1 子程序HOUR_OFF:MOV A , HOUR_11 ; 調時時單元顯示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #01HLCALL READLCALL DE250SMCJNE A, 01H,HOUR_OFFCJNE A, #0FBH, KEY2_F10 ; 按SB2 轉時調整LJMP MIN_OFFKEY2_F10:CJNE A,#0FDH,HOUR_OF
29、FINC HOUR_11MOV R5,HOUR_11CJNE R5,#24,HOUR_OFF;益出MOV HOUR_11, #00HAJMP HOUR_OFF ; 轉到時顯;-分單元加1 子程序MIN_OFF:MOV A , MIN_11 ; 調時分單元、并顯示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #02HLCALL READLCALL DE250SMCJNE A, 01H,MIN_OFFCJNE A, #0FBH, KEY2_F11 ;按SB2 轉分調整LJMP ON_1 ;按SB3 往下調定時:開與關KEY2_F11: CJNE A
30、, #0FDH, MIN_OFFINC MIN_11 ;1 路分單元加1MOV R5, MIN_11CJNE R5,#60,MIN_OFF;益處MOV MIN_11, #00HLJMP MIN_OFF ; 轉到分顯;-開、關定時ON_1:CJNE A, #0FBH, MIN_OFFK1: MOV A, #88HMOV R7, AMOV P0, AMOV P2, #0FFH;三組都顯示開LCALL READLCALL DE250SMCJNE A, 01H, ON_1;去抖后比較CJNE A, #0FBH,KEY2_12 ;按SB2 轉關LJMP OUT_A ;按SB3 調出、處于開狀態(tài)KEY2_
31、12: CJNE A, #0FDH, K1k2: MOV A, #00H; 顯示0 關MOV R7, AMOV P0, AMOV P2, #0FFH;LCALL READLCALL DE250SMCJNE A, 01H, K2;去抖后比較CJNE A, #0FBH,KEY2_13 ;按SB2 轉開LJMP OUT_A ;SB3 調出、處關狀態(tài)KEY2_13:CJNE A, #0FDH, K2 ; 比較按了沒LJMP K1 ; 按了SB2、轉開OUT_A:POP 00HPOP BPOP ACCPOP PSWRETI;_-讀取按鍵程序READ:MOV A , P1;讀取按鍵MOV R1, ALCALL DE10MSMOV A, P1RET;_-延時程序DE5SM:PUS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度有機肥料生產(chǎn)與銷售風險控制合作協(xié)議2篇
- 2025年度體育場館建設承包合同范本4篇
- 2025年度新能源汽車充電樁租賃合同書3篇
- 2024綠化項目勞務施工分包合同書版B版
- 2025年絕緣筒項目可行性研究報告
- 2025年模特選美賽事形象權保護與保密合同范本3篇
- 螺旋式除塵器行業(yè)市場發(fā)展及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年度個人留學貸款擔保合同范本12篇
- 2025年度室內外景觀設計及施工合同樣本4篇
- 2025年度藝術品抵押借款咨詢合同范本3篇
- 2022年湖北省武漢市中考數(shù)學試卷含解析
- TLFSA 003-2020 危害分析與關鍵控制點(HACCP)體系調味面制品生產(chǎn)企業(yè)要求
- LY/T 2244.3-2014自然保護區(qū)保護成效評估技術導則第3部分:景觀保護
- 紀律教育月批評與自我批評五篇
- GB/T 26480-2011閥門的檢驗和試驗
- GB/T 13342-2007船用往復式液壓缸通用技術條件
- 藥店員工教育培訓資料
- GB 20371-2016食品安全國家標準食品加工用植物蛋白
- 【英語手寫體】26英文字母手寫體描紅書寫字帖
- 實習護生壓瘡相關知識掌握情況及預防態(tài)度的調查問卷
- 《駱駝祥子》第(9、10、11、12)章檢測題
評論
0/150
提交評論