bi_zhang.c
来自「本篇文章介绍了一种智能小车」· C语言 代码 · 共 154 行
C
154 行
#include <intrins.h>//这个头文件中有_nop_();
#include <reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit lun=P1^6;
int tim=0,send=0; //--进中断次数100为一个周期
uint speedleft,speedright,tt=0;//--左右轮转速控制
char flag=0x70;
bit cs=0;
//----------------------------------------------------------------------------------------------------
sbit left=P1^0; //左电机使能
sbit right=P1^1;//右电机使能
sbit clk=P2^1;
sbit oe=P2^3; //---取值允许
sbit lef=P0^4;
sbit mod=P0^5;
sbit rig=P0^6;
sbit p32=P3^2;
//-------------------------------------------------------
void cotor_car(void);//--控制小车
void Forward(char speed);//前进 293用到的程序
void Reverse(char speed);//speed--速度,dely--时间,r--左(右)
void TurnRight(uint dey);//右拐
void TurnLeft(uint dey);//左拐
void delay(unsigned int time);//--延时
void stop(void);//---停止
void delay(uint e);//--延时
void clk_send(void);
void jie_shou(void);
void start(void);
void ctrl_car(void);
//------------------------
//---------------------------延时程序-------------------------------------------------------------
void delay(uint e)
{
while(e--)
{
_nop_();_nop_();_nop_();
_nop_();_nop_();}
}
//-----------------------前进程序----------------------------------------------------------------
void Forward(char speed)
{
P1=0x1b;lun=1;
speedleft=speed;
speedright=speed+4;
TR0=1;
delay(15);
TR0=0;
}
//----------------------左转程序-------------------------------------------------------------------
void TurnLeft(uint dey)
{
P1=0x2b;lun=1;
speedleft=dey-10;
speedright=dey*10;
TR0=1;
delay(3000);
TR0=0;
}
//----------------------右转程序-------------------------------------------------------------------
void TurnRight(uint dey)
{
P1=0x17; lun=0;
speedleft=dey*10;
speedright=dey-10;
TR0=1;
delay(3000);
TR0=0;
}
//--------------------------------------------------
void main(void)
{
uint k=10,s=5;
start();
while(1)
{
ctrl_car();
delay(5);
}
}
//--------------------------------------------------------------------------------------
void ctrl_car(void)
{
oe=0;
flag=P0;
flag&=0x70;
if(flag!=0x70)
{
delay(10);
flag=P0&0x70;
if(flag!=0x70)
{
switch(flag)
{
case 0x80:Forward(2);break;
case 0x30:TurnRight(10);delay(50);break;
case 0x60:TurnLeft(10);delay(50);break;
case 0x50:Reverse(70);delay(50);break;
default:Forward(2);
}
}
}
delay(10); flag=0xff; Forward(2);
}
//----------------------------------后退程序----------------------------------------------------
void Reverse(char speed)
{
P1=0x27;lun=0;
speedleft=speed;
speedright=speed+10;
TR0=1;
delay(1000);
TR0=0;
}
/*-----------------------------------停止程序---------------------------------------
void stop(void)
{
TR0=0;right=0;left=0;
} */
//-------------------------------------------------------------------------------
void start(void)
{
EA=1; ET0=1;ET1=1;PT0=1;//-----开中断-----------
TMOD=0x22; //方式二
TH1=0xf2; // f3
TL1=0xf2;
TR0=1;
TR1=1;
}
//------------------------------------------------------------------------------------------------
void time0(void) interrupt 1 using 2 /*电机定时中断*/
{
// TR1=!TR1;
if(tim<=speedright)
right=1;
else
right=0;
if(tim<=speedleft)
left=1;
else
left=0;
tim++;
if(tim>=100)
tim=0;
}
//-----------------------------------------------------------------------------------------
void snd(void) interrupt 3 using 1
{
clk=!clk;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?