时间继电器报告DOC.docx
《时间继电器报告DOC.docx》由会员分享,可在线阅读,更多相关《时间继电器报告DOC.docx(11页珍藏版)》请在冰豆网上搜索。
时间继电器报告DOC
常州工学院
科研实践设计报告
题目:
时间继电器
学生姓名:
班级学号:
所在学院:
电气学院
专业:
课程名称:
科研实践
指导老师:
王雁平职称:
副教授
2014年10月25日
1.设计目的---------------------------------------------------------3
2.设计要求---------------------------------------------------------4
3.电路构成---------------------------------------------------------5
4程序设计---------------------------------------------------------8
5.结果分析---------------------------------------------------------10
6.总结---------------------------------------------------------------10
7.附录---------------------------------------------------------------11
◆主元器件---------------------------------------------------11
◆原理图------------------------------------------------------15
◆布线图------------------------------------------------------16
◆程序---------------------------------------------------------17
◆实物图------------------------------------------------------20
设计目的:
设计时间继电器的目的是使的电动机或者其他一些装置在设定的时间断开,以达到保护电路,电机的作用。
或者说是达到其他目的。
例如微波炉,洗衣机等。
时间继电器(timerelay)是指当加入(或去掉)输入的动作信号后,其输出电路需经过规定的准确时间才产生跳跃式变化(或触头动作)的一种继电器。
是一种使用在较低的电压或较小电流的电路上,用来接通或切断较高电压、较大电流的电路的电气元件。
同时,时间继电器也是一种利用电磁原理或机械原理实现延时控制的控制电器。
它的种类很多,有空气阻尼型、电动型和电子型等。
设计要求:
用单片机实现时间继电器功能:
1时间设定:
通过按键设定延时接通或断开时间。
2设定时间范围:
001~099s
3按键功能;复位,继电器手动启停,状态选择(工作状态和设置状态),十位设置,个位设置。
4工作流程:
开机显示默认时间(010)进入延时倒计时显示倒计时过程时间到继电器吸合(断开)按设置键显示S00通过十位,个位按键设置时间按启停键显示倒计时过程时间到继电器吸合(断开)显示重复设置显示过程。
5有三个LED指示灯:
电源指示灯(通电常亮),定时指示灯(定时结束亮指示继电器吸合),设置指示灯(指示当前状态时定时时间设置)
6完成实验报告。
电路构成:
1继电器电路
如图,连接在P2口上,P2口当用于外部程序存储器或16位 地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内 部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
2复位电路
P0口给在复位电路上,当有信号通过时P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
3电源电路
提供电流给各个元件。
4晶振电路
连接在XTAL1,XTAL2上由反向振荡器给输入输出而形成脉冲。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
5键盘电路
连接在P0口上,当按键按下时进行相应的状态变化。
从而更改显示器的数字。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时, 被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
⑥显示电路
显示器连接在P1口,为输入口,当有按键按下形成上拉电阻时间跳动。
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口 管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流, 这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
程序设计:
主程序设计中包括各个按键的功能的设计,显示器显示时间的延迟设计,与灯亮灯灭的程序设计。
(详见附录三)
定义各个引脚所代表的按键或灯。
sbitW1=P2^5;
sbitW2=P2^6;
sbitW3=P2^7;
sbitJi=P2^3;
sbitZTD=P1^1;
sbitXiHeD=P1^0;
sbitK1=P1^2;
sbitK2=P1^3;
sbitK3=P1^4;
sbitK4=P1^5;
延迟程序如下:
voiddelay_ms(uintx)
{
uinti,j;
for(i=x;i>0;i--)
for(j=122;j>0;j--);
}
主程序就是各个按钮按下所形成的高低电平变化。
详见(附录三)
结果分析:
满足了设计要求,①在按下复位按钮时,红灯亮,显示器10s倒计时。
10s倒计时结束后,绿灯亮。
②按下设置按钮,复位电路中的设置灯亮。
③按下十位设置键,十位数字可增加。
④按下个位键,个位数字依次增加。
⑤按下启停按钮,这是显示器上按照设置的秒数进行倒数,并且复位电路中停止灯亮。
并可重复设置秒数倒数功能。
总结:
这次课程实践最重要的一点就是不断的修改自己的问题。
表示在一开始的课题理解,电路的设计等过程中,虽然遇到了很多的困难但是通过与同学们的讨论,请教,最终解决了困难,理解了设计原理,熟悉了电路设计软件。
最终可以完成电路设计图,以及布线图。
但是在实际操作的时候应为布线图并不是完全理想的状态,所以在布线的时候应为线路的问题所以进行了大量的后期修改。
浪费了大量的时间,精力,耗费了材料,结果板子做工还比较粗糙。
这使得我认识到,理论和实践始终还是存在一定距离的,所以要是确实的进行合理的操作的话需要理论与实际相互结合,一步一步踏踏实实的做出产品。
另外,一点个人比较满意的是本次电路焊接过程中,因为导线不够,所以为了积极的解决问题找到了外层刷有绝缘漆的导线。
这一点比较欣喜,此种类型的导线首先具有一般导线内部导电外部绝缘的特性,另外在焊接过程中,相比较于以往的胶皮导线,容易定型,方便弯折,便于操作。
不过缺点是,焊接比较困难,有时候不得不将绝缘漆刮开才能够进行正常的焊接。
不过总体上来说还是很好的一种电路材料,推荐老师考虑下以后使用此种材料进行科学实践!
附录:
主要元器件
1、STC89C52具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
2、STC89C52单片机基本引脚接线图
STC89C52单片机管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当
FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S51的一些特殊功能口,如下表一所示:
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
原理图
布线图
程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voiddelay_ms(intx);
sbitW1=P2^5;
sbitW2=P2^6;
sbitW3=P2^7;
sbitJi=P2^3;
sbitZTD=P1^1;
sbitXiHeD=P1^0;
sbitK1=P1^2;
sbitK2=P1^3;
sbitK3=P1^4;
sbitK4=P1^5;
main()
{uintx;
inti,j;
for(i=0;i<40;i++)
{
P0=DSY[0];W1=1;delay_ms(10);W1=0;
P0=DSY[1];W2=1;delay_ms(10);W2=0;
P0=DSY[0];W3=1;delay_ms(10);W3=0;
}
for(i=9;i>=0;i--)
{for(x=0;x<35;x++)
{P0=DSY[0];W1=1;delay_ms(10);W1=0;
P0=DSY[0];W2=1;delay_ms(10);W2=0;
P0=DSY[i];W3=1;delay_ms(10);W3=0;
}
if(i==0)
break;
}
Ji=0;
XiHeD=0;
i=0;
j=0;
delay_ms(4000);
while
(1)
{if(K2==0)
{delay_ms(10);
if(K2==0)
{while(!
K2);
delay_ms(10);
while(!
K2);
P1=DSY[5];W1=1;delay_ms(10);W1=0;
P1=DSY[0];W2=1;delay_ms(10);W2=0;
P1=DSY[0];W3=1;delay_ms(10);W3=0;
}
}
if(K3==0)
{delay_ms(10);
if(K3==0)
{while(!
K3);
delay_ms(10);
while(!
K3);
i++;}}
if(K4==0)
{delay_ms(10);
if(K4==0)
{while(!
K4);
delay_ms(10);
while(!
K4);
j++;}}
P0=DSY[5];W1=1;delay_ms(10);W1=0;
P0=DSY[i];W2=1;delay_ms(10);W2=0;
P0=DSY[j];W3=1;delay_ms(10);W3=0;
if(K1==0)
{delay_ms(10);
if(K1==0)
{while(!
K1);
delay_ms(10);
while(!
K1);
if(i!
=0||j!
=0)
{//if(j==0){i--;j=9;}
for(;i>=0;i--)
{
for(;j>=0;j--)
{for(x=0;x<35;x++)
{P0=DSY[0];W1=1;delay_ms(10);W1=0;
P0=DSY[i];W2=1;delay_ms(10);W2=0;
P0=DSY[j];W3=1;delay_ms(10);W3=0;
}
}j=9;
}i=0;j=0;
if(i==0&&j==0)
{Ji=~Ji;
XiHeD=~XiHeD;}
}
}
}
}}
voiddelay_ms(uintx)
{uinti,j;
for(i=x;i>0;i--)
for(j=122;j>0;j--);}