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);
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论