感谢大家的热情帮忙,对程序稍做修改,大家再帮忙看看
单片机控制继电器的电路省略
//晶振12MHZ
功能:
1.外中断INT1产生后,M1启动,延时3秒后,M2也启动
2.定时器T0,每50ms发送一次脉冲
3.按钮控制电机正反转
4.P2口通过驱动芯片连接到继电器(M1正转P2_0=1,M1反转P2_1=1,M2正转P2_2=1,M2反转P2_3=1,M3正转P2_4=1,M3反转P2_5=1,M4正转P2_6=1,M4反转P2_7=1)
P1.0、P1.1赋值0、1、2、3,程序启动后使SN74HC139N按次序依次循环输出低电平
P1.4,P1.5检测低电平
例如:我要实现待SN74HC139N的第4引脚变成低电平时,当按下T1,P1.4即可检测到并通过程序实现M1正转,若按下T2,P1.5即可检测到实现M1反转
程序如下:
#include
#define uchar unsigned char
#define uint unsigned int
uint count=0;
sbit ST= P0^4;
void delay(uint delaytime)
{
uint j=0;
for(;delaytime>0;delaytime--)
{for(j=0;j<125;j++)
{;}
}
}
void service_int1()interrupt 2 using 2
{
if(P3_3==0)
delay(50);
if(P3_3==0)
{P2_1=1;delay(30000);P2_3=1;}//外中断INT1产生后,M1启动,延时3秒后,M2也启动
}
void time0() interrupt 1//定时器T0,每50ms发送一次脉冲,清0看门狗LTC1232
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ST=0;
ST=1;
}
void main()
{
uint i;
TMOD=0X11;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
ET0=1;
TR0=1;
EA=1;
IP=0X04;
IE=0X84;
for(;;)
{
i=0;
for(i=0;i<4;i++)
{
P2=0X7F;//P2口通过驱动芯片连接到继电器
P1_1=i%2;
P1_0=(i/2)%2;
if(P1_4==0)
delay(50);
if(P1_4==0)
{
if(P0_0==0&P0_1==0){P2_0=1;}
else if(P0_0==0&P0_1==1){P2_2=1;}
else if(P0_1==0&P0_1==0){P2_4=1;}
else if(P0_1==0&P0_1==1){P2_6=1;}
break;
}
if(P1_5==0)
delay(50);
if(P1_5==0)
{
if(P0_0==0&P0_1==0){P2_1=1;}
else if(P0_0==0&P0_1==1){P2_3=1;}
else if(P0_1==0&P0_1==0){P2_5=1;}
else if(P0_1==0&P0_1==1){P2_7=1;}
break;
}
}
}
}
[ 本帖最后由 simonprince 于 2009-9-15 10:58 编辑 ]