郁闷几天,如此C。

2020-02-08 12:16发布

几天以来,下程序都不能用PROTUSE正常仿真,不知是何?请高手帮改甄!!!
             程序如下://  4彩灯控制方案
#include "pic.h"
  __CONFIG (0x3FF9);          // ICD2调试用配置字
#define  K1 RB0                    // X光藕
#define  K2 RB1                    // X方向
#define  K3 RB2                    // 复位
#define  K4 RB3                    // 原点
#define  K5 RB5                    // 外触发
#define  K6 RB6                 // Y光藕
#define  K7 RB7                 //  外部触控

#define        XTAL_FREQ           4             // 外接晶振主频,单位为MHz

//K6为Y光藕,K5为外触发端//

void DelayMS(unsigned int ms)    //定义延时函数
  
  {
  unsigned int j=0;
  for(ms;ms>0;ms--)
   for(j=27*XTAL_FREQ;j>0;j--)   // 1MHz时约是27,其它主频请酌情修改
   {
   }
  }
void main()
{
  TRISA=0b10000;               // RC2做为普通I/O输出引脚,用其它引脚一样
  TRISB=0b01101111;       // RB4,RB8输出,其余输入
  RB7=1;
  RA0=1;
  RA1=1;
  RA2=1;
  RA3=1;
  DelayMS(90);
  RB7=0;
  RB4=0;
  RA0=1;
  RA1=1;
  RA2=1;
  RA3=1;                // A口初始化
  
while(1)
{
        if(K6==0)
      {
    DelayMS(60);
      if(K6==0)
      {DelayMS(130);
             RA2=0;
       while(K6==0);
       }
      }
    if(K5==0)
      { DelayMS(30);
       if(K5==0)
         {   
           RA0=1;
            RB4=!RB4;
            DelayMS(90);
            RB4=!RB4;  
          while(K5==0);
         }
       }
      
     if(K1==0)
        {
            DelayMS(60);  // 确实光藕遮光
        if(K1==0)
           { DelayMS(200);
            RA0=0;     // X停
           
            while(K1==0);
           }
          }  
      if(K2==0)           // 若X方向按键按
        {  
         DelayMS(30);     // 消除机械按键前沿抖动   
         if(K2==0)
           {RA1=!RA1;      // 旋转方向
                RA2=1;
           while(K2==0);
           }
        }
         
         if(K3==0)           // 若复位按键按下
        {
           DelayMS(30);           // 消除机械按键前沿抖动
          if(K3==0)              // 再判断为0说明是一次正常按键
              { DelayMS(5);       //延时
               RA0=0;  //
               RA1=0;
               RA2=1;
               RA3=0;          // 旋转方向切换工作台回原点
               TRISB=0b00001000;
               while(K3==0);
              }  
              
         }     
              
           if(K4==0)            // 若原点确认按键按下
            {
            DelayMS(30);       // 消除机械按键前沿抖动
            if(K4==0)         // 再判断为0说明是一次正常按键
             { DelayMS(30);//延时
                   TRISB=0;
               PORTA=0;
               RB4=0;
               RB7=1;   // 取反
               DelayMS(190);
               RB7=0;
               DelayMS(60);
               RB7=1;
               DelayMS(160);
               RB7=0;
               $=-4;
               }
            
            }   
      }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。