标题:
飞思卡尔智能车最终完整程序 具有很高的参考价值
[打印本页]
作者:
51hei学习技术中
时间:
2016-10-18 16:22
标题:
飞思卡尔智能车最终完整程序 具有很高的参考价值
0.png
(58.03 KB, 下载次数: 146)
下载附件
2016-10-18 16:21 上传
这个是一个2等奖的作品,毫无保留飞思卡尔智能车全部源码下载:
飞思卡尔智能车最终完整程序 具有很高的参考价值.rar
(14.08 KB, 下载次数: 224)
2016-10-18 16:21 上传
点击文件名下载附件
下载积分: 黑币 -5
主程序:
#include <hidef.h> /* common defines and
macros */
#include <mc9s12dg128.h> /* derivative
information */
//#include "PWM.h"
//#include "AD.h"
#include "control.h"
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
word AD_wData[9]; //全局变量存放 AD0,AD1,AD2的结果
word sum[9]; //初始化时为求平均值,全白中,各个灯的FF次的电压和
word avrg0[9]; //全白时各个灯的平均电压
word summ[9];//初始化时为求平均值,全黑中,各个灯的FF次的电压和
word avrg1[9]; //全黑时各个灯的平均电压
word ss[9]; //实际采集来的各个灯的电压
word s[9]; // 实际采集来的各个灯的电压
word sum2[8];//用于存放两两灯电压之和
word k; //用于存放比较出的最大值
uint h=1500;//转角大小
int flag = 0;//标志中间灯是否第一次在黑道附近
int flagg=0;//标志0灯从哪边感应到黑道
int flagg1=0;//标志8灯从哪边感应到黑道
int flagg0=0;//标志是左边还是右边出道
int j=0;
dword i;
dword m;
dword s0;
dword s1;
dword p11=0;//以下四个变量用于记录黑道处于同一侧的时间
dword p12=0;
dword p21=0;
dword p22=0;
word max0[9]=0;//初始化时采集来的黑道的值
int g=0;//为过滤算法使用
word cha[9];//用来存放黑白电压差
int ffgg0=0;//标志是否用中间板采的数据
int ffgg1=0;//标志是否用中间板采的数据
word sum0=0; //初始化时采集来9个灯的全白电压和
//word sum1=0; //实际采集来的左4个灯的电压和
//word sum22=0; //实际采集来的右4个灯的电压和
int fla=0;//标志是出道还是入道
void AD_Init();
void PWM_Init();
void PWM_Init1();
//void PID();
void AD_Init(void) //AD初始化
{
//控制寄存器2: 上电,标志位快速清零,开中断
ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK|ATD0CTL2_ASCIE_MASK);
ATD1CTL2 = (ATD1CTL2_ADPU_MASK|ATD1CTL2_AFFC_MASK|ATD1CTL2_ASCIE_MASK);
//控制寄存器3:转换序列长度为3
ATD0CTL3 =0x78;// (ATD0CTL3_S2C_MASK|ATD0CTL3_S1C_MASK);
ATD1CTL3 =0x78;// (ATD1CTL3_S2C_MASK|ATD1CTL3_S1C_MASK);
//控制寄存器4:
ATD0CTL4 = (ATD0CTL4_SRES8_MASK|ATD0CTL4_PRS1_MASK|ATD0CTL4_PRS0_MASK);
ATD1CTL4 = (ATD1CTL4_SRES8_MASK|ATD1CTL4_PRS1_MASK|ATD1CTL4_PRS0_MASK);
//控制寄存器5:
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK|ATD0CTL5_MULT_MASK);
ATD1CTL5 = (ATD1CTL5_DJM_MASK|ATD1CTL5_SCAN_MASK|ATD1CTL5_MULT_MASK);
ATD0DIEN=0x00; // 禁止数字输入缓冲
ATD1DIEN=0x00; // 禁止数字输入缓冲
}
#pragma CODE_SEG NON_BANKED //中断服务程序
#pragma TRAP_PROC
void interrupt 22 Int_AD0(void)
{
AD_wData[0] = ATD0DR0; //将结果寄存器中的值存放到数组中
AD_wData[1] = ATD0DR1; //将结果寄存器中的值存放到数组中
AD_wData[2] = ATD0DR2; //将结果寄存器中的值存放到数组中
AD_wData[3] = ATD0DR3;
AD_wData[4] = ATD0DR4;
AD_wData[5] = ATD0DR5;
AD_wData[6] = ATD0DR6;
AD_wData[7] = ATD0DR7;
AD_wData[8] = ATD1DR0;
}
#pragma CODE_SEG DEFAULT
word max(word a,word b,word c,word d,word e,word
f,word r,word w) {
word maxx=0;
if(a>maxx)maxx=a;
if(b>maxx)maxx=b;
if(c>maxx)maxx=c;
if(d>maxx)maxx=d;
if(e>maxx)maxx=e;
if(f>maxx)maxx=f;
if(r>maxx)maxx=r;
if(w>maxx)maxx=w;
return maxx;
}
void delay0(){
for(i=0;i<0xFFFF;i++)
for(m=0;m<0x05;m++);
}
void delay1(){
for(i=0;i<0xFFFF;i++);
// for(i=0;i<0xFFFF;i++);
}
void main(void)
{
AD_Init(); //AD 初始化
DDRB = 0xFF;
DDRA_BIT6=0; //A_BIT6口作为第二块板左边传感器的输入口
DDRA_BIT7=0; //A_BIT7口作为第二块板右边传感器的输入口
PORTB = 0xFF;
p=0;
for(j=0;j<9;j++)
{
AD_wData[j] = 0; //全局变量初始化
sum[j]=0;
avrg0[j]=0;
avrg1[j]=0;
summ[j]=0;
}
for(j=0;j<9;j++) {
max0[j]=0;ss[j]=0;
}
for(j=0;j<8;j++)
sum2[j]=0;
EnableInterrupts; //开AD中断
for(i=0;i<0xFFFF;i++);
for(i=0;i<0xFF;i++) //只能是FF,防止下面sum溢出
{
for(j=0;j<9;j++)
//采集白道路信息
{
sum[j]=sum[j]+AD_wData[j];
}
}
for(i=0;i<9;i++) {
sum0=sum0+sum[i]/0xFF;
avrg0[i]=sum[i]/0xFF;
}
PORTB=sum[0]/0xFF; //显示0通道采集到的值
delay0();
PORTB=0x00;//显示马上得进行黑道信息采集了
delay1();
for(j=0;j<9;j++){
for(m=0;m<0xFF;m++){
summ[j]=summ[j]+AD_wData[j];
}
avrg1[j]=summ[j]/0xFF;
PORTB=avrg1[j]; //显示采来的黑道信息
cha[j]=avrg1[j]-avrg0[j];
delay0();
PORTB=0x00; //显示马上得进行下一次黑道信息采集了
delay1();
}
PORTB=0x00;
//灯全亮,提示车马上就可以跑了
delay1();
PWM_Init() ;
PWM_Init1(1500,1,200);
for(i=0;i<0xFFF;i++);
// delay1();
for(;;)
{
int f=0;
u3=100;
if(flagk1==1){
p21=0;
flagk2=0;
p11++;
if(p11==0xFFF)flagkk1=1;
}else if(flagk2==1){
p11=0;
flagk1=0;
p21++;
if(p21==0xFFF)flagkk2=1;
}
for(f=0;f<9;f++){
s[f]=AD_wData[f];
ss[f]=s[f]-(avrg0[f]-0x50); //当前值减去初始白道值,以便比较
}
for(f=0;f<8;f++)sum2[f]=ss[f]+ss[f+1]; //两两灯电压之和
//减去1.6V防止溢出*******************
if(AD_wData[0]<0xC0&& AD_wData[1]<0xC0&& AD_wData[2]<0xC0&&AD_wData[3]<0xC0&&
AD_wData[4]<0xC0&&AD_wData[5]<0xC0&&AD_wData[6]<0xC0&&AD_wData[7]<0xC0&&
AD_wData[8]<0xC0){
if(sum2[0]<0xC0&&sum2[1]<0xC0&&sum2[2]<0xC0&&sum2[3]<0xC0&&
sum2[4]<0xC0&&sum2[5]<0xC0&&sum2[6]<0xC0&&sum2[7]<0xD0){
fla=1;
if(flagg0==1)
{
for(i=0;i<0xFF;i++);
PWM_Init1(1140,u1,200);
flagk1=1;
flagkk2=0;
for(;;){
if(AD_wData[4]>0xB0||AD_wData[5]>0xB0||AD_wData[6]>0xB0||
AD_wData[7]>0xB0||AD_wData[8]>0xB0){
flagg0=0;
break;
}
}
}
else if(flagg0==2){
for(i=0;i<0xFF;i++);
PWM_Init1(1860,u1,200);
flagk1=0;
flagkk2=1;
for(;;)if(AD_wData[0]>0xB0||AD_wData[1]>0xB0||
AD_wData[2]>0xB0||AD_wData[3]>0xB0||AD_wData[4]>0xB0){
flagg0=0;
break;
}
}
}else{
}
}else{
if(s[0]-(avrg0[0]-0x13)<0x40 && s[1]-(avrg0[1]-0x13)<0x40 &&
s[2]-(avrg0[2]-0x13)<0x40 && s[3]-(avrg0[3]-0x13)<0x40 &&
s[4]-(avrg0[4]-0x13)<0x40 && s[5]-(avrg0[5]-0x13)<0x40 &&
s[6]-(avrg0[6]-0x13)<0x40 && s[7]-(avrg0[7]-0x13)<0x40 &&
s[8]-(avrg0[8]-0x13)<0x40)
///////////注意调整该值36***************
{
/* if(PORTA_BIT6!=0||PORTA_BIT7!=0){
if(PORTA_BIT6!
=0&&PORTA_BIT7==0)PWM_Init1(1900,200,1);
else if(PORTA_BIT7!=0&&PORTA_BIT6==0)
PWM_Init1(1100,200,1);
}
*/
}else{
k=max(sum2[0],sum2[1],sum2[2],sum2[3],sum2[4],sum2[5],sum2[6],sum2[7]);
//谁两和最大,黑道就在谁两之间
if(k==sum2[0]){
p=0;
flagg0=2;
if(fla==1)
control_11();
else if(fla==0) control_1();
}
else{
if(k==sum2[1]){
p=0;
p1=0;
fla=0;
control_2(s[1],s[2],ss[1],ss[2],cha[1],cha[2],avrg0[1],avrg0[2]);
}
else{if(k==sum2[2]){
p=0;
p1=0;
fla=0;
control_3(s[2],s[3],ss[2],ss[3],cha[2],cha[3],avrg0[2],avrg0[3]);
}
else{if(k==sum2[3]){
p=0;
p1=0;
fla=0;
control_4(s[3],s[4],ss[3],ss[4],cha[3],cha[4],avrg0[3],avrg0[4]);
}
else{if(k==sum2[4]){
fla=0;
p1=0;
control_5(s[4],s[5],ss[4],ss[5],cha[4],cha[5],avrg0[4],avrg0[5]);
}
else{if(k==sum2[5]){
fla=0;
p1=0;
control_6(s[5],s[6],ss[5],ss[6],cha[5],cha[6],avrg0[5],avrg0[6]);
}
else{if(k==sum2[6]){
p=0;
p1=0;
fla=0;
control_7(s[6],s[7],ss[6],ss[7],cha[6],cha[7],avrg0[6],avrg0[7]);
}
else{if(k==sum2[7]){
p=0;
flagg0=1;
if(fla==0)
control_8();
else if(fla==1)
control_88();
} else{
}
}
}
}
}
}
}
}
}
}
}
}
复制代码
作者:
长安丿
时间:
2016-10-23 00:16
这做出来效果是只跑黑道吗?
作者:
Feng爸爸
时间:
2016-11-17 09:34
这个能干什么?
作者:
机器人制作
时间:
2016-12-13 17:18
楼主,有联系方式吗
作者:
213123213
时间:
2017-2-25 21:20
真假?
作者:
213123213
时间:
2017-2-25 21:22
这个文件是哪个组别的作品?光电四轮?
作者:
925302604
时间:
2017-4-23 11:16
厉害
作者:
i子昊
时间:
2017-7-10 10:18
好棒好棒哦,谢谢
作者:
leikes
时间:
2018-3-25 15:47
谢谢楼主分享,新人注册,黑币不足5555555555
作者:
qq944960260
时间:
2018-3-27 19:21
谢谢楼主分享,新人注册,黑币不足5555555555
作者:
你我都懵懵懂懂
时间:
2018-4-4 21:11
谢谢共享
作者:
始终33
时间:
2018-4-6 22:51
楼主你这样真的好吧 祖传代码并不能真正给新手带来技术
作者:
安奕啊啊啊
时间:
2018-11-20 19:42
这是寻迹小车》/?
作者:
mcu_mpu
时间:
2018-11-23 12:14
好东西,学习下。
作者:
79186905
时间:
2019-3-2 09:43
谢谢分享
作者:
1235486
时间:
2019-6-20 22:47
谢谢楼主
作者:
薇草6
时间:
2019-7-4 18:49
垃圾啥都没有
作者:
#尘风
时间:
2019-11-25 21:22
刚注册,新人报道,不过楼主好厉害
作者:
#尘风
时间:
2019-11-25 21:24
刚注册,新人报道,不过楼主好厉害
作者:
小黑MZ
时间:
2019-12-6 09:57
谢谢大佬
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1