找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何合并一下这两个单片机程序?我合了多次都不行,要么就是不会动

[复制链接]
跳转到指定楼层
楼主
ID:922391 发表于 2021-5-21 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
避障程序

#include"reg51.h"
#include <intrins.h>  
#define uchar unsigned char
#define uint  unsigned int
#define ulong  unsigned long

uint time=0,timer=0;
ulong S=0,T=0;

sbit RX1=P2^6;
sbit TX1=P2^7;
sbit RX2=P3^6;
sbit TX2=P3^7;

uint lf0=0,lf1=0;
uint lb0=0,lb1=0;
uint rf0=0,rf1=0;
uint rb0=0,rb1=0;

sbit inputL=P2^0;sbit inputR=P2^1;

sbit a1=P0^7;sbit a2=P0^6;
sbit b1=P0^5;sbit b2=P0^4;
sbit c1=P1^7;sbit c2=P1^6;                                                                                                                                         
sbit d1=P1^5;sbit d2=P1^4;
void Delay(uint xms)
{
        uchar i, j;
        while(xms--)
        {
                i = 2;
                j = 239;
                do
                {
                        while (--j);
                } while (--i);
        }
}

void forward(int pwm,int time)
{
        int a=0;
        while(a<time)
                {
                        a1=0,a2=1;
                        b1=0,b2=1;
                        c1=0,c2=1;
                        d1=0,d2=1;
                        Delay(pwm);
                        
                        a1=0,a2=0;
                        b1=0,b2=0;
                        c1=0,c2=0;
                        d1=0,d2=0;
                        Delay(10-pwm);

                        a++;               
                }
}               



void turnleft(int pwm,int time)
{        
        int a=0;
        while(a<time)
                {
                        a1=1,a2=0;
                        b1=1,b2=0;
                        c1=0,c2=1;
                        d1=0,d2=1;
                        Delay(pwm);
                        
                        a1=0,a2=0;
                        b1=0,b2=0;
                        c1=0,c2=0;
                        d1=0,d2=0;
                        Delay(10-pwm);

                        a++;               
                }

}

void turnright(int pwm,int time)
{
        int a=0;
        while(a<time)
                {
                        a1=0,a2=1;
                        b1=0,b2=1;
                        c1=1,c2=0;
                        d1=1,d2=0;
                        Delay(pwm);
                        
                        a1=0,a2=0;
                        b1=0,b2=0;
                        c1=0,c2=0;
                        d1=0,d2=0;
                        Delay(10-pwm);

                        a++;               
                }
}


void back(int pwm,int time)
{
        int a=0;
        while(a<time)
                {
                        a1=1,a2=0;
                        b1=1,b2=0;
                        c1=1,c2=0;
                        d1=1,d2=0;
                        Delay(pwm);
                        
                        a1=0,a2=0;
                        b1=0,b2=0;
                        c1=0,c2=0;
                        d1=0,d2=0;
                        Delay(10-pwm);

                        a++;               
                }
}

void maichong()
{                                       
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();           
        _nop_();
}

void qidong1()
{
        TX1=1;                                       
        maichong();
        TX1=0;
}
void qidong2()
{
        TX2=1;                                       
        maichong();
        TX2=0;
}

void Conut1()
{                                                   
        time=TH0*256+TL0;
        TH0=0;
        TL0=0;        
        S=(long)(time*0.17);
}

void Conut2()
{                                                   
        timer=TH0*256+TL0;
        TH0=0;
        TL0=0;        
        T=(long)(timer*0.17);
}

void kaishi()
{
        TMOD=0x01;                  
        TH0=0;
        TL0=0;
        ET0=1;         
        EA=1;                                 
}

