多功能數(shù)字時鐘設(shè)計資料
多功能數(shù)字時鐘設(shè)計資料,多功能,數(shù)字,時鐘,設(shè)計,資料
一 摘要
單片計算機(jī)即單片微型計算機(jī)。(Single-Chip Microcomputer ),是 集CPU ,RAM ,ROM ,
定時,計數(shù)和多種接口于一體的微控制器。他體積小,成本低,功能強,廣泛應(yīng)用于智能產(chǎn)
品和工業(yè)自動化上。而51 單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。這次畢業(yè)設(shè)
計通過對它的學(xué)習(xí),應(yīng)用,從而達(dá)到學(xué)習(xí)、設(shè)計、開發(fā)軟、硬的能力。
二 說明
系統(tǒng)由AT89C51、LED 數(shù)碼管、按鍵、發(fā)光二極管等部分構(gòu)成,能實現(xiàn)時間的調(diào)整、定
時時間的設(shè)定,輸出等功能。系統(tǒng)的功能選擇由SB0、SB1、SB2、SB3、SB4 完成。其中SB0
為時間校對,定時器調(diào)整功能鍵,按SB 0 進(jìn)入調(diào)整狀態(tài)。SB1 為功能切換鍵。第一輪按動
SB1 依次進(jìn)入一路、二路、三路定時時間設(shè)置提示程序,按SB3 進(jìn)入各路定時調(diào)整狀態(tài)。定
時時間到,二極管發(fā)亮。到了關(guān)斷時間后滅掉。如果不進(jìn)入繼續(xù)按SB1 鍵,依次進(jìn)入時間
? 年? 位校對、? 月? 位校對、 ? 日? 位校對、? 時? 位校對、? 分? 位校對、? 秒? 位
校對狀態(tài)。不管是進(jìn)入那種狀態(tài),按動SB2 皆可以使被調(diào)整位進(jìn)行不進(jìn)位增量加1 變化。各
預(yù)置量設(shè)置完成后,系統(tǒng)將所有的設(shè)置存入RAM 中,按SB1 退出調(diào)整狀態(tài)。上電后,系統(tǒng)自
動進(jìn)入計時狀態(tài),起始于? 00? 時? 00? 分。SB4 為年月日顯示轉(zhuǎn)換鍵,可使原來顯示時分
秒轉(zhuǎn)換顯示年月日。
三、電路原理分析
1. 顯示原理
電原理圖見附圖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ù)原理
鍵盤是人與微機(jī)打交道的主要設(shè)備,按鍵的讀取容易引起誤動作??刹捎密浖?
抖動的方法處理,軟件的觸點在閉合和斷開的時候會產(chǎn)生抖動,這時觸點的邏輯電
平是不穩(wěn)定的,如不采取妥善處理的話,將引起按鍵命令錯誤或重復(fù)執(zhí)行,在這里
采用軟件延時的方法來避開抖動,延時時間20ms.
3 連擊功能的實現(xiàn)
按下某鍵時,對應(yīng)的功能鍵解釋程序得到執(zhí)行,如操作者沒有釋放按鍵,則對應(yīng)
的功能會反復(fù)執(zhí)行,好象連續(xù)執(zhí)行,在這里我們采用軟件延時250ms,當(dāng)按鍵沒釋放則
執(zhí)行下一條對應(yīng)程序。利用連擊功能,能實現(xiàn)快速調(diào)時操作。
四、程序設(shè)計思想和相關(guān)指令介紹
本系統(tǒng)的主程序主要完成時間顯示和定時輸出判斷功能。而年月日顯示和各時間單元進(jìn)
位,時間設(shè)定時,調(diào)定時間設(shè)定時等功能全部在中斷服務(wù)程序中完成。
1.?dāng)?shù)據(jù)與代碼轉(zhuǎn)換。
由前述可知,從P2 口輸出位選碼,從P0 口輸出段選碼,LED 就會顯示出數(shù)字來。但P0
口的輸出的數(shù)據(jù)是要BCD 碼,各存儲單元存儲的是二進(jìn)制數(shù),也就是和要顯示出的字符表達(dá)
的含義是不一致的??梢?,將要顯示的存儲單元的數(shù)據(jù)直接送到P0 口去驅(qū)動LED 數(shù)碼管顯
示是不能正確表達(dá)的,必須在系統(tǒng)內(nèi)部將要顯示的數(shù)據(jù)經(jīng)過BCD 碼行轉(zhuǎn)換后,將各個單元數(shù)
據(jù)的段選代碼送入P0 口,給CD4511 譯碼后去驅(qū)動數(shù)碼管顯示。
具體轉(zhuǎn)換過程如下:
我們先將要顯示的數(shù)據(jù)裝入累加器A 中,再將A 中的數(shù)據(jù)轉(zhuǎn)換成高低兩位的BCD 碼,
再放回A 中,然后將A 中的值輸出。如:有一個單元存儲了45 這樣一位數(shù),則需轉(zhuǎn)換成四
位的BCD 碼:(0100)(0101)然后放入A 中。 A 中BCD 碼,高位四位代表?4?低四位代
表?5?同時送給兩個譯碼器中,譯碼后? 45? 字就在兩個LED 中顯示出來。
2.計時功能的實現(xiàn)與中斷服務(wù)程序
時間的運行依靠定時中斷子程序?qū)r鐘單元數(shù)值進(jìn)位調(diào)整來實現(xiàn)的。計數(shù)器T0 打開后,
進(jìn)入計時,滿100 毫秒后,重裝定時。中斷一次,滿一秒后秒進(jìn)位,滿60 秒后即為1 分鐘,
分鐘單元進(jìn)位,60 分到了后,時單元進(jìn)位,24 小時滿后,天單元進(jìn)位。這樣然后根據(jù)進(jìn)率,
得到年、月、日、時、分、秒存儲單元的值,并經(jīng)譯碼后,通過掃描程序送LED 中顯示出來,
實現(xiàn)時鐘計時功能。累加是用指令I(lǐng)NC 來實現(xiàn)的。
進(jìn)入中斷服務(wù)程序以后,執(zhí)行PUSH PSW 和PUSH A 將程序狀態(tài)寄存器PSW 的內(nèi)容和累
加器A 中的數(shù)據(jù)保存起來,這便是所謂的? 保護(hù)現(xiàn)場? . 以保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場時存取關(guān)鍵
數(shù)據(jù)的存儲區(qū)叫做堆棧。在軟件的控制之下,堆棧可在片內(nèi)RAM 中的任一區(qū)間設(shè)定,而堆棧
的數(shù)據(jù)存取與一般的RAM 存取又有區(qū)別,對它的操作,要遵循? 后進(jìn)先出? 的原則。
3 時間控制功能與比較指令
系統(tǒng)的另一功能就是實現(xiàn)對執(zhí)行設(shè)備的定時開關(guān)控制,其主要控制思想是這樣的:先
將執(zhí)行設(shè)備開啟的時間和關(guān)閉時間置入RAM 某一單元,在計時主程序當(dāng)中執(zhí)行幾條比較指
令,如果當(dāng)前計時時間與執(zhí)行設(shè)備的設(shè)定開啟時間相等,就執(zhí)行一條 CLR 指令,將對應(yīng)的
那路P3 置為高電位,開啟;如果當(dāng)前計時時間與執(zhí)行設(shè)備設(shè)定的關(guān)閉時間相等,就執(zhí)行SETB
對應(yīng)的P3 置低電位,二極管截止,。實現(xiàn)此控制功能用到的比較指令為CJNE A,#direct,
rel,其轉(zhuǎn)移條件是累加器A 中的值與立即數(shù)不等則轉(zhuǎn)移。
參考文獻(xiàn)
1、 謝自美,《電子線路設(shè)計、實驗、測試 》武漢:華中理工大學(xué)出版社,2000
2、 何書森、何華斌《實用數(shù)字電路原理與設(shè)計速成》福州:福建科學(xué)技術(shù)出版社,2000.6
3、 白駒衍, 《單片計算機(jī)及應(yīng)用》北京:電子工業(yè)出版社, 1999.2
五:程序
SEC EQU 32H ;秒 即時時間 \偽指令
MIN EQU 31H ;分
HOUR EQU 30H ;時
DAY EQU 35H ;日
MON EQU 34H ;月
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 路、關(guān)存儲單元
HOUR_11 EQU 46H ;時
DAY_11 EQU 47H ;日
MON_11 EQU 48H ;月
YEAR_11 EQU 49H ;年
;***********************
ORG 0000H
ljmp MAIN
ORG 0003H ;中斷轉(zhuǎn)換顯示年月日、INT0(SB4 鍵)
LJMP SHOW
ORG 000BH ;計數(shù)中斷 T0、方式1
LJMP TIME
ORG 0013H
LJMP CHANGE; 調(diào)整時間、定時、INT1(SB0 鍵)
;------主程序
ORG 0030H
MAIN:
;--------初始化付值
MOV YEAR , #02
MOV MON , #05
MOV DAY , #01
MOV HOUR , #00
MOV MIN , #00
MOV SEC , #00
CLR 40H ;定時單元1 路清零
CLR 41H
CLR 42H
CLR 43H
CLR 44H
CLR 45H
CLR 46H
CLR 47H
CLR 48H
CLR 49H
;-------開中斷
MOV TMOD , #01H ;計數(shù)、模式1、T0
MOV TL0, #0B0H ;100SM 計數(shù)定時
MOV TH0, #3CH ;
clr p3.0
MOV 20H, #0AH ;10 次*100SM
SETB 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 ;將存儲單元轉(zhuǎn)換成兩高低兩組的BCD 碼
DIV AB
SWAP A
ORL A, B
MOV P0, A;輸出
MOV P2, R4
INC R1 ;下一單元
MOV A, R4 ;
RL A ;位移
MOV R4, A
LCALL DE5SM ;延時0.5SM
DJNZ R3, NEXT ;全掃描顯示一偏
;------判斷定時輸出(只編寫了一路)
CJNE R7, #88H,LOOP ;是8 則開,否則、定時已關(guān)、轉(zhuǎn)
;---------開
MOV A, YEAR
CJNE A, YEAR_1, LOOP_1;年比較,不等轉(zhuǎn)關(guān)
MOV A, MON
CJNE A, MON_1, LOOP_1
MOV A, DAY
CJNE A , DAY_1,LOOP_1
MOV A, HOUR
CJNE A, HOUR_1,LOOP_1
MOV A, MIN
CJNE A, MIN_1, LOOP_1
CPL P3.0
;---------關(guān)
LOOP_1:
MOV A, YEAR
CJNE A, YEAR_11, LOOP;年比較
MOV A, MON
CJNE A, MON_11, LOOP
MOV A, DAY
CJNE A , DAY_11,LOOP
MOV A, HOUR
CJNE A, HOUR_11,LOOP
MOV A, MIN
CJNE A, MIN_11, LOOP
CPL P3.0
LJMP LOOP
;-----年月日顯示中斷子程序
SHOW:
PUSH PSW
push ACC
PUSH B
PUSH 01H
PUSH 02H
PUSH 03H
PUSH 04H
MOV R2, #0FFH ;中斷掃描次數(shù)
TURN: MOV R1 , #33H
MOV R4 , #01H
MOV R3 , #03H
NEXT_1:
MOV A, @R1
MOV B , #10
DIV AB
SWAP A
ORL A, B
MOV P0, A
MOV P2, R4
INC R1
RL A
MOV R4 ,A
LCALL DE5SM
DJNZ R3, NEXT_1
DJNZ R2, TURN ;反復(fù)顯示一定時間后返回
POP 04H
POP 03H
POP 02H
POP 01H
POP B
POP ACC
POP PSW
RETI
;-----計數(shù)中斷服務(wù)子程序
TIME:
PUSH PSW
PUSH ACC
PUSH B
PUSH 06H
MOV TH0 , #3CH;重裝計數(shù)
MOV TL0 , #0BH;
DJNZ 20H, OUT ;轉(zhuǎn)到中斷跳出pop 程序
MOV 20H, #0AH ; 重裝:100*10=1000
;-----進(jìn)位程序
INC SEC
MOV R6, SEC ;
CJNE R6, #60, OUT;比較
MOV SEC , #00 ;
INC MIN
MOV R6, MIN
CJNE R6, #60, OUT
MOV MIN , #00
INC HOUR
MOV R6 , HOUR
CJNE R6 , #25 , OUT
MOV HOUR ,#00
INC DAY
MOV R5, MON
CJNE R5, #1, MON_22;是否1 月、不是轉(zhuǎn)2 月
MOV R5, DAY
CJNE R5, #32, OUT ; 本月是否益出
INC MON
MOV DAY,#1
LJMP OUT
OUT:
POP 06H
POP B
POP ACC
POP PSW
RETI
MON_22:
MOV R5, MON
CJNE R5 , #2 , MON_33;是否2 月、不是轉(zhuǎn)3 月
MOV A, YEAR ;判斷是否瑞年
MOV B, #4
DIV AB
MOV A , B
JNZ OUT_1;不是則轉(zhuǎn)(A 不為零則轉(zhuǎn))
MOV R5 ,DAY
CJNE R5,#30, OUT;如是瑞年、判斷是否到29 天
INC MON
MOV DAY ,#1
LJMP OUT
OUT_1:
MOV R5, DAY
CJNE R5, #29, OUT ;平年二月判斷
INC MON
MOV DAY , #1
LJMP OUT
MON_33:
MOV R5, MON
CJNE R5, #3 , MON_44
MOV R5, DAY
CJNE R5 , #32, OUT
INC MON
MOV DAY , #1
LJMP OUT
MON_44:
MOV R5, MON
CJNE R5,#4, MON_55
MOV R5, DAY
CJNE R5 ,#31,OUT
INC MON
MOV DAY , #1
LJMP OUT
MON_55:
MOV R5,MON
CJNE R5,#5, MON_66
MOV R5,DAY
CJNE R5,#32,OUT
INC MON
MOV DAY,#1
LJMP OUT
MON_66:
MOV R5, MON
CJNE R5,#6, MON_77
MOV R5, DAY
CJNE R5 ,#31,OUT
INC MON
MOV DAY , #1
LJMP OUT
MON_77:
MOV R5, MON
CJNE R5,#7, MON_88
MOV R5, DAY
CJNE R5,#32,L1
INC MON
MOV DAY , #1
L1: LJMP OUT
MON_88:
MOV R5, MON
CJNE R5,#8, MON_99
MOV R5, DAY
CJNE R5 ,#32,L2
INC MON
MOV DAY , #1
L2: LJMP OUT
MON_99:
MOV R5, MON
CJNE R5,#9, MON_00
MOV R5,DAY
CJNE R5 ,#31,L3
INC MON
MOV DAY , #1
L3: LJMP OUT
MON_00:
MOV R5, MON
CJNE R5,#10, MON_AA
MOV R5, DAY
CJNE R5 ,#32,L4
INC MON
MOV DAY , #1
L4: LJMP OUT
MON_AA:
MOV R5, MON
CJNE R5,#11, MON_BB
MOV R5,DAY
CJNE R5,#31,L5
INC MON
MOV DAY , #1
L5: LJMP OUT
MON_BB:
MOV R5, DAY
CJNE R5 ,#32,L6
INC YEAR
MOV MON, #1
MOV DAY , #1
L6:LJMP OUT
;-------按SB2\定時器年單元加1 子程序
SB3_2: LJMP SHOW_2 ;二路沒編返回
SB3_3: LJMP SHOW_3 ;三路沒編返回
SB3_1:
MOV A , YEAR_1 ; 調(diào)時年單元
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #01H
LCALL READ
LCALL DE250SM
CJNE A, 01H, SB3_1
CJNE A, #0FBH, KEY2_7 ;按SB2 轉(zhuǎn)年調(diào)整
LJMP MON_111 ;按SB1 往下調(diào)月單元
KEY2_7:CJNE A, #0FDH, SB3_1
INC YEAR_1 ; 1 路年單元加1
MOV R5,YEAR_1
CJNE R5,#09,SB3_1 ;益出
MOV YEAR_1, #00H
AJMP SB3_1 ;
;-------月單元加1 子程序
MON_111:
MOV A , MON_1 ; 調(diào)時月單元顯示
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #02H
LCALL READ
LCALL DE250SM
CJNE A, 01H, MON_111
CJNE A, #0FBH, KEY2_8 ;按SB2 轉(zhuǎn)月調(diào)整
LJMP DAY_111
KEY2_8:
CJNE A,#0FDH,MON_111
INC MON_1 ;1 路月單元加1
MOV R5,MON_1
CJNE R5,#13,MON_111;益出
MOV MON_1, #01H
AJMP MON_111 ; 轉(zhuǎn)到月顯
;_------日單元加1 子程序
DAY_111:
MOV A , DAY_1 ; 調(diào)時日單元顯示提示
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #04H
LCALL READ
LCALL DE250SM
CJNE A, 01H,DAY_111
CJNE A, #0FBH, KEY2_9 ;按SB2 轉(zhuǎn)日調(diào)整
LJMP HOUR_111
KEY2_9: CJNE A,#0FDH,DAY_111
INC DAY_1 ;1 組日單元加1
MOV R5, DAY_1
CJNE R5,#32,DAY_111;益出
MOV DAY_1, #01H
AJMP DAY_111 ; 轉(zhuǎn)到日顯
;-------按SB2 時單元加1 子程序
HOUR_111:
MOV A , HOUR_1 ; 調(diào)時時單元顯示提示
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #01H
LCALL READ
LCALL DE250SM
CJNE A, 01H,HOUR_111
CJNE A, #0FBH, KEY2_10 ; 按SB2 轉(zhuǎn)時調(diào)整
LJMP MIN_111
KEY2_10:CJNE A,#0FDH,HOUR_111
INC HOUR_1
MOV R5,HOUR_1
CJNE R5,#24,HOUR_111;益出
MOV HOUR_1, #00H
AJMP HOUR_111 ; 轉(zhuǎn)到時顯
;-------分單元加1 子程序
MIN_111:
MOV A , MIN_1 ; 調(diào)時分單元、并顯示提示
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #02H
LCALL READ
LCALL DE250SM
CJNE A, 01H,MIN_111
CJNE A, #0FBH, KEY2_11 ;按SB2 轉(zhuǎn)分調(diào)整
AJMP OFF_CH ;按SB3 往下調(diào)定時:關(guān)單元
KEY2_11: CJNE A, #0FDH, MIN_111
INC MIN_1 ;1 路分單元加1
MOV R5, MIN_1
CJNE R5,#60,MIN_111;益處
MOV MIN_1, #00H
AJMP MIN_111 ; 轉(zhuǎn)到分顯
年單元調(diào)整
OFF_CH: MOV A , YEAR_11 ; 調(diào)時年單元
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #01H
LCALL READ
LCALL DE250SM
CJNE A, 01H, OFF_CH
CJNE A, #0FBH, KEY2_F7 ;按SB2 轉(zhuǎn)年調(diào)整
LJMP MON_OFF ;按SB1 往下調(diào)月單元
KEY2_F7:CJNE A, #0FDH, OFF_CH
INC YEAR_11 ; 1 路年單元加1
MOV R5,YEAR_11
CJNE R5,#09,OFF_CH ;益出
MOV YEAR_11, #00H
AJMP OFF_CH ;
;-------月單元加1 子程序
MON_OFF:
MOV A , MON_11 ; 調(diào)時月單元顯示
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #02H
LCALL READ
LCALL DE250SM
CJNE A, 01H, MON_OFF
CJNE A, #0FBH, KEY2_F8 ;按SB2 轉(zhuǎn)月調(diào)整
LJMP DAY_OFF
KEY2_F8:
CJNE A,#0FDH,MON_OFF
INC MON_11 ;1 路月單元加1
MOV R5,MON_11
CJNE R5,#13,MON_OFF;益出
MOV MON_11, #01H
AJMP MON_OFF ; 轉(zhuǎn)到月顯
;_------日單元加1 子程序
DAY_OFF:
MOV A , DAY_11 ; 調(diào)時日單元顯示提示
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #04H
LCALL READ
LCALL DE250SM
CJNE A, 01H,DAY_OFF
CJNE A, #0FBH, KEY2_F9 ;按SB2 轉(zhuǎn)日調(diào)整
LJMP HOUR_OFF
KEY2_F9: CJNE A,#0FDH,DAY_OFF
INC DAY_11 ;1 組日單元加1
MOV R5, DAY_11
CJNE R5,#32,DAY_OFF;益出
MOV DAY_11, #01H
AJMP DAY_OFF ; 轉(zhuǎn)到日顯
;-------按SB2 時單元加1 子程序
HOUR_OFF:
MOV A , HOUR_11 ; 調(diào)時時單元顯示提示
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #01H
LCALL READ
LCALL DE250SM
CJNE A, 01H,HOUR_OFF
CJNE A, #0FBH, KEY2_F10 ; 按SB2 轉(zhuǎn)時調(diào)整
LJMP MIN_OFF
KEY2_F10:CJNE A,#0FDH,HOUR_OFF
INC HOUR_11
MOV R5,HOUR_11
CJNE R5,#24,HOUR_OFF;益出
MOV HOUR_11, #00H
AJMP HOUR_OFF ; 轉(zhuǎn)到時顯
;-------分單元加1 子程序
MIN_OFF:
MOV A , MIN_11 ; 調(diào)時分單元、并顯示提示
MOV B ,#10
DIV AB
SWAP A
ORL A,B
MOV P0, A
MOV P2, #02H
LCALL READ
LCALL DE250SM
CJNE A, 01H,MIN_OFF
CJNE A, #0FBH, KEY2_F11 ;按SB2 轉(zhuǎn)分調(diào)整
LJMP ON_1 ;按SB3 往下調(diào)定時:開與關(guān)
KEY2_F11: CJNE A, #0FDH, MIN_OFF
INC MIN_11 ;1 路分單元加1
MOV R5, MIN_11
CJNE R5,#60,MIN_OFF;益處
MOV MIN_11, #00H
LJMP MIN_OFF ; 轉(zhuǎn)到分顯
;-------開、關(guān)定時
ON_1:CJNE A, #0FBH, MIN_OFF
K1: MOV A, #88H
MOV R7, A
MOV P0, A
MOV P2, #0FFH;三組都顯示開
LCALL READ
LCALL DE250SM
CJNE A, 01H, ON_1;去抖后比較
CJNE A, #0FBH,KEY2_12 ;按SB2 轉(zhuǎn)關(guān)
LJMP OUT_A ;按SB3 調(diào)出、處于開狀態(tài)
KEY2_12: CJNE A, #0FDH, K1
k2: MOV A, #00H; 顯示0 關(guān)
MOV R7, A
MOV P0, A
MOV P2, #0FFH;
LCALL READ
LCALL DE250SM
CJNE A, 01H, K2;去抖后比較
CJNE A, #0FBH,KEY2_13 ;按SB2 轉(zhuǎn)開
LJMP OUT_A ;SB3 調(diào)出、處關(guān)狀態(tài)
KEY2_13:
CJNE A, #0FDH, K2 ; 比較按了沒
LJMP K1 ; 按了SB2、轉(zhuǎn)開
OUT_A:
POP 00H
POP B
POP ACC
POP PSW
RETI
;_------讀取按鍵程序
READ:MOV A , P1;讀取按鍵
MOV R1, A
LCALL DE10MS
MOV A, P1
RET
;_----延時程序
DE5SM:
PUSH 01H
MOV R1, #0FFH
DJNZ R1,$
POP 01H
RET
DE10MS: PUSH 04H
PUSH 05H
MOV R4, #0AH
Dl1: MOV R5, #0FFH
dl2: DJNZ R5,$
DJNZ R4,dl1
POP 05H
POP 04H
RET
DE250SM:PUSH 02H
PUSH 00H
MOV R0, #0FFH
DEL:MOV R2, #0FFH
DJNZ R2,$
DJNZ R0, DEL
POP 00H
POP 02H
RET
;_---調(diào)整時間進(jìn)位程序
MIN_AD:
INC MIN
MOV R6, MIN
CJNE R6, #60, OU1
MOV MIN , #00
OU1: RET
HOUR_AD:
INC HOUR
MOV R6 , HOUR
CJNE R6 , #25 , OU2
MOV HOUR ,#00
OU2: RET
DAY_AD:
INC DAY
MOV R6, DAY
CJNE R6 , #32, OU3 ; 是否益出
MOV DAY ,#01H
OU3: RET
MON_AD:
INC MON
MOV R6, MON
CJNE R6, #13, OU4 ; 是否益出
MOV MON ,#01H
OU4: RET
YEAR_AD:
INC YEAR
MOV R6, YEAR
CJNE R6, #09, OU5;是否益出
MOV YEAR ,#00H
OU5: RET
END
六:附錄
實驗設(shè)計電路圖1
流程圖1:實驗主程序流程圖
流程圖2:定時中斷程序流程圖
流程圖3:調(diào)時功能流程圖
七:實驗心得
學(xué)了兩周的課程設(shè)計,有很多的心得體會,有關(guān)于單片機(jī)方面的,更多的是關(guān)于人與人之間關(guān)系方面的。
在這期間,我得到了很多同學(xué)的幫助。我本人對單片機(jī)也并不是很熟悉,學(xué)的東西好像它是它,我是我似的,理論聯(lián)系不了實際。以前的匯編語言沒學(xué)好,一開始的程序這塊兒就要令我束手無策了。后來請教我們班的一個男生,每次跟他一起到試驗室調(diào)試程序,看他邊做邊給我講解。最后在計算機(jī)上調(diào)試成功,后來自己又抽空做了些拓展,完成了本程序。
后來,我發(fā)現(xiàn)自己對單片機(jī)也有了很大興趣,想暑假回家以后自己去買一些東西來做,再補一補匯編語言。
最后說明自己對這門課程的感受,課堂教學(xué)考慮到大多數(shù)同學(xué)的需求,主要強調(diào)“基本”——基本知識、基本理論、基本方法、基本技能。而這次設(shè)計正是為我們提供了一個深入學(xué)習(xí)、探索的機(jī)會,成為課堂教學(xué)的有益補充。
單片機(jī)的設(shè)計
設(shè)計名稱 : 電子時鐘設(shè)計
班級 :
學(xué)號 :
姓名 :
指導(dǎo)教師 :
收藏