找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我的一个涉及单片机计数的程序不工作,求指导

[复制链接]
跳转到指定楼层
楼主
ID:546916 发表于 2019-5-25 14:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的一个涉及计数的程序不工作,求指导
/*--------------------------------------------------------------------------------------
                文件:        Main.c
                        
--------------------------------------------------------------------------------------*/

#include "50js_STC89.H"                // STC89系列单片机头文件
#include "50js_Type.h"                // 数据类型声明头文件
#include "50js_Board.h"                // 按键引脚定义及相关功能头文件
#include "50js_Si24R1.h"        // Si24R1无线数传模块驱动头文件

uint8 key_down=0;                    // 按键按下标志.为0时代表没有按键按下,为1时代表已有按键按下.
uint8 key_code=0;                    // 按键编号,为0时无按键按下.
int relay=0;
//int time1=0;
int time;
int z=0;
int u=0;
int w;
int time1;



// 函数: Soft_Dly()
// 描述: 软件延时
// 参数: 无
void Soft_Dly(uint8 i)
{
          while(i--);
}
void delay(unsigned int k)
{
    unsigned int j;
    for(;k>0;k--){
    for(j=0;j<5;j++)
        {;}
        }
}
// 函数:自摆
// 描述: 回转电机左转,同时计数变量开始计数。按键放开,电机回转,计数变量减1,到0,又反转,直至J7、J8任一键按下,这个过程停止。
// 参数: 无
void swing(int x,int y)
{  
   
   int z1=1;
   int ct=1;
   int i=0;
   int h=1;
   int g=1;
   
   w=x;
  
   time1=y;
   TMOD=0x60;
   TH1=0xff;
   TL1=0xff;
   TF1=0;
   TR1=1;
   while(z1)
   {
     time1=y;
         g=1;
     switch(w)
            {
              case 15:{J5=0;delay(100);J6=1;delay(100); break;}
                  case 16:{J6=0;delay(100);J5=1;delay(100); break;}
            }               
                        for(i=1;i<=time1;i++)
                        {
                         TR1=1;
                         while(!TF1);
                         delay(10);
                         TF1=0;
                         delay(10);        
                        }
        
          if(ct==1)
            {  
                  if(y==16)y=15;              
                  else y=16;                  
                  delay(1000);
                }
         }
}
// 函数: right_swing()
// 描述: 使M1电机右转动并受控制
// 参数: 无

void  right_swing()
{
     J5=0;
     J6=1;
         z=1;
         time=0;
         TMOD=0x60;
         TH1=0xff;
         TL1=0xff;
         TF1=0;
         TR1=1;
     while(z)
         {
           if(sR1_Check_IRQ(sR1_RX_Buff)){
                           relay=sR1_RX_Buff[0];        
                           if(relay!=0)
                    {
                          while(!TF1);
                          delay(10);
                          TF1=0;
                          delay(10);
                      time++;
                                             
                    }else
                          {        //time=50;
                            swing(16,time);z=0;
                          }
                 }
         }
}
                  


// 函数: left_swing()
// 描述: 使M1电机左转动并受控制
// 参数: 无
void left_swing()
{
     J6=0;
     J5=1;
         time=0;
         z=1;
         TMOD=0x60;
         TH1=0xff;
         TL1=0xff;
         TF1=0;
         TR1=1;
         while(z)
         {
           if(sR1_Check_IRQ(sR1_RX_Buff)){
                   relay=sR1_RX_Buff[0];        
          if(relay!=0)
                      {
                                 while(!TF1);
                                 delay(10);
                                 TF1=0;
                                 delay(10);
                         time++;
                          }                                 
                  else{swing(15,time);z=0;}
       }
        }
}

// 函数: LED_Show()
// 描述: 点亮相应的LED
// 参数: kc        编码信息
void LED_Show(uint8 kc)
{
        
        if(kc!=0)
        {
           switch (kc)                                                                             // 根据编码执行相应动作
            {
                case 1:J2=0;J1=1;break;                                                     // P2^5        口置1,继电器J1动作,M1电机正转
                case 2:J1=0;J2=1;break;                                                     // P2^4        口置1,继电器J2动作,M1电机反转
                case 3:if(P13==0)break;else{J4=0;J3=1;break;}         // P2^3        口置1,继电器J3动作,M2电机正转
                case 4:if(P14==0)break;else{J3=0;J4=1;break;}         // P2^2        口置1,继电器J4动作,M2电机反转
                case 5:J6=0;J5=1;break;                                                     // P2^1        口置1,继电器J5动作,M3电机正转
                case 6:J5=0;J6=1;break;                                                     // P2^0        口置1,继电器J6动作,M3电机反转
                case 7:left_swing();break;                                                 // 编码3=点亮LED3
                case 8:right_swing();break;                                                 // 编码3=点亮LED3
        }
         }else
         {
              J1=0;J2=0;J3=0;J4=0;J5=0;J6=0;J7=0;J8=0;                 // 熄灭全部指示灯
         }
        
}

void main(void)
{
        
        Soft_Dly(100);                                                                                // 等待Si24R1模块上电并稳定
        J1=0;J2=0;J3=0;J4=0;J5=0;J6=0;J7=0;J8=0;
        P34=1;
        sR1_Init_IO();                                                                                // 初始化Si24R1模块IO
        sR1_Turn_RX();                                                                                // 初始化Si24R1,并将其设置为接收模式
        TMOD=0x60;
        TH1=0xff;
        TL1=0xff;
        TF1=0;
        TR1=1;
        while(1){
                if(sR1_Check_IRQ(sR1_RX_Buff)){                             // 检查IRQ引脚状态
                    relay=sR1_RX_Buff[0];                                                  // 接收处理
                        LED_Show(relay);                                       
                }
               
        }
}

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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