找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1179|回复: 0
收起左侧

接线如图所示,程序如下,求大佬指点

[复制链接]
ID:336784 发表于 2018-5-23 20:05 | 显示全部楼层 |阅读模式
/*********引脚定义**********/
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;

#define Duty_cycle   35                      //占空比
#define Cycle                  100                                //PWM周期

sbit Sensor_1 = P1^1;                                        //红外检测
sbit Sensor_2 = P1^2;

sbit Motor_1H = P0^0;                                        //电机控制
sbit Motor_1L = P0^1;
sbit Motor_2H = P0^2;
sbit Motor_2L = P0^3;
sbit Motor_3H =        P0^4;
sbit Motor_3L =        P0^5;
sbit Motor_4H =        P0^6;
sbit Motor_4L = P0^7;

sbit En_pwm1 = P1^4;                                        //使能信号 (PWM)
sbit En_pwm2 = P1^5;
sbit En_pwm3 = P1^6;
sbit En_pwm4 = P1^7;

uchar timer1;                                                        //定义变量

/*********主函数**********/
void main ()
{
         Time1Config();                                                //定时器初始化

        while(1)
        {
                if (Sensor_1 == 1 && Sensor_2 == 1)                        //状态:轨迹居中
                        Go_Straighe();                                                        //方向:前进
                else if (Sensor_1 == 1 && Sensor_2 == 0)          //状态:偏左
                        Turn_Righr();                                                        //方向:右转
                else if (Sensor_1 == 0 && Sensor_2 == 1)        //状态:偏右
                        Turn_Left();                                                        //方向:左转
                else if (Sensor_1 == 0 && Sensor_2 == 0)        //状态:偏离轨迹
                        Stop();                                                                        //方向:停止
                else Go_Straight();                                                        //其他情况:前进       
        }
}

/**********设置定时器**********/
void Time1Config()
{
        TMOD = 0x10;                                                                        //设置定时器计数器T1工作在模式1
        /**********定时器赋初值*********/
        TH1 = 0xFE;
        TL1 = 0x0c;

        ET1 = 1;                                                                                //开启定时器1中断
        EA = 1;
        TR1 = 1;                                                                                //开启定时器
}

/**********定时器1的中断函数**********/
void Time1(void) interrupt 3                                                 //3 为定时器的中断信号
{
        Time1++;
        if (Timer1 > Cycre)                                                                //PWM周期
        {
                Time1 = 0;
        }
        if (Timer1 < Duty_cycle)                                                   //改变Duty_cycle 这个值,可以改变直流电机的速度
        {
                En_pwm1 = 1;
                En_pwm2 = 1;
                En_pwm3 = 1;
                En_pwm4 = 1;
        }
        else
        {
                En_pwm1 = 0;
                En_pwm2 = 0;
                En_pwm3 = 0;
                En_pwm4 = 0;
        }
        TH1 = 0xFE;                                                                                //重新赋值
        TL1 = 0x0C;
}

IMG_20180523_200006.jpg
IMG_20180523_200138.jpg
IMG_20180523_200144.jpg
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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