历史上的今天

今天是:2024年11月14日(星期四)

2019年11月14日 | 基于单片机控制的简易自动循迹小车仿真与程序源码

发布者:CelestialMagic 来源: 51hei关键字:单片机控制  自动循迹小车  中断计数器 手机看文章 扫描二维码
随时随地手机看文章

本任务要求设计与制作一个基于单片机控制的简易自动循迹小车,小车以AT89C51 为控制核心,用单片机产生PWM波,控制小车速度。利用红外光电传感器对路面黑色轨迹进行检测,并将路面检测信号反馈给单片机。单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着黑色轨迹自动行驶,实现小车自动寻迹的目的。加热用以红色发光二极管代表,红灯亮表示加热,红灯灭表示停止加热。

附件包含:proteus仿真图,C源码,hex文件。

单片机源程序如下:

#include

#define uchar unsigned char

#define uint unsigned int

unsigned char zkb1=0;    //**左边电机的占空比**//

unsigned char zkb2=0 ;    //**右边电机的占空比**//

unsigned char t=0;        //**定时器中断计数器**//

sbit RSEN1=P1^0;

sbit RSEN2=P1^1;

sbit LSEN1=P1^2;

sbit LSEN2=P1^3;

sbit IN1=P0^0;

sbit IN2=P0^1;

sbit IN3=P0^2;

sbit IN4=P0^3;

sbit ENA=P0^4;

sbit ENB=P0^5;

//****************延时函数****************//

void delay(int z)   

{   while (z--);  }

//**********初始化定时器,中断***********//

void init()

{  TMOD=0x01;

   TH0=(65536-100)/256;

   TL0=(65536-100)%256;

   EA=1;

   ET0=1;

   TR0=1;

}

//***********中断函数+脉宽调制***********//

void timer0() interrupt 1

{ if(t     ENA=1;

  else 

     ENA=0;

  if(t      ENB=1;

  else 

      ENB=0;

            t++;

  if(t>=100)

    {t=0;}

}

//******************直行******************//

void qianjin()

{  zkb1=30;

    zkb2=30;

}

//***************左转函数1***************//

void turn_left1()

{  zkb1=0;

    zkb2=50;

}

//***************左转函数2***************//

void turn_left2()

{  zkb1=0;

    zkb2=60;

}

//***************右转函数1***************//

void turn_right1()

{  zkb1=50;

    zkb2=0;

}

//***************右转函数2***************//

void turn_right2()

{  zkb1=60;

    zkb2=0;

}

//***************循迹函数*****************//

void xunji() 

{ uchar flag;

  if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1))

    { flag=0; }//*******直行*******//

   else  if((RSEN1==0)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1))

    { flag=1;} //***左偏1,右转1***//

   else  if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))

    { flag=2;} //***左偏2,右转2***//

   else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==1))

    { flag=3; }//***右偏1,左转1***//

  else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))

    { flag=4; }//***右偏2,左转2***//

  switch (flag)

     {  case 0:qianjin();

              break;

        case 1:turn_right1();

              break; 

        case 2:turn_right2();

              break; 

        case 3:turn_left1();

              break; 

        case 4 :turn_left2();

              break;

        default:break;

      }

}

//****************主程序****************//

void main()

{ init();

  zkb1=30;

  zkb2=30;

  while(1)

  {  IN1=1; //******给电机加电启动******//

     IN2=0;

     IN3=1;

     IN4=0;

     ENA=1;

     ENB=1;

        while(1)

     {  xunji(); //*********寻迹**********//

     }

    }

}



关键字:单片机控制  自动循迹小车  中断计数器 引用地址:基于单片机控制的简易自动循迹小车仿真与程序源码

上一篇:单片机通过单个按键按下时间(长短按键)执行不同功能
下一篇:最后一页

推荐阅读

近日,小哈机器人H2佳讯频传,继10月发布会宣布A轮融资6000万后,深圳慧昱教育科技有限公司(以下简称“慧昱科教”)又传喜讯!凭借着雄厚的技术研发实力,专业的内容研发团队,持续的创新能力和科学的企业管理理念,经层层严格审查,慧昱科教成功通过“国家高新技术企业”认定!目前已进入公示阶段,标志着慧昱科教已迈入国家高新技术企业行列!据了解,国...
uchar SDA_Return(void)//0-low level 1-hign level{ uchar flag; uchar oldSREG=SREG; SREG&=~(_BV(7)); DDRC&=0xfd; PORTC|=_BV(PC1); if((PINC&_BV(PC1)) !=0)//0000 0010 flag=1; else flag=0; SREG=oldSREG; re...
集微网11月13日消息,黑鲨产品总监余鑫今天放出了《黑鲨产品经理在线》栏目的总结,解答了用户关心的系统更新时间、跑跑卡丁车120Hz等等问题,具体如下:Q:JOYUI12何时在黑鲨2代产品进行更新?A:黑鲨2系列手机已经在逐步推送JOYUI12版本,黑鲨1系列手机将在11月底逐步推送JOYUI12,请大家耐心等待。Q:跑跑卡丁车的120Hz何时可以在黑鲨3上开通?A:经了...

史海拾趣

问答坊 | AI 解惑

Wince RAS拨号属性的设置

在Wince里创建了cmnet进行GPRS拨号连接,但是连接属性里的拨号地点默认是“单位”,这样会导致拨号码前多了一个“9”,变成“9,*99***1#”,拨号连接不成功。必须手动将拨号地点改为“住宅”才行。 请问大家,如何设置能够使拨号地点默认为“住宅 ...…

查看全部问答∨

有调通过marvell wifi 8686 sdio接口驱动来讨论下???

正在调sdio接口的wifi 8686驱动,sdio确认好的,读写寄存器,加载固件都没问题。有以下问题: 1. 我是直接把驱动放在bsp中编的,wince启动后自动加载wifi驱动, 并且这个wifi驱动会自行搜索热点。我的理解是wifi驱动加载固件启动完wifi芯片注册网络 ...…

查看全部问答∨

protel 99se中,sp232E在哪个库中?

如题。 protel 99se中,SP232E所在的库叫什么?…

查看全部问答∨

lstAdd的使用问题!

    SESSION_POS_S *pTestpos1, *pTestpos2, *pTestpos3, *pPos;     LIST *pMyList = NULL;     int NodeIndex = 0;             DPRINT("-------- lstAdd测试 -------\\n ...…

查看全部问答∨

看看我的成果

本人长期从事单片机开发应用,积累了一定的经验。本人将毕生研究心得集成了文字,放在我的博客里,希望大家光临指导,并给点意见。我的博客地址;http://blog.mcuol.com/user/Article/500.html…

查看全部问答∨

愤怒了搞ARM了

看了看买来的开发板,不晓得能做些啥子有意义的东西来玩,感觉自己如果堕落会浪费很多的时间,最近几天一直在想自己以后该怎么办,今天拿出买来很久的ARM开发板有一种冲动的感觉,TMD应届生就比你们所谓的有经验的差。。。希望热心的网友能够例举些 ...…

查看全部问答∨

ez430-rf2500遇到了问题。。求指点

 想请问你一下 那个ez430-rf2500为什么ed连上电池两个灯还是不闪。。ap的红灯在闪烁。。并且PC上温度只有一个ap温度显示。。就是说ed的没有反应。。好像是没有连接到网络。。后来又折腾了一下。。现在ap的红绿灯都在闪。。但是ed还是没反应。 ...…

查看全部问答∨

特权同学写的sdram控制器读出的数据全是FF?

最近在用特权同学写的sdram控制器,但是串口读出的数据全是FF,不知道出错在什么地方?用没用过调通的朋友,不吝赐教,万分感谢啊…

查看全部问答∨

高手帮忙看一下这程序

#include<reg51.h>    //  包含51单片机寄存器定义的头文件unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //数字0~9的段码unsigned char int_time ; //中断次数计数变量unsigned ...…

查看全部问答∨

Verilog HDL信号类型不一致

module main (                       ....); wire   clk1MHz; // 产生1MHz的时钟波形 // 输入为20MHz的时钟 clock_divider  instT1MHz &nb ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved