普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 1374|回复: 0

51单片机

[复制链接]

4

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2023-5-29 22:22:09 | 显示全部楼层 |阅读模式
#include "reg52.h"

//重定义数据类型
typedef unsigned char u8;
typedef unsigned int u16;

//定义电机控制管脚
sbit MOTOA=P1^0;
sbit MOTOB=P1^1; //右侧电机
sbit MOTOC=P1^2;
sbit MOTOD=P1^3; //左侧电机

//定义红外壁障感应控制管脚
sbit Forward_In=P2^1;       


u16 time_cnt=0;        //定时器中断计数次数
u16 freq=100;  //PWM输出频率100HZ
u8 duty_cycle=25; //占空比25%


//延时函数10*us(us)
void delay_10us(u16 us)
{
        while(us--);
}

//ms延时函数ms
void delay_ms(u16 ms)
{
        u16 i,j;
        for(i=ms;i>0;i--)
                for(j=110;j>0;j--);
}

void Car_ForwardRun(void)//前进
{
        MOTOA=1;
        MOTOB=0;
        MOTOC=1;
        MOTOD=0;       
}
void Car_BackwardRun(void)//后退
{
        MOTOA=0;
        MOTOB=1;
        MOTOC=0;
        MOTOD=1;       
}
void Car_LeftRun(void)//左转
{
        MOTOA=1;
        MOTOB=0;
        MOTOC=0;
        MOTOD=0;       
}
void Car_RightRun(void)//右转
{
        MOTOA=0;
        MOTOB=0;
        MOTOC=1;
        MOTOD=0;       
}
void Car_StopRun(void)//停止
{
        MOTOA=0;
        MOTOB=0;
        MOTOC=0;
        MOTOD=0;       
}

//定时器0初始化函数
//定时时间:0.1ms
void Time0_Init(void)
{
        TMOD|=0x01;
        TH0 = 0XFF;
        TL0 = 0X9C;        //定时0.1ms
        TR0 = 1;
        ET0 = 1;
        EA  = 1;
}

//主函数
void main()
{
        Time0_Init();

        while(1)
        {
       
        }       
}
u16 bktime=0;
//定时器0中断函数
void Time0_Isr() interrupt 1
{
        TR0 = 0;        //关闭定时器0
        TH0 = 0XFF;
        TL0 = 0X9C;        //定时0.1ms
        time_cnt++;       
        if(time_cnt>=freq)               
                time_cnt=0;
        else if(time_cnt<=duty_cycle)
        {
                if(Forward_In==1)        //壁障红外传感器未检测到障碍物--前进
                {
                        Car_ForwardRun();
                       
                }
                else                          //壁障红外传感器检测到障碍物--后退,右转
                {
                        bktime=700;
                        while(bktime--)
                        {
                                Car_BackwardRun();
                                delay_10us(30);
                                Car_StopRun();
                                delay_10us(30);       
                        }
                        bktime=20;
                        while(bktime--)
                        {
                                Car_RightRun();
                                delay_ms(10);
                                Car_StopRun();
                                delay_ms(10);       
                        }       
                }
               
        }               
        else
        {
                Car_StopRun();               
        }
        TR0 = 1;        //开启定时器0               
}
帮忙完善一下主函数
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-25 12:38 , Processed in 0.085536 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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