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

📄 main.src

📁 一个家庭自动控制器
💻 SRC
📖 第 1 页 / 共 5 页
字号:
;*************************************************************************
;*
;* Company Name  :   AUTOMATIC MEG.LTD
;* Project Name  :   PID-913A
;* Version       :   PID-913A-01  
;* File Name     :   d\PID-913A\main.src
;* Date          :   2005.8.1
;* MCU           :   S3P9234*
;* Programed by  :   Tang DingBo
;* Checked by    :
;* Approved by   :
;*
;***********************************************************************

		.include "C:\OPENice\Include\Reg\S3c9234.reg"
                .include "D:\PID-913A\Head.src"	
                		               
;**************************************************************************
;*                        Interrupt Vector Table                          *
;*                                                             		  *
;*                          WATCH_INT IRQ                                 *
;**************************************************************************
		.org 0000h               
                .vector	0000h,WATCH_INT	   ;IRQ1
                .org  	0100h
;                jp   	t,start        ;100h, program start from here
;************************************************************************
;   System regiser initiate
;************************************************************************
start:		di
                ld          FLAGS,#00000000b
                ld          CLKCON,#00011000b       ; CPU Clock (System Clock)Selection:Fxx
                ld          sp,#10101111b           ; sp<--AFh  
                ld          WTCON,#11111010b        ;Watch Timer Control               
                ld          LCON,#00100001b
;   -- Port 0 setting --
                ld       P0CON,#11111111B    	; 
;   -- Port 2 setting --
                ld       P2CONL,#10101010B	;
                ld       P2INT,#01010111B       ;
                ld       P2,#00010000B          ;
;   -- Port 3 setting --
                ld       P3CONH,#10000000B 	;
                ld       P3PUR,#01111111B       ;
;   -- Port 4 setting --
                ld       P4CONH,#56H 	        ;
                ld       P4CONL,#55H            ;
;   -- Port 5 setting --
                ld       P5CONH,#11111111B 	;
                ld       P5CONL,#11111111B 	; 
;   -- Port 6 setting --
                ld       P6CON,#11111111B 	;               
;   -- Basic Timer  -- 
		ld	BTCON,#10100000B	;Watchdog Timer Function timer disable	Fxx/4096		
		EI
;-----------------------------------------------------------------
;     -------------初始化内存--------------
;-----------------------------------------------------------------
                  LD R0,#00H
INITRAM:          LD @R0,#00H
                  INC R0
                  CP R0,#0BEH
                  JP ULE,INITRAM  
                  LD WEEK,#01H                ;准确时钟存储                
                  LD AMPM,#01H  
                  LD WEEK_FLAG,#01H            ;时间调整暂存                 
                  LD AMPM_FLAG,#01H   
                  
                  LD R1,#01H         
                  LD R0,#0EH
OPQRST:           CP R1,#01H
                  JP NE,OPQRST258
                  INC R0
                  LD R1,#00H
                  JP OPQRST147
OPQRST258:        ADD R0,#03H
                  LD R1,#01H
OPQRST147:        LD @R0,#01H
                  CP R0,#04EH
                  JP ULT,OPQRST
                       
                  LD P_WEEK,#01H              ;关灯时间存储器                 
                  LD P_AMPM,#01H 
                  
                  LD R1ON_WEEK,#0BH

;***********************************************************************;
;	                      Main		         		;
;***********************************************************************; 
main: 	        LD P4,#11101111B     ;功能判断操作 
                CALL delay_500ms
                LD TIP,P4
                
                LD R1ON_TIME,#0CH
                TCM TIP,#00001000B
                JP Z,HOUR12_24
                LD R1ON_TIME,#18H                
HOUR12_24:      LD LCD_BUFFER+7,#01000010B
                
                CALL DISP_TIME
                CALL DISPLY_DAYS   ;星期 
                
BUTY3:          CALL SHAOMIAO
                CP KEY_FLAG,#ON_OFF
                JP EQ,BUTY2
                CALL JUDY
                JP BUTY3
                
BUTY2:          LD R1,#0B0H
CLERPINGJI:     LD @R1,#0FFH
                INC R1
                CP R1,#0B9H
                JP ULT,CLERPINGJI
                JP BUTY3
