开头总是很难说。
制作这个东西,又是因为自己懒才捣鼓的。我的猪窝里没有空调。冬天的时候铺个电褥子。但是,每天下午回家都要开电褥子,到了深夜再自己睁眼关掉它。非常的不爽。怎么办呢?难道一直这样下去吗?得想个办法!恩!定时器不错。制作一个定时器,可以设定一个开的时间和一个关的时间。到了时间就执行相应的动作。初期想用电工布线的接线盒来做外壳。然后在接线盒上安装一个插座就好了。但是,接线盒的内部空间很小。而我的电路板由于使用的是AT89S52单片机加之还有一个继电器,所以无法安装进去。事情就这么一直拖着。后来,在五金店发现一款插座。这种插座很厚。我看看觉得xx有空间容得下电路板。就买了一个,8块!不是很贵。到家后,{dy}件事就是改装插座。插座上有三个插口。两个多功能插口,一个16A插口。我想做的就是将16A的插口拿掉。然后剩下的空间用来安装电路。将插口拿掉,然后对照数码管的尺寸将16A的开孔用刀子修改。直到可以安装的下数码管。继电器找了一个小角落安装了。插座上原来有一个按键开关。在这里用不到了。我就把窟窿用一个蜂鸣器代替了。电源用的是手机的充电器,自己将稳压管换成12V的。这样,继电器就可以正常使用了。单片机的电源是用L1117稳压集成电路将12V的电源稳压到3.3V。这样,单片机控制板的电流会由原来5V时的30mA下降到现在的10mA。继电器用一个三极管驱动。单片机输出的是高电平有效的信号。
使用方法很简单:插上电后,定时插座会鸣叫一声。提示上电成功。然后显示预设的时间。这里我预设的是6点。这时,可以直接按小时加和分钟加的按键对时间进行调节。调节完毕时间后,可以按设置键对开的时间进行设置。按设置后,数码管会显示“ON”,表示现在设置的是开的时间。显示1秒后,转到时间调节的状态,这时显示的是开的时间,预设为00.00。按小时加和分钟加对开的时间进行调节。调节完毕后,按设置进入下一个要调节的量。再按一次后,这时会显示“OFF”。表示现在设置的是关的时间。同样显示1秒后转入时间调节的状态。操作方法同上。设置完毕后,按退出键退出设置。这时,蜂鸣器会鸣叫一声。表示退出设置状态。到了时间后,插座就会执行相应的动作。在正常显示时间的时候,按退出键会改变插座输出的状态。比如,按退出键之前,插座是没有电输出的。按下退出键后,插座就会输出电。但是,在定时时间到后,输出的状态决定于定时预设的功能。比如设置6点为开。到了6点后,插座就会输出电。这时,按退出键的话,插座会关断输出,然后1秒后再次的输出电。这是由程序决定的。因为检测时间到否的子程序是不停的在主程序中循环的。这样即使按下退出键改变了输出状态,然后,主程序调用了检测子程序后,就会再一次的输出应有的状态。 在{dy}次上电时,程序预设的各个时间是这样的:当前时间为6点整。定时开的时间和关的时间都为0点整。检测子程序中有一段程序是检测两个定时时间的。如果两个定时时间都没有设置,那么,在时间到了的时候,插座还是不会有输出状态的变化。但是,一旦将定时时间设置后,插座就会在时间到后自动的执行动作了。还有就是,如果想关闭定时的功能,只要将定时开的时间和定时关的时间调节一致就可以了。
![](http://hiphotos.baidu.com/%BF%A5%B3%DB%B7%C9%B3%B5%D7%E5/pic/item/fd5096d9fbec3f50d0164e81.jpg)
![](http://hiphotos.baidu.com/%BF%A5%B3%DB%B7%C9%B3%B5%D7%E5/pic/item/cf8244c6d8572e9f8226ac83.jpg)
![](http://hiphotos.baidu.com/%BF%A5%B3%DB%B7%C9%B3%B5%D7%E5/pic/item/3676817108c7de2a8701b08c.jpg)
![](http://hiphotos.baidu.com/%BF%A5%B3%DB%B7%C9%B3%B5%D7%E5/pic/item/4ae175b6cbf943458bd4b28d.jpg)
主程序中有多个子程序:显示子程序、代码变换子程序、延时子程序、加小时子程序、加分钟子程序、蜂鸣器驱动子程序、时间检测子程序、按键检测子程序。由于采用了多个子程序,程序可以教简单。而且,方便了以后的路数扩充。现在只是双路的,就是一个开、一个关。以后可以将程序中寄存器的数量增多后,实现多路的控制。每增加一路就多使用两个寄存器。一个是小时,一个是分钟。这样的话,AT89S52 单片机256字节的RAM空间除了主程序必要的软计数器、秒、分、时等寄存器。还剩下大约230个空间。这样,一路用两个。理论上可以有110路输出。但是单片机只有32个IO口。而且,显示和按键占据了大部分的接口。我们可以完整应用的只有两个IO口。这样,只有14路输出了(蜂鸣器占用一个口,小时和分钟之间的小点占用一个口)。这样的话,可以将程序修改为可以在24小时内单路多次控制的方式。
此定时器不仅可以应用于电褥子的控制,还可以用于其它需要时间控制的电器。如饮水机,白天的时候开,深夜的时候关。户外广告牌,晚上开白天关。路灯,晚上开白天关。普通电饭锅等等!节电而且减小了人的劳动强度。
以下就是完整程序,鉴于本人菜鸟级的脑袋,所以只可以编出菜鸟级的程序了。
SHI EQU 31H
FEN EQU 32H
MIAO EQU 33H
COU EQU 34H
SHIL EQU 35H
SHIH EQU 36H
FENL EQU 37H
FENH EQU 38H
SHI1 EQU 39H
SHI2 EQU 40H
FEN1 EQU 41H
FEN2 EQU 42H
CON EQU 43H
AAA EQU 44H
BBB EQU 45H
CCC EQU 46H
DDD EQU 47H
ORG 00H
AJMP START
ORG 0BH
AJMP TIME0
ORG 30H
START: LCALL CHUSHI
MOV DPTR,#TABLE
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV SHI,#6
MOV FEN,#0
MOV MIAO,#0
MOV SHI1,#0
MOV SHI2,#0
MOV FEN1,#0
MOV FEN2,#0
MOV COU,#0
MOV CON,#0
MOV AAA,#0
MOV BBB,#0
MOV CCC,#0
MOV DDD,#0
SETB EA
SETB ET0
SETB EX0
SETB EX1
SETB IT0
SETB IT1
SETB TR0
LCALL FENGMING
MAIN: MOV CON,#5
MOV A,P2
JNB P2.3,HUAN
LCALL ANJIAN
LCALL JIANCE
AJMP MAIN
TIME0: INC COU
MOV A,COU
CJNE A,#20,OUT
MOV COU,#0
CPL P1.5
INC MIAO
MOV A,MIAO
CJNE A,#60,OUT
MOV MIAO,#0
INC FEN
MOV A,FEN
CJNE A,#60,OUT
MOV FEN,#0
INC SHI
MOV A,SHI
CJNE A,#24,OUT
MOV SHI,#0
OUT: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
HUAN: CPL P1.0
LCALL FENGMING
MOV CON,#100
LCALL XIANSHI
AJMP MAIN
ANJIAN: MOV CON,#5
MOV A,P2
JNB P2.0,NEXT
JNB P2.1,SHIJ
JNB P2.2,FENJ
LCALL XIANSHI
RET
NEXT: MOV R0,#6
MOV CON,#50
MOV FENL,#10
MOV FENH,#0
MOV SHIL,#13
MOV SHIH,#13
LOOP3: LCALL DISPLAY
DJNZ R0,LOOP3
LOOP4: MOV R2,#6
LOOP1: MOV CON,#5
MOV A,P2
JNB P2.3,OVER
JNB P2.2,FEN1J
JNB P2.1,SHI1J
LCALL XIANSHI2
DJNZ R2,LOOP1
CLR A
MOV A,P2
JNB P2.0,NEXT2
AJMP LOOP4
NEXT2: MOV R0,#6
MOV CON,#50
MOV FENL,#11
MOV FENH,#11
MOV SHIL,#0
MOV SHIH,#13
LOOP5: LCALL DISPLAY
DJNZ R0,LOOP5
LOOP6: MOV R2,#6
LOOP2: MOV CON,#5
MOV A,P2
JNB P2.3,OVER
JNB P2.2,FEN2J
JNB P2.1,SHI2J
LCALL XIANSHI3
DJNZ R2,LOOP2
CLR A
MOV A,P2
JNB P2.0,NEXT
AJMP LOOP6
SHIJ: MOV CON,#50
MOV CCC,SHI
LCALL ADDSHI
MOV SHI,CCC
LCALL XIANSHI
RET
FENJ: MOV CON,#50
MOV CCC,FEN
LCALL ADDFEN
MOV FEN,CCC
LCALL XIANSHI
RET
OVER: LCALL FENGMING
MOV CON,#50
LCALL XIANSHI
RET
SHI1J: MOV CON,#50
MOV CCC,SHI1
LCALL ADDSHI
MOV SHI1,CCC
AJMP COND
FEN1J: MOV CON,#50
MOV CCC,FEN1
LCALL ADDFEN
MOV FEN1,CCC
COND: LCALL XIANSHI2
AJMP LOOP4
SHI2J: MOV CON,#50
MOV CCC,SHI2
LCALL ADDSHI
MOV SHI2,CCC
AJMP CUND
FEN2J: MOV CON,#50
MOV CCC,FEN2
LCALL ADDFEN
MOV FEN2,CCC
CUND: LCALL XIANSHI3
AJMP LOOP6
XIANSHI:LCALL CHUSHI
MOV AAA,SHI
MOV BBB,FEN
LCALL COVN
LCALL DISPLAY
RET
XIANSHI2:LCALL CHUSHI
MOV AAA,SHI1
MOV BBB,FEN1
LCALL COVN
LCALL DISPLAY
RET
XIANSHI3:LCALL CHUSHI
MOV AAA,SHI2
MOV BBB,FEN2
LCALL COVN
DISPLAY:MOV R1,CON
LOOP: MOV A,FENL
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0EFH
LCALL DELY1MS
MOV A,FENH
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0DFH
LCALL DELY1MS
MOV A,SHIL
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0BFH
LCALL DELY1MS
MOV A,SHIH
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#7FH
LCALL DELY1MS
DJNZ R1,LOOP
RET
COVN: MOV A,AAA
MOV B,#10
DIV AB
MOV SHIL,B
MOV SHIH,A
MOV A,BBB
MOV B,#10
DIV AB
MOV FENL,B
MOV FENH,A
RET
JIANCE: MOV A,SHI1
CJNE A,SHI2,XIA1
MOV A,FEN1
CJNE A,FEN2,XIA1
RET
XIA1: MOV A,FEN1
CJNE A,FEN,XIA
MOV A,SHI1
CJNE A,SHI,XIA
CLR P1.0
RET
XIA: MOV A,FEN2
CJNE A,FEN,CHU
MOV A,SHI2
CJNE A,SHI,CHU
SETB P1.0
CHU: RET
ADDSHI: INC CCC
MOV A,CCC
CJNE A,#24,WAN
MOV CCC,#0
RET
ADDFEN: INC CCC
MOV A,CCC
CJNE A,#60,WAN
MOV CCC,#0
WAN: RET
CHUSHI: MOV SHIL,#0
MOV SHIH,#0
MOV FENL,#0
MOV FENH,#0
RET
DELY1MS:MOV R7,#250
DL1: NOP
NOP
DJNZ R7,DL1
RET
FENGMING:CLR P3.0
MOV R3,#4
MOV CON,#8
LOOP7: LCALL XIANSHI
DJNZ R3,LOOP7
SETB P3.0
RET
TABLE: DB 28H,0EBH,32H,62H,0E1H,64H,24H,0EAH,20H,60H
DB 0A8H,0B4H,0F7H,0FFH
END