找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17562|回复: 13
收起左侧

基于单片机控制的简易自动循迹小车仿真与程序源码

  [复制链接]
ID:382874 发表于 2018-8-4 18:37 | 显示全部楼层 |阅读模式
本任务要求设计与制作一个基于单片机控制的简易自动循迹小车,小车以AT89C51 为控制核心,用单片机产生PWM波,控制小车速度。利用红外光电传感器对路面黑色轨迹进行检测,并将路面检测信号反馈给单片机。单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着黑色轨迹自动行驶,实现小车自动寻迹的目的。加热用以红色发光二极管代表,红灯亮表示加热,红灯灭表示停止加热。
附件包含:proteus仿真图,C源码,hex文件。
0.png 0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. unsigned char zkb1=0;    //**左边电机的占空比**//
  5. unsigned char zkb2=0 ;    //**右边电机的占空比**//
  6. unsigned char t=0;        //**定时器中断计数器**//
  7. sbit RSEN1=P1^0;
  8. sbit RSEN2=P1^1;
  9. sbit LSEN1=P1^2;
  10. sbit LSEN2=P1^3;
  11. sbit IN1=P0^0;
  12. sbit IN2=P0^1;
  13. sbit IN3=P0^2;
  14. sbit IN4=P0^3;
  15. sbit ENA=P0^4;
  16. sbit ENB=P0^5;
  17. //****************延时函数****************//
  18. void delay(int z)   
  19. {   while (z--);  }
  20. //**********初始化定时器,中断***********//
  21. void init()
  22. {  TMOD=0x01;
  23.    TH0=(65536-100)/256;
  24.    TL0=(65536-100)%256;
  25.    EA=1;
  26.    ET0=1;
  27.    TR0=1;
  28. }
  29. //***********中断函数+脉宽调制***********//
  30. void timer0() interrupt 1
  31. { if(t<zkb1)
  32.      ENA=1;
  33.   else
  34.      ENA=0;
  35.   if(t<zkb2)
  36.       ENB=1;
  37.   else
  38.       ENB=0;
  39.             t++;
  40.   if(t>=100)
  41.     {t=0;}
  42. }
  43. //******************直行******************//
  44. void qianjin()
  45. {  zkb1=30;
  46.     zkb2=30;
  47. }
  48. //***************左转函数1***************//
  49. void turn_left1()
  50. {  zkb1=0;
  51.     zkb2=50;
  52. }
  53. //***************左转函数2***************//
  54. void turn_left2()
  55. {  zkb1=0;
  56.     zkb2=60;
  57. }
  58. //***************右转函数1***************//
  59. void turn_right1()
  60. {  zkb1=50;
  61.     zkb2=0;
  62. }
  63. //***************右转函数2***************//
  64. void turn_right2()
  65. {  zkb1=60;
  66.     zkb2=0;
  67. }
  68. //***************循迹函数*****************//
  69. void xunji()
  70. { uchar flag;
  71.   if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1))
  72.     { flag=0; }//*******直行*******//
  73.    else  if((RSEN1==0)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1))
  74.     { flag=1;} //***左偏1,右转1***//
  75.    else  if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))
  76.     { flag=2;} //***左偏2,右转2***//
  77.    else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==1))
  78.     { flag=3; }//***右偏1,左转1***//
  79.   else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))
  80.     { flag=4; }//***右偏2,左转2***//
  81.   switch (flag)
  82.      {  case 0:qianjin();
  83.               break;
  84.         case 1:turn_right1();
  85.               break;
  86.         case 2:turn_right2();
  87.               break;
  88.         case 3:turn_left1();
  89.               break;
  90.         case 4 :turn_left2();
  91.               break;
  92.         default:break;
  93.       }
  94. }
  95. //****************主程序****************//
  96. void main()
  97. { init();
  98.   zkb1=30;
  99.   zkb2=30;
  100.   while(1)
  101.   {  IN1=1; //******给电机加电启动******//
  102.      IN2=0;
  103.      IN3=1;
  104.      IN4=0;
  105.      ENA=1;
  106.      ENB=1;
  107.         while(1)
  108.      {  xunji(); //*********寻迹**********//
  109.      }
  110.     }
  111. }
复制代码

所有资料51hei提供下载:
自动循迹小车控制系统.zip (76.25 KB, 下载次数: 399)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1123277 发表于 2024-6-1 17:00 来自手机 | 显示全部楼层
哪里能体现寻迹呢?
回复

使用道具 举报

ID:858827 发表于 2020-12-11 18:51 | 显示全部楼层
对于四轮的小车应该同样适用
回复

使用道具 举报

ID:760763 发表于 2020-6-3 20:08 | 显示全部楼层
下载咋打不开
回复

使用道具 举报

ID:511094 发表于 2019-11-20 21:22 | 显示全部楼层
不错的仿真资料
回复

使用道具 举报

ID:641611 发表于 2019-11-14 01:05 | 显示全部楼层
我也想要程序
回复

使用道具 举报

ID:558624 发表于 2019-8-7 12:29 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:566414 发表于 2019-6-19 10:30 | 显示全部楼层
想下载
回复

使用道具 举报

ID:528702 发表于 2019-5-6 16:46 | 显示全部楼层
想下载
回复

使用道具 举报

ID:476023 发表于 2019-2-12 21:48 | 显示全部楼层
大佬这个int1,2,3是干啥的啊
回复

使用道具 举报

ID:450655 发表于 2018-12-20 13:11 | 显示全部楼层
比较需要这个仿真目前好多人做不了
回复

使用道具 举报

ID:423263 发表于 2018-12-5 20:43 | 显示全部楼层
循迹是不是需要TCRT5000 模块
这个怎么编程控制
回复

使用道具 举报

ID:439040 发表于 2018-12-4 11:12 | 显示全部楼层
想做一个
回复

使用道具 举报

ID:439040 发表于 2018-12-4 11:00 | 显示全部楼层
挺不错,决定做一个,谁有淘宝店可以提供下配件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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