找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1584|回復: 0
打印 上一主題 下一主題
收起左側

接線如圖所示,程序如下,求大佬指點

[復制鏈接]
跳轉到指定樓層
樓主
ID:336784 發(fā)表于 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)                        //狀態(tài):軌跡居中
                        Go_Straighe();                                                        //方向:前進
                else if (Sensor_1 == 1 && Sensor_2 == 0)          //狀態(tài):偏左
                        Turn_Righr();                                                        //方向:右轉
                else if (Sensor_1 == 0 && Sensor_2 == 1)        //狀態(tài):偏右
                        Turn_Left();                                                        //方向:左轉
                else if (Sensor_1 == 0 && Sensor_2 == 0)        //狀態(tài):偏離軌跡
                        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 (3.75 MB, 下載次數: 37)

IMG_20180523_200006.jpg

IMG_20180523_200138.jpg (3.9 MB, 下載次數: 39)

IMG_20180523_200138.jpg

IMG_20180523_200144.jpg (3.99 MB, 下載次數: 45)

IMG_20180523_200144.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表