#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
//--定义使用的IO口--//
sbit ENA=P0^0; //左电机
sbit IN1=P0^1;
sbit IN2=P0^2;
sbit IN3=P0^3; //右电机
sbit IN4=P0^4;
sbit ENB=P0^5;
sbit H1=P1^0;
sbit H2=P1^1;
sbit H3=P1^2;
sbit H4=P1^3;
bit PWM1,PWM2;
u16 i;
void straight();
void back();
void left();
void right();
u8 Time;
void delay(u16 i)
{
while(i--);
}
//--定义一个全局变量--//
u16 count,value,timer1; //计数、数值、定时器;
/*******************************************************************************
* 函 数 名 : Timer1Init
* 函数功能 : 定时器1初始化
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer1Init()
{
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
TH1 = 0xFF;
TL1 = 0xff; //1us
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器 此时就已经使用了TCON
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
Timer1Init(); //定时器1初始化
while(1)
{ value=5;
if(timer1>1000) //PWM周期为1000*1us 就是高电平和低电平时间之和。
{
timer1=0;
}
if(timer1<value) //定时时间 <占空比时间
{
PWM1=1;
}
else
{
PWM1=0;
}
value=900;
if(timer1>1000) //PWM周期为1000*1us 就是高电平和低电平时间之和。
{
timer1=0;
}
if(timer1 <value) //定时时间 <占空比时间
{
PWM2=1;
}
else
{
PWM2=0;
}
if((H1==1)&&(H2==1)&&(H3==1)&&(H4==1))
{
straight();
delay(1000);
}
if((H2==0)&&(H3==0))
{
back();
delay(1000);
}
else
{
if(H4==0)
{
left();
delay(1000);
}
if(H1==0)
{
right();
delay(1000);
}
}
}
}
/*******************************************************************************
* 函 数 名 : Time1
* 函数功能 : 定时器1的中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Time1(void) interrupt 3 //3 为定时器1的中断号 只有当溢出时引起内部中断;
{
TH1 = 0xFF;
TL1 = 0xff; //1us 定时1us
timer1++;
count++;
}
void straight()
{
ENA=PWM1;
IN1=0;
IN2=1;
ENB=PWM1;
IN3=0;
IN4=1;
}
void back()
{
ENA=PWM1;
IN1=1;
IN2=0;
ENB=PWM1;
IN3=1;
IN4=0;
}
void left()
{
ENA=PWM2;
IN1=0;
IN2=1;
ENB=0;
IN3=0;
IN4=1;
}
void right()
{
ENA=0;
IN1=0;
IN2=1;
ENB=PWM2;
IN3=0;
IN4=1;
}
|