#include<reg52.h>
#include<intrins.h>
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;本设计为使电动车在跷跷板上按要求准确运行采用了单片机AT89C51最小系统作为电动车的检测和控制系统。通过红外发射接收一体探头检测路面黑色寻迹线,使小车按预定轨道行驶,根据角度传感器检测跷跷板的平衡状态控制电动车使其在跷跷板上达到动态平衡。再加上基于AT89C51单片机的键盘、液晶显示电路,构成了整个系统的硬件总电路。最后通过软件设计,实现了按预定轨道行驶、保持平衡等功能。
#define uint unsigned int
#define uchar unsigned char
uchar i=0,n=0;
uchar code seg[]={ //七段码表
0x3f,0x06,0x5b,0x4f,0x66, //0~4
0x6d,0x7d,0x07,0x7f,0x6f,0x3f}; //5~9
uchar b[6]={0,4,0,0,0,0};
uint sum;
void delay_10us(uchar n)
{do
{ _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}while(--n);
}
void delay_ms(uint n)
{do delay_10us(131);
while(--n);
}
void butt()
{
uchar but1,but2,but3;
but1=P1_0;
but2=P1_1;
but3=P1_2;
while(but1==0)
{
delay_ms(10);
but1=P1_0;
if(but1==0)
{but1=P1_0;
i++;
}
if(i==4) i=0;
while(but1==0){ but1=P1_0;}
n=0;
}
while(but2==0)
{
delay_ms(10);
but2=P1_1;
if(but2==0)
{but2=P1_1;
b[i]++;
}
if(b[i]==10) b[i]=0;
while(but2==0){ but2=P1_1;}
n=0;
}
while(but3==0)
{
delay_ms(10);
but3=P1_2;
if(but3==0)
{but3=P1_2;
b[i]--;
}
if(b[i]==-1) b[i]=9;
while(but3==0){ but3=P1_2;}
n=0;
}
sum=1000*b[3]+100*b[2]+10*b[1]+b[0];
if(n==0)
{TI=0;
SBUF=seg[b[0]];
while(TI==0);
TI=0;
SBUF=seg[b[1]];
while(TI==0);
TI=0;
SBUF=seg[b[2]];
while(TI==0);
TI=0;
SBUF=seg[b[3]];
while(TI==0);
n=1;
}
}