我的车子单片机上电压高低电平输出都没问题,就是直接给驱动没问题可以跑,然而加上红外就不能跑了。不知道那儿出错。求大神帮忙呀!!!!!!
程序如下: 黑线输出高电平。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit chuan1=P2^0;
sbit chuan2=P2^1;
sbit chuan3=P2^2;//定义红外传感器
sbit LN1=P1^0;
sbit LN2=P1^1;
sbit LN3=P1^2;
sbit LN4=P1^3; //定义驱动
sbit ENA=P3^2;
sbit ENB=P3^3;
uchar Duty_left,Duty_right,m=0,n=0; //左右占空比标志,取1--100
void qianjing()
{
LN1=1;
LN2=0;
LN3=0;
LN4=1;
}
void youpian()
{
LN1=1;
LN2=0;
LN3=1;
LN4=0;
}
void zuopian()
{
LN1=1;
LN2=0;
LN3=1;
LN4=0;
}
void init() //定时器初始化
{
TMOD=0x01;
TH0=(65536-66)/256;
TL0=(65536-66)%256;
EA=1;
ET0=1;
TR0=1;
ENA=1; //使能端口,初始化
ENB=1;
}
void main()
{
init();
LN1=1;
LN2=0;
LN3=0;
LN4=1;
while(1)
{
if(chuan1==0 && chuan2==1 && chuan3==0)
{
qianjing();
Duty_left=12;
Duty_right= 11;
}
if(chuan1==1 && chuan2==0 && chuan3==0)
{
zuopian();
Duty_left=40;
Duty_right=80;
}
if(chuan1==0 && chuan2==0 && chuan3==1)
{
youpian();
Duty_left=80;
Duty_right=40;
}
if(chuan1==0 && chuan2==0 && chuan3==0)
{
qianjing();
}
}
}
void time0(void)interrupt 1 //中断程序
{
m++; //调速在中断中执行
n++;
if(m<=Duty_left)
ENA=1;
else ENA=0;
if(m>100)
{ENA=1;m=0;}
if(n<=Duty_right)
ENB=1;
else ENB=0;
if(n>100)
{ENB=1;n=0;}
TH0=(65536-66)/256; //取约150HZ,12M晶振,每次定时66us,分100次,这样开头定义的变量正好直接表示占空比的数值
TL0=(65536-66)%256;
}
此帖出自
小平头技术问答
一周热门 更多>