找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3592|回复: 1
收起左侧

8051单片机寻迹小车程序及其原理图

[复制链接]
ID:744327 发表于 2020-5-22 14:48 | 显示全部楼层 |阅读模式
    分享:   
    8051单片机寻迹小车程序及其原理图  
   随着现代电子技术的飞速发展,通信技术也取得了长足的进步。在无线通信领域,越来越多的通信产品大量涌现出来。但设计无线数据传输产品往往需要相当的无线电专业知识和价格高昂的专业设备,因而影响了用户的使用和新产品的开发。
    卓越的专业51黑电子论坛,会让我们人生更坦途。

设计一种以89C51单片机为控制核心,具备避障、循迹和遥控功能的智能小车.使用光电开关检测障碍,通过控制电机转向来进行壁障;使用红外传感器寻找线路,控制智能小车自行循迹;使用红外遥控器实现前进、后退、向右、向左、停止和发动功能.小车由底盘、传感器和车载电路组成,车载电路包括电源、单片机最小系统和驱动.系统采用了模块化设计方法,结构简单,可靠性高.

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar  unsigned  char
  3. #define  uint  unsigned  int
  4. sbit R=P1^0;//左边传感器
  5. sbit M=P1^1;//中间传感器
  6. sbit L=P1^2;//右边传感器
  7. sbit RM=P1^3;//右边电机
  8. sbit LM=P1^4;//左边电机

  9. void  turnLLL(void);//左转45度
  10. void  turnLL(void);//左转30度
  11. void  turnL(void);//左转15度
  12. void  turn(void);//居中
  13. void  turnR(void);//右转15度
  14. void  turnRR(void);//右转30度
  15. void  turnRRR(void);//右转45度
  16. void  delay(uint z);//延时0.1ms
  17. void main()
  18. {
  19.           uint i;
  20.          DDRA=0X00;
  21.         DDRB=0XFF;
  22.     DDRD|=0X30;
  23.         TCCR1A=0x91; //8位相位修正PWM 8000000/(64*2*256)=244.14hz
  24.         TCCR1B=0x03; //clk/64
  25.         OCR1A=250;        //初值占空比100%
  26.         while(1)
  27.         {
  28.                  PINA=i;
  29.                 for(i=0;i<8;i++)
  30.                 {
  31.                            if(PINA==0xf7)//加速前进4灯1111,0111
  32.                           {
  33.                                OCR1A=170;//占空比100%/202
  34.                              turn();//居中
  35.                      }
  36.                          if(PINA==0xef)//加速前5灯1110,1111
  37.                           {
  38.                                OCR1A=170;//占空比100%
  39.                              turn();//居中
  40.                      }
  41.                          if(PINA==0xe7)//加速前进4、5灯1110,0111
  42.                           {
  43.                                OCR1A=170;//占空比100%
  44.                              turn();//居中
  45.                      }
  46.                      if(PINA==0xcf)//速度稍减前进5、6灯1100,1111
  47.                      {
  48.                               OCR1A=170;//占空比90%/176
  49.                             turnL();//左转-15度
  50.                      }
  51.                           if(PINA==0xdf)//速度稍减前进6灯1101,1111
  52.                      {
  53.                               OCR1A=120;//占空比90%/176
  54.                             turnL();//左转-15度
  55.                      }
  56.                      if(PINA==0x9f)//速度再减前进6、7灯1001,1111
  57.                      {
  58.                               OCR1A=110;//占空比80%/150
  59.                             turnLL();//左转-30度
  60.                      }
  61.                             if(PINA==0xbf)//速度再减前进7灯1011,1111
  62.                      {
  63.                               OCR1A=110;//占空比80%/150
  64.                             turnLL();//左转-30度
  65.                      }
  66.                       if(PINA==0x3f)//速度减前进7、8灯0011,1111
  67.                       {
  68.                               OCR1A=90;//占空比70%/150
  69.                             turnLLL();//左转-45度
  70.                       }
  71.                       if(PINA==0X7f)//速度稍减前进8灯0111,1111
  72.                       {
  73.                               OCR1A=90;//占空比70%/150
  74.                         turnLLL();//右转45度
  75.                       }
  76.                      if(PINA==0xf3)//速度稍减前进3、4灯1111,0011
  77.                      {
  78.                               OCR1A=120;//占空比90%/176
  79.                             turnR();//右转15度
  80.                      }
  81.                            if(PINA==0xfb)//速度稍减前进3灯1111,1011
  82.                      {
  83.                               OCR1A=120;//占空比90%/176
  84.                             turnR();//右转15度
  85.                      }
  86.                      if(PINA==0Xf9)//速度再减前进2、3灯1111,1001
  87.                      {
  88.                               OCR1A=110;//占空比80%150
  89.                             turnRR();//右转30度
  90.                     }
  91.                             if(PINA==0Xfd)//速度再减前进2灯1111,1101
  92.                      {
  93.                               OCR1A=110;//占空比80%/150
  94.                             turnRR();//右转30度
  95.                     }
  96.                     if(PINA==0Xfc)//速度稍减前进1、2灯1111,1100
  97.                     {
  98.                             OCR1A=90;//占空比70%/150
  99.                           turnRRR();//右转45度
  100.                     }
  101.                     if(PINA==0Xfe)//速度稍减前进1灯1111,1110
  102.                     {
  103.                               OCR1A=90;//占空比70%/150
  104.                            turnRRR();//右转45度
  105.                     }
  106.                 }
  107.         }
  108. }

  109. /*-45度*/
  110. void  turnLLL()
  111. {
  112.          uchar i;
  113.         DDRB=0XFF;
  114.         PORTB=0XFF;
  115.         for(i=0;i<5;i++)
  116.         {
  117.                 PORTB&=~BIT(0);                                          
  118.                 delay(18);        
  119.                 PORTB|=BIT(0);
  120.                 delay(4);
  121.         }
  122. }
  123. /*-30度*/
  124. void  turnLL()
  125. {
  126.          uchar i;
  127.         DDRB=0XFF;
  128.         PORTB=0XFF;
  129.         for(i=0;i<5;i++)
  130.         {
  131.                 PORTB&=~BIT(0);                                          
  132.                 delay(18);        
  133.                 PORTB|=BIT(0);
  134.                 delay(6);
  135.         }
  136. }
  137. /*-15度*/
  138. void  turnL()
  139. {
  140.          uchar i;
  141.         DDRB=0XFF;
  142.         PORTB=0XFF;
  143.         for(i=0;i<5;i++)
  144.         {
  145.                 PORTB&=~BIT(0);                                          
  146.                 delay(18);        
  147.                 PORTB|=BIT(0);
  148.                 delay(8);
  149.         }
  150. }

  151. /*0度居中*/
  152. void  turn()//居中
  153. {
  154.          uchar i;
  155.         DDRB=0XFF;
  156.         PORTB=0XFF;
  157.         for(i=0;i<5;i++)
  158.         {
  159.                 PORTB&=~BIT(0);                                          
  160.                 delay(18);        
  161.                 PORTB|=BIT(0);
  162.                 delay(10);
  163.         }
  164. }

  165. /*15度*/
  166. void  turnR()
  167. {
  168.          uchar i;
  169.         DDRB=0XFF;
  170.         PORTB=0XFF;
  171.         for(i=0;i<5;i++)
  172.         {
  173.                 PORTB&=~BIT(0);                                          
  174.                 delay(18);        
  175.                 PORTB|=BIT(0);
  176.                 delay(12);
  177.         }
  178. }
  179. /*30度*/
  180. void  turnRR()
  181. {
  182.          uchar i;
  183.         DDRB=0XFF;
  184.         PORTB=0XFF;
  185.         for(i=0;i<5;i++)
  186.         {
  187.                 PORTB&=~BIT(0);                                          
  188.                 delay(18);        
  189.                 PORTB|=BIT(0);
  190.                 delay(14);
  191.         }
  192. }
  193. /*45度*/
  194. void  turnRRR()
  195. {
  196.          uchar i;
  197.         DDRB=0XFF;
  198.         PORTB=0XFF;
  199.         for(i=0;i<5;i++)
  200.         {
  201.                 PORTB&=~BIT(0);                                          
  202.                 delay(18);        
  203.                 PORTB|=BIT(0);
  204.                 delay(17);
  205.         }
  206. }

  207. /*定时0.1MS*/
  208. void  delay(uint z)
  209. {
  210.            uint i,j;
  211.           for(i=0;i<z;i++)
  212.                           for(j=0;j<90;j++);
  213. }
复制代码

篇幅很长,请下载查阅。


51hei.png

8051单片机寻迹小车程序及其原理图.rar

449.51 KB, 下载次数: 91, 下载积分: 黑币 -5

回复

使用道具 举报

ID:508502 发表于 2020-9-14 16:01 | 显示全部楼层
先收藏,谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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