标题:
单片机寻声小车源程序
[打印本页]
作者:
矿泉水小强
时间:
2018-4-13 21:05
标题:
单片机寻声小车源程序
单片机源程序如下:
#include<reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
int a=0;
sbit IN1=P1^0; //定义电机驱动信号输出端
sbit IN2=P1^1; //定义电机驱动信号输出端
sbit IN3=P1^2; //定义电机驱动信号输出端
sbit IN4=P1^3; //定义电机驱动信号输出端
sbit IN5=P1^4; //定义电机驱动信号输出端
sbit IN6=P1^5; //定义电机驱动信号输出端
sbit IN7=P1^6; //定义电机驱动信号输出端
sbit IN8=P1^7; //定义电机驱动信号输出端
sbit out1=P3^2;//定义寻声模块信号左输入端 //可有可无中断自动触发
sbit out2=P3^3;//定义寻声模块信号右输入端
char L_pwm,R_pwm,t;
void L_qian()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void R_qian()
{
IN5=1;
IN6=0;
IN7=1;
IN8=0;
}
void L_ting()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void R_ting()
{
IN5=0;
IN6=0;
IN7=0;
IN8=0;
}
void L_hou()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void R_hou()
{
IN5=0;
IN6=1;
IN7=0;
IN8=1;
}
void zuozhuan()interrupt 0
{
if(a==0)
{ L_pwm=0;R_pwm=40;a=1;}
else a=0;
}
void youzhuan()interrupt 2
{
if(a==0)
{ L_pwm=40;R_pwm=0;a=1;}
else a=0;
}
void timer0() interrupt 1
{ TH1 = 0x0FE;
TL1 = 0x33;
if(L_pwm>=0)if(t<L_pwm) L_qian(); //当L_pwm为0时根据我们的思维:电机不应该转。将0代入左边
else L_ting(); //L_pwm,发现不管t取0~39范围内何值时,都不会执行L_qian(),
else if(t<~L_pwm) L_hou(); //当L_pwm为0时根据我们的思维:电机不应该转。将0代入左边
else L_ting(); //L_pwm,发现不管t取0~39范围内何值时,都不会执行L_qian(),
if(R_pwm>=0)if(t<R_pwm) R_qian(); //当L_pwm为0时根据我们的思维:电机不应该转。将0代入左边
else R_ting(); //L_pwm,发现不管t取0~39范围内何值时,都不会执行L_qian(),
else if(t<~R_pwm) R_hou(); //当L_pwm为0时根据我们的思维:电机不应该转。将0代入左边
else R_ting(); //L_pwm,发现不管t取0~39范围内何值时,都不会执行L_qian(),
t++;
t%=40;//使每个pwm周期内t的取值都是0~39变化
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1