找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6023|回复: 3
收起左侧

51单片机小车仿真程序

[复制链接]
ID:327374 发表于 2018-5-11 10:31 | 显示全部楼层 |阅读模式
51单片机小车仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png


单片机源程序如下:
  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. }
复制代码
0.jpg

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

评分

参与人数 2黑币 +55 收起 理由
yz3210 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:327374 发表于 2018-5-11 10:35 | 显示全部楼层
真的挺好的
回复

使用道具 举报

ID:355296 发表于 2018-6-22 23:45 | 显示全部楼层
想请教一下你这个红外感应是怎么弄的呀?仿真图里是只有两个按钮呢?
回复

使用道具 举报

ID:355296 发表于 2018-6-22 23:46 | 显示全部楼层
想请教一下,这个小车的红外是怎么加上去的呀?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表