#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;
}
|