<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      單片機遙控電子鐘程序

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2011-3-31

      ;******************************************************
      ;*標題:      單片機遙控電子鐘程序
      ;*文件:                           
      ;*版本:    1.0
      ;*作者:     東哥   
      ;*郵箱:    picavr@163.com     QQ: 279068079

      ;******************************************************* 
                      K1   BIT  P3.2          ;切換當前時間,開機時間,關機時間(P3.2口定義為K1)
                      K2   BIT  P3.4          ;調時鍵K2(P3.4 口定義為K2)
                      K3   BIT  P3.5          ;調分鍵K3(P3.5 口定義為K3)
                      K4   BIT  P3.6          ;啟動鍵K4(P3.6 口定義為K4)
                      SI   BIT  P3.3          ;遙控輸入口定義為SI
                      C_HOUR     EQU  24H     ;當前時的地址定義
                      C_MINUTE   EQU  25H     ;當前分的地址定義
                      C_SECOND   EQU  26H     ;當前秒的地址定義
                      ON_HOUR    EQU  27H     ;開機時的地址定義
                      ON_MINUTE  EQU  28H     ;開機分的地址定義
                      OFF_HOUR   EQU  29H     ;關機時的地址定義
                      OFF_MINUTE EQU  30H     ;關機分的地址定義
                      WORK_MODE  EQU  34H     ;當前時間,開機時間,關機時間選擇
                      USE_CODE   EQU  35H     ;用戶數據代碼地址定義
                      DATA_CODE  EQU  36H     ;數據代碼地址定義
                      COUNT      EQU  50H     ;計數地址定義
      ;******************************************************************************
                      ORG     0000H           ;主程序入口地址
                      AJMP    MAIN            ;轉主程序
                      ORG     0003H           ;外中斷0中斷入口
                      AJMP    INTEX0          ;跳至INTEX0執行中斷服務程序
                      ORG     000BH           ;定時器T0中斷入口地址
                      AJMP    WTO             ;跳至定時器T0執行中斷服務程序
                      ORG     0013H           ;外中斷1中斷入口
                      LJMP    INTEX1          ;跳至INTEX1執行中斷服務程序
                      ORG     001BH           ;定時器T1中斷入口地址
                      RETI                    ;中斷返回(不開中斷)
                      ORG     0023H           ;串行口中斷入口地址
                      RETI                    ;中斷返回(不開中斷)
                      ORG     002BH           ;定時器T2中斷入口地址
                      RETI                    ;中斷返回(不開中斷)
      ;******************************************************************************
      ;*                                主程序                                   *
      ;******************************************************************************
                      ORG    0030H
      MAIN:           MOV    SP,#50H          ;堆棧指針入口地址
                      CLR    00H              ;清開始調整標志
                      CLR    01H              ;清當前時間標志
                      CLR    02H              ;清開機時間標志
                      CLR    03H              ;清關機時間標志
                      CLR    04H              ;遙控用戶識別標志
                      MOV    21H,#0           ;10MS定時中斷計數器初值
                      MOV    22H,#0           ;500MS定時中斷計數器初值
                      MOV    C_HOUR,#0
                      MOV    C_MINUTE,#0
                      MOV    C_SECOND,#0      ;置當前時間為00:00:00
                      MOV    ON_HOUR,#06H
                      MOV    ON_MINUTE,#00H   ;置開機時間為06:00
                      MOV    OFF_HOUR,#12H
                      MOV    OFF_MINUTE,#00H  ;置關機時間為12:00
                      MOV    WORK_MODE,#0     ;
                      MOV    USE_CODE,#00H    ;用戶數據代碼為00
                      MOV    DATA_CODE,#00H   ;數據代碼為00
                      MOV    R6,#8            ;數據為8位
                      MOV    TH0,#0D8H        ;T0 10ms定時初值
                      MOV    TL0,#0F0H        ;T0 10ms定時初值
                      MOV    TH1,#00H         ;T1 定時初值為00
                      MOV    TL1,#00H         ;T1 定時初值為00
                      MOV    TMOD,#11H        ;T0 方式1設定
                      MOV    IE,#00H          ;關所有中斷
                      CLR    A                ;
                      DEC    A                ;A為#0FFH
                      MOV    P0,A             ;P1-P3口置1
                      MOV    P1,A             ;
                      MOV    P2,A             ;
                      MOV    P3,A             ;
                      SETB   EA               ;開CPU中斷
                      SETB   EX1              ;開外中斷
                      SETB   EX0              ;開INT0中斷請求
                      CLR    ET0              ;禁止T0中斷   
                      CLR    TR0              ;禁止T0計數
                      CLR    IT0              ;置INT0為電平觸發
                      SETB   IT1              ;置INT1為邊沿觸發
                      SETB   PX1              ;置INT1為最高級中斷
                      SETB   P3.7             ;置開關輸出控制端口P3.7為"1"
      M:              MOV    A,C_HOUR
                      CJNE   A,ON_HOUR,OFF_TIME
                      MOV    A,C_MINUTE       ;判斷當前時間是否等於開機時間
                      CJNE   A,ON_MINUTE,OFF_TIME
                      CLR    P3.7             ;置開關輸出控制端口P3.7為"0"
                      AJMP   NEXT                  
      OFF_TIME:       MOV    A,C_HOUR
                      CJNE   A,OFF_HOUR,NEXT
                      MOV    A,C_MINUTE
                      CJNE   A,OFF_MINUTE,NEXT;判斷當前時間是否等於關機時間
                      SETB   P3.7             ;置開關輸出控制端口P3.7為"1"  
      NEXT:           JNB    01H,ONDISP
                      ACALL  DISP1            ;調當前時間顯示子程序 
      ONDISP:         JNB    02H,OFFDISP
                      ACALL  DISP2            ;調開機時間顯示子程序
      OFFDISP:        JNB    03H,M
                      ACALL  DISP3            ;調關機時間顯示子程序
                      AJMP   M                ;轉 M 循環
                      NOP                     ;PC值出錯處理
                      NOP
                      NOP
                      AJMP   MAIN             ;重新初始化
                                                                 
      TAB:            DB 0C0H,0F9H,0A4H,0B0H,99H ;顯示代碼數據
                      DB 92H,82H,0F8H,80H,90H
      ;*******************************************************************************************************
      ;*                                            當前時間顯示子程序                                        *
      ;*******************************************************************************************************
      DISP1:          MOV R0,C_HOUR
                      MOV DPTR,#TAB           ;筆劃段碼表指針
                      MOV A,R0
                      SWAP A
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.0
                      ACALL DL                ;送顯時高位
                      SETB P2.0
                      MOV A,R0
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.1
                      ACALL DL
                      SETB P2.1               ;送顯時低位
                      MOV R1,C_MINUTE
                      MOV A,R1
                      SWAP A
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.2
                      ACALL DL
                      SETB P2.2               ;送顯分高位
                      MOV A,R1
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.3
                      ACALL DL
                      SETB P2.3               ;送顯分低位
                      MOV R2,C_SECOND        
                      MOV A,R2
                      SWAP A
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.4
                      ACALL DL
                      SETB P2.4               ;送顯秒高位
                      MOV A,R2
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.5
                      ACALL DL
                      SETB P2.5               ;送顯秒低位
                      RET
      ;*************************************************************************************************************
      ;*                                         定時器T0中斷服務子程序                                           *               
      ;*************************************************************************************************************
      WTO:            PUSH   ACC              ;保護現場   
                      PUSH   PSW
                      MOV    A,#0B7H          ;中斷響應時間同步修正
                      ADD    A,TL0            ;低8位初值修正
                      MOV    TL0,A            ;重裝初值(低8位修正值)
                      MOV    A,#0F0H          ;高8位初值修正
                      ADDC   A,TH0            ;
                      MOV    TH0,A            ;重裝初值(高8位修正值)
                      INC    21H
                      MOV    A,21H
                      CJNE   A,#50,TORETI     ;10mS * 50mS=0.5S
                      MOV    21H,#0
                      INC    22H
                      MOV    A,22H
                      CJNE   A,#2,TORETI      ;0.5S * 2 =1S
                      MOV    22H,#0
                      CPL    P0.0             ;秒指示
                      CPL    P0.1
                      MOV    A,#01H
                      ADD    A,C_SECOND
                      DA     A
                      MOV    C_SECOND,A       ;當前秒加1
                      CJNE   A,#60H,TORETI    ;為60嗎(是秒清0,否返回)
                      MOV    C_SECOND,#0
                      MOV    A,#01H
                      ADD    A,C_MINUTE
                      DA     A
                      MOV    C_MINUTE,A       ;當前分加1
                      CJNE   A,#60H,TORETI    ;為60嗎(是分清0,否返回)
                      MOV    C_MINUTE,#0
                      MOV    A,#01H
                      ADD    A,C_HOUR
                      DA     A
                      MOV    C_HOUR,A         ;當前時加1
                      CJNE   A,#24H,TORETI    ;為24嗎(是時清0,否返回)
                      MOV    C_HOUR,#0
      TORETI:         POP    PSW              ;恢復現場
                      POP    ACC
                      RETI
      ;**************************************************************************************************
      ;                                 開機時間顯示子程序                                              *
      ;**************************************************************************************************
      DISP2:          MOV R0,ON_HOUR
                      MOV DPTR,#TAB           ;筆劃段碼表指針
                      MOV A,R0
                      SWAP A
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.0
                      ACALL DL                ;送顯時高位
                      SETB P2.0
                      MOV A,R0
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.1
                      ACALL DL                ;送顯時低位
                      SETB P2.1
                      MOV R1,ON_MINUTE
                      MOV A,R1
                      SWAP A
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.2
                      ACALL DL                ;送顯分高位      
                      SETB P2.2
                      MOV A,R1
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.3
                      ACALL DL                ;送顯分低位
                      SETB P2.3
                      RET
      ;*************************************************************************************************
      ;                                      關機時間顯示子程序                                        *
      ;*************************************************************************************************
      DISP3:          MOV R0,OFF_HOUR
                      MOV DPTR,#TAB           ;筆劃段碼表指針   
                      MOV A,R0
                      SWAP A
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.0
                      ACALL DL                ;送顯時高位
                      SETB P2.0
                      MOV A,R0
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.1
                      ACALL DL                ;送顯時低位  
                      SETB P2.1
                      MOV R1,OFF_MINUTE
                      MOV A,R1
                      SWAP A
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.2
                      ACALL DL                ;送顯分高位
                      SETB P2.2
                      MOV A,R1
                      ANL A,#0FH
                      MOVC A,@A+DPTR
                      MOV P1,A
                      CLR P2.3
                      ACALL DL                ;送顯分低位
                      SETB P2.3
                      RET
      ;************************************************************************************************************
      ;                                   延時0.16ms子程序                                                        *
      ;************************************************************************************************************ 
      DL:             MOV  31H,#80
      DL2:            DJNZ 31H,DL2
                      RET
      ;****************************************************************************************************
      ;                                     延時10MS子程序,用於消除按鍵抖動而產生誤動作                   *
      ;****************************************************************************************************
      DEL:            MOV  32H,#200
      DEL1:           MOV  33H,#250
      DEL2:           DJNZ 33H,DEL2
                      DJNZ 32H,DEL1
                      RET
      ;*************************************************************************************************************
      ;                                   按鍵中斷處理子程序                                                        *
      ;*************************************************************************************************************
      INTEX0:         PUSH  ACC                 ;保護現場
                      PUSH  PSW
                      CLR   EX0                 ;關外部中斷INT0
                      JB    K1,$                ;判斷K1按下否,未按則等待,K1按下
                                                ;LED1亮, LED2熄滅
      DISP1_0:        ACALL DISP1               ;
                      JNB   K1,DISP1_0          ;等待K1釋放
                      ACALL DEL                 ;K1按下開機指示LED1亮,LED2熄滅  
      PH4:            CLR   P3.1                ;LED1亮
                      SETB  P3.0                ;LED2熄滅  
      PH0:            ACALL DISP1               ;調當前時間顯示子程
                      JB    K2,PH01             ;判K2按下否,未按則轉到判K3
      DISP1_1:        ACALL DISP1               ; 
                      JNB   K2,DISP1_1          ;等待K2釋放
                      ACALL DEL
                      MOV   R0,C_HOUR
                      MOV   A,#01H
                      ADD   A,R0
                      DA    A
                      MOV   C_HOUR,A            ;當前時間時加1
                      CJNE  A,#24H,PH0          ;超過24嗎(超過清0)
                      MOV   C_HOUR,#0
      PH01:           JB    K3,PH1              ;判K3按下否,未按則轉判K4
      DISP1_2:        ACALL DISP1               ;
                      JNB   K3,DISP1_2          ;等待K3釋放          
                      ACALL DEL
                      MOV   R0,C_MINUTE
                      MOV   A,#01H
                      ADD   A,R0
                      DA    A
                      MOV   C_MINUTE,A          ;當前時間分加1
                      CJNE  A,#60H,PH0          ;超過60嗎(超過清0)
                      MOV   C_MINUTE,#0
      PH1:            JB    K4,PH10             ;判K4按下否,未按則轉到判K1   
      DISP1_3:        ACALL DISP1               ;
                      JNB   K4,$                ;等待K4釋放
                      ACALL DEL
                      AJMP  TEND                ;K4按下,轉啟動
      PH10:           JB    K1,PH0              ;判K1按下否,未按則再
      DISP1_4:        ACALL DISP1               ;
                      JNB   K1,DISP1_4          ;等待K1釋放
                      ACALL DEL                 ;K1按下開機指示LED1熄滅,LED2亮
                      SETB  P3.1                ;LED1熄滅
                      CLR   P3.0                ;LED2亮

      PH2:            ACALL DISP2               ;調開機時間顯示子程序
                      JB    K2,PH201            ;判K2按下否,未按則轉到判K3
      DISP2_1:        ACALL DISP2               ;
                      JNB   K2,DISP2_1          ;等待K2釋放
                      MOV   R0,ON_HOUR
                      MOV   A,#01H
                      ADD   A,R0
                      DA    A
                      MOV   ON_HOUR,A           ;開機時間時加1
                      CJNE  A,#24H,PH2          ;超過24嗎(超過清0)
                      MOV   ON_HOUR,#0
      PH201:          JB    K3,PH210            ;判K3按下否,未按則轉判K4
      DISP2_2:        ACALL DISP2               ;
                      JNB   K3,DISP2_2          ;等待K3釋放             
                      ACALL DEL
                      MOV   R0,ON_MINUTE
                      MOV   A,#01H
                      ADD   A,R0
                      DA    A
                      MOV   ON_MINUTE,A         ;開機時間分加1
                      CJNE  A,#60H,PH2          ;超過60嗎(超過清0)
                      MOV   ON_MINUTE,#0
      PH210:          JB    K1,PH2              ;判K1按下否,未按則再
      DISP2_3:        ACALL DISP2               ;
                      JNB   K1,DISP2_3          ;等待K1釋放
                      ACALL DEL                 ;K1按下關機指示LED1. LED2亮
                      CLR   P3.0                ;LED1亮    
                      CLR   P3.1                ;LED2亮

      PH3:            ACALL DISP3               ;調關機時間顯示子程序
                      JB    K2,PH301            ;判K2按下否,未按則轉到判K3
      DISP3_1:        ACALL DISP3               ;
                      JNB   K2,DISP3_1          ;等待K2釋放
                      ACALL DEL
                      MOV   R0,OFF_HOUR
                      MOV   A,#01H
                      ADD   A,R0
                      DA    A
                      MOV   OFF_HOUR,A          ;關機時間時加1
                      CJNE  A,#24H,PH3          ;超過24嗎(超過清0) 
                      MOV   OFF_HOUR,#0
      PH301:          JB    K3,PH310            ;判K3按下否,未按則轉判K4
      DISP3_2:        ACALL DISP3               ;
                      JNB   K3,DISP3_2          ;等待K3釋放
                      ACALL DEL
                      MOV   R0,OFF_MINUTE
                      MOV   A,#01H
                      ADD   A,R0
                      DA    A
                      MOV   OFF_MINUTE,A        ;關機時間分加1
                      CJNE  A,#60H,PH3          ;超過60嗎(超過清0)
                      MOV   OFF_MINUTE,#0
      PH310:          JB    K1,PH3              ;判K1按下否,未按則再
      DISP3_3:        ACALL DISP3               ;
                      JNB   K1,DISP3_3          ;等待K1釋放
                      ACALL DEL
                      AJMP  PH4                 ;轉當前時間調整

      TEND:           SETB  EX0                 ;開INT0中斷
                      SETB  TR0                 ;允許T0計數 
                      SETB  01H                 ;置00H為1,啟動計數 
                      SETB  ET0                 ;允許T0中斷
                      SETB  P3.7                ;置P3.7口為1
                      POP   PSW                 ;恢復現場
                      POP   ACC
                      RETI                      ;中斷返回
      ;**********************************************************************
      ;;;;;;;;;;;;;;;;;;;;;;;;;     遙控接收程序      ;;;;;;;;;;;;;;;;;;;;;;;
      ;**********************************************************************
      ;采用中斷接收
      INTEX1:        
                      CLR      EA             ;
                      CLR      TR1            ;
                      JNB      SI,$           ;
                      NOP
                      NOP
                      JNB      SI,$
                      SETB     TR1            ;
                      MOV      R2,TH1         ;取T0計數次數
                      MOV      R3,TL1
                      MOV      R4,#00H        ;0096H~03B6H為數據窗口0
                      MOV      R5,#96H        ;窗口0的下限
                      LCALL    SUB0           ;計數值小于00FAH嗎?
                      JC       ERROUT         ;<0096H,作廢
                      MOV      R4,#03H        ;窗口0的上限
                      MOV      R5,#0B6H
                      MOV      R2,TH1         ;取T0計數次數
                      MOV      R3,TL1
                      LCALL    SUB0           ;計數值大于03B6H嗎?
                      JNC      X1_01          ;>03B6,去看是否在1的窗口
                      CLR      C              ;在窗口0中,清C,移位時移入0
                      LJMP     SET_CODE_0     ;去移位處理
      X1_01:          MOV      R4,#04H        ;窗口1的下限
                      MOV      R5,#4CH        ;044CH~073AH為窗口1
                      MOV      R2,TH1         ;取T0計數次數
                      MOV      R3,TL1
                      LCALL    SUB0           ;計數值小于044CH嗎?
                      JC       ERROUT          ;<044CH,作廢
                      MOV      R4,#07H        ;窗口1的上限
                      MOV      R5,#3AH        ;#073A
                      MOV      R2,TH1         ;取T1計數次數
                      MOV      R3,TL1
                      LCALL    SUB0           ;計數值大于#073AH嗎?
                      JNC      ERROUT         ;>073AH,作廢
                      SETB     C              ;在窗口1中,將C置1
      SET_CODE_0:
                      JB       04H,NEXT       ;
                      MOV      A,USE_CODE     ;
                      RLC      A              ;
                      MOV      USE_CODE,A     ;
                      DJNZ     COUNT,ERROUT   ;
                      MOV      COUNT,#8       ;
                      MOV      A,USE_CODE     ;
                      CJNE     A,#0E2H,ERROUT ;
                      SETB     04H            ;
      ;**********************************************
      ERROUT:      
                      MOV      TH1,#00H       ;
                      MOV      TL1,#00H       ;
                      SETB     TR1            ;
                      SETB     EA             ;
                      RETI                    ;
      ;*********************************************
      NEXT:     
                      MOV      A,DATA_CODE    ;
                      RLC      A              ;
                      MOV      DATA_CODE,A    ;
                      DJNZ     R6,ERROUT      ;
                      MOV      R6,#8          ;
                      CLR      04H            ;
      ;*********************************************
                      MOV      A,DATA_CODE    ;
                      CJNE     A,#00H,CH1     ;
                      AJMP     FUN1           ;
                 
      CH1:            CJNE     A,#10H,CH2     ;
                      AJMP     FUN2           ;

      CH2:            CJNE     A,#08H,CH3     ;
                      AJMP     FUN3           ;
                
      CH3:            CJNE     A,#80H,CH4     ;
                      AJMP     FUN4           ;

      CH4:            CJNE     A,#90H,CH5     ;
                      AJMP     ERROUT         ;
      CH5:            CJNE     A,#88H,CH6     ;
                      AJMP     ERROUT         ;
      CH6:            CJNE     A,#4H,CH7      ;
                      AJMP     ERROUT         ;
      CH7:            CJNE     A,#50H,CH8     ;
      CH8:            AJMP     ERROUT         ;
      ;********************************************************

      SUB0:           CLR      C              ;減法子程序
                      MOV      A,R3           ;被減數低位送A
                      SUBB     A,R5           ;低位減
                      JNC      X1_S1          ;沒進位,去處理高位減法
                      DEC      R2             ;有進位,被減數高位減1
      X1_S1:          CLR      C              ;清C
                      MOV      A,R2           ;被減數高位
                      SUBB     A,R4           ;減被減數高位
                      RET                     ;返回
      ;*********************************************************************
      ;*             遙控切換當前時間,開機時間,關機時間調整程序          *
      ;*********************************************************************                                    
      FUN1:           CLR     TR0             ;禁止T0計數
                      CLR     ET0             ;禁止T0中斷
                      INC     WORK_MODE       ;時間選擇寄存器加"1"
                      MOV     A,WORK_MODE
                      CJNE    A,#01H,ONHOUR   ;選擇寄存器為"1",轉開機調整標志
                      SETB    00H             ;置開始調整標志為"1"
                      SETB    01H             ;置當前時間標志為"1"
                      CLR     02H             ;清開機時間標志
                      CLR     03H             ;清關機時間標志
                      CLR     P3.0            ;LED1亮
                      SETB    P3.1            ;LED2滅
                      AJMP    EXIT            ;轉中斷退出     
      ONHOUR:         CJNE    A,#02H,OFFHOUR  ;選擇寄存器為"2",轉關機調整標志
                      CLR     01H             ;清當前時間標志
                      SETB    02H             ;置開機時間標志為"1"
                      CLR     03H             ;清關機時間標志
                      CLR     P3.1            ;LED2亮
                      SETB    P3.0            ;LED1滅
                      AJMP    EXIT            ;轉中斷退出
      OFFHOUR:        CJNE    A,#03H,EXIT     ;選擇寄存器為"3",不為3轉中斷退出
                      MOV     WORK_MODE,#0    ;時間選擇寄存器清0
                      CLR     01H             ;清當前時間標志
                      CLR     02H             ;清開機時間標志
                      SETB    03H             ;置關機時間標志為"1"
                      CLR     P3.0            ;LED1亮
                      CLR     P3.1            ;LED2亮
      ;*******************************************************************               
      EXIT:           LJMP    ERROUT          ;轉中斷退出
      ;*******************************************************************
      ; *                         遙控調時程序                           *
      ;*******************************************************************
      FUN2:           JNB     00H,EXIT        ;(00H)等于0,轉中斷退出
                                              ;(00H)等于1,轉判(01)
                      JNB     01H,ONHOURADJ   ;(01H)等于0,轉開機 "時" 調整;
                                              ;(01H)等于1,當前   "時" 調整
                      MOV     R0,C_HOUR
                      MOV     A,#01H
                      ADD     A,R0
                      DA      A
                      MOV     C_HOUR,A        ;當前時間"時"加1
                      CJNE    A,#24H,EXIT     ;超過24嗎(超過清0),不為0中斷退出
                      MOV     C_HOUR,#0
                      AJMP    EXIT            ;轉中斷退出

      ONHOURADJ:      JNB     02H,OFFHOURADJ  ;(02H)等于0,轉關機 "時" 調整;
                                              ;(02H)等于1,開機   "時" 調整
                      MOV     R0,ON_HOUR
                      MOV     A,#01H
                      ADD     A,R0
                      DA      A
                      MOV     ON_HOUR,A       ;開機時間"時"加1
                      CJNE    A,#24H,EXIT     ;超過24嗎(超過清0),不為0中斷退出
                      MOV     ON_HOUR,#0
                      AJMP    EXIT            ;轉中斷退出

      OFFHOURADJ:     JNB     03H,EXIT        ;(03H)等于0,轉中斷退出
                                              ;(03H)等于1,關機 "時" 調整
                      MOV     R0,OFF_HOUR
                      MOV     A,#01H
                      ADD     A,R0
                      DA      A
                      MOV     OFF_HOUR,A      ;關機時間"時"加1
                      CJNE    A,#24H,EXIT     ;超過24嗎(超過清0),不為0中斷退出
                      MOV     OFF_HOUR,#0
                      AJMP    EXIT            ;轉中斷退出      

      ;*******************************************************************
      ; *                         遙控調分程序                           *
      ;*******************************************************************
      FUN3:           JNB     00H,EXIT        ;(00H)等于0,轉中斷退出
                                              ;(00H)等于1,轉判(01)
                      JNB     01H,ONMINUTEADJ ;(01H)等于0,轉開機 "分" 調整;
                                              ;(01H)等于1,當前   "分" 調整
                      MOV     R0,C_MINUTE
                      MOV     A,#01H
                      ADD     A,R0
                      DA      A
                      MOV     C_MINUTE,A      ;當前時間"分"加1
                      CJNE    A,#60H,EXIT     ;超過60嗎(超過清0),不為0中斷退出
                      MOV     C_MINUTE,#0
                      AJMP    EXIT            ;轉中斷退出
      ONMINUTEADJ:    JNB     02H,OFFMINUTEADJ;(02H)等于0,轉關機 "分" 調整;
                                              ;(02H)等于1,開機   "分" 調整
                      MOV     R0,ON_MINUTE
                      MOV     A,#01H
                      ADD     A,R0
                      DA      A
                      MOV     ON_MINUTE,A     ;開機時間"分"加1
                      CJNE    A,#60H,EXIT     ;超過60嗎(超過清0),不為0中斷退出
                      MOV     ON_MINUTE,#0
                      AJMP    EXIT            ;轉中斷退出
      OFFMINUTEADJ:   JNB     03H,EXIT        ;(03H)等于0,轉中斷退出
                                              ;(03H)等于1,關機 "分" 調整   
                      MOV     R0,OFF_MINUTE
                      MOV     A,#01H
                      ADD     A,R0
                      DA      A
                      MOV     OFF_MINUTE,A    ;關機時間"分"加1
                      CJNE    A,#60H,EXIT     ;超過60嗎(超過清0),不為0中斷退出
                      MOV     OFF_MINUTE,#0
                      AJMP    EXIT            ;轉中斷退出

      ;*******************************************************************
      ; *                         遙控啟動程序                           *
      ;*******************************************************************
      FUN4:           SETB    EX0             ;開INT0中斷
                      SETB    TR0             ;允許T0計數 
                      SETB    ET0             ;允許T0中斷
                      SETB    P3.7            ;置P3.7口為"1"
                      CLR     00H             ;清開始調整標志
                      SETB    01H             ;置當前時間標志為"1"
                      CLR     02H             ;清開機時間標志
                      CLR     03H             ;清關機時間標志
                      MOV     C_SECOND,#00H   ;秒清0
                      MOV     WORK_MODE,#00H  ;時間選擇寄存器清0
                      LJMP    EXIT            ;轉中斷退出
      ;*******************************************************************
      DELAY:          MOV     R0,#0FFH
      DELAY1:         DJNZ    R0,DELAY1
                      RET                     ;返回
                      END                     ;程序結束

      Tags:單片機,遙控電子鐘,設計,程序  
      責任編輯:admin
    4. 上一篇文章:
    5. 下一篇文章:
    6. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 在线综合亚洲欧洲综合网站| 精品综合久久久久久97超人| 亚洲 欧洲 日韩 综合在线| 色综合久久无码中文字幕| 欧美日韩色另类综合| 在线亚洲97se亚洲综合在线| 久久国产精品亚洲综合| 综合久久久久久久综合网| 国产综合色在线精品| 亚洲日韩久久综合中文字幕| 激情综合色综合啪啪开心| 久久综合偷偷噜噜噜色| 五月天激情综合网| 激情97综合亚洲色婷婷五| 亚洲精品综合久久| 色婷婷99综合久久久精品| 亚洲国产精品成人综合久久久 | 狠狠色综合TV久久久久久| 久久久综合九色合综国产精品| 热综合一本伊人久久精品| 色综合色综合色综合色综合网| 国产成人综合精品| 综合久久久久久久综合网| 在线精品国产成人综合| 婷婷色中文字幕综合在线| 69国产成人综合久久精品91| 亚洲国产亚洲综合在线尤物| 久久精品水蜜桃av综合天堂| 亚洲欧洲综合在线| 2020久久精品亚洲热综合一本| 色噜噜狠狠成人中文综合| 色综合久久综精品| 国产成人综合久久精品红| 国产成人+综合亚洲+天堂| 欧洲亚洲综合一区二区三区| 久久久综合香蕉尹人综合网| 久久综合狠狠综合久久综合88 | 亚洲人成在久久综合网站| 香蕉尹人综合在线观看| 麻豆精品一区二区综合av| 国产AV综合影院|