⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driver.c

📁 一个变频器的代码,用msp430就能实现.低成本,可靠性也不错.
💻 C
字号:
  #include "def.h" 
 extern void savemsg( unsigned char msgtype, unsigned char msgcode); 
 extern  void write728x(unsigned char reg_add, unsigned char write_data);
  extern void readBC7281(void);
  extern void SetFre(unsigned int frequest);
  extern void rerunSA866(void);
  extern void zrerunSA866(void);
  extern struct STRSHOW show;
 extern struct STRSA sa866ae;
 void dealkeymsg( unsigned char nowmsg);
 struct STRWORK work;
//----------------------------------------------------------
interrupt [TIMERA0_VECTOR] void Timer_A(void)//1khz
{
static  int keykeeptime;
static  int keylast,keypress;
static unsigned char keystate;
static unsigned char acnt;
static unsigned char klow,ltime,lowstate;
static unsigned char failkey,passkey,failkeytime,passkeytime;
  acnt++;
  if(acnt==4)//4ms  
  { 
   acnt=0;
   keypress=P2IN;
   passkey=keypress;
   failkey=keypress;
   
   if(((~passkey)&0x04)==0x04)
      {
      if(passkeytime<10)passkeytime++;
      }
   else
      {
      if(passkeytime>0)passkeytime--;
      }
      if((passkeytime>=5)&&(work.passkey==OFF)){work.passkey=ON;}
      if((passkeytime<5)&&(work.passkey==ON)){work.passkey=OFF;}
    //----------------------------------------
    if(((~failkey)&0x08)==0x08)
      {
      if(failkeytime<10)failkeytime++;
      }
   else
      {
      if(failkeytime>0)failkeytime--;
      }
  if((failkeytime>=2)&&(work.failkey==OFF)) 
        {
        setSETTR;
        setOUT4;
        TACCR1=100;
        work.pwmcount=100;
        if(work.workstatic!=PASSRUN)work.workstatic=FAIL;
        work.failkey=ON;
        }
 // if((passkeytime>=4)&&(work.failkey==OFF)) {work.failkey=ON;} 
 //  if((passkeytime<4)&&(work.failkey==ON)) {work.failkey=OFF;}      
    //------------------------------------------  
    klow=P1IN;   
    klow&=0x40;
    if(klow==0x40)
       {
       ltime=0;
       }
   else
       {
       ltime++;
       if((ltime==3)&&(lowstate==0)){savemsg(BCKEYP,BCKEYP);show.lowstate=1;}
       }
   
  // keypress=P2IN;
   keypress&=0x03;
   if(keypress==0x03)
       {
       keystate=0;keykeeptime=0;
       }
   else
       {
        if( keypress == keylast )
             {
               keykeeptime++;
                if((keykeeptime==5)&&(keystate==0))
                       {
                       savemsg(KEPPRESS,keypress);keystate=1;}
                        }
                else
                       {
                       keykeeptime=0; keylast=keypress; 
                       }
               }

        }
  ADC12CTL0 |= 0x01; //50hz
 }
 
 interrupt [TIMERB0_VECTOR] void Timer_B(void)//50hz
  {
  static unsigned char number,minu;
  
  switch(work.workstatic)
     {
     case STOP:
         {
         if(work.onkey==ON)
            {
            if(work.passkey==ON)
               {
               work.workstatic=PASSRUN;
               work.onkey=OFF;
               setOUT3;
                }
           else
             {     
            work.workstatic=UPVOLT;
            work.onkey=OFF;
              }
            }
         break;
         }
     case PASSRUN:
         {
         if(work.offkey==ON)
           {
            work.workstatic=STOP;
            work.offkey=OFF;
            clrOUT3;
            }
         break;
         }    
     case UPVOLT:
         {
         work.pwmcount++;
         work.pwmcount++;
         TACCR1=work.pwmcount;
         if(work.pwmcount>7000)
            {
            work.workstatic=INISA;
            }
         break;
         } 
     case INISA:
         {
         savemsg(INISAAE,INISAAE);
         work.workstatic=RUN;
         break;
         }
     case RUN:
         {
         if(work.offkey==ON)
            {
            savemsg(REDOWN,REDOWN);
            work.workstatic=SASTOP;
            work.offkey=OFF;
            work.stoptime=5000;
            }
         break;
         }
       case SASTOP:
         {
         work.stoptime--;
         if(work.stoptime<2)
            {
            work.stoptime=0;
            work.workstatic=DOWNVOLT;
            }
         break;
         }   
      case DOWNVOLT:
         {
         work.pwmcount=work.pwmcount-10;
         TACCR1=work.pwmcount;
         if(work.pwmcount<100)
            {
            work.workstatic=STOP;
            }
         break;
         }
     default :break;                   
     }
 //___________________________________  
  number++;
  if(show.initimer>0)
    {
    show.initimer--;
    if(show.initimer==0){write728x(0x12,0x80);write728x(0x12,0x80);write728x(0x12,0x80);}
    }
  if(number>40)
    {
    savemsg(RESHOW,RESHOW);
    number=0;
    }
 //----------------------------   
   minu++;   
   if(minu>3000)
    {
    savemsg(MSECON,MSECON);
    minu=0;
    }    
 
   
  }

void dealkeymsg( unsigned char nowmsg)
{
switch(nowmsg)
       {
       case RUNKEY:
	      {
	      if(work.workstatic==STOP)work.onkey=ON;
	      break;     
	      } 
	case STOPKEY:
	      {
	       if((work.workstatic==RUN)||(work.workstatic==PASSRUN))work.offkey=ON;
	      break;     
	      }
	      
	case SELTKEY:
	     {
	     if(show.page==0)
	         {show.page=1;}
	     else 
	        {
	         show.page=0;
                 if(work.workstatic==RUN){SetFre(sa866ae.freset);}
	         }
	      break;     
	      }
	case UPKEY:
	     {
	    
	     if(show.page==1)
	         {
	         if(sa866ae.freset<550)
	            {sa866ae.freset=sa866ae.freset+10;}
	         }
	      break;     
	      }
	case DOWNKEY:
	     {
	     
	     if(show.page==1)
	         {
	         if(sa866ae.freset>10)
	            {sa866ae.freset=sa866ae.freset-10;}
	         }
	      break;     
	      }  
//------------------------------------------------------	                
	case KEY1:
	     {
	     if(work.workstatic==STOP)
	       {
	       work.onkey=ON;
	       }
	      break;   
	      }     
	case KEY2:
	      {
	      if((work.workstatic==RUN)||(work.workstatic==PASSRUN))work.offkey=ON;
	      break;     
	      }
	default:  break;
       }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -