久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4024|回復: 0
收起左側

ED學習板之(STC)實驗33-DMX512并行通信

[復制鏈接]
ID:105323 發表于 2016-2-21 17:15 | 顯示全部樓層 |閱讀模式
ED學習板之(STC)實驗33-DMX512并行通信


//============================================================================
//================翼芯科技 DMX512接收數據=====================================
//============================================================================   
//  此源碼版權屬 翼芯科技 全權享有,如欲引用,敬請署名并告知
//          嚴禁隨意用于商業目的,違者必究,后果自負
//  
//   
//程序說明:本程序用于實現LDMX512為接收,DMX512信號自動識別,當無DMX512信號時,
//執行自檢程序(七彩跳變),IC插到U9位置.   
//文件名稱:main.C  
//日期:    2011/02/20   
//版本:    1.0  
//=============================================================================  
#include<stc11f0x.h>
#define uchar unsigned char
#define uint  unsigned int

#define ON  1
#define OFF 0

sbit         R = P1^7 ;
sbit         G = P1^6 ;
sbit         Y = P1^5 ;

sbit   COM   =  P3^7 ;

sbit   EN_485   = P3^4;                           //MAX485使能口
sbit   Work_LED = P3^3;                           //LED指示燈
sbit   TXD      = P3^1;                           //串口輸出口





uint   Address;                     //  Set_R, Set_G, Set_B  ;  //3路 接收和設置地址
bit    start_ok, Head_ok;
bit    DMX512_ok;                 //DMX512信號標志
uchar  cnt;                                                      //

uchar  R_dat,  G_dat,  B_dat ;     //RGB三路數據
uint   DMX_channel;                //DMX三路的起始地址
uchar  PWM;


/******************************************************************
- 功能描述:延時函數
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無         
- 返回說明:無
- 注:.....
******************************************************************/
void Delay(uint ms)
{ uint a,b;
        for(a=ms;a!=0;a--)
            for(b=1210;b!=0;b--)
                   ;
    WDT_CONTR= 0x3d;
}




/******************************************************************
- 功能描述:PWM掃描
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無         
- 返回說明:無
- 注:.....
******************************************************************/
void RGB(void)
{
  uchar x;
  for(x=255;x!=0;x--)
   for(PWM=0;PWM!=255;PWM++)  
                   {
                    if(R_dat>PWM) {R=ON;}
                        else                  {R=OFF;}        
                    if(G_dat>PWM) {G=ON;}
                        else                  {G=OFF;}
                    if(B_dat>PWM) {Y=ON;}
                        else                  {Y=OFF;}
                }                  
}

/******************************************************************
- 功能描述:七彩跳變函數
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無         
- 返回說明:無
- 注:.....
******************************************************************/
void Tianbian(void)
{ uchar x=1,y;
   do
   {
                switch(x)
                {
                case 1:        
                   R=ON; G=Y=OFF; Delay(5);  break;
                case 2:
                   G=ON; R=Y=OFF; Delay(5);  break;
                case 3:
                   Y=ON; G=R=OFF; Delay(5);  break;
                case 4:
                   R=OFF; G=Y=ON; Delay(5);  break;
                case 5:
                   G=OFF; R=Y=ON; Delay(5);  break;
                case 6:  
                   Y=OFF; G=R=ON; Delay(5);  break;
                case 7:   
                   Y=ON; G=R=ON;  Delay(5);  break;        

                default:  x=1;                        break;

                }                                                         
                if(y++>100)
                  {y=0;x++;}

   }while(!DMX512_ok);
}

