NND,怎么发不了图片啊?
先上程序吧:
;*******************************************************
; 排气扇自动控制器程序
;--------------------------------------------------------
; 快活丞 2011.03.16
;------------------------------------------------------
; 排风扇每隔10,20,30分钟开启一次,每次工作时间15分钟;
; Led1,Led2,Led3分别指示工作间隔时间10,20,30;开机默认是
; 20分钟间隔,按按键K1、K2、K3可以进行设定.
;----------------------------------------------------------
; 端口分配: P3.5--秒闪烁,表示正常工作;
; P3.3--控制输出口,同时与LED连接,作为接通指示
; P1.5--LED1,表示工作在模式1:停止10分钟
; P1.6--LED2,表示工作在模式2:停止15分钟
; P1.7--LED3,表示工作在模式3:停止20分钟
; P3.7--S1按键,按下时工作在模式1,LED1亮
; P1.1--S2按键,按下时工作在模式2,LED2亮
; P1.3--S3按键,按下时工作在模式3,LED3亮
;------------------------------------------------------------
; 使用内部晶振(5.8M左右),定时器初值TH=EDH,TL=2FH
;*******************************************************
;
TSBIN EQU 21H ;秒计数器
TMBIN EQU 22H ;分计数器
TT0 EQU 25H
KEY EQU 24H ;按键值
MD EQU 27H ;模式值
KK BIT 00H ;排风扇开关标志,主程序根据该标志对排风扇进行控制
;KK=1表示排风扇处于开启状态
LED1 BIT P1.5
LED2 BIT P1.6
LED3 BIT P1.7
S1 BIT P3.7
S2 BIT P1.1
S3 BIT P1.3
DD1 EQU 0AH ;模式1总时间
DD2 EQU 14H ;模式2总时间
DD3 EQU 1EH ;模式3总时间
MMD EQU 14H ;排风扇运行时间,这里设为20分钟
ORG 0000H
AJMP MAIN
ORG 000BH
SJMP I_T0
ORG 001BH
I_T1: AJMP MAIN1
RETI
;*********** T0中断服务 ***********
ORG 0030H
I_T0: PUSH ACC
PUSH PSW
MOV TH0,#0EDH ;0.01s时间,常数因子为0ED2FH
MOV TL0,#2FH
; AJMP MM4
MM: MOV A,TT0
CJNE A,#50,MM1
CPL P3.5 ;秒闪输出
MM1: MOV R3,TT0 ;计数100次,每次为10mS,总共为1S
DJNZ R3,I_T01 ;中断次数<100(每次中断0.01S),转出
MOV R3,#100 ;中断次数=100次,重新下一个计数
CPL P3.5 ;秒闪输出
INC TSBIN ;秒计数器加1
MOV A,TSBIN
CJNE A,#60,I_T01 ;秒计数器=60? Y,秒计数器清零
MOV TSBIN,#00H ;秒计数器清零
INC TMBIN ;分计数器加1
MM4: MOV A,R2 ;将排风扇运行剩余时间给累加器
JZ MM3
DJNZ R2,MM3
CLR KK
MM3:
MOV A,TMBIN
MM2: CJNE A,MD,I_T01 ;分计数器等于设定值,清零
MOV TMBIN,#0
SETB KK ;一个计时循环结束,再次置位开关标志
MOV R2,#MMD ;重置排风扇运行时间
I_T01: MOV TT0,R3
POP PSW
POP ACC
RETI
ORG 00F0H
MAIN:
MOV SP,#50H ;初始化堆栈指针
MOV TMOD,#01H ;T0工作于16位定时器
MOV TT0,#100
MOV TH0,#0EDH ;0.01s时间,常数因子为0ED2FH
MOV TL0,#2FH
MOV TSBIN,#0
MOV TMBIN,#0
SETB P3.5 ;设置秒闪输出(可不要)
CLR EX0
CLR ES
SETB ET0 ;开T0中断
SETB TR0 ;激活T0中断
SETB EA ;开总中断
CLR P3.3 ;打开排风扇
SETB KK ;开标志置位KK=1
MOV MD,#DD2+MMD ;设置默认模式为2.(这里MD=20+20=28H)
CLR LED2 ;开模式2标志灯LED2
MOV R2,#MMD ;R2存放排风扇打开的时间
MAIN1: ;主处理过程
;判断和设置排风扇状态,
JNB KK,YY1 ;标志为1
CLR P3.3 ;打开排风扇
SJMP YY2
YY1: JB KK,YY2 ;标志为0
SETB P3.3 ;关闭排风扇
YY2:
ACALL AnJian ;按键扫描与设置
SSS: SJMP MAIN1
;----------- 按键扫描与设置 ------------------
AnJian: SETB S1 ;按键S1检测
JB S1,VV1
ACALL DSPDEL
; ACALL DSPDEL
SETB S1 ;检测两次,防干扰
JB S1,VV1
SETB LED2 ;关闭模式2和3指示
SETB LED3 ;
CLR LED1 ;打开模式1指示
MOV MD,#DD1+MMD ;设定模式1计数值
AJMP VV3
VV1:
SETB S2 ;按键S2检测
JB S2,VV2
ACALL DSPDEL
; ACALL DSPDEL
SETB S2 ;检测两次,防干扰
JB S2,VV2
SETB LED1 ;关闭模式1和3指示
SETB LED3 ;
CLR LED2 ;打开模式2指示
MOV MD,#DD2+MMD ;设定模式2计数值
AJMP VV3
VV2:
SETB S3 ;按键S3检测
JB S3,OUT
ACALL DSPDEL
; ACALL DSPDEL
SETB S3 ;检测两次,防干扰
JB S3,OUT
SETB LED1 ;关闭模式1和2指示
SETB LED2 ;
CLR LED3 ;打开模式3指示
MOV MD,#DD3+MMD ;设定模式3计数值
; AJMP OUT
VV3:
MOV TSBIN,#0 ;计时器全部清零,重新计时
MOV TMBIN,#0
MOV R2,#MMD ;重置排风扇运行时间
SETB KK
OUT: RET
;********** 延时子程序 **************
DSPDEL: MOV R5,#0FFH
DDS: MOV R7,#0FFH ;延时程序
DJNZ R7,$
DJNZ R5,DDS
RET
END
|