void scan()
{
        if(S>200&&T>200)
        {
                forward(5,5);
        }
        if(S>200&&T<200)
        {
                turnleft(5,5);
        }
        if(S<200&&T>200)
        {
                turnright(5,5);
        }
        if(S<200&&T<200)
        {
                back(5,5);
        }
}
void  main()
{         
        kaishi();                          
        while(1)
        {               
                qidong1();
                while(!RX1);                //当RX为零时等待
                TR0=1;                            //开启计数
                while(RX1);                        //当RX为1计数并等待
                TR0=0;                                //关闭计算
                Conut1();                        //计算
               
                qidong2();
                while(!RX2);                //当RX为零时等待
                TR0=1;                            //开启计数
                while(RX2);                        //当RX为1计数并等待
                TR0=0;                                //关闭计算
                Conut2();                        //计算

                scan();
        }
}

循迹程序
#include"reg51.h"
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#define ulong  unsigned long

sbit a1=P0^7;sbit a2=P0^6;
sbit b1=P0^5;sbit b2=P0^4;
sbit c1=P1^7;sbit c2=P1^6;
sbit d1=P1^5;sbit d2=P1^4;

uint time=0,timer=0;

sbit inputL=P2^0;sbit inputR=P2^1;
void Delay(uint xms)
{
        uchar i, j;
        while(xms--)
        {
                i = 2;
                j = 239;
                do
                {
                        while (--j);
                } while (--i);
        }
}

void forward(int pwm,int time)
{
        int a=0;
        while(a<time)
                {
                        a1=0,a2=1;
                        b1=0,b2=1;
                        c1=0,c2=1;
                        d1=0,d2=1;
                        Delay(pwm);
                        
                        a1=0,a2=0;
                        b1=0,b2=0;
                        c1=0,c2=0;
                        d1=0,d2=0;
                        Delay(10-pwm);

                        a++;               
                }
}               



void turnleft(int pwm,int time)
{        
        int a=0;
        while(a<time)
                {
                        a1=0,a2=1;
                        b1=0,b2=1;
                        c1=1,c2=0;
                        d1=1,d2=0;
                        Delay(pwm);
                        
                        a1=0,a2=0;
                        b1=0,b2=0;
                        c1=0,c2=0;
                        d1=0,d2=0;
                        Delay(10-pwm);

                        a++;               
                }

}

void turnright(int pwm,int time)
{
        int a=0;
        while(a<time)
                {
                        a1=1,a2=0;
                        b1=1,b2=0;
                        c1=0,c2=1;
                        d1=0,d2=1;
                        Delay(pwm);
                        
                        a1=0,a2=0;
                        b1=0,b2=0;
                        c1=0,c2=0;
                        d1=0,d2=0;
                        Delay(10-pwm);

                        a++;               
                }
}



void scan()
{
        if(inputL==0&&inputR==0)
        {
                forward(3,5);
        }
        if(inputL==1&&inputR==1)
        {
                forward(3,5);
        }
        if(inputL==1&&inputR==0)
        {
                turnleft(3,5);
        }
        if(inputL==0&&inputR==1)
        {
                turnright(3,5);
        }
}


void kaishi()
{
        TMOD|=0X11;        
        TH1=0xff;
        TL1=0x9c;        
        ET1=1;
        TR1=1;
}

void  main()

{  
        kaishi();                           
        EA=1;
        while(1)
        {
                scan();                                                         
        }
}


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

使用道具 举报

沙发
ID:824490 发表于 2021-5-22 10:22 | 只看该作者
强烈要求画个流程图
回复

使用道具 举报

板凳
ID:155507 发表于 2021-5-22 12:11 | 只看该作者
为何你弄不出来呢,是你编程习惯不好。
建议:
1、先将各个程序画成流程框图。
2、将两个流程框图流程串联起来。
3、重新整合框图,走通各个分支。
4、在按框图写程序。

评分

参与人数 1黑币 +10 收起 理由
yyds0606 + 10 赞一个!

查看全部评分

回复

使用道具 举报

地板
ID:922391 发表于 2021-5-22 12:18 | 只看该作者
我知道了,谢谢
回复

使用道具 举报

5#
ID:390416 发表于 2021-5-22 18:09 | 只看该作者
人人学会单片机 这套视频的框架式编程思路,你按套路写 多少个模块都可以拼起来用一个程序
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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