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

📄 153.dt

📁 153带4位数码显示
💻 DT
📖 第 1 页 / 共 2 页
字号:
INCLUDE "EM78P153.INC" 
INCLUDE "MACRO.DT"

ON_OFF_UP	EQU		7
CHOOSE_UP	EQU		6
MAYBE_POWER_DOWN	EQU		5
MAYBE_CHOOSE_DOWN	EQU		4
ON_OFF_DOWN	EQU	3
CHOOSE_DOWN	EQU	2
POWER EQU 6
CLOSE	EQU	7
;MOV_DATA	EQU	P6^2
/***************位定义**********************************************************************************************/
	/*扫描子程序标志位(位为1时有效)
		7				6				5				4				3				2	                 1			0
	键盘子程序	   第1位数码管		第2位数码管		第3位数码管		第4位数码管		LED显示(温度)		  继电器		温度超标时LED的闪烁位
	*/
	FLAG_CH		  	EQU		11H
	
	/*档位标志位
		7				6			5		4		3		  2	      1			0
	定时关机标志位	   关/开	  第5档	   第4档	第3档	第2档	第1档		温度
	*/
	FLAG_PW		  	EQU		12H
	;KEY_UP标志位
	FLAG_KEY	  	EQU		13H
	;按键被按下的计时数据16ms
	DELAY_5MS0		EQU		14H
	DELAY_5MS1		EQU		10H
	
	IOC6_BACKUP		EQU		15H
	IOCD_BACKUP		EQU		16H
	;定时关机标志位
	;第1位数码管数据存储器
	LED8_DATA1		EQU		18H
	;第2位数码管数据存储器
	LED8_DATA2		EQU		19H
	LED_CHANGE	EQU	1AH
	LED_CLEAR	EQU	1BH
	;第3位数码管数据存储器
	LED8_DATA3		EQU		20H
	;第4位数码管数据存储器与3相同
	KEY_DOWN_DATA	EQU     21H
	LED_DATA		EQU		22H
	LED_CH_DATA		EQU		23H
	LED8_BACKUP		EQU		24H
	TIMER_S			EQU		25H
	TIMER_MIN		EQU		26H	
	TIMER_2H		EQU		27H
	TIMER_4H		EQU		28H	
	RL_CONT			EQU		29H
	WEN_KONG_FLAG	EQU		2AH
	KEY_CHANGE		EQU		2BH
	DELAY_ON	EQU	2CH
	DELAY_OFF	EQU	2DH
	DELAY_FRIST	EQU	2EH
	FLAG_1S	EQU	2FH
	KEY_164	EQU	1CH
/*****************<PROGRAM STAR>***********************************************************************************/
	ORG 0X000
	JMP	INIT
	ORG	008H
	JMP	TCC_INT
/************中断服务子程序****************************************************************************************/
TCC_INT:	
	CLR	RF
	MOV	A,@0X82 	;重赋TCC初值(8ms)
	MOV	TCC,A
;1s计时时间判断
	DJZ	TIMER_S  ;1SDELAY   TIMER_S=125
	JMP	OUT_TCC
	LMD	TIMER_S,@250
	BS	FLAG_1S,1
;-----------------------------------------------	
COUNT_MIN:	
	DJZ	TIMER_MIN
	JMP	OUT_TCC
	LMD	TIMER_MIN,@60
;------------------------------------------------
;若工作在1--4档则2小时后关机,若工作在5档则4小时后关机
	JBC	FLAG_PW,5
	JMP	PW_T
	DJZ	TIMER_2H
	JMP	OUT_TCC
	BS	FLAG_PW,CLOSE
	JMP	OUT_TCC
PW_T:
	DJZ	TIMER_4H
	JMP	OUT_TCC
	BS	FLAG_PW,CLOSE	
OUT_TCC:	
 	RETI
/**************<INIT>**********************************************************************************************/
INIT:
	MOV	A,@00000000B
	IOW	IOCF
	MOV	A,@00000000B
	IOW	IOCE
	MOV	A,@00000000B
	IOW	IOC5
	MOV	A,@0XFF
	MOV	P5,A
	BS	P6,0
	BC	P6,7
	MOV	A,@01111000B
	IOW	IOC6
	BS	P6,0
	MOV A,@0x00
	CONTW
	DISI
;-------------------------------------------------------------------------
	mov	A,@0x10
	mov	RSR,A
CLR_LOOP:
	clr	r0
	inc	RSR
	jbc	RSR,5
	jbs	RSR,4
	jmp	CLR_LOOP
;------------------------------------------------------------------------------	
	MOV	A,@0X05   ;分频器给TCC,分频比为1:64
	CONTW
	MOV	A,@01H		 ;使能TCC中断 
	IOW	IOCF
	CLR	RF	 	    ;清除TCC溢出标志位 
	MOV	A,@0X82		;赋TCC初值(8ms)
	MOV	TCC,A		
	;程序开始时总是扫描键盘子程序
	BS	FLAG_CH	,7
	LMD	TIMER_S,@250
	LMD	TIMER_MIN,@60
	LMD	TIMER_2H,@120
	LMD	TIMER_4H,@240
	LMD	KEY_DOWN_DATA,@6
	LMD	LED_CH_DATA,@0x1f
	LMD	LED8_DATA1,@0X00	
	LMD	LED8_DATA2,@0X00
	LMD	LED8_DATA3,@0X00
	LMD	LED_DATA,@0X00
	LMD	DELAY_OFF,@5
