循迹小车程序问题
时间:10-02
整理:3721RD
点击:
我用stc89c52 单片机做循迹小车,传感器用的tcrt5000,三个传感器经过lm358运放接在P0的1,2,7口上,以下程序应该怎么改,电机驱动的I/O口接在P1的0,1,2,3口上
程序如下:
#include<reg52.h>#define uint unsigned int
#define uchar unsigned char
sbit MOTER_R_GO = P1^0;
sbit MOTER_R_BACK = P1^1;
sbit MOTER_L_GO = P1^2;
sbit MOTER_L_BACK = P1^3;
sbit LED2 = P2^6;
sbit LED1 = P2^7;
sbit LED4 = P2^5;
sbit LED3 = P2^4;
uint turn_flag=0;uint block_number=0;
/************函数声明**************/
void moter_conter(int x,int y);
/********************************/
/* 道路检测函数 */
/********************************/
void delayms(int xms){
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void Rode_scan(){
int a;
if(LED1==1) { a=1; }
if(LED2==1&LED3==0) { a=2; }
if(LED2==1&LED3==1) { a=3; }
if(LED3==1&LED2==0) { a=4; }
if(LED4==1) { a=5; }
if(LED1==1&LED2==1&LED3==1&LED4==1) { a=6; }
block_number=a;
}
void Rode_control(){
if(turn_flag==0)
{
if(block_number==1) { moter_conter(1,0); }
if(block_number==2) { moter_conter(2,0); }
if(block_number==3) { moter_conter(0,0); }
if(block_number==4) { moter_conter(0,2); }
if(block_number==5) { moter_conter(0,1); }
if(block_number==6) { moter_conter(0,1); turn_flag = 1; delayms(100); }
turn_flag = 0;
}
}
/*********************************/
/* 电机控制函数 */
/* x=0 L 前进 y=0 R 前进 */
/* x=1 L 后退 y=1 R 后退 */
/* x=2 L 停止 y=2 R 停止 */
/*********************************/
void moter_conter(int x,int y){
if(x==0)
{
MOTER_L_GO=1;
MOTER_L_BACK=0;
}
if(x==1)
{
MOTER_L_GO=0;
MOTER_L_BACK=1;
}
if(x==2)
{
MOTER_L_GO=0;
MOTER_L_BACK=0;
}
if(y==0)
{
MOTER_R_GO=1;
MOTER_R_BACK=0;
}
if(y==1)
{
MOTER_R_GO=0;
MOTER_R_BACK=1;
}
if(y==2)
{
MOTER_R_GO=0;
MOTER_R_BACK=0;
}
}
void main()
{
while(1)
{
Rode_scan();
Rode_control();
}
}
程序如下:
#include<reg52.h>#define uint unsigned int
#define uchar unsigned char
sbit MOTER_R_GO = P1^0;
sbit MOTER_R_BACK = P1^1;
sbit MOTER_L_GO = P1^2;
sbit MOTER_L_BACK = P1^3;
sbit LED2 = P2^6;
sbit LED1 = P2^7;
sbit LED4 = P2^5;
sbit LED3 = P2^4;
uint turn_flag=0;uint block_number=0;
/************函数声明**************/
void moter_conter(int x,int y);
/********************************/
/* 道路检测函数 */
/********************************/
void delayms(int xms){
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void Rode_scan(){
int a;
if(LED1==1) { a=1; }
if(LED2==1&LED3==0) { a=2; }
if(LED2==1&LED3==1) { a=3; }
if(LED3==1&LED2==0) { a=4; }
if(LED4==1) { a=5; }
if(LED1==1&LED2==1&LED3==1&LED4==1) { a=6; }
block_number=a;
}
void Rode_control(){
if(turn_flag==0)
{
if(block_number==1) { moter_conter(1,0); }
if(block_number==2) { moter_conter(2,0); }
if(block_number==3) { moter_conter(0,0); }
if(block_number==4) { moter_conter(0,2); }
if(block_number==5) { moter_conter(0,1); }
if(block_number==6) { moter_conter(0,1); turn_flag = 1; delayms(100); }
turn_flag = 0;
}
}
/*********************************/
/* 电机控制函数 */
/* x=0 L 前进 y=0 R 前进 */
/* x=1 L 后退 y=1 R 后退 */
/* x=2 L 停止 y=2 R 停止 */
/*********************************/
void moter_conter(int x,int y){
if(x==0)
{
MOTER_L_GO=1;
MOTER_L_BACK=0;
}
if(x==1)
{
MOTER_L_GO=0;
MOTER_L_BACK=1;
}
if(x==2)
{
MOTER_L_GO=0;
MOTER_L_BACK=0;
}
if(y==0)
{
MOTER_R_GO=1;
MOTER_R_BACK=0;
}
if(y==1)
{
MOTER_R_GO=0;
MOTER_R_BACK=1;
}
if(y==2)
{
MOTER_R_GO=0;
MOTER_R_BACK=0;
}
}
void main()
{
while(1)
{
Rode_scan();
Rode_control();
}
}
神马问题呀这段看不出来什吗呀
谢谢分享,看看