TA2CTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, contmode, clear TAR
__bis_SR_register(GIE); //enable interrupts
while(ab1) //扫描到金属后才跳出循环 {//while1 inti=0; ab2++;
if(ab2 == 1000) {
ab2=2; //ab2=9999时向右走,则走完后ab2++后应向左走 }
//ab2是偶数,则水平向左扫描 if((ab2%2) == 0) {//ab2 2 //for test
for(i=200;i>0;i--) //电机走动2000个计数周期 {//for if(ab3 == 1) //水平扫描时10个周期时没有找到金属,则继续水平扫描10个周期,直到满2000个周期 {//ab3==1没检测到金属
motor21(10);//P2口用于水平左走走一次2000用了14.5秒,从右手走起
}//if(ab3 == 1)
if(flag == 1) //每隔1000ms则检测金属 {
scan(); flag =0; } }//for }//ab2 2
//ab2是奇数,则水平向右扫描
if((ab2 % 2)==1) //ab2是奇数,则水平向右扫描 {//ab2 1
for(i=200;i>0;i--) //电机走动2000个计数周期 {//for
if(flag == 1) //每隔500ms则检测金属 {
scan(); flag = 0; }
if(ab3 == 1) //水平扫描时10个周期时没有找到金属,则继续水平扫描10个周期,直到满2000个周期 {//ab3==1没检测到金属
motor22(10); //P2口用于水平右走走一次2000用了14.5秒,从左手走起
}//if(ab3 == 1) }//for }//ab2
if(ab3 == 1)//左或右扫描都没有找到硬币,则向前走一步 {
motor2(33); //P4口用于垂直往前走一次走4厘米,走10次 }
}//while(ab1 == 1)
}//main主函数标号
//定义求余显示函数:将16位二进制整型数据,转换为5位十进制数据并在液晶102x6上分别显示出来
externvoidTrans_val(unsignedintHex_Val,intnum) {
unsignedinta,b,c,d,e;
uint8_t ptr0[5]; //用于保存转换好的十进制结果 a = Hex_Val; //万位数 b = a000; //千位数 c = b00; //百位数 d = c0; //十位数 e = d; //个位数
ptr0[0] = a/10000;
ptr0[0] = ptr0[0] + 0x30; ptr0[1] = b/1000;
ptr0[1] = ptr0[1] + 0x30; ptr0[2] = c/100;
ptr0[2] = ptr0[2] + 0x30; ptr0[3] = d/10;
ptr0[3] = ptr0[3] + 0x30; ptr0[4] = e;
ptr0[4] = ptr0[4] + 0x30;
switch (num) {
case 1:
Dogs102x6_stringDraw(0, DOGS102x6_DRAW_NORMAL);
Dogs102x6_clearRow(1); //Dogs102x6_stringDraw(1, DOGS102x6_DRAW_NORMAL);
0, \0, ptr0, Dogs102x6_charDraw(1,0,ptr0[0],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(1,6,ptr0[1],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(1,12,ptr0[2],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(1,18,ptr0[3],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(1,24,ptr0[4],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上 break; // case 2:
//Dogs102x6_stringDraw(2, 0, \DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(2, 0, \DOGS102x6_DRAW_NORMAL);
Dogs102x6_clearRow(3); //Dogs102x6_stringDraw(3, 0, ptr0, DOGS102x6_DRAW_NORMAL);
Dogs102x6_charDraw(3,0,ptr0[0],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(3,6,ptr0[1],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(3,12,ptr0[2],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(3,18,ptr0[3],DOGS102x6_DRAW_NORMAL);
//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(3,24,ptr0[4],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上 break; // case 3:
Dogs102x6_stringDraw(4, 0, \DOGS102x6_DRAW_NORMAL);
//Dogs102x6_stringDraw(4, 0, \DOGS102x6_DRAW_NORMAL);
Dogs102x6_clearRow(5); //Dogs102x6_stringDraw(5, 0, ptr0, DOGS102x6_DRAW_NORMAL);
Dogs102x6_charDraw(5,0,ptr0[0],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(5,6,ptr0[1],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(5,12,ptr0[2],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(5,18,ptr0[3],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上
Dogs102x6_charDraw(5,24,ptr0[4],DOGS102x6_DRAW_NORMAL);//将一个字符写入确定行列的LCD液晶显示屏上 break; // case 4:
Dogs102x6_stringDraw(6, 0, \DOGS102x6_DRAW_NORMAL);
Dogs102x6_clearRow(7); //Dogs102x6_stringDraw(7, 0, ptr0,