標題:
請問我這段單片機開關(guān)控制繼電器代碼有什么問題?
[打印本頁]
作者:
dengtianyun1997
時間:
2018-6-19 17:26
標題:
請問我這段單片機開關(guān)控制繼電器代碼有什么問題?
P1.4接繼電器的控制口,控制繼電器的開關(guān)
P0.0接開關(guān)K1
按下開關(guān)后定時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) //定時器初始化函數(shù)
{
TMOD = 0x10;//定時2.5ms
TH1 = 0xFC;
TL1 = 0x18;
TR1 = 0; //關(guān)定時器1定時器開關(guān)
}
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定時器開關(guān)
m=1;
}
while(!k1);
}
}
else
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
rely=1;
m=0;
}
while(!k1);
}
}
}
void process() //使用軟件查詢方式 定時計數(shù)器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(); // 有問題 沒有執(zhí)行定時器初始化函數(shù)
while(1)
{
keyscan();
process();
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1