标题:
51单片机控制继电器通断多模式切换,求思路
[打印本页]
作者:
许许许
时间:
2020-2-25 17:01
标题:
51单片机控制继电器通断多模式切换,求思路
第一个模式设置单片机控制继电器通断时间50ms,确定执行,50ms后继电器断开。按键可以切换下一个模式通断时间为100ms,以此类推可以到1000ms。请问各位大神这程序要怎么弄啊感觉要很长。
作者:
wulin
时间:
2020-2-25 20:58
给你写一个50~1000ms递进延时继电器示例,按键与定时器互锁。继电器延时期间锁按键
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit key=P1^0;
sbit OUT=P1^7;
uchar num=0;//键值变量
uchar flag=0;//中断标志
/***********定时器初始化****************/
void Timer0Init() //50毫秒@12.000MHz
{
TMOD |= 0x01; //设置定时器模式
TH0 = 0x3C; //设置定时初值
TL0 = 0xB0; //设置定时初值
TF0 = 0; //清除TF0标志
// TR0 = 1; //定时器0开始计时
EA = 1; //开总中断
ET0 = 1; //开T0中断
}
/***********按键扫描程序****************/
void keyscan()
{
static uchar count=0; //消抖计数变量
static bit sign=0; //按键自锁标志
if(key==0) //检测键按下
{
if(++count>=100 && sign==0 && TR0==0)//消抖/自锁/与定时器互锁
{
sign=1;
num++;
if(num>20)
num=0;
if(num!=0)
{
TR0=1;//开定时器
OUT=0;//闭合继电器
}
}
}
else //松手
{
count=0; //消抖计数变量清0
sign=0; //按键自锁标志清0
}
}
/***********主函数****************/
void main()
{
Timer0Init();
while(1)
{
keyscan();
}
}
/***********中断服务程序****************/
void Timer0Interrupt() interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
flag++;
if(flag>=num)//50~1000ms递进
{
flag=0;
OUT=1;//断开继电器
TR0=0;//关定时器
}
}
复制代码
作者:
banalsheep
时间:
2020-2-25 21:03
100行以内吧?
作者:
jmkl128
时间:
2020-2-26 08:07
设置一个变量mode,存储于单片机内,作为默认的继电器通电时间,通过按钮改变mode的数值(50,60,70,,1000ms),
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1