⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 sdfs就很高很高很高很高很高高交会馆
💻
📖 第 1 页 / 共 3 页
字号:
     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                ;送显时高位

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -