1. 求51单片机控制继电器程序
程序就免了,给你几个建议。
你最好把按键的程序和逻辑控制分开写,这样比较清晰,按键驱动的结果就是消抖以后的按键状态,处理完清除,最好用固定时钟驱动少用延时,按键驱动看着容易做好了还是不容易的。
逻辑控制无非就是if else。。。用全局量记录之前的状态,最好有个简单明了的逻辑状态图否则很容易乱套,然后操作继电器就是两个io口就是了。
你用的这个和89c都是stc比较老的型号了,建议你到官网看看,很多新型号跑得更快,程序上能不能通用注意两点,死等延时的时间和硬件上的区别。
stc很多型号都用3.0和3.1口下载程序,所以按键会有影响,建议换个io口
继电器的常开和常闭是接线决定的,按键常开和常闭可以用上下拉电阻来控制,硬件上处理一下,主要是要保证系统刚上电之前的这段时间的状态是对的。
51和stm32是完全不同的cpu,如果要移植到stm32上初始化和寄存器操作是不一样的,c语言的层面上大概只有逻辑控制这块儿能用,而且stm32是3.3V硬件上也要处理。
这个做成并不难,做好就要花些心思,自己做才有意义解决问题就是学习的过程。
2. 单片机控制继电器代码
单片机,可以做到:60s、30s,交替输出高低电平。
继电器,需要由外接的驱动电路来进行控制。
3. 单片机怎么控制继电器
继电器有个电压线圈,只要那个线圈通电,继电器就会闭合,或者断开,从而控制大电压的触点断开或者闭合
4. 单片机89c51控制多个继电器程序
我来帮你做,你稍等。
差不多肯定你这里条件没说明白,因为全是断开没有吸合,先按字面意思来。
假设八个继电器由P1口驱动,高电平有效,及你所谓的打开,这是一个子程序,按键扫描你自己处理,当前键值为KEY,并将1-4键键值定义成KEY1、KEY2、KEY3、KEY4。
。。。。。。
MOV P1,#0C3H;这个加入你的主程序初始化中,1、4键控制的继电器吸合
。。。。。。
MOV A,KEY;这个加入你的主程序键盘处理部分,键值送入A然后调用下面子程序
LCALL ONOFF
。。。。。。
ONOFF:
CJNE A,KEY1,CKEY2;不是1号键转去判断2号键
ANL ,#C3H;2-3键控制的继电器断开
RET
CKEY2:
CJNE A,KEY2,CKEY3;不是2号键转去判断3号键
ANL ,#CCH;1-3键控制的继电器断开
RET
CKEY3:
CJNE A,KEY3,CKEY4;不是3号键转去判断4号键
ANL ,#0F0H;1-2键控制的继电器断开
RET
CKEY4:
CJNE A,KEY4,ERROR;不是4号键键值错误,退出
ANL ,#C0H;1-2-3键控制的继电器断开
ERROR:
RET
5. 如何用单片机控制继电器
不要用三极管放大,接上拉电阻即可。
做实验直接选用线圈电压为5V的继电器就可以。单片机输出引脚与继电器之间要接一个三极管,单片机I/O直接继电器电流不够。
单片机是一个弱电器件,一般情况下它们大都工作在5V甚至更低。驱动电流在mA级以下。而要把它用于一些大功率场合,比如控制电动机,显然是不行的。
在这里,继电器驱动含有两个意思:一是对继电器进行驱动,因为继电器本身对于单片机来说就是一个功率器件。
(5)单片机控制继电器程序扩展阅读:
现在,单片机的某一个需要控制这个继电器电路的输出引脚就是一只"手",当单片机的这个引脚输出低电平的时候,就像"手"在打开三极管"水龙头",水就从上往下流,继电器"水轮机"就开始转起来了。
反之,如果是输出高电平,"手"就开始关"水龙头",继电器"水轮机"因为没有水流下来,就会停止。
这就是三极管的开关作用。
简单的理解和记忆就是:三极管是一个开关器件,其实真的可以将它看成是一个开关,只不过它不是用手来控制,而是用电压(电流)来控制的,因此,三极管有些时候也被称做电子开关(与机械开关相区别)。
6. 单片机控制继电器,用keil如何编程
单片机控制继电器,就是用一个l/O脚输出高低电平来实现的,写程序就很简单。
先用sbit 定义Ⅰ/O引脚,程序就控制输高低电平就行了。举例,在主程序前面定义引脚,
sbit jdq=P1^1;//定义引脚,假设输出高电平,继电器吸合。
主程序控制方法
jdq=1;//吸合
jdq=0;//关闭
如果是输出低电平吸合,控制方法相反。
7. 单片机控制继电器
这个事专为你写的程序。在keil里编译通过。
ORG 00H
LJMP START
ORG 0BH
LJMP TIM
ORG 30H
START:
MOV IE,#10000010B
MOV TMOD,#00000010B
MOV TH0,#05H
SETB TR0
CLR 20H.0
MOV R0,#00H
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H
MOV R4,#00H
MOV SP,#2FH
LOOP:
JBC 20H.0,NEXT1
SJMP LOOP
NEXT1:
CJNE R3,#00H,NEXT2
INC R3
MOV R1,#00H
MOV R2,#00H
MOV R4,#00H
CLR 20H.2
JNB 20H.2,$
CLR 20H.2
MOV P0,#11111101B
AJMP LOOP
NEXT2:
CJNE R3,#01H,NEXT3
INC R3
MOV R1,#00H
MOV R2,#00H
MOV R4,#00H
CLR 20H.1
JNB 20H.1,$
MOV P0,#11111011B
AJMP LOOP
NEXT3:
CJNE R3,#02H,NEXT4
INC R3
MOV P0,#11110111B
AJMP LOOP
NEXT4:
CJNE R3,#03H,NEXT5
INC R3
AJMP LOOP
NEXT5:
CJNE R3,#04H,NEXT6
INC R3
AJMP LOOP
NEXT6:
CJNE R3,#05H,NEXT7
INC R3
AJMP LOOP
NEXT7:
CJNE R3,#06H,NEXT8
INC R3
AJMP LOOP
NEXT8:
CJNE R3,#07H,NEXT9
INC R3
MOV P0,#11101111B
AJMP LOOP
NEXT9:
CJNE R3,#08H,NEXT10
INC R3
AJMP LOOP
NEXT10:
CJNE R3,#09H,NEXT11
INC R3
MOV P0,#11011111B
AJMP LOOP
NEXT11:
CJNE R3,#0AH,NEXT12
INC R3
MOV P0,#11011111B
AJMP LOOP
NEXT12:
CJNE R3,#0BH,NEXT13
INC R3
MOV P0,#11011111B
AJMP LOOP
NEXT13:
CJNE R3,#0CH,NEXT14
INC R3
MOV P0,#11011111B
AJMP LOOP
NEXT14:
CJNE R3,#0DH,NEXT15
INC R3
MOV P0,#11011111B
AJMP LOOP
NEXT15:
CJNE R3,#0EH,NEXT16
INC R3
MOV P0,#10111111B
AJMP LOOP
NEXT16:
CJNE R3,#0EH,NEXT
INC R3
MOV P0,#10111111B
AJMP LOOP
NEXT:
MOV R3,#00H
AJMP NEXT1
TIM:
INC R0
CJNE R0,#40,OVER
MOV R0,#00H
INC R1
CJNE R1,#10,OVER
MOV R1,#00H
SETB 20H.0
INC R2
CJNE R2,#100,OVER
MOV R2,#00H
SETB 20H.1
INC R4
CJNE R4,#18,OVER
MOV R4,#00H
SETB 20H.2
OVER:
RETI
END
8. 单片机89c51控制继电器程序
很好做呀
#include<reg51.h>
sbit key=P1^0;
sbit jdq=P2^0;
main()
{
unsigned int times;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1)
{
if(key==0)
{
while(key==0);
jdq=0;
TR0=1;
times=0;
while(times>=2400)
{
while(TF0==0);
TF0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
}
jdq=1;
TR0=0;
}
}
}
9. 用单片机设计程序实现继电器开关控制
这个单片机实验看似简单,就算程序没问题,仿真的时候也失败的多,原因是继电器这个仿真模型挺深奥的,不想我们想的那样……如果出现了郁闷的情况,千万别说有BUG哈,好好研究一下,呵呵
实际做电路,出实物的时候应该问题不大吧