标题: 51单片机小车仿真程序 [打印本页]

作者: 5523223221312    时间: 2018-5-11 10:31
标题: 51单片机小车仿真程序
51单片机小车仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



单片机源程序如下:
  1. /* 买了个四驱车的底盘,双直流电机,一只驱动左边两轮,一只驱动                  
  2. 右边两轮。驱动电压为4.5-9V,配两个红外对管,打算一直装在小车前方                  
  3. ,一只装在小车底盘,分别检测前方障碍和台阶,小车碰到前方障碍后                    
  4. 左边两轮停止,右轮驱动,实现转弯。碰到台阶后小车先后退,然后左轮                  
  5. 停止,右轮驱动实现转弯,转弯结束后小车继续前进,如此循环*/           

  6. #include<reg52.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uchar cs1,cs2,num1,num2;
  10. uchar code table[]={0,1};          //占空比50%
  11. sbit qdg=P3^4;                                  //前红外对管,检测小车前方障碍
  12. sbit xdg=P3^5;                                  //下红外对管,检测小车是否碰到台阶
  13. sbit in1=P1^0;                                  //L298输入
  14. sbit in2=P1^1;                                  //L298输入
  15. sbit in3=P1^2;                                  //L298输入
  16. sbit in4=P1^3;                              //L298输入
  17. sbit ena=P1^4;                              //L298输入使能A   
  18. sbit enb=P1^5;                              //L298输入使能B

  19. void delay(int z)                          //延时函数
  20. {
  21.         uint x,y;
  22.         for(x=z;x>0;x--)
  23.            for(y=110;y>0;y--);
  24. }

  25. void init()                                        //初始化函数
  26. {
  27.         TMOD=0x11;
  28.         TH0=(65536-500)/256;
  29.         TL0=(65536-500)%256;
  30.         ET0=1;
  31.         TR0=1;
  32.         EA=1;
  33. }

  34. void main()
  35. {
  36.   init();
  37.   while(1)
  38.    {
  39.           if(qdg==1)                  //如果前方没有检测到障碍,对管输出高电平                 
  40.                 {
  41.                    ena=1;                  //L298使能端A为高
  42.                    enb=1;                  //L298使能端B为高
  43.                    in2=0;                  //L298IN2为低,小车左轮前进          
  44.                    in4=0;                  //L298IN4为低,小车右轮前进          
  45.                 }
  46.           else
  47.                 {
  48.                    ena=0;                  //如果前方检测到障碍,L298使能端为低 ,左轮停止(小车转弯)                  
  49.                    delay(1000);
  50.                    ena=1;                  //一秒后转弯结束,继续两轮驱动前进
  51.                 }
  52.           if(xdg==0)                  //如果小车下方未检测到障碍(碰到台阶)          
  53.             {
  54.                    in2=1;                  //L298IN2为高,小车左轮后退
  55.                    in4=1;                  //L298IN4为高,小车右轮后退
  56.                    delay(1000);
  57.                    ena=0;                  //后退一秒后,左轮停止(转弯)  
  58.                    delay(1000);          //一秒后转弯结束,小车继续前进
  59.                 }
  60.         }
  61. }

  62. void timer0() interrupt 1
  63. {
  64.     TH0=(65536-500)/256;
  65.     TL0=(65536-500)%256;
  66.     cs1++;
  67.     if (cs1==10)   
  68.           {
  69.                 cs1=0;   
  70.             num1++;
  71.                 if(num1==3)
  72.                 num1=0;
  73.                 in1=table[num1];

  74.                 num2++;
  75.                 if(num2==3)
  76.                 num2=0;
  77.                 in3=table[num2];
  78.           }
  79. }
复制代码


所有资料51hei提供下载:
小车.rar (59.09 KB, 下载次数: 98)



作者: 5523223221312    时间: 2018-5-11 10:35
真的挺好的
作者: 杂七杂稀碎的    时间: 2018-6-22 23:45
想请教一下你这个红外感应是怎么弄的呀?仿真图里是只有两个按钮呢?
作者: 杂七杂稀碎的    时间: 2018-6-22 23:46
想请教一下,这个小车的红外是怎么加上去的呀?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1