51单片机声控智能小车C语言程序设计代码
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code LEDShowData[]={0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x19,0x03};
sbit LED=P0^7;
sbit m1a=P0^0;
sbit m1b=P0^1;
sbit m2a=P0^2;
sbit m2b=P0^3;
sbit B1=P0^4;
uint m,n,x,y,z;
void delayB1()
{
  unsigned int delaytime=500;
  while(delaytime--);
  return;
}
void delayLED(uint ms)
{
  uint a,b;
  for(a=0;a<ms;a++)
  {
  for(b=0;b<1250;b++)
  {
    if(B1==0)
    {
      delayB1();
      LED=!LED;
      m++;
    }       
  }
  }
}
void timer0(void) interrupt 1
{
  TR0=0;//关闭T0定时器
c语言暑期培训班  TR1=1;//启动T1定时器
  m1a=0;
  m2a=0;
}
void timer1(void) interrupt 3
{
  TR0=1;//启动T0定时器
  TR1=0;//关闭T1定时器
  m1a=1;
  m2a=1;
}
void timer2(void) interrupt 5
{
  TF2=0;//软件对T2标志位清零
  n++;
  if(n==250)//n控制查询周期时间
    {
    n=0;
switch(m)
    {
        case 1://低速挡,占空比77.8%
        {
          P2=LEDShowData[0];//七段数码管显示1
          TH0=210;
          TL0=210;//对T0定时器赋初值
          TH1=240;
          TL1=240;//对T1定时器赋初值
          x=m;
          m=0;
          z=0;
          ET0=1;
          ET1=1;
          TR0=1;//启动T0定时器
          break;//跳出switch
        }
        case 2://高速挡,占空比99.6%
        {
          P2=LEDShowData[1];//七段数码管显示2
          TH0=1;
          TL0=1; //对T0定时器赋初值
          TH1=255;
          TL1=255; //对T1定时器赋初值
          x=m+1;
          m=0;
          z=0;
          ET0=1;
          ET1=1;
          TR0=1; //启动T0定时器
          break;//跳出switch
        }
    default://对周期时间T之内无效m清零
        {
            m=0;
            z++;
            if(z==5)
            { 
                ET0=0;
                ET1=0;
                LED=1;
                P1=0x00;
                x=0;
                z=0;
                P2=LEDShowData[2];
                m1a=0;
                m2a=0;
                break;
                }
        }
      }
  }
}
void main(void)
{
    P1=0x00;//初始化主板LED,全亮
    n=m=x=y=z=0;
    m1a=0;
    m2a=0;
    m1b=0;
    m2b=0;
    TMOD=0x22;//T0,T1选用8位重装定时器功能
    T2CON=0x00;//T2作为定时器使用,16位重装
    TH2=0xD8F0;//65536
    TL2=0xD8F8;
    RCAP2H=0xD8F0;//重装数据寄存器
    RCAP2L=0xD8F0;
    ET0=1;//开启定时器T0中断请求允许位
    ET1=1; //开启定时器T1中断请求允许位
    ET2=1; //开启定时器T2中断请求允许位
    EA=1;//开启总中断
    TR0=0;//关闭定时器T0
    TR1=0; //关闭定时器T1
    TR2=1;//开启定时器T2
  while(1)
    {
      y=10*(6-x);//配置不同档位LED灯闪烁调用延时时间个数
      if(x>0)//完成主板LED灯闪烁
        {
          P1=0xff;//全灭
          delayLED(y);
          P1=0x00;
          delayLED(y);//灯全亮
        }
        else
        {
          P1=0x00;
          delayLED(1);
        }
    }
}