/***************MAIN**********************************************************************************************/
/*通过判断标志位FLAG_CH来确定该执行的子程序*/
MAIN:             
	JBC	FLAG_PW,CLOSE
	JMP	INIT	
	JBC	FLAG_CH,7
	JMP	JDQ_OUT
	JBC	FLAG_CH,6
	JMP	LED8_1
	JBC	FLAG_CH,5
	JMP	LED8_2
	JBC	FLAG_CH,4
	JMP	LED8_3
	JBC	FLAG_CH,3
	JMP	LED8_4
	JBC	FLAG_CH,2
	JMP	KEY_SCAN
	JBC	FLAG_CH,1
	JMP	LED_CTRL
	JMP	MAIN
/**************************************************************************/
/*******************************************************************************/
;检查继电器输出
JDQ_OUT:
;	CALL	CLR_IC164  
	JBS	KEY_CHANGE,1
	JMP	JDQ_CTLR

	JBS	FLAG_PW,6  ;是否已经开机
	JMP	P_OFF
;1档不做延时5s输出外,其他各档延时5s后正常输出
	JMP	FRIST_POWER
P_OFF:  ;还没有开机
	BC	P6,7	
	JMP	OUT_POWER
	
FRIST_POWER:
	BC	P6,7
	JBC	FLAG_PW,1
	JMP	PW_11
	JMP	PW_5S
PW_11:
	BS	P6,7
	LMD	DELAY_ON,@25
	LMD	DELAY_OFF,@5
	CLR	KEY_CHANGE
	JMP	JDQ_CTLR
PW_5S:  ;延时5s后输出
	JBS	FLAG_1S,1
	JMP	OUT_POWER
	BC	FLAG_1S,1
	DJZ	DELAY_OFF
	JMP	OUT_POWER
	BS	P6,7
	CLR	KEY_CHANGE
	
	JBC	FLAG_PW,2
	JMP	PW_21
	JBC	FLAG_PW,3
	JMP	PW_31
	JBC	FLAG_PW,4
	JMP	PW_41
	JBC	FLAG_PW,5
	JMP	PW_51
PW_21:	
	LMD	DELAY_ON,@20
	LMD	DELAY_OFF,@5
	JMP	JDQ_CTLR
PW_31:
	LMD	DELAY_ON,@15
	LMD	DELAY_OFF,@15
	JMP	JDQ_CTLR
PW_41:
	LMD	DELAY_ON,@10
	LMD	DELAY_OFF,@15
	JMP	JDQ_CTLR
PW_51:
	LMD	DELAY_ON,@3
	LMD	DELAY_OFF,@15
	JMP	JDQ_CTLR	
;1S到则检查继电器输出
JDQ_CTLR:
	JBS	FLAG_1S,1
	JMP	OUT_POWER
	BC	FLAG_1S,1
	;温度检测 
	JBC	WEN_KONG_FLAG,1
	JMP	WEN_CTRL
		
	JBC	FLAG_PW,1
	JMP	PW_1
	JBC	FLAG_PW,2
	JMP	PW_3
	JBC	FLAG_PW,3
	JMP	PW_5
	JBC	FLAG_PW,4
	JMP	PW_5
	JBC	FLAG_PW,5
	JMP	PW_5
;-------------------------------------
WEN_CTRL:
	JBC	FLAG_PW,1
	JMP	PW_3
	JBC	FLAG_PW,2
	JMP	PW_4
	JBC	FLAG_PW,3
	JMP	PW_5
	JBC	FLAG_PW,4
	JMP	PW_5
	JMP	PW_5
;----------------------------------------------
PW_1:
	JBS	P6,7
	JMP	OFF_1
	DJZ	DELAY_ON
	JMP	OUT_POWER
	LMD	DELAY_ON,@25
	BC	P6,7
	JMP	OUT_POWER
OFF_1:
	DJZ	DELAY_OFF
	JMP	OUT_POWER
	LMD	DELAY_OFF,@5
	BS	P6,7
	JMP	OUT_POWER
;-------------------------------------------
PW_2:
	JBS	P6,7
	JMP	OFF_2
	DJZ	DELAY_ON
	JMP	OUT_POWER
	LMD	DELAY_ON,@20
	BC	P6,7
	JMP	OUT_POWER
OFF_2:
	DJZ	DELAY_OFF
	JMP	OUT_POWER
	LMD	DELAY_OFF,@5
	BS	P6,7
	JMP	OUT_POWER 
;-------------------------------------
PW_3:
	JBS	P6,7
	JMP	OFF_3
	DJZ	DELAY_ON
	JMP	OUT_POWER
	LMD	DELAY_ON,@15
	BC	P6,7
	JMP	OUT_POWER
