标题:
请问我这段单片机开关控制继电器代码有什么问题?
[打印本页]
作者:
dengtianyun1997
时间:
2018-6-19 17:26
标题:
请问我这段单片机开关控制继电器代码有什么问题?
P1.4接继电器的控制口,控制继电器的开关
P0.0接开关K1
按下开关后定时2秒后在给P1.4输入低电平,选通继电器。
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit rely=P1^4;
sbit k1=P0^0;
void InitTimer1(void)
{
TMOD = 0x10;//定时2.5ms
TH1 = 0xFC;
TL1 = 0x18;
TR1 = 0;
}
void delay(u16 i)
{
while(i--);
}
void keyscan()
{
u8 m=0;
if(m==0)
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
TR1=1;
m=1;
}
while(!k1);
}
}
else
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
rely=1;
m=0;
}
while(!k1);
}
}
}
void process()
{
u8 j=0;
if(TF1==1)
{
TF0=0;
TH0=0XFC;
TL0=0X18;//定时1ms
j++;
if(j==2000) //1s
{
j=0;
rely=0;
}
}
}
void main()
{
while(1)
{
keyscan();
process();
}
}
作者:
angmall
时间:
2018-6-19 23:21
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit rely=P1^4;
sbit k1=P0^0;
u8 m=0; //要用全局变量
//u8 j=0; //有问题 u8 是0-255
u16 j=0; //要用全局变量
void InitTimer1(void) //定时器初始化函数
{
TMOD = 0x10;//定时2.5ms
TH1 = 0xFC;
TL1 = 0x18;
TR1 = 0; //关定时器1定时器开关
}
void delay(u16 i)
{
while(i--);
}
void keyscan()
{
//u8 m=0; //有问题 要用全局变量
if(m==0)
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
TR1=1; //打开定时器1定时器开关
m=1;
}
while(!k1);
}
}
else
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
rely=1;
m=0;
}
while(!k1);
}
}
}
void process() //使用软件查询方式 定时计数器1
{
//u8 j=0; //有问题 要用全局变量
if(TF1==1) // 定时器1溢出标志位
{
TF0=0;
TH0=0XFC;
TL0=0X18;//定时1ms
j++;
if(j==2000) //1s
{
j=0;
rely=0;
}
}
}
void main()
{
InitTimer1(); // 有问题 没有执行定时器初始化函数
while(1)
{
keyscan();
process();
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1