【完整版】基于51的避障循迹重力感应遥控的智能小车设计40C语言41_毕业论文 下载本文

SIGN=(X_SIGN)|(Y_SIGN<<1)|(LED_FLAG<<2); STATE=((P1&0x3c)>>2)|(CONTROL_MODE_FLAG<<4);

******************************

}

TxBuf2[0]=X_ANGLE; TxBuf2[1]=Y_ANGLE; TxBuf2[2]=SIGN; TxBuf2[3]=STATE;

nRF24L01_TxPacket(TxBuf2); delay(1); init_RX();

Display10BitData(GetData(ACCEL_ZOUT_H),2,1);

显示Z轴加速度

Display10BitData(GetData(GYRO_XOUT_H),0,5);显示X轴角速度 Display10BitData(GetData(GYRO_YOUT_H),1,5);显示Y轴角速度 Display10BitData(GetData(GYRO_ZOUT_H),2,5); 显示Z轴角速度

**************************************************************************

*********通过MPU0605的数据判断小车当前的状态刷新液晶显示*******

if(aa%5==0) {

if(X_ANGLE>160) X_ANGLE=155; if(X_ANGLE<20) X_ANGLE=0; if(Y_ANGLE>160) Y_ANGLE=160; if(Y_ANGLE<20) Y_ANGLE=0;

if(X_ANGLE>Y_ANGLE)如果主要是往纵向倾斜则进入 {

17

}

} else { }

FLAG_ANGLE=1;

if(Y_SIGN)同时也往左方倾斜

{speed1=X_ANGLE1.6;speed2=X_ANGLE1.6-Y_ANGLE1.6;}左轮 else if(Y_SIGN==0)

{speed1=X_ANGLE1.6-Y_ANGLE1.6;speed2=X_ANGLE1.6;}

speed1=Y_ANGLE1.6;speed2=Y_ANGLE1.6;

lcd_pos(2,1);

if(speed1100==0) lcd_wdat(32); else lcd_wdat(table1[speed1100]); if(speed1010==0) lcd_wdat(32); else lcd_wdat(table1[speed1010]); lcd_wdat(table1[speed1]); lcd_wdat(37); lcd_pos(3,1);

if(speed2100==0) lcd_wdat(32); else lcd_wdat(table1[speed2100]); if(speed2010==0) lcd_wdat(32); else lcd_wdat(table1[speed2010]); lcd_wdat(table1[speed2]); lcd_wdat(37);

if(aa==10&&(X_ANGLE>10||Y_ANGLE>10))箭头部分显示 {

if(FLAG_ANGLE) {

if(X_SIGN)

18

{

lcd_pos(1,5); lcd_wdat(32); lcd_pos(3,5); lcd_wdat(31);

if(speed1>speed2) {lcd_pos(2,4); lcd_wdat(32);lcd_pos(2,6);

lcd_wdat(16);}

else if(speed1

lcd_wdat(17);}

} else {

lcd_pos(1,5); lcd_wdat(30); lcd_pos(3,5); lcd_wdat(32);

if(speed1

lcd_wdat(16);}

else if(speed1>speed2) {lcd_pos(2,6); lcd_wdat(32);lcd_pos(2,4);

lcd_wdat(17);}

} }

}

******************按键扫描*********************

**********************************************************************

if(KEY_LED==0) 扫描灯光控制按键 {

delay(20); if(KEY_LED==0) {

19

}

}

LED_FLAG=~LED_FLAG;

if(LED_FLAG) LED_FLAG=0;如果按键按下标志的值取反 else if(LED_FLAG==0) LED_FLAG=1;

while(KEY_LED==0); delay(20);

while(KEY_LED==0);

***************控制模式**************

break;

switch(CONTROL_MODE_FLAG) {

case 0:

if(KEY_CONTROL_MODE==0) { }

delay(20);

if(KEY_CONTROL_MODE==0) { }

while(KEY_CONTROL_MODE==0); delay(20);

while(KEY_CONTROL_MODE==0);

CONTROL_MODE_FLAG=1; play(0,2,dis2);显示按键模式

case 1:

20