單片機(jī)秒表課程設(shè)計(jì)
;數(shù)碼管顯示秒表時(shí)間的程序
GN1: ;先初始化
S1:MOV A,#0
MOV TEMP,A
GOON1: MOV R2,#2
JS1: MOV R3,#250
TIME1: MOV A,TEMP ;將TEMP中的十六進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制
MOV B,#10 ;10進(jìn)制/10=10進(jìn)制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;個(gè)位在B
LCALL DPLOP1
;插入一段判斷定時(shí)過程中是否有按鍵輸入的程序段
C1: JB P3.6,B1
ACALL DELAY10;延時(shí)10毫秒消抖
JB P3.6,C1
JNB P3.6,$;等待按鍵松開
CPL F0
ZT1: ; MOV P3,#0FFH;對(duì)P3口初始化,設(shè)置為高電平,用于按鍵輸入
JB P3.6,$;循環(huán)判斷開始按鈕K1是否按下?
ACALL DELAY10;延時(shí)10毫秒觸點(diǎn)消抖
JB P3.6,ZT1;如果是干擾就返回
JNB P3.6,$;等待按鍵松開
LCALL DPLOP1
B1: JB P3.7,LOOP1
ACALL DELAY10;延時(shí)10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按鍵松開
AJMP OVER
LOOP1: DJNZ R3,TIME1 ;2毫秒循環(huán)執(zhí)行250次,時(shí)間約0.5秒
DJNZ R2,JS1 ;循環(huán)執(zhí)行2次,時(shí)間為1 秒鐘
INC TEMP;滿一秒鐘對(duì)時(shí)間加1
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1;判斷TEMP的數(shù)值是否為60?不為60循環(huán)
ACALL OVER
RET
GN2: MOV A,#14H ; 設(shè)定倒計(jì)時(shí)的時(shí)間20S
MOV TEMP,A
;數(shù)碼管顯示倒計(jì)時(shí)時(shí)間的程序
;初始化
MOV P3,#0FFH;對(duì)P3口初始化,設(shè)置為高電平,用于按鍵輸入
MOV P0,#14H;使顯示時(shí)間為設(shè)定的倒計(jì)時(shí)時(shí)間
GOON2: MOV R2,#2
JS2: MOV R3,#250
TIME2: MOV A,TEMP ;將TEMP中的十六進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制
MOV B,#10 ;10進(jìn)制/10=10進(jìn)制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;個(gè)位在B
MOV DPTR,#NUMTAB ;指定查表啟始地址
DPLOP2: MOV A,A_BIT ;取個(gè)位數(shù)
MOVC A,@A+DPTR ;查個(gè)位數(shù)的7段代碼
MOV P0,A ;送出個(gè)位的7段代碼
CLR P2.5 ;開個(gè)位顯示
ACALL DELY1;顯示1毫秒
SETB P2.5;關(guān)閉個(gè)位顯示,防止鬼影
MOV A,B_BIT ;取十位數(shù)
MOVC A,@A+DPTR ;查十位數(shù)的7段代碼
MOV P0,A ;送出十位的7段代碼
CLR P2.6 ;開十位顯示
ACALL DELY1;顯示1毫秒
SETB P2.6;關(guān)閉十位顯示,防止鬼影
;插入一段判斷定時(shí)過程中是否有按鍵輸入的程序段
C2: JB P3.6,B2
ACALL DELAY10;延時(shí)10毫秒消抖
JB P3.6,C2
JNB P3.6,$;等待按鍵松開
ZT2: MOV P3,#0FFH;對(duì)P3口初始化,設(shè)置為高電平,用于按鍵輸入
JB P3.6,$;循環(huán)判斷開始按鈕K1是否按下?
ACALL DELAY10;延時(shí)10毫秒觸點(diǎn)消抖
JB P3.6,ZT2;如果是干擾就返回
JNB P3.6,$;等待按鍵松開
評(píng)論