OFF_3:
	DJZ	DELAY_OFF
	JMP	OUT_POWER
	LMD	DELAY_OFF,@15
	BS	P6,7
	JMP	OUT_POWER
;-----------------------------------
PW_4:
	JBS	P6,7
	JMP	OFF_4
	DJZ	DELAY_ON
	JMP	OUT_POWER
	LMD	DELAY_ON,@10
	BC	P6,7
	JMP	OUT_POWER
OFF_4:
	DJZ	DELAY_OFF
	JMP	OUT_POWER
	LMD	DELAY_OFF,@15
	BS	P6,7
	JMP	OUT_POWER
;---------------------------------
PW_5:
	JBS	P6,7
	JMP	OFF_5
	DJZ	DELAY_ON
	JMP	OUT_POWER
	LMD	DELAY_ON,@3
	BC	P6,7
	JMP	OUT_POWER
OFF_5:
	DJZ	DELAY_OFF
	JMP	OUT_POWER
	LMD	DELAY_OFF,@15
	BS	P6,7
	JMP	OUT_POWER
OUT_POWER:
	CLR	FLAG_CH
	BS	FLAG_CH,6
	JMP	MAIN
/***************************************************************************************/
KEY_SCAN:
;备份寄存器
	IOR IOCD
	MOV	IOCD_BACKUP,A
	IOR	IOC6
	MOV	IOC6_BACKUP,A
;开关按键扫描
	MOV	A,@00100000B
	IOW	IOC6
	MOV	A,@11011111B
	IOW	IOCD
	BC	P6,2
;判断按键是否已经松开,没有松开则不进行键盘扫描,为1则没有松开
	JBC	FLAG_KEY,ON_OFF_UP
	JMP	KEY_UP_ON_OFF
	JBC	FLAG_KEY,CHOOSE_UP
	JMP	KEY_UP_CHOOSE
;判断开关键是否被按下
	JBC	P6,5
	JMP	NO_POWER_KEY  

	DJZ	KEY_DOWN_DATA
	JMP	OUT_KEY
	LMD	KEY_DOWN_DATA,@6	
;开关键被按下
	BS	FLAG_KEY,ON_OFF_UP ;按键松开标志 
	JBC	FLAG_PW,POWER ;原来的工作状态
	JMP	CLAER_6		
	;还没有工作
	CLR	FLAG_PW
	BS	FLAG_PW,POWER
	BS	FLAG_PW,1
	BS	KEY_CHANGE,1
	LMD	DELAY_OFF,@5
	ENI
	JMP	POWER_ON
	;已经处在工作状态
CLAER_6:
	;CLR	FLAG_PW
	BC	FLAG_PW,POWER
	BS	KEY_CHANGE,1
	LMD	DELAY_OFF,@5
	JMP	POWER_OFF
;开关键没有被按下,判断是否已经开机,若没有开始则跳出键盘扫描,若已经开机则扫描选择按键是否被按下	
NO_POWER_KEY:
 	JBS	FLAG_PW,POWER
 	JMP	O_K
 	JMP	CHOOSE_KEY
O_K:
 	LMD	KEY_DOWN_DATA,@6
	JMP	OUT_KEY
;-------------------------------------------------------------------------
;判断选择按键有没有被按下	
CHOOSE_KEY: 
;将QD脚置0
/*	MOV	A,IOCD_BACKUP
	IOW IOCD
	MOV	A,@00000000B
	IOW	IOC6 
	MOV	A,@0XFF
	MOV	P5,A

	LMD	KEY_164,@00010000b
	MOV	A,@8
	MOV	RL_CONT,A
LP_KEY:
	JBS	KEY_164,0
	JMP	CLR_KEY
	JMP	SET_KEY
CLR_KEY:
	BC	P6,2
	JMP	GO_KEY
SET_KEY:
	BS	P6,2
GO_KEY:
	NOP
	BC	P6,1
	NOP
	nop
	nop
	nop
	nop
	BS	P6,1
	RRC	KEY_164
	DJZ	RL_CONT
	JMP	LP_KEY*/
	
	MOV	A,@11111111B
	IOW	IOC6
	MOV	A,@00000000B
	IOW	IOCD

	JBS	P6,2
	JMP	_KEY
	JMP	__KEY
_KEY:
	LMD	KEY_DOWN_DATA,@6
	JMP	OUT_KEY
__KEY:
	DJZ	KEY_DOWN_DATA
	JMP	OUT_KEY
	LMD	KEY_DOWN_DATA,@6

	BS	FLAG_KEY,CHOOSE_UP
CH_PW:
	JBS	FLAG_PW,1
	JMP	NEXT_P2
	CLR	FLAG_PW
	BS	FLAG_PW,POWER
	BS	FLAG_PW,2
	BS	KEY_CHANGE,1
	LMD	DELAY_OFF,@5
	JMP	POWER_2
NEXT_P2:
	JBS	FLAG_PW,2
	JMP	NEXT_P3
	CLR	FLAG_PW

⌨️ 快捷键说明

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