回覆列表
  • 1 # 使用者2586955584324

    ;可設定時間的倒計時定時器,可選擇5/15/20/30/35/45/50分鐘倒計時

    ;倒計時時間由四位撥碼開關的1/2/3位來控制,

    ;第2位表示5分鐘,第3位表示15分鐘,第4位表示30分鐘,

    ;透過不同的組合可以產生5/15/20/30/35/45/50分鐘倒計時

    ;P1.0口的外接的發光二極體為狀態LED,定時未開始時LED常亮,定時過程中LED閃爍

    a_bit equ 20h ;數碼管個位數存放記憶體位置

    b_bit equ 21h ;數碼管十位數存放記憶體位置

    temp equ 22h ;計數器數值存放記憶體位置

    ;開機初始化

    MOV P3,#0FFH ;對P3口初始化,設定為高電平,用於按鍵輸入

    MOV P0,#0FFH ;使顯示時間數碼管熄滅

    CLR P1.0 ;點亮LED指示燈

    ;等待鍵盤輸入

    ACALL DELAY10 ;延時10毫秒觸點消抖

    JB P3.6,START ;如果是干擾就返回

    JNB P3.6,$ ;等待按鍵鬆開

    ;讀撥碼開關的狀態,獲得倒計時時間

    SET1:

    MOV A,#0 ;首先對A清零

    JB P2.0,A1 ;判斷撥碼開關的第2位是否接通,接通就對A加5

    ADD A,#5

    A1: JB P2.1,A2 ;判斷撥碼開關的第3位是否接通,接通就對A加15

    ADD A,#15

    A2: JB P2.2,A3 ;判斷撥碼開關的第4位是否接通,接通就對A加30

    ADD A,#30

    A3: MOV TEMP,A

    ;這時TEMP中的值就是倒計時時間

    ;數碼管顯示定時時間的程式

    display:

    CLR P2.4 ;使繼電器1釋放,開始定時(開機時繼電器處於吸合狀態)

    CLR P2.3 ;使繼電器2釋放,開始定時(開機時繼電器處於吸合狀態)

    MOV R2,#120

    AB1: MOV R3,#250

    TIME1: mov a,temp ;將temp中的十六進位制數轉換成10進位制

    mov b,#10 ;10進位制/10=10進位制

    div ab

    mov b_bit,a ;十位在a

    mov a_bit,b ;個位在b

    mov dptr,#numtab ;指定查表啟始地址

    mov r0,#4

    dpl1: mov r1,#250 ;

    dplop: mov a,a_bit ;取個位數

    MOVC A,@A+DPTR ;查個位數的7段程式碼

    mov p0,a ;送出個位的7段程式碼

    clr p2.7 ;開個位顯示

    ACALL DELY1 ;顯示1毫秒

    setb p2.7 ;關閉個位顯示,防止鬼影

    mov a,b_bit ;取十位數

    MOVC A,@A+DPTR ;查十位數的7段程式碼

    mov p0,a ;送出十位的7段程式碼

    clr p2.6 ;開十位顯示

    ACALL DELY1 ;顯示1毫秒

    setb p2.6 ;關閉十位顯示,防止鬼影

    ;插入一段判斷定時過程中是否有按鍵輸入的程式段

    C1: JB P3.6,B1

    ACALL DELAY10 ;延時10毫秒消抖

    JB P3.6,C1

    JNB P3.6,$ ;等待按鍵鬆開

    AJMP SET1

    B1: JB P3.7,M33

    ACALL DELAY10 ;延時10毫秒消抖

    JB P3.7,B1

    JNB P3.7,$ ;等待按鍵鬆開

    AJMP OVER

    M33: djnz r3,TIME1 ;2毫秒迴圈執行250次,時間約0.5秒

    CPL P1.0 ;使LED每1秒閃爍一次

    djnz r2,AB1 ;迴圈執行120次,時間為1分鐘

    DEC TEMP ;滿一分鐘對定時時間減1

    MOV A,TEMP

    JNZ DISPLAY

    ;判斷TEMP的數值是否為0?不為0迴圈

    ;結束定時

    OVER:CLR P1.0 ;LED指示燈常亮

    SETB P2.4 ;繼電器1吸合,定時結束,退回到開機時的狀態

    SETB P2.3 ;繼電器2吸合,定時結束,退回到開機時的狀態

    AJMP START ;退到開機初始化狀態

    ;1毫秒延時子程式

    DELY1: MOV R4,#2

    D1: MOV R5,#248

    DJNZ R5,$

    DJNZ R4,D1

    RET

    ;10毫秒延時子程式

    DELAY10:MOV R4,#20

    D2: MOV R5,#248

    DJNZ R5,$

    DJNZ R4,D2

    RET

    ;實驗板上的7段數碼管0~9數字的共陰顯示程式碼

    NUMTAB:DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH

    end

  • 中秋節和大豐收的關聯?
  • 為什麼有人說離婚已經成為普遍現象了?