首页 > 编程知识 正文

红外循迹小车代码,循迹小车

时间:2023-05-04 15:00:05 阅读:175783 作者:3604

共享跟踪购物车的代码

# includec 8051 f 020.h # defineucharunsignedchar # defineuintunsignedint # define sysclk 22118400 sbit in1=P3 ^ 0; sbit IN2=P3^1; sbit IN3=P3^2; sbit IN4=P3^3; sbit S0=P2^0; sbit S1=P2^1; sbit S2=P2^2; sbit S3=P2^3; sbit S4=P2^4; uchar code table[]={0xff,0xd 0,0xb 0,0x 80,0x 00 }; //PWM输出控制数组ucharcodetable1[ ]={0xc 0,0x F9,0x a4,0xb 0,0x 99,0x 92,0x F8,0x 80,0x 90 }; //数码管输出数组uchar i,r,l,temp,lukou=1,num; voidsysclk_init(/时钟初始化) { int i; OSCXCN=0x67; for(I=0; i256; I; while (! (OSCXCN0x80 ) OSCICN=0x88; }voidio_init(/io端口初始化) { XBR0=0x50; //交叉开关配置寄存器XBR0、XBR1、XBR2 XBR1=0x00; XBR2=0x40; P0MDOUT=0xff; P3MDOUT=0xff; }void timer_init () { CKCON=0x78; //时钟控制寄存器TMOD=0x11; //计数器定时器方式寄存器th0=(65536-18432 )/256; //tf0/tf1中断请求标志位为中断TL0=(65536-18432 ) %6;

EA=1;        ET0=1;        ET1=1;} void PCA_int_init()                //PCA0初始化{        IE=0x85;        IP=0x00;        EIP1=0x08;        EIE1=0x08;        PCA0MD=0x09;        PCA0CPM0=0x42;        PCA0CPM1=0x42;        //PCA0CPL0=0x00;                   //设置PCA0CP0脉冲宽度        PCA0CPH0=table[4];//        PCA0CPL1=0x00;                   //设置PCA0CP1脉冲宽度        PCA0CPH1=table[4];        CR=0;        IT0=1;        IT1=1;} void delay(uint z)                //延时{        uint x,y;        for(y=z;y>0;y--)                for(x=0;x<220;x++);}  void zhuanx(uchar zx)   //高速左转向(1)右转向(2)低速左转(3){                       //右转(4)低速前行(5)高速前行(6)急停(7)倒退(8)      switch (zx)        //外加转弯灯,左转PB.0控制左边2个黄灯亮,右转PD.0控制的黄灯亮        {                  //急停灯(红色)有PD.1控制          case 1: l=4;                                    r=0;   //高速向左                  break;          case 2: r=4;                                    l=0;   //高速右转                            break;          case 3: l=2;                          r=0;             //低速左转             break;          case 4: r=2;                          l=0;             //低速右转             break;          case 5: l=r=2;              //低速前行             break;          case 6: l=r=0;           //高速前行             break;                  case 7: l=r=4;                //刹车                     break;                         }        } void panduan() //将得到的AD转换值导入   {             //unsigned char lukou=0;  //lukou变量用于路口判断       //单个传感器检测到信号的情况        //2号传感器检测到信号,其余没有检测到信号       if((S0==0)&&(S1==0)&&(S2==1)&&(S3==0)&&(S4==0))       {             zhuanx(6); //调用高速前行函数       }       // 1号传感器检测到信号,其余没有检测到信号       if((S0==0)&&(S1==1)&&(S2==0)&&(S3==0)&&(S4==0))       {             zhuanx(3);//调用低速左转函数       }       // 0号传感器检测到信号,其余没有检测到       if((S0==1)&&(S1==0)&&(S2==0)&&(S3==0)&&(S4==0))       {             zhuanx(1); //调用高速左转函数       }       //3号传感器检测到信号,其余没有检测到信号       if((S0==0)&&(S1==0)&&(S2==0)&&(S3==1)&&(S4==0))       {            zhuanx(4);  //调用低速右转       }       //4 号传感器检测到信号,其余没有检测到信号       if((S0==0)&&(S1==0)&&(S2==0)&&(S3==0)&&(S4==1))       {           zhuanx(2);  //调用高速右转       }       // 1,2号检测到信号 其余没有         白线在两个传感器中间       if((S0==0)&&(S1==1)&&(S2==1)&&(S3==0)&&(S4==0))         {             zhuanx(3); // 调用低速左转函数         }       //0,1号检测到信号       if((S0==1)&&(S1==1)&&(S2==0)&&(S3==0)&&(S4==0))         {             zhuanx(1);  //调用高速左转函数         }         //2,3号检测到信号       if((S0==0)&&(S1==0)&&(S2==1)&&(S3==1)&&(S4==0))       {             zhuanx(4); //调用低速右转函数       }       //3,4检测到信号       if((S0==0)&&(S1==0)&&(S2==0)&&(S3==1)&&(S4==1))         {             zhuanx(2);//调用高速右转函数         }       //0,1,2有信号              ( 折线检测 )       if((S0==1)&&(S1==1)&&(S2==1)&&(S3==0)&&(S4==0))         {            zhuanx(1);//左转折线  调用高速左转函数         }       //2,3,4有信号       if((S0==0)&&(S1==0)&&(S2==1)&&(S3==1)&&(S4==1))         {             zhuanx(2); //右转折线  调用高速右转函数         }       //1,2,3 有信号       if((S0==0)&&(S1==1)&&(S2==1)&&(S3==1)&&(S4==0))        {             zhuanx(6); //  调用高速直行函数        }           //0,4 有信号           if((S0==1)&&(S4==1))        {                        lukou++;                         if(lukou==1)                         {                                        TR1=1;                                                           }                                if(lukou==2)                         {                                        TR0=0;                                zhuanx(7);                                                                                                                                                        //  调用刹车函数                          }                 if(lukou==3)                            lukou=0;                }                           } void display(){        uchar qian,bai,shi,ge;        qian=temp/1000;        bai=temp%1000/100;        shi=temp%1000%100/10;        ge=temp%10;        P4=0x7f;        P7=table1[ge];        delay(2);        P4=0xbf;        P7=table1[shi];        delay(2);        P4=0xdf;        P7=table1[bai];        delay(2);               P4=0xef;        P7=table1[qian];        delay(2);                      } void run_init(){        IN1=1;                   //向前行驶        IN2=0;        IN3=1;        IN4=0;  }void main(){             WDTCN=0xde;       //关闭看门狗                                          WDTCN=0xad;        SYSCLK_init();        IO_init();        PCA_int_init();               run_init();        timer_init();        CR=1;               while(1){      panduan();   display();}   } void PCA_ISR (void) interrupt 9                //PCA中断服务程序{        CF=0;//        PCA0CPL0=0x00;        PCA0CPH0=table[r];//        PCA0CPL1=0x00;        PCA0CPH1=table[l];        CCF0=1;        CCF1=1;} void timer0() interrupt 1           //定时器0中断{        uchar tt;        TH0=(65536-18432)/256;        TL0=(65536-18432)%256;        tt++;        if(tt==115)        {                temp++;                tt=0;        }} void timer1()  interrupt 3         //定时器1中断{                      TH1=(65536-18432)/256;        TL1=(65536-18432)%256;        TR0=1;       }            复制代码
     

文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-208695-1-1.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。