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 + -
显示快捷键?