声音导引小车程序.docx

上传人:b****6 文档编号:16527727 上传时间:2023-07-14 格式:DOCX 页数:16 大小:17.85KB
下载 相关 举报
声音导引小车程序.docx_第1页
第1页 / 共16页
声音导引小车程序.docx_第2页
第2页 / 共16页
声音导引小车程序.docx_第3页
第3页 / 共16页
声音导引小车程序.docx_第4页
第4页 / 共16页
声音导引小车程序.docx_第5页
第5页 / 共16页
声音导引小车程序.docx_第6页
第6页 / 共16页
声音导引小车程序.docx_第7页
第7页 / 共16页
声音导引小车程序.docx_第8页
第8页 / 共16页
声音导引小车程序.docx_第9页
第9页 / 共16页
声音导引小车程序.docx_第10页
第10页 / 共16页
声音导引小车程序.docx_第11页
第11页 / 共16页
声音导引小车程序.docx_第12页
第12页 / 共16页
声音导引小车程序.docx_第13页
第13页 / 共16页
声音导引小车程序.docx_第14页
第14页 / 共16页
声音导引小车程序.docx_第15页
第15页 / 共16页
声音导引小车程序.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

声音导引小车程序.docx

《声音导引小车程序.docx》由会员分享,可在线阅读,更多相关《声音导引小车程序.docx(16页珍藏版)》请在冰点文库上搜索。

声音导引小车程序.docx

声音导引小车程序

#include//包含51相关的头文件

typedefunsignedcharuchar;//重定义char数据类型

typedefunsignedintuint;//重定义int数据类型

#defineShowPortP2//定义数码管显示端口

ucharcodeLedShowData[]={0x03,0x9F,0x25,0x0D,0x99,//定义数码管显示数据

0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9

staticunsignedintRecvData;//定义接收红外数据变量

staticunsignedcharCountData;//定义红外个数计数变量

staticunsignedcharAddData;//定义自增变量

staticunsignedintLedFlash;//定义闪动频率计数变量

unsignedcharHeardData;//定义接收到数据的高位变量

 

bitRunFlag=0;//定义运行标志位

bitEnableLight=0;//定义指示灯使能位

 

/***********完成基本数据变量定义**************/

sbitS1State=P1^0;//定义S1状态标志位

sbitS2State=P1^1;//定义S2状态标志位

sbitB1State=P1^2;//定义B1状态标志位

sbitIRState=P1^3;//定义IR状态标志位

sbitRunStopState=P1^4;//定义运行停止标志位

//sbitFontIRState=P1^5;//定义FontIR状态标志位

//sbitLeftIRState=P1^6;//定义LeftIR状态标志位

//sbitRightIRState=P1^7;//定义RightIRState状态标志位

/*************完成状态指示灯定义*************/

sbitS1=P3^2;//定义S1按键端口外部中断0

sbitS2=P3^4;//定义S2按键端口定时器0的外部输入

/*************完成按键端口的定义*************/

//sbitLeftLed=P2^0;//定义前方左侧指示灯端口

//sbitRightLed=P0^7;//定义前方右侧指示灯端口

/*************完成前方指示灯端口定义*********/

//sbitLeftIR=P3^5;//定义前方左侧红外探头

//sbitRightIR=P3^6;//定义前主右侧红外探头

//sbitFontIR=P3^7;//定义正前方红外探头

/*************完成红外探头端口定义***********/

sbitM1A=P0^0;//定义电机1正向端口

sbitM1B=P0^1;//定义电机1反向端口

sbitM2A=P0^2;//定义电机2正向端口

sbitM2B=P0^3;//定义电机2反向端口

/*************完成电机端口定义***************/

 

//sbitB1=P0^4;//定义话筒传感器端口

//sbitRL1=P0^5;//定义光敏电阻端口

 

sbitSB1=P0^6;//定义蜂鸣端口

/*********完成话筒,光敏电阻,蜂鸣器.端口定义**/

sbitIR1=P3^3;//定义红外接收端口

/*********完成红外接收端口的定义*************/

 

voidDelay()//定义延时子程序

{uintDelayTime=30000;//定义延时时间变量

while(DelayTime--);//开始进行延时循环

return;//子程序返回

}

 

/*voiddelaysb1()//3ms

{

uintdelaysb1=3000;

while(delaysb1--);

return;

}*/

 

voidControlCar(ucharCarType)//定义小车控制子程序

{

M1A=0;//将电机1正向电平置低

M1B=0;//将电机1反向电平置低

M2A=0;//将电机2正向电平置低

M2B=0;//将电机2反向电平置低

//LeftLed=1;//关闭前方左侧指示灯

//RightLed=1;//关闭前方右侧指示灯

Delay();//将此状态延时一段时间

switch(CarType)//判断小车控制指令类型

{case1:

//前进//判断是否是前进

{M1A=1;//将电机1正向端口置高

M2A=1;//将电机2正向端口置高

//delaytime();

//SB1=~SB1

ShowPort=LedShowData[1];//数码管显示前进状态

break;//退出判断

}

case2:

//后退//判断是否是后退

{M1B=1;//将电机1反向端口置高

M2B=1;//将电机2反向端口置高

ShowPort=LedShowData[2];//数码管显示后退状态

//RightLed=0;//将前方右侧指示灯置低(亮)

//LeftLed=0;//将前方左侧指示灯置低(亮)

break;//退出判断

}

case3:

//左转//判断是否是左转

{M1B=1;//将电机1反向端口置高

M2A=1;//将电机2正向端口置高

ShowPort=LedShowData[3];//数码管显示左转状态

SB1=1;

ET1=0;

//LeftLed=0;//将前方左侧指示灯置低(亮)

break;//退出判断

}

case4:

//右转//判断是否是右转

{M1A=1;//将电机1正向端口置高

M2B=1;//将电机2反向端口置高

ShowPort=LedShowData[4];//数码管显示右转状态

//RightLed=0;//将前方右侧指示灯置低(亮)

break;//退出判断

}

default:

//默认情况下的判断

{

break;//直接退出判断

}

}

}

 

voidTimer0_IR1()interrupt1using3//定义红外定时器子程序26us

{

TH0=0xFF;//向定时器定时间寄存器填入高八位值

TL0=0x19;//向定时器定时间寄存器填入低八位值

AddData++;//自增变量加1

}

 

voidTime1_SB1()interrupt3

{

//uinttemptime=3000;

TMOD=0x01;//设置定时/计数器模式T1为16位定时器

TH1=0xFC;//给定时器1高八位初始化初值

TL1=0x18;//给定时器1低八位初始化初值时间为100us

TR1=0;

//while(temptime--);

SB1=~SB1;

TR1=1;

}

 

voidInt1_IR1()interrupt2//定义红外接收中断子程序外部中断

{

TR1=0;//将定时/计数器1关闭

IRState=!

IRState;//将红外接收指示灯状态取反

if(4==AddData)//0//判断接收到的数据是0

{

RecvData=RecvData|0;//判断到0就将当前位写0

RecvData=RecvData<<1;//将当前位向左移动1位

}

elseif(8==AddData)//1//判断接收到的数据是1

{

RecvData=RecvData|1;//将当前位写1

RecvData=RecvData<<1;//将当前位向左移动1位

}

CountData++;//将红外接收位计数器加1

if(CountData==8)//判断是否接收到8位数据

{

HeardData=RecvData;//是8位数据时,则将数据暂存到高位变量中

}

elseif(CountData==16)//判断是否接收到16位数据

{

ET0=0;//关闭红外定时器0

EX1=0;//关闭红外外部中断1

TR1=1;//打开定时/计数器1

AddData=0;//定时时间间隔变量清零

if(HeardData==226||HeardData==112)//判断用户码是否正确

{

HeardData=RecvData;//取出接收到的低八位数据

switch(HeardData)//判断低八位数据的值下列那一位

{

case32:

//电源//说明按下了电源键

{//在这里填写你自己的代码//根据你的功能自己写

ControlCar(8);//将小车停止

RunFlag==1;//将运行标志位置1

break;//返回

}

case46:

//TV/AV//说明按下了TV/AV键

{//在这里填写你自己的代码//根据你的功能自己写

break;//返回

}

case0:

//1//说明按下数字1键

{ShowPort=LedShowData[1];//数码管显示数字1

ControlCar

(1);//将小车置于前进状态

break;//返回

}

case8:

//2//说明按下了数字2键

{ShowPort=LedShowData[2];//数码管显示数字2

ControlCar

(2);//将小车置于后退状态

break;//返回

}

case4:

//3//说明按下了数字3键

{ShowPort=LedShowData[3];//数码管显示数字3

ControlCar(3);//将小车置于左转状态

SB1=1;

ET1=0;

//EA=0;

break;//返回

}

case12:

//4//说明按下了数字4键

{ShowPort=LedShowData[4];//数码管显示数字4

ControlCar(4);//将小车置于右转状态

break;//返回

}

case2:

//5//说明按下了数字5键

{ShowPort=LedShowData[5];//数码管显示数字5

break;//返回

}

case10:

//6//说明按下了数字6键

{ShowPort=LedShowData[6];//数码管显示数字6

break;//返回

}

case6:

//7//说明按下了数字7键

{ShowPort=LedShowData[7];//数码管显示数字7

break;//返回

}

case14:

//8//说明按下了数字8键

{ShowPort=LedShowData[8];//数码管显示数字8

break;//返回

}

case64:

//9//说明按下了数字9键

{ShowPort=LedShowData[9];//数码管显示数字9

break;//返回

}

case72:

//0/30//说明按下0/30键

{ShowPort=LedShowData[0];//数码管显示数字0

break;//返回

}

case68:

//10+//说明按下10+键

{//在这里填写你自己的代码//根据你的功能写代码

break;//返回

}

case76:

//20+//说明按下了20+键

{//在这里填写你自己的代码//根据你的功能写代码

break;//返回

}

case36:

//CH-//说明按下了CH-键

{//在这里填写你自己的代码//根据你的功能写代码

break;//返回

}

case40:

//CH+//说明按下了CH+键

{//在这里填写你自己的代码//根据你的功能写代码

break;//返回

}

}

}

RecvData=0;//将接收到的数据清零

CountData=0;//将接收计数器清零

HeardData=0;//将接收高低数据变量清零

return;//返回

}

AddData=0;//将定时器计数器清零

ET0=1;//打开定时器中断

}

 

/*voidComBreak()interrupt4//定义串口通信子程序

{unsignedcharRecvData;//定义串口数据接收变量

if(RI==1)//判断是否接收数据

{RecvData=SBUF;//将接收到的数据放入暂时变量

if(RecvData<10)//判断接收到的数据是否小于10

{

ShowPort=LedShowData[RecvData];//将接收到的数据通过数码管显示出来

ControlCar(RecvData);//将串口数据置于小于状态

}

SBUF=RecvData;//向电脑返回当前接收到的数据

RI=0;//清除接收中断标志位

}

if(TI==1)//判断是否是发送中断

{

TI=0;//清除发送中断标志位

}

}**/

 

voidmain(void)//主程序入口

{

bitExeFlag=0;//定义可执行标志位变量

RecvData=0;//将接收变量数值初始化

CountData=0;//将计数器变量数值初始化

AddData=0;//将定时器计数器初始化

HeardData=0;//将高低计数器初始化

LedFlash=1000;//对闪灯数据进行初始化

TMOD=0x01;//选择定时器0为两个16位定时器

TH0=0xFF;//对定时器进行计数值进行初始化

TL0=0x19;//同上,时间大约为25uS

TR0=1;//同意开始定时器0

EX1=1;//同意开启外部中断1

IT1=1;//设定外部中断1为低边缘触发类型

ET0=0;//,,,,,,,,,,,,,,,禁止T0中断

//SCON=80;//设置串口模式为8位数据

TMOD=0x01;//设置定时/计数器模式T1为16位定时器

TH1=0xFC;//给定时器1高八位初始化初值

TL1=0x18;//给定时器1低八位初始化初值时间为100us

TR1=1;//开启定时器1

//ES=1;//开启串口通信功能

//REN=1;*///开启接收中断标志

EA=1;

ET1=1;//总中断开启

ControlCar

(1);//将小车置于前进状态

ShowPort=LedShowData[0];//数码管显示数字0

while

(1)//程序主循环

{

while(LedFlash--)//闪灯总延时

{

/*if(RL1==0)//判断光敏电阻的状态

{RightLed=1;//将前方右侧指示灯点亮

LeftLed=1;//将前方左侧指示灯点亮

}

else//在光敏电阻为不通的状态下

{

RightLed=0;//将前方右侧指示灯熄灭

LeftLed=0;//将前方左侧指示灯熄灭

}*/

if(IR1==0)//判断延时期间是否有红外信号输入

{ExeFlag=1;//将可执行标志位置1

}

if(S1==0)//判断是否有S1按下

{

ControlCar(8);//将小车置于停止状态

RunFlag==1;//改变小车运行状态标志位

S1State=!

S1State;//改变S1按键标志位

gotoNextRun;//跳转到NextRun标签

}

if(S2==0)//判断是否有S2按下

{

ControlCar

(1);//将小车置于前进状态

RunFlag==0;//改变小车运行状态标志位

S2State=!

S2State;//改变S2按键标志位

gotoNextRun;//跳转到NextRun标签

}

/*FontIRState=FontIR;//前方红外指示灯显示正前方红外探头状态

LeftIRState=LeftIR;//左侧红外指示灯显示前方左侧红外探头状态

RightIRState=RightIR;*///右侧红外指示灯显示前主右侧红外探头状态

/*if(FontIR==0||LeftIR==1||RightIR==1)//判断正前方,前左侧,前右侧红外探头状态

{ControlCar

(2);//改变小车状态为后退

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

ControlCar(3);//改变小车左转状态

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

Delay();//调用延时子程序

SB1=!

SB1;//将蜂鸣器取反

ControlCar

(1);//改变小车为前进状态

SB1=1;//关闭蜂鸣器声音

}*/

/*if(B1==0)//判断是否有话筒信号输入

{if(RunFlag==0)//判断小车当前的运行标志位

{ControlCar(8);//将小车置于停止状态

RunFlag=1;//改变小车运行标志位

}

else

{ControlCar

(1);//将小车置于前进状态

RunFlag=0;//改变小车运行标志位

}

B1State=!

B1State;//将话筒信号指示灯取反

}*/

}

 

NextRun:

//跳转标签

if(RunFlag==0)//判断运行标志位

{

RunStopState=!

RunStopState;//改变小车运行停止状态标志位

}

else

{

RunStopState=1;//将运行停止状态标志位置1

}

LedFlash=1000;//运行闪动时间重设定

if(ExeFlag==0)//判断可执行标志位

{

EX1=1;//开启外部中断1

TR1=1;//开启定时/计数器1

}

ExeFlag=0;//可执行标志位置0

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2