博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛
unsigned int pwm3f=0;
unsigned int pre_hei_bai=0;//上一次采样值预存
unsigned int speed_aim = 0; //目标速度
//pwm3f反转
DisableInterrupts;
SetBusCock(2); pwmd45(); pwmz2(); pwmf3(); timer1(); leijia_PACNT();
init_portb57();
//play_show(); //*****************
//EnableInterrupts; while (1) { DDRA=0xff;
//PWMDTY2 = 40;
InitATD();
for (i=0;i<8;i++) adjieguo[i]=0;
PORTA=0xff;
while (!ATD0STAT2_CCF7) // { }
adjieguo[0]=ATD0DR0L;
官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834
组委会联系电话:010-82110743转820、27 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛
adjieguo[1]=ATD0DR1L;
adjieguo[2]=ATD0DR2L;
adjieguo[3]=ATD0DR3L;
adjieguo[4]=ATD0DR4L;
adjieguo[5]=ATD0DR5L;
adjieguo[6]=ATD0DR6L;
adjieguo[7]=ATD0DR7L;
if (adjieguo[0] > zhan_dian)
//判断站点标志
count++;
if (adjieguo[1] >= fazhi) hei_bai |= 0x02;
else hei_bai &= 0xfd; //保护前 1 位 第二位写 0
if (adjieguo[2] >= fazhi) hei_bai |= 0x04;
else hei_bai &= 0xfb; //保护前 2 位 第三位写 0
if (adjieguo[3] >= fazhi)
hei_bai |= 0x08; //第四位赋 1
else hei_bai &= 0xf7; //保护前 3 位 第四位写 0
if (adjieguo[4] >= fazhi) hei_bai |= 0x10;
else hei_bai &= 0xef; //保护前 4 位 第5位写 0
官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834
组委会联系电话:010-82110743转820、28 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛
if (adjieguo[5] >= fazhi)
hei_bai |= 0x20;
else hei_bai &= 0xdf; //保护前 5 位 第6位写 0
if (adjieguo[6] >= fazhi)
else hei_bai &= 0xbf; //保护前 6 位 第7位写 0 hei_bai |= 0x40;
if (adjieguo[7] >= fazhi)
case 0x02 :
if (pre_hei_bai == 0x80)
break;
switch (hei_bai) {
case 0x00 :
if (pre_hei_bai == 0x04) pwm45d = 4500 - C*31; if (pre_hei_bai == 0x40)
pwm45d = zhongjian + C*31;
else hei_bai &= 0x7f;
hei_bai|=0x80; //保护前 7 位 第8位写 0
pwm2z = V; pwm3f = 0; break;
if (pre_hei_bai == 0xc0)
break;
pwm45d = zhongjian - C*40; //左转最大角 左三高电位 0000001 0
官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 组委会联系电话:010-82110743转820、29 834
博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛
pwm2z = V; // pwm3f = 0; //
break;
case 0x04 : if (pre_hei_bai == 0x80) break;
if (pre_hei_bai==0xc0) break;
pwm45d = zhongjian - C*20;
pwm2z = V;
pwm3f = 0; //
break;
case 0x06: if (pre_hei_bai == 0x80) break; if (pre_hei_bai == 0xc0)
break;
pwm45d = zhongjian - C*26; pwm2z = V; // pwm3f = 0; //
break;
case 0x08 : pwm45d = zhongjian - C*6;
pwm2z = V; //
pwm3f = 0;
break;
官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834
//左二高电位 0000010 0 //左三二全部高电位 0000011 0 //左一高电位 000 0 100 0
组委会联系电话:010-82110743转820、30 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛
case 0x0c : pwm45d = zhongjian - C*17; //左二一全部高电位 000 0 110 0
pwm2z = V; //
pwm3f = 0; //
break;
case 0x10 : pwm45d = zhongjian;
pwm2z = V; //
pwm3f = 0; //
break;
case 0x18 : pwm45d = zhongjian - C*4;
pwm2z = V; //
pwm3f = 0; //
break;
case 0x20 : pwm45d = zhongjian + C*6;
pwm2z = V; //
pwm3f = 0; //
break;
case 0x30 : pwm45d = zhongjian + C*4;
pwm2z = V; //
pwm3f = 0; //
break;
官方网站:www.cie-eec.org www.up-tech.com/bcb/index.htm 834
// 中间高点位 000 1 000 0 //中间左一高电位 000 1 100 0 //右一高电位 001 0 000 0 //中间右一高电位 001 1 000 0 组委会联系电话:010-82110743转820、31