这个电路不正确。这是个射极输出电路,单片机的输出0-5V,所心继电器上的电压大约是11-6V。
应改成集电极输出。+12V接E,继电器一端接C另一端接地,在基极上再串一个7V的稳压二极管(最好的基极与+12V间加一个发射结电阻)。
断开基极电阻,接通电源12V,测量8550的E、C之间电压应为为12v,否则制继电器线圈接触不良或断线。检查1N4007是否装反向,防止导通时电流旁路。
用1-5K电阻连接电源正极和基极,若继电器吸合,则单片机输出电压不够,不吸合,是三极管损坏。补充:8550三极管属PNP型三极管,有箭头的发射极E接正极。
单片机这种集成电路芯片,采用超大规模集成电路技术把有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的微小完善的微型计算机系统。
扩展资料:
单片机故障的排除
1、单片机正常工作的三个条件
单片机工作的三个条件分别是电源、时钟晶振、复位。当单片机不能正常工作时,我们首先就要检查这三个条件,用电压表或者万用表检测他的电源和接地脚,检测两个引脚之间的电压是不是5V左右;对于时钟晶体振荡有没有正常工作,我们最好用示波器进行检测,看能否检测到相应频率的正弦波脉冲。
复位检测比较简单,单片机的复位电平一般是高电平复位,单片机在接通电源的时候一般复位引脚上会出现5V左右的高电平,另外在按下复位按键时,复位引脚上也会出现高电平,用一般的电压表或者万用表都可以进行检测。
2、单片机内部是否正常工作的检测
单片机内部有没有正常工作,我们主要是通过写入程序的方式来进行检测和排查。这个检测需要有“烧入”代码的硬件和软件才行,检测的原理就是通过“烧入”代码的硬件和软件,将一段带有检测功能的正常代码“烧入”到单片机。
检查两个方面:第一就是能不能将目标代码正常写入单片机,不能正常写入单片机时,说明单片机已经损坏,需要更换同型号的单片机;第二就是目标代码可以正常写入单片机,写入后的效果是不是就是程序设定的功能,如果是说明单片机正常。
单片机在更换时,我们最好采用同型号的单片机,然后写入公司给予的目标代码,单片机的价格目前一般比较便宜,零售价格大概5元左右。
参考资料来源:百度百科--单片机
参考资料来源:百度百科--PNP型三极管
参考资料来源:百度百科--继电器线圈
1
你这里的1和0
不是表示真假的1和0,那就不是BOOL量了,就是一个字符,ASCii码就是0x30h和0x31。
2。串口设置成8位数据,就是2位16进制数比如你发字符"1",那就是0x31(字符和ASCii码对应关系可以百度)。
3。串口通信的通信协议可以任意定,为了上位机处理方便建议采用ASCii码。就是你将讲的1和0
,你把它们当作字符来看,那就发送0x31或0x30,单片机收到数据后判断一下是0x31还是0x30,来执行相应的 *** 作!
这是数字时钟的C程序,如果要实现对继电器的开关控制,就可以在主程序中加入对时间的控制。也就是说,在你定义的某个时间上,继电器会实现开或者合的状态!由于单片机对数码管的控制引脚有别,程序还得自己加以修改。
#include<reg52h>
//#include<absacch>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xd8,
0x80,0x90};//数字显示
sbit duan=P2^1;//段选定义
sbit wei=P2^2;//位选定义
sbit k1=P3^2;//选择 秒/分/时 调试定义
sbit k2=P3^3;//增减调试定义
/定义初始化变量/
uchar miao=0;
uchar fen=0;
uchar shi=0;
uchar mst=0;//标准化时间
uchar key=0;
void display();//显示子程序
void delay(uchar z);
void time_pro();
void keyscan();
main()
{
mst=0;
miao=0;
TMOD=0x01;//time0为定时器,选择方式1
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
wei=1;
P0=0x3f;
wei=0;
duan=1;
P0=table[0];
duan=0;
P1=0x55;//点亮流水灯
while(1)
{
display();
time_pro();
if(k1==0) keyscan();
//继电器开合控制加在此处:时间可以根据自己的需求任意定义
//例如:if(shi==17&&fen==21&&miao==52)
{
jidianqi=0;//0就表示继电器关闭
}
if(shi==23&&fen==57&&miao==34)
{
jidianqi=1;//1就表示继电器开启
}
}
}
/显示子程序/
void display()
{
wei=1;
P0=0x01;
wei=0;
P0=0xff;//清屏
duan=1;
P0=table[miao%10];//显示秒钟的个位
duan=0;
delay(1);
wei=1;
P0=0x02;
wei=0;
P0=0xff;
duan=1;
P0=table[miao/10];//显示秒钟的十位
duan=0;
delay(1);
wei=1;
P0=0x04;
wei=0;
P0=0xff;
duan=1;
P0=table[fen%10];//显示分钟的个位
duan=0;
delay(1);
wei=1;
P0=0x08;
wei=0;
P0=0xff;
duan=1;
P0=table[fen/10];//显示分钟的十位
duan=0;
delay(1);
wei=1;
P0=0x10;
wei=0;
P0=0xff;
duan=1;
P0=table[shi%10];//显示小时的个位
duan=0;
delay(1);
wei=1;
P0=0x20;
wei=0;
P0=0xff;
duan=1;
P0=table[shi/10];//显示小时的十位
duan=0;
delay(1);
}
/延时子程序/
void delay(uchar z)
{
uchar x,y;
for(x=0;x<=z;x++)
for(y=0;y<=107;y++);
}
/时间处理子程序/
void time_pro()
{
if(miao>=60)
{ miao=0;
fen++;
if(fen>=60)
{
fen=0;
shi++;
if(shi>=24)
shi=0;
}
}
}
/键盘扫描子程序/
void keyscan()
{
//第一次检测 k1 按键
while(!key)
{
display();P1=~P1;
while(k1==0)
{
delay(1);
if(k1==0)
key=0;
key=1;
}
}
key=0;
//第一次检测 k2 按键
while(!key)
{
display();P1=~P1;
while(k2==0)
{
delay(220);
if(k2==0)
{ key=0;
miao++;
if(miao>=60) miao=0;
display();
delay(220);
}
key=1;
}
}
key=0;
//第二次检测 k1 按键
while(!key)
{
display();P1=0x55;
while(k1==0)
{
delay(220);
if(k1==0)
{
key=0;
display();
P1=~P1;
}
key=1;
}
}
key=0;
//第二次检测 k2 按键
while(!key)
{
display();P1=~P1;
while(k2==0)
{
delay(220);
if(k2==0)
{ key=0;
fen++;
if(fen>=60) fen=0;
display();
delay(220);
}
key=1;
}
}
key=0;
//第三次检测 k1 按键
while(!key)
{
display();P1=~0x55;
while(k1==0)
{
delay(220);
if(k1==0)
{
key=0;
P1=~P1;
display();
}
key=1;
}
}
key=0;
//第三次检测 k2 按键
while(!key)
{
display();P1=~P1;
while(k2==0)
{
delay(220);
if(k2==0)
{ key=0;
shi++;
if(shi>=24) shi=0;
display();
delay(220);
}
key=1;
}
}
}
/中断延时子程序/
void time() interrupt 1 //定时器0方式1,50ms中断一次
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
mst++;
if(mst==20)
{
mst=0;//记数机器清零
P1=~P1;
miao++;
time_pro();
}
}
①继电器属于电平控制类型的输出设备,单片机可以通过 IO 电平输出去控制继电器。但继电器的工作电流(线圈端)相对单片机来讲,比较大,多数都超出单片机限制电流总和,所以一般都需要通过驱动电路去控制继电器(如使用:NPN三极管、达林顿管(ULN2003)等)。
②多数继电器的电压都高于单片机的电压,单片机的输出无法与 继电器的 电平逻辑匹配,这也需要驱动电路进行转换(如上述例子)
③继电器还有不同种类,如交流/直流继电器、固态继电器等,上面的描述,都是针对常用 的 直流继电器说明的。
以上就是关于单片机通过PNP三极管8550控制继电器线圈全部的内容,包括:单片机通过PNP三极管8550控制继电器线圈、单片机通过串口写命令控制继电器、求STC89c52单片机用倒计时控制继电器开、合的C语言程序,晶振12.000等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)