单片机通过PNP三极管8550控制继电器线圈

单片机通过PNP三极管8550控制继电器线圈,第1张

这个电路不正确。这是个射极输出电路,单片机的输出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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9357203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存