爱玩科技网
您的当前位置:首页51单片机声控智能小车C语言程序设计代码

51单片机声控智能小车C语言程序设计代码

来源:爱玩科技网
51单片机声控智能小车C语言程序设计代码

#include

#define uint unsigned int

#define uchar unsigned char

unsigned char 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()

code

{

unsigned int delaytime=500;

while(delaytime--);

return;

}

void delayLED(uint ms)

{

uint a,b;

for(a=0;a{

for(b=0;b<1250;b++)

{

if(B1==0)

{

delayB1();

LED=!LED;

m++;

}

}

}

}

void timer0(void) interrupt 1

{

TR0=0;//关闭T0定时器

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);

}

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容