;*******************************************************************************; 
;                             interrupt service		        	        ;
;*******************************************************************************;
WATCH_INT:      PUSH FLAGS
                LD PUSH_POP,#0C0H
PUSH_POP_A:     PUSH @PUSH_POP
                INC PUSH_POP
                CP PUSH_POP,#0CFH
                JP ULE,PUSH_POP_A
                
                TM P2,#40H
                JP Z,MENGJIANGNV
                TM P2,#80H
                JP Z,MENGJIANGNV
                LD OSCCON,#00H
                
MENGJIANGNV:    TCM INTPND,#10H
                JP Z,EXTER_INT1
AC_IN:          TCM INTPND,#20H
                JP Z,EXTER_INT2
AC_IN1:         TCM INTPND,#40H
                JP Z,EXTER_INT3
AC_IN2:         TCM INTPND,#80H
                JP Z,EXTER_INT3
                JP CLOCK_INT
                           ;*********中断处理****
EXTER_INT1:     CP SHIFTE,#00H
                JP EQ,AC_IN
                CALL OPENLIGAT
                JP AC_IN
EXTER_INT2:     CP SHIFTE,#00H
                JP EQ,AC_IN1
                CALL OPENLIGAT
                JP AC_IN1
                
EXTER_INT3:     CALL QINGPING
                LD OSCCON,#00001001B
                LD LCD_BUFFER+2,#00011100B
                LD LCD_BUFFER+3,#11111100B
                LD SHIFTE,#00H
                AND P2,#11110110B              ;    关灯
                LD PRO_SHIFTE,#00H

                                  
CLOCK_INT:      CP WTCON,#11111011b
                JP NE,IRETI
                INC MOMENT_STAK
                CP MOMENT_STAK,#0F0H
                JP NE,IRETI
                LD MOMENT_STAK,#00H
                CP COUNT_MIMITE,#00H
                JP EQ,BIYIBI
                DEC COUNT_MIMITE
                JP STELLE
BIYIBI:         CP COUNT_TIME,#00H
                JP EQ,STELLE
                DEC COUNT_TIME
                LD COUNT_MIMITE,#3BH
STELLE:         INC MINITE
                CP MINITE,#3CH
                JP NE,IRETI
                LD MINITE,#00H

                LD MOMENT_STAK,#07H         ;1小时的秒钟调整 

                INC TIME
                TCM TIP,#00001000B
                JP Z,HOUR12
                CP TIME,#18H
                JP EQ,DAJIBA
                JP IRETI 
HOUR12:         CP TIME,#0CH
                JP ULT,IRETI
                
                JP EQ,DAJIBA1
                LD TIME,#01H
                JP IRETI
                
DAJIBA1:        COM AMPM
                CP AMPM,#01H
                JP NE,IRETI

DAJIBA:         LD TIME,#00H
                INC WEEK
                CP WEEK,#08
                JP ULT,IRETI
                LD WEEK,#01H

IRETI:          LD INTPND,#00H
                LD WTCON,#11111010b
                
                INC MIDLL_VORT
                                
                LD PUSH_POP,#0CFH
PUSH_POP_B:     POP @PUSH_POP
                DEC PUSH_POP
                CP PUSH_POP,#0C0H
                JP UGE,PUSH_POP_B

                POP FLAGS
                IRET  
;;----------------------------------------
OPENLIGAT:      CALL delay_2ms
                OR P2,#01H
                CALL delay_2ms
                AND P2,#0FEH
                RET
;---------------------------------------------------------------------------
;     -----------------3功能键按键操作与显示函数--------------
;---------------------------------------------------------------------------                
JUDY:           CP KEY_FLAG,#MODE
                JP EQ,MODE_JUDY
                CP KEY_FLAG,#COUNT
                JP EQ,COUNT_SET_F
                CP KEY_FLAG,#RAND
                JP EQ,RAND_SET_F
                RET
                
MODE_JUDY:      LD COUNT_TIME,#00H
                LD COUNT_MIMITE,#00H
                CALL INITJUDY
                ld sp,#10101111b           ; sp<--AFh 
                CALL MODE_SET
                RET
                
