Andy982615 发表于 2012-4-30 21:05:24

关于DMX512协议的C程序

最近在学习STM32,在论坛下了很多资料,“老杀鸡不养鸡”实在有点说不过去,最近写了几个关于DMX方面的]程序,调试效果不错!现在贴出来供大家分享!
#include10)
     DMXCount = 0;
    ChanCount = 0;
    ChanAddr = 0;
    
   }
   else if(RB8==1)
   {
    if(ChanCount < 513)
     ChanCount ++; 
  
    if((ChanCount == 1) && (SBUF == 'A') && (AddrFlagCount < 10)) //修改地址
     AddrFlagCount ++;
    if((ChanCount == 1) && (SBUF != 'A')) //不修改地址
     AddrFlagCount = 0;
    if(AddrFlagCount > 5)
     AddrFlag = 1;
    else
     AddrFlag = 0;
    if((AddrFlag == 1) && (ChanCount == 2))
     AddrH = SBUF;
    if((AddrFlag == 1) && (ChanCount == 3))
     AddrL = SBUF;
    if(AddrFlag == 0)
    {
     if(ChanCount == 1)
     {
      Channel = SBUF;
      ChanAddr ++;
     }
     if((ChanCount > Addr) && (ChanCount50)
  {
   ScanCount = 0;
   if(DMXCount < 1030)
    DMXCount ++;
   //ADC
   if(ADCSelect == 0)
   {
    if((ADC_CONTR & 0x10) == 0)
    {
     ADC_CONTR &= 0xF8;
     ADC_CONTR |= 0x08;     
    }
    else
    {
     ADCData1 = ADC_DATA; 
     ADC_CONTR &= 0xEF;
     ADCSelect = !ADCSelect;
    }
   }
   else
   {
    if((ADC_CONTR & 0x10) == 0)
    {
     ADC_CONTR &= 0xF8;
     ADC_CONTR |= 0x09;     
    }
    else
    {
     ADCData2 = ADC_DATA;
     ADC_CONTR &= 0xEF;
     ADCSelect = !ADCSelect;
    }
   } 
 
   //温控处理.
   PowerDownC ++;
   if(PowerDownC > 2800)
   {
    PowerDownC = 0;
  
    if(ADCData1 > 205) 
    {    
     if(FallCnt > 0)
      FallCnt --;    
    }
    else
    {    
     if(FallCnt < 128)
      FallCnt ++;    
    } 
   }
  }
  
//  if(DMXCount < 65530)
//   DMXCount ++; 
  if(DMXCount > 1000)
  {    
   CCAP0H = 255 * FallCnt / 128;  //调光.
   CCAP1H = 255 * FallCnt / 128;  //调光.
   CCAP2H = 255 * FallCnt / 128;  //调光.
  }  
  else
  {
   CCAP0H = Channel * FallCnt / 128;  //调光.
   CCAP1H = Channel * FallCnt / 128;  //调光.
   CCAP2H = Channel * FallCnt / 128;  //调光.
  }  
 }
}
 
页: [1]
查看完整版本: 关于DMX512协议的C程序