非常简单的一个例子, 就是用51单片机中STC89C52控制小车可以前进,后退,左拐,右拐,停止。
源程序如下:
# include "reg52.h"
# include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit L298N_IN1 = P1^0;
sbit L298N_IN2 = P1^1;
sbit L298N_IN3 = P1^2;
sbit L298N_IN4 = P1^3;
sbit beep = P1^5;
void delay1ms(uint c)
{
uint a, b;
for(;c>0;c--)
{
for(b=199;b>0;b--)
{
for(a=22;a>0;a--);
}
}
}
void baojing()
{
beep =1;
delay1ms(10);
}
void Go_ahead()
{
L298N_IN1 = 0;
L298N_IN2 = 1;
L298N_IN3 = 1;
L298N_IN4 = 0;
}
void Go_back()
{
L298N_IN1 = 1;
L298N_IN2 = 0;
L298N_IN3 = 0;
L298N_IN4 = 1;
}
void Go_left()
{
L298N_IN1 = 0;
L298N_IN2 = 1;
L298N_IN3 = 1;
L298N_IN4 = 1;
}
void Go_right()
{
L298N_IN1 = 1;
L298N_IN2 = 1;
L298N_IN3 = 1;
L298N_IN4 = 0;
}
void Stop()
{
L298N_IN1 = 0;
L298N_IN2 = 0;
L298N_IN3 = 0;
L298N_IN4 = 0;
}
void yidong()
{
int i;
for(i=0;i<5;i++)
{
switch(i)
{
case(1):
{
Go_ahead();
delay1ms(100);
break;
}
case(2):
{
Go_back();
delay1ms(100);
break;
}
case(3):
{
Go_left();
delay1ms(50);
break;
}
case(4):
{
Go_right();
delay1ms(50);
break;
}
}
}
}
void main (void)
{
while(1)
{
baojing();
delay1ms(50);
yidong();
Stop();
delay1ms(50);
baojing();
}
}
|