COUNT_SET_F:    CALL INITJUDY
                ld sp,#10101111b           ; sp<--AFh 
                CALL COUNT_SET
                RET
                
RAND_SET_F:     LD COUNT_TIME,#00H
                LD COUNT_MIMITE,#00H
                CALL INITJUDY
                ld sp,#10101111b           ; sp<--AFh 
                CALL RAND_SET
                RET

;---------------------------------
INITJUDY:       LD PRO_SHIFTE,#00H
                CP AUTO_RAND,#00H
                JP EQ,LLTT
                CALL MASSGE_KEEP      ;看是否从倒计时模式跳出的,来决定数据要不保存 
                LD AUTO_RAND,#00H
LLTT:           RET
;-----------------------------------------------------------------
;     --------模式判断与设置部分---------
;-----------------------------------------------------------------     
MODE_SET:       INC MODLE
                CP MODLE,#05H
                JP EQ,MODLE_FLOW
                CP MODLE,#01H
                JP EQ,CLOCK_SETING
                CP MODLE,#02H
                JP EQ,ON_OFF_SET_T
                CP MODLE,#03H
                JP EQ,PROGRAM_SET_T
                CP MODLE,#04H
                JP EQ,ATUO_SET_T
                RET   ;模式中有错,直截返回不执行
MODLE_FLOW:     LD MODLE,#01H
CLOCK_SETING:   LD LEED_FLAG,#00H
                CALL QINGPING
                LD LCD_BUFFER+7,#01000010B
                CALL CLOCK_SET
                RET 
ON_OFF_SET_T:   CALL ON_OFF_SET
                RET
PROGRAM_SET_T:  LD LEED_FLAG,#01H
                CALL PROGRAM_SET
                RET
ATUO_SET_T:     CALL ATUO_SET
                RET
;-----------------------------------------------------------------
;------------时钟设置模式(包括星期)-----------  
;-----------------------------------------------------------------     
              
CLOCK_SET:      LD AUTO_RAND,#01H       ;--------只要有时间设置就要保存 
                CALL DISP_TIME
CLOCK_BTEGAN6:  LD KEY_FLAG,#01111111B
                CALL delay_100ms
CLOCK_BTEGAN:   CALL DISPLY_DAYS   ;星期

                CP TIME_FLAG,#01H
                JP NE,SHAGWUGUAN
                CP TIME_FLAG1,#02H
                JP NE,SHAGWUGUAN
                AND LCD_BUFFER,#7FH

SHAGWUGUAN:     CP KEY_FLAG,#01111111B
                JP NE,JIANBI
                CALL SHAOMIAO 
;---------星期中键盘扫描--------                
JIANBI:         CP KEY_FLAG,#OK
                JP EQ,TMD
                CP KEY_FLAG,#UP
                JP EQ,WEEK_UPUP
                
                CP KEY_FLAG,#DOWN
                JP EQ,WEEK_DOWNDOWN
                CALL JUDY
                AND LCD_BUFFER,#80H      ;关星期显示
                CALL SHAOMIAO
                JP CLOCK_BTEGAN 

WEEK_UPUP:      CALL WEEK_UP
                JP CLOCK_BTEGAN6

WEEK_DOWNDOWN:  CALL WEEK_DOWN 
                JP CLOCK_BTEGAN6 

TMD:            LD KEY_FLAG,#01111111B
                CALL delay_100ms
CLOCK_TIME999:  CALL RADOMER999
                
                CP R15,#0AAH
                JP EQ,CLOCK_TIME
                CALL RANDGRAT02 
                JP RANDGRAT

CLOCK_TIME:     CALL uvwxyz
                OR LCD_BUFFER+7,#40H
                
RANDGRAT:       CP KEY_FLAG,#01111111B
                JP NE,JIANBI1
                CALL SHAOMIAO
;---------时钟(时针)键盘扫描--------                
JIANBI1:        CP KEY_FLAG,#OK
                JP EQ,TMD1
                CP KEY_FLAG,#UP
                JP EQ,TIME_UP_F

                CP KEY_FLAG,#DOWN
                JP EQ,TIME_DOWN_F

                CALL JUDY

⌨️ 快捷键说明

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