📄 智能小车.c
字号:
#include <stdio.h>
#include <at89x52.h>
#define FORWARDPOWER P1_0 //前进动力输出
#define BACKWARDPOWER P1_1 //后退动力输出
#define TURNLEFTPOWER P1_2 //左转动力输出
#define TURNRIGHTPOWER P1_3 //右转动力输出
///////////////////////////////
#define PWMCYCLE 20 //PWM波周期20ms
/***************************************************/
/*(定义全局变量)*/
unsigned char DataPWM1 = 0; //高电平时间
unsigned int Temp = 0; //时间
unsigned int speedtime = 500; //加,减速循环次数
unsigned int mainswitch=1;
/***************************************************/
/***************************************************/
/*延时程序, 延时1ms*count 时间*/
void delayx1ms(unsigned int count)
{
unsigned int i, j=500;
for (i = 0; i < count; i ++)
{
while(--j);
}
}
/*方波产生程序*/
void pwmMake(void)
{
Temp++;
/*高电平时间为DataPWM1 * 1ms,低电平时间为(PWMCYCLE - DataPWM1)*1ms*/
if (Temp <= DataPWM1)
{
FORWARDPOWER = 1;
delayx1ms(1);
}
else if (Temp <= PWMCYCLE)
{
FORWARDPOWER = 0;
delayx1ms(1);
}
else if (Temp > PWMCYCLE)
{
Temp = 0;
}
}
/*匀加速函数*/
void accespeed(void)
{
for(DataPWM1=0;DataPWM1<=20;DataPWM1+=4)
for(speedtime=250;speedtime>0;speedtime--) //定时0.5s
pwmMake();
}
/*匀速函数*/
void normalspeed (int a)
{
DataPWM1=a;
for(speedtime=250;speedtime>0;speedtime--)
pwmMake();
}
/*匀减速函数*/
void decspeed(void)
{ for(DataPWM1 = 18;DataPWM1>=0;DataPWM1-=4)
for(speedtime=250;speedtime>0;speedtime--)
pwmMake();
}
/*左转函数*/
void turnLeft(int t1, int t2)
{
TURNLEFTPOWER = 1; //直接用置高电平的方式使其获得一定时间的转向动力
TURNRIGHTPOWER = 0;
delayx1ms(t1);
TURNLEFTPOWER = 0;
TURNRIGHTPOWER = 1;
delayx1ms(t2);
TURNLEFTPOWER = 0;
TURNRIGHTPOWER = 0;
}
/*右转函数*/
void turnRight(int t1, int t2)
{
TURNLEFTPOWER = 0;
TURNRIGHTPOWER = 1;
delayx1ms(t1);
TURNLEFTPOWER = 1;
TURNRIGHTPOWER = 0;
delayx1ms(t2);
TURNLEFTPOWER = 0;
TURNRIGHTPOWER = 0;
}
void ex0ISR(void) interrupt IE0_VECTOR
{
turnLeft(5, 1);
}
void ex1ISR(void) interrupt IE1_VECTOR
{
turnRight(5, 1);
}
/*初始化程序*/
void init(void)
{
P0_0=1;
P0_1=1;
P0_2=1;
FORWARDPOWER = 0; //初始动力电压为0
BACKWARDPOWER = 0;
TURNLEFTPOWER = 0;
TURNRIGHTPOWER = 0;
EA = 1; //允许CPU中断
}
//主函数
void main()
{
init(); //初始化程序
while(mainswitch)
{
if(P0_0==1)
{EX0=0;
EX1=0;
accespeed();
normalspeed(18);
decspeed();
FORWARDPOWER=0;
delayx1ms(500);
}
if(P0_1==1)
{EX0=1;
EX1=1;
while(mainswitch)
{ normalspeed(15);
if(P0_3==1)
mainswitch=0;
}
mainswitch=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -