找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3730|回复: 5
打印 上一主题 下一主题
收起左侧

循迹小车程序

[复制链接]
跳转到指定楼层
楼主
ID:83710 发表于 2015-6-23 23:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
sbit IN1=P2^0;  
sbit ENA=P2^1;
sbit IN2=P2^2;                       
sbit IN4=P2^3;
sbit ENB=P2^4;
sbit IN3=P2^5;
                                                                                                         

sbit hw1=P1^0;          
sbit hw2=P1^1;
sbit hw3=P1^2;
sbit hw4=P1^3;
               
uchar PWM1=0 ;    //**右边电机的占空比**//
uchar PWM2=0 ;    //**左边电机的占空比**//
uchar num=0;        //**定时器中断计数器**//
uchar flag;
void init()
{
    TMOD=0x01;
        TH0=(65536-50)/256;
        TL0=(65536-50)%256;
        EA=1;
        ET0=1;
        TR0=1;

        IN1=0;
        IN2=0;
        IN3=0;
        IN4=0;
}


void main()
{
     init();

         while(1)
         {
                 if(hw1||hw2||hw3||hw4)//如果检测到信号
                    {
                             if(hw1&&hw2&&hw3&&hw4)
                                 {
                                     ENA=0;
                                         ENB=0;
                                 }
                                 if(hw1&&!hw2&&!hw3&&!hw4)
                                         {
                                                 IN1=1;
                                                 IN2=0;
                                                 IN3=1;
                                                 IN4=0;
                                                 PWM1=0;
                                                 PWM2=15;
                                                 flag=1;
                                         }
                                 if(!hw1&&hw2&&!hw3&&!hw4)
                                         {
                                             IN1=1;
                                                 IN2=0;
                                                 IN3=1;
                                                 IN4=0;
                                                 PWM1=0;
                                                 PWM2=13;
                                                 flag=2;
                                         }
                                 if(!hw1&&!hw2&&hw3&&!hw4)
                                         {
                                            IN1=1;
                                            IN2=0;
                                            IN3=1;
                                                IN4=0;
                                                PWM1=13;
                                                PWM2=0;
                                                flag=3;
                                         }
                                 if(!hw1&&!hw2&&!hw3&&hw4)
                                         {
                                             IN1=1;
                                                 IN2=0;
                                                 IN3=1;
                                                 IN4=0;
                                                 PWM1=15;
                                                 PWM2=0;
                                                 flag=4;
                                         }
                        }
                 else  //如果检测不到信号
                   {
                       switch(flag)
                           {
                              case 1:                         
                                        {
//                                                            IN1=1;
//                                                         IN2=0;
//                                                         IN3=1;
//                                                         IN4=0;
//                                                         PWM1=10;
//                                                         PWM2=5;
                                                 IN1=0;
                                                 IN2=1;
                                                 IN3=1;
                                                 IN4=0;
                                                 PWM1=12;
                                                 PWM2=12;
                                                         //flag=0;
                                                }        break;

                                               
                              case 2:
                                        {
                                                            IN1=1;
                                                         IN2=0;
                                                         IN3=1;
                                                         IN4=0;
                                                         PWM1=8;
                                                         PWM2=8;
                                                         flag=0;
                                                }         break;
                                               
                              case 3:
                                        {
                                                            IN1=1;
                                                         IN2=0;
                                                         IN3=1;
                                                         IN4=0;
                                                         PWM1=8;
                                                         PWM2=8;
                                                         flag=0;
                                                }        break;

                                               
                              case 4:
                                        {
                                                 IN1=1;
                                                 IN2=0;
                                                 IN3=0;
                                                 IN4=1;
                                                 PWM1=12;
                                                 PWM2=12;
                                                        // flag=0;
                                                }          break;

                                               
                              default:
                                        {
                                                            IN1=1;
                                                         IN2=0;
                                                         IN3=1;
                                                         IN4=0;
                                                         PWM1=12;
                                                         PWM2=12;
                                                }
                           }
                   }

         }          
}

void timer0() interrupt 1
{
     TH0=(65536-50)/256;
         TL0=(65536-50)%256;
         num++;
         if(num>=40)num=0;
         if(num<PWM1)ENA=1;
         else ENA=0;
         if(num<PWM2)ENB=1;
         else ENB=0;

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:88399 发表于 2015-8-15 19:31 | 只看该作者
在做小车,来学习~~~~~
回复

使用道具 举报

板凳
ID:142243 发表于 2016-10-12 21:54 | 只看该作者
新手,不知道怎么接线
回复

使用道具 举报

地板
ID:219135 发表于 2017-7-12 15:45 | 只看该作者
学习学习
回复

使用道具 举报

5#
ID:228550 发表于 2017-9-10 18:22 | 只看该作者
未接到信号的由哪几种情况,可以详细说明一下吗
回复

使用道具 举报

6#
ID:235166 发表于 2017-9-24 12:49 | 只看该作者
  if(hw1&&hw2&&hw3&&hw4)
                                  {
                                      ENA=0;
                                          ENB=0;
                                  }
                                  if(hw1&&!hw2&&!hw3&&!hw4)
                                          {
                                                  IN1=1;
                                                  IN2=0;
                                                  IN3=1;
                                                  IN4=0;
                                                  PWM1=0;
                                                  PWM2=15;
                                                  flag=1;
                                          }
楼主你好,请问这段可否给我细讲一下,看到这儿就有点不懂了,我正在写小车PWM程序,万分感谢。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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