轮式移动机器人的设计报告
//EX1=1; //同意开启外部中断1
IT1=1; //设定外部中断1为低边缘触发类型 EA=1; //总中断开启 ControlCar(8); //初始化小车运行状态 while(1) //程序主循环 {
if(P3_2 == 0) } }
//----------红外遥控------------------------------------------------------------- void IR_IN() interrupt 2 using 0 //定义INT2外部中断函数 {
unsigned char j,k,N=0; //定义临时接收变量
EX1 = 0; //关闭外部中断,防止再有信号到达 delayms(15); //延时时间,进行红外消抖 if (IRIN==1) //判断红外信号是否消失 {
EX1 =1; //外部中断开
return; //返回 }
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {
delayms(1); //延时等待 }
31
{
delay_nms(10); if(P3_2 == 0) {
temp++; }
if(temp > 3) { temp = 1; }
switch(temp) {
case 1: ShowPort = LedShowData[1];Robot_Traction();EX1 = 0;break; }
case 2: ShowPort = LedShowData[2];Robot_Avoidance();EX1 = 0;break; case 3: ShowPort = LedShowData[3];EX1 = 1;break; while(!P3_2); }
轮式移动机器人的设计报告
for (j=0;j<4;j++) //采集红外遥控器数据 {
for (k=0;k<8;k++) //分次采集8位数据 {
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {
delayms(1); //延时等待 }
while (!IRIN) //等 IR 变为高电平 {
delayms(1); //延时等待 }
while (IRIN) //计算IR高电平时长 {
delayms(1); //延时等待 N++; //计数器加加 if (N>=30) //判断计数器累加值 {
EX1=1; //打开外部中断功能
return; //返回
} }
IRCOM[j]=IRCOM[j] >> 1; //自动补零
if (N>=8) //判断数据长度 {
IRCOM[j] = IRCOM[j] | 0x80; //数据最高位补1 }
N=0; //清零位数计录器 } } if
(IRCOM[2]!=~IRCOM[3]) //判断地址码是否相同 {
EX1=1; //打开外部中断 return; //返回 }
for(j=0;j<10;j++) //循环进行键码解析 {if(IRCOM[2]==RecvData[j]) //进行键位对应 {
// ControlCar(j);
32
进行数据位移操作并 轮式移动机器人的设计报告
ControlCar_yaokong(j); //数码管显示相应数码}
}
EX1 = 1; //外部中断开 }
//-------------------------------------------------------------------------------------------------------
33
轮式移动机器人的设计报告
附录2硬件原理图
34
轮式移动机器人的设计报告
附录3 实物图
35