请问如何把这三个程序合并到一起?(原本是单独运行的,现在想把三个合成一个在一个单片机上运行)

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar cs1,cs2,num1,num2;
uchar code table[]={0,1};      //占空比50% 
sbit qdg=P3^4;                  //前红外对管,检测小车前方障碍 
sbit xdg=P3^5;                  //下红外对管,检测小车是否碰到台阶 
sbit in1=P1^0;                  //L298输入 
sbit in2=P1^1;                  //L298输入 
sbit in3=P1^2;                  //L298输入 
sbit in4=P1^3;                  //L298输入 
sbit ena=P1^4;                  //L298输入使能A   
sbit enb=P1^5;                  //L298输入使能B 

void delay(int z)              //延时函数 
{
    uint x,y;
    for(x=z;x>0;x--)
       for(y=110;y>0;y--);
}

void init()                    //初始化函数 
{
    TMOD=0x11;
    TH0=(65536-500)/256;
    TL0=(65536-500)%256;
    ET0=1;
    TR0=1;
    EA=1;
}

void main()
{
  init();
  while(1)
   {
      if(qdg==1)          //如果前方没有检测到障碍,对管输出高电平         
        {
           ena=1;          //L298使能端A为高 
           enb=1;          //L298使能端B为高 
           in2=0;          //L298IN2为低,小车左轮前进      
           in4=0;          //L298IN4为低,小车右轮前进      
        }
      else
        {
           ena=0;          //如果前方检测到障碍,L298使能端为低 ,左轮停止(小车转弯)           
           delay(2000);
           ena=1;          //一秒后转弯结束,继续两轮驱动前进 
        }
      if(xdg==0)          //如果小车下方未检测到障碍(碰到台阶)       
        {
           in2=1;          //L298IN2为高,小车左轮后退 
           in4=1;          //L298IN4为高,小车右轮后退 
           delay(2000);
           ena=0;          //后退一秒后,左轮停止(转弯)  
           delay(2000);      //一秒后转弯结束,小车继续前进 
        }
    }
}

void timer0() interrupt 1
{
    TH0=(65536-500)/256;
    TL0=(65536-500)%256;
    cs1++;
    if (cs1==10)   
      {
        cs1=0;   
        num1++;
        if(num1==3)
        num1=0;
        in1=table[num1];

        num2++;
        if(num2==3)
        num2=0;
        in3=table[num2];
      }
}

 

 

 

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit CS = P3^0;
sbit CLK = P3^1;
sbit DO = P3^6;
sbit sw = P3^7;  //定义正反转开关

sbit s0 = P2^0;
sbit s1 = P2^1;
sbit ENA = P2^4;
int total = 256;
void delay(int time){
    int i;
    for(i = 0;i < time;i++){
        //...
    }
}
void Move(int time){
    ENA = 1;
    delay(time);
    ENA = 0;
    delay(total - time);
}
int readData(){
    int temp = 0;
    int i;
    DO = 1;
    _nop_();
    _nop_();
    CS = 0;
    _nop_();
    _nop_();
    CLK =0;
    _nop_();
    _nop_();
    CLK =1;
    _nop_();
    _nop_();
    CLK = 0;
    _nop_();
    _nop_();
    CLK = 1;
    _nop_();
    _nop_();
    CLK = 0;
    _nop_();
    _nop_();
    for(i = 0;i < 8;i++){
        CLK = 1;
        _nop_();
        _nop_();
        temp <<= 1;
        if(DO){
            temp ++;
        }
        CLK = 0;
        _nop_();
        _nop_();
    }
    CS = 1;
    _nop_();
    _nop_();
    return temp;
}
void main(){
    int state = sw;
    int time = 0;
    while(1){
        state = sw;
        if(state){
            s0 = 0;s1 = 1;//正转
        }
        else{
            s0 = 1;s1 = 0;//反转
        }
        time = readData();
        Move(time);
    }
    
}

 

 

 

#include<reg51.h>
sbit K1=P1^6; //P^0接开关
sbit LED=P1^7;//接LED
void main(void)
{
while(1)
{
LED=K1;
}

}

按模块处理,把3个独立的程序变成3个独立的模块,然后使用switch控制,相当于菜单吧。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y