0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xf0, 0xf0, 0xf8, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
//------------->>>>>>>>>>>>>>>>>步进电机1用的延时函数及其他函数声明
#define CPU_F ((double)24000000) #definedelay_us(x)
__delay_cycles((long)(CPU_F*(double)x/1000000.0)) #definedelay_ms(x)
__delay_cycles((long)(CPU_F*(double)x/1000.0)) staticintstep_index1; // staticintstep_index2; //
voiddelay(unsignedintendcount); //延时函数,延时endcount个0.5ms
voiddelay_nms1(unsignedint n); voiddelay_5ms1(void);
voiddelay_nms(unsignedint n); voiddelay_5ms(void); //P2口延时函数
voiddelay_nms2(unsignedint n);
voiddelay_5ms2(void);
staticinta1; //a1=0用于在探测到金属时停止步进电机
/////////////////////////////////////两个步进电机控制程序////////////////////////////////////////////////////////////////////////
voidmotor2(unsignedint a2);//P4口用于垂直往前走 voidmotor4(unsignedint a4);//P4口用于垂直往后推 voidmotor21(unsignedint a21);//P2口用于水平左走 //a3用于步进电机右转时间角度
voidmotor22(unsignedint a22); //P2口用于水平右走 //a4用于步进电机后退时间角度
//LDC1000变量定义配置及函数声明
//________________________________________*****************************************>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
staticuint8_ttxlen; staticuint8_trxlen; staticuint8_t *txbuf; staticuint8_t *rxbuf; staticuint8_ttxaddr;
staticuint8_twordbuf[2];
uint8_tproximtyData[2]; uint8_tfrequencyData[3];
unsignedintproximtyDataMIN;
unsignedintproxin;//存储最小RP数据 unsignedintfrequencyDataMIN;
unsignedintproximtyDataMAX;
unsignedintfrequencyDataMAX;
unsignedintproximtyDataTEMP; unsignedintfrequencyDataTEMP;
#define RPMIN 0x3A #define RPMAX 0x13
char ab1=1; //用于水平和垂直电机转动,为0时停止所有电机,代表此//试验一程序找到了一个金属物体,如需进一步测量,执行后面的程序
int ab2=1; //用于选择水平电机左转或右转 char ab3=1; //用于停止水平电机转动,为0是停止水平扫描电机,代表在水平扫描时找到了一个金属物体
unsignedintproxin = 4600; //是否找到金属物体的大小判断数值界限,此数值需根据现场调试具体实际数值确定
voidscan(void) {
inti;
Dogs102x6_clearScreen(); //清屏
spi_readBytes(LDC1000_CMD_PROXLSB,&proximtyData[0],2);
spi_readBytes(LDC1000_CMD_FREQCTRLSB,&frequencyData[0],3);
proximtyDataMAX = ((unsignedchar) proximtyData[1]<<8) + proximtyData [0]; frequencyDataMAX = ((unsignedchar)frequencyData[1]<<8) + frequencyData[0];
proximtyDataMIN = proximtyDataMAX; frequencyDataMIN = frequencyDataMAX;
for (i=0;i<50;i++) {
spi_readBytes(LDC1000_CMD_PROXLSB,&proximtyData[0],2);
spi_readBytes(LDC1000_CMD_FREQCTRLSB,&frequencyData[0],3);
proximtyDataTEMP = ((unsignedchar)proximtyData[1]<<8) + proximtyData [0]; frequencyDataTEMP = ((unsignedchar)frequencyData[1]<<8) + frequencyData[0];
if (proximtyDataTEMP if (proximtyDataTEMP>proximtyDataMAX) proximtyDataMAX = proximtyDataTEMP; if (frequencyDataTEMP>frequencyDataMAX) frequencyDataMAX = frequencyDataTEMP; } Trans_val(proximtyDataMIN,1); BIT5; BIT5; + BIT5); Trans_val(proximtyDataMAX,2); Trans_val(frequencyDataMIN,3); Trans_val(frequencyDataMAX,4); if(proximtyDataMIN<10000) { if(proximtyDataMIN> 4600) { P1DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + P1OUT |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + P8DIR |= BIT1 + BIT2; P8OUT |= BIT1 + BIT2; ab3 = 0; ab1 = 0; P7DIR |=BIT0; P7OUT |=BIT0; while (1) { P7OUT ^=BIT0; _delay_cycles(8000); } } else { P1OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 P8OUT &= ~(BIT1 + BIT2); ab3 = 1; ab1 = 1;