fashi.c

来自「本篇文章介绍了一种智能小车」· C语言 代码 · 共 147 行

C
147
字号
#include<reg52.h>
#include<stdio.h>
#include <absacc.h>
#include <string.h>
#include <intrins.h>//这个头文件中有_nop_();
#define uchar unsigned char
#define uint unsigned int
//------------------------------变量定义--------------------------
uint tme = 0;    //PWM 变量
uint speed = 2;  //速度变量
//---------左右超声波测得距离
bit shou_left = 0;
bit shou_right = 0;
//-------------AD0832
int ad=0x00;
unsigned char bdata DATAIN;
unsigned char bdata CTRL;
sbit BITIN = DATAIN^0;
sbit CBIT = CTRL^0;
//------------------------------口线----------------
//超声波口线
sbit fa = P2^5;
sbit shou_1 = P2^7;
sbit shou_2 = P2^6;
//控制方向电机口线
sbit duo = P2^0;
sbit left = P2^1;
sbit right = P2^2;
//行驶电机口线
sbit run = P1^3;
sbit b = P1^4;
sbit a = P1^5;
//AD口线
sbit SCS = P1^0;
sbit SCLK = P1^1;
sbit SDOUT = P1^2;
sbit SDIN = P1^2;
//------------------------------子程序声明---------------------------------------
void delay(int dey);
void start(void);
unsigned char get_ad(void);
//---------------------------------初始化----------------------------------------
void start(void)
{
   EA=1;
   ET0=1;
   ET1=1;
   TMOD=0x22;
   TH1=0Xf9;
   TL1=0Xf9;
  TR0=1  ;
}

//---------------------------------读AD0832------------------------------------------

unsigned char get_ad()
{
    unsigned char data  i;
    CTRL=0x07;         //启动位,SGL 选CH0通道,011三位
    SCS=1;             //选通允许
    SCS=0;
    for(i=0;i<3;i++)
    {
       SDIN=CBIT;
       SCLK=0;           //发三个时钟
       SCLK=1;
       CTRL=CTRL>>1;
    }
    SCLK=0;
    SCLK=1;         //第四个时钟
/*------------------------------------------开始读A/D---------------------------*/
    SCLK=0;
    for(i=0;i<8;i++)
    {
       DATAIN=DATAIN<<1;                  //移位8次取到采样的值
       BITIN=SDOUT;
       SCLK=1;
       SCLK=0;
     }
       SCS=1;
       return(DATAIN);
}
//--------------------------------delay---------------------------------------
void delay(int dey)
{
while(dey > 0)
   {
   dey--;
   }
}
//---------------------------------方向调整程序-------------------------------
void regu(int dri)
{
    ad = get_ad();
   if( ad > dri)
      {
      left=0;
      right=1;
      }
      else if( ad < dri)
      {
      left=1;
      right=0;
      }
    else if( ad == dri)
     left=right=0;
}
//---------------------------------测量距离-----------------------------------------
void test( void )
{
   uint i;
     shou_left = shou_right = 0;
    //while(1)//for( i = 0;i < 100;i ++)
    {
                fa =!fa;
         _nop_();_nop_();_nop_();
         _nop_(); _nop_();_nop_();
         _nop_(); _nop_();_nop_();
         _nop_();_nop_();_nop_();
         _nop_(); _nop_();_nop_();
         _nop_();_nop_();_nop_();_nop_();
        if(shou_1 == 0)
         {
          shou_left = 1;
         }
        if(shou_2 == 0)
        {
          shou_right = 1;
        }
    }

}
//--------------------------------主程序------------------------------------------
void main(void)
{
  start();
    while(1);
    {
  test();
   }
}
//--------------------------------速度中断-----------------------------------------
void time0(void) interrupt 3 using 1
{
fa=!fa;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?