/******************************************************************
- 功能描述:主函數
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無         
- 返回說明:無
- 注:.....
******************************************************************/
void main(void)
{
     SCON=0xD0;             //UART工作于方式3  波特率為(1+SMOD)·(定時器1的溢出率)/32  REN=1接收允許
     PCON=0x0;              //不倍頻,晶振24M
     AUXR|=0X40;            //T1工作在1T模式*12         
     TMOD=0x20;             //T1工作于8位自動重裝模式
     TH1 =0xFD;             //波特率20833*12=250K
     TL1 =0xFD;        

     TR1=1;                      //開定時器1
     PS=1;                  //設置串口中斷為最高優先級
     ES=1;                  //開UART中斷         
     EA=1;                                        //開總中斷


     WDT_CONTR= 0x3d;             //開看門狗         64分頻  16M   0.67s

     cnt=3;                        //3通道
  
     EN_485=0;                        //MAX485收發選擇 EN_485=1發, EN_485=0收


  
     P1M1=0X00;                    //P1口設為推挽輸出
     P1M0=0XFF;

     P3M1=0X00;                    //P3口設為推挽輸出        P3.7為普通IO
     P3M0=0XFE;

//==================     
         COM=0;
         P1=0;


     Work_LED=0;

    R=G=Y=OFF;

        Delay(10);

while(1)
  {        
      DMX512_ok=0;
            DMX_channel=0;
      WDT_CONTR= 0x3d;
          RGB();
          if(!DMX512_ok)
                {
             Tianbian();  //無信號
        }
        
  }

}

/******************************************************************
- 功能描述:串口中斷函數,實現DMX512數據接收
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無         
- 返回說明:無
- 注:.....
******************************************************************/
void Rec(void) interrupt 4            
{
  if(RI==1)  
   {
    RI=0;
    if(Head_ok)                            //收到頭碼就可以收數據碼
            {
            DMX512_ok=1;
            if( Address == DMX_channel )       //R 地址比較            
              {
                     R_dat = SBUF;                   //取出數據
                   cnt--;
               if(!cnt) { Address = 0; start_ok = 0; cnt=3; Head_ok=0;   }
              }  
            if(Address == DMX_channel+1 )      //G 地址比較                        
                  {
                      G_dat = SBUF;                  //取出數據
                    cnt--;
                        if(!cnt) { Address = 0; start_ok = 0; cnt=3; Head_ok=0;   }
              }
            if( Address == DMX_channel+2 )      //G 地址比較                        
                  {
                      B_dat = SBUF;                    //取出數據
                   cnt--;
                   if(!cnt) { Address = 0; start_ok = 0; cnt=3; Head_ok=0;  }
              }
                if(++Address>=512)                 //  地址溢出               
                  {                 
                   Address = 0; start_ok = 0; cnt=3; Head_ok=0;          //到此512個比較完
                  }                             
                   }  
        else
          {                     
          if(!RB8)             //判斷收到的第九位數據,只有在DMX送出>88us低電平的中斷信號時(也叫同步碼,起始碼,),RB8才會為0
            {
            start_ok=1;   //收到起始位
            Address=0;    //0-255共256個通道                       
            }
          else if(start_ok)
            {
            Head_ok=1;    // 收到設備信息數據
            }
      }
   }
   
}




回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜爱爱网 | 91精品国产92 | 一二三四在线视频观看社区 | 亚洲国产精品久久久久 | 一区二区高清 | 综合一区二区三区 | 日本a∨视频 | 国产9999精品 | 超碰美女在线 | 天天射网站| 精品久久久久久久人人人人传媒 | 欧美久久久久久久久 | 亚洲午夜精品 | 国产日韩欧美精品一区二区 | 国产成人免费视频网站视频社区 | 久久精品福利 | 日韩免费视频 | 久久精品综合 | 久久久久国产 | 97视频在线观看网站 | 在线观看国产 | 国产成人精品综合 | 一本色道精品久久一区二区三区 | 99精品一区二区 | 99视频网| 亚洲精品视频在线 | 国产日产精品一区二区三区四区 | www.狠狠操 | 一区二区三区四区毛片 | 欧美不卡视频 | 在线视频a | 亚洲网站免费看 | 欧美国产精品 | 免费一级片 | 一本色道精品久久一区二区三区 | 欧美看片 | 国产视频久久 | 日本成人一区二区 | 亚洲另类春色偷拍在线观看 | 成人免费在线视频 | 久久高清亚洲 |