单片机
我编的一个程序
#include //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
unsigned char code Tab[7]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82}; //数码管显示0~6的段码表
uint n;
uint m;
uint c=1;
uint b=1;
sbit K1 = P3^2; //一楼
sbit K2 = P3^3; //二楼
sbit K3 = P3^4; //三楼
sbit K4 = P3^5; //一楼
sbit K5 = P1^4; //二楼
sbit K6 = P1^5; //三楼
sbit p1_0 = P1^0;
sbit p1_1 = P1^1;
sbit p1_2 = P1^2;
sbit p1_3 = P1^3;
sbit p2_0 = P2^0;
sbit p2_1 = P2^1;
sbit p2_2 = P2^2;
sbit p2_3 = P2^3;
/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时<1ms
/*
/********************************************************/
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k<80; k++)
{ }
}
}
/**********************************************************/
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void motor_ffw(n)
{
uchar i;
uchar k;
uchar r;
uint j;
for(k=0;k {
for (r=0;r<64;r++)
{
for (j=0; j<8; j++) //转1*n圈
{p1_0=1 ; p1_1=0 ; p1_2=0 ; p1_3=0;
delay(1);
p1_0=1 ; p1_1=1 ; p1_2=0 ; p1_3=0;
delay(1);
p1_0=0 ; p1_1=1 ; p1_2=0 ; p1_3=0;
delay(1);
p1_0=0 ; p1_1=1 ; p1_2=1 ; p1_3=0;
delay(1);
p1_0=0 ; p1_1=0 ; p1_2=1 ; p1_3=0;
delay(1);
p1_0=0 ; p1_1=0 ; p1_2=1 ; p1_3=1;
delay(1);
p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=1;
delay(1);
p1_0=1 ; p1_1=0 ; p1_2=0 ; p1_3=1;
delay(1); //调节转速
}
}
}
}
void motor_ffw2(n)
{
uchar i;
uchar k;
uchar r;
uint j;
for(k=0;k {
for (r=0;r<64;r++)
{
for (j=0; j<8; j++) //转1*n圈
{ p2_0=1 ; p2_1=0 ; p2_2=0 ; p2_3=0;
delay(1);
p2_0=1 ; p2_1=1 ; p2_2=0 ; p2_3=0;
delay(1);
p2_0=0 ; p2_1=1 ; p2_2=0 ; p2_3=0;
delay(1);
p2_0=0 ; p2_1=1 ; p2_2=1 ; p2_3=0;
delay(1);
p2_0=0 ; p2_1=0 ; p2_2=1 ; p2_3=0;
delay(1);
p2_0=0 ; p2_1=0 ; p2_2=1 ; p2_3=1;
delay(1);
p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=1;
delay(1);
p2_0=1 ; p2_1=0 ; p2_2=0 ; p2_3=1;
delay(1); //调节转速
}
}
}
}
/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void motor_rev(n)
{ uchar i;
uchar k;
uchar r;
uint j;
for(k=0;k {
for (r=0;r<64;r++)
{
for (j=0; j<8; j++) //转1*n圈
{ p1_0=1 ; p1_1=0 ; p1_2=0 ; p1_3=1;
delay(1);
p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=1;
delay(1);
p1_0=0 ; p1_1=0 ; p1_2=1 ; p1_3=1;
delay(1);
p1_0=0 ; p1_1=0 ; p1_2=1 ; p1_3=0;
delay(1);
p1_0=0 ; p1_1=1 ; p1_2=1 ; p1_3=0;
delay(1);
p1_0=0 ; p1_1=1 ; p1_2=0 ; p1_3=0;
delay(1);
p1_0=1 ; p1_1=1 ; p1_2=0 ; p1_3=0;
delay(1);
p1_0=1 ; p1_1=0 ; p1_2=0 ; p1_3=0;
delay(1); //调节转速
}
}
}
}
void motor_rev2(n)
{ uchar i;
uchar k;
uchar r;
uint j;
for(k=0;k {
for (r=0;r<64;r++)
{
for (j=0; j<8; j++) //转1*n圈
{ p2_0=1 ; p2_1=0 ; p2_2=0 ; p2_3=1;
delay(1);
p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=1;
delay(1);
p2_0=0 ; p2_1=0 ; p2_2=1 ; p2_3=1;
delay(1);
p2_0=0 ; p2_1=0 ; p2_2=1 ; p2_3=0;
delay(1);
p2_0=0 ; p2_1=1 ; p2_2=1 ; p2_3=0;
delay(1);
p2_0=0 ; p2_1=1 ; p2_2=0 ; p2_3=0;
delay(1);
p2_0=1 ; p2_1=1 ; p2_2=0 ; p2_3=0;
delay(1);
p2_0=1 ; p2_1=0 ; p2_2=0 ; p2_3=0;
delay(1); //调节转速
}
}
}
}
/********************************************************/
/*
/*检测程序
/*
/********************************************************/
void check()
{ if(n>c)
{motor_ffw(n-c);
p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=0;}
else if(n {motor_rev(c-n);
p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=0;}
else if(n==c)
{p1_0=0 ; p1_1=0 ; p1_2=0 ; p1_3=0;}
c=n;
}
void check2()
{ if(m>b)
{motor_ffw2(m-b);
p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=0;}
else if(m {motor_rev2(b-m);
p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=0;}
else if(m==b)
{p2_0=0 ; p2_1=0 ; p2_2=0 ; p2_3=0;}
b=m;
}
/********************************************************
*
* 主程序
*
*********************************************************/
main()
{
while(1)
{
if(K1==0)
{n=1;
check();}
if(K2==0)
{n=2;
check();}
if(K3==0)
{n=3;
check();}
if(K4==0)
{m=1;
check2();}
if(K5==0)
{m=2;
check2();}
else if(K6==0)
{m=3;
check2();}
}
}
电梯程序 只能等一部电梯运行之后才能 控制另一部电梯
有高手指导说 要用定时器 和中断
但是我补知道怎么改
请高手帮忙改下