找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DMX512灯光控制程序案例 单片机双机通信5通道程序

  [复制链接]
跳转到指定楼层
楼主
51单片机驱动DMX512灯光控制程序案例



单片机驱动DMX512源程序(从机)如下:
  1. /*******************************************************************************
  2. 文    件:DMX_5_slave.C
  3. 功能描述:使用STC89c52rc接收多通道dmx数据。
  4. 编    作:Travis copyright 2012
  5. 版    本:  dmx——V2.1
  6. *********************************************************************************/

  7. #include <intrins.h>
  8. # include <STC89C51RC_RD_PLUS.H>


  9. # define uchar unsigned char
  10. # define unint unsigned int
  11. # define ulong unsigned long




  12. /* 常量定义 */  
  13. # define BAUD0ATE              4800         //4800
  14. # define Fosc                   16         //晶振16MHz
  15. # define MAX_FADE_LEVEL         256        //灰度等级     /////////
  16. # define TIMER0_TIME            80         //80ms         

  17. # define PIXELS   8
  18. # define MAX_FADE  256


  19. /*联合体类型说明 */
  20. typedef union User_Data_Type
  21. {
  22.   uchar Ch[2];
  23.   unint In;
  24. }U16TP;



  25. /* 可位元寻址区定义 */
  26. sbit SYN = P3^2;//INT0        //外部中断0



  27. sbit OR_1 = P2^7;//R        //颜色引脚(使用软件产生pwm)
  28. sbit OG_1 = P2^6;//G
  29. sbit OB_1 = P2^5;//B
  30. sbit OR_2 = P2^4;//W
  31. sbit OG_2 = P2^3;//P







  32. /* 变量定义 */


  33. uchar Int0_Count_Rg;         //外部中断计数变量
  34. uchar Rec_Data_Rg[5];         //外部中断接收数据数组
  35. uchar Data_Count_Rg;         //外部中断数据检测变量
  36. uchar LED_Fade_Rg[5];         //led灰度值
  37. uchar Fade_Count_Rg;         //灰度变化变量

  38. //=================================延时函数===============================================//
  39. //功能:无用时间,解决外设与内设通信反应时间。
  40. //=======================================================================================//
  41. void delay_time(unint time_delay)
  42. { while(time_delay--);}


  43. //====================================单片机初始化======================================//
  44. //功能:单片机初始化中断
  45. //======================================================================================//

  46. void init_MCU()   
  47. {
  48. IPH&=0XFC;
  49. IP|=0X01;
  50. }



  51. //=======================================外部中断0服务程序==================================//
  52. //功能:接收主机数据
  53. //==========================================================================================//

  54. void Int0(void) interrupt 0     
  55. { uchar temp;
  56.    
  57.   temp = P1&0xFF;      //检测数据
  58.   switch(Int0_Count_Rg)
  59.   { case 0:      
  60.       if(temp == 0xaa)  {Int0_Count_Rg++;    }    //如果是0XAA,进入下一次中断循环
  61.       else Int0_Count_Rg = 0;
  62.       break;
  63.     case 1:
  64.       if(temp == 0x11) { Data_Count_Rg = 0;Int0_Count_Rg++;}  //如果是0X11,进入下一次中断循环
  65.       else Int0_Count_Rg = 0;
  66.       break;
  67.     case 2:

  68.       Rec_Data_Rg[Data_Count_Rg] = temp;                       //接收5位灰度数据值
  69.       if(++Data_Count_Rg>=6)            
  70.       { LED_Fade_Rg[0] = Rec_Data_Rg[0];
  71.         LED_Fade_Rg[1] = Rec_Data_Rg[1];
  72.         LED_Fade_Rg[2] = Rec_Data_Rg[2];
  73.         LED_Fade_Rg[3] = Rec_Data_Rg[3];
  74.         LED_Fade_Rg[4] = Rec_Data_Rg[4];

  75.         Int0_Count_Rg = 0;
  76.       }
  77.    
  78.       break;
  79.     default:
  80.       break;
  81.   }
  82. }

  83. //===============================定时器0初始化===============================================//
  84. //功能:定时器0初始化,16定时器模式中断开启 ,循环扫描。
  85. //===========================================================================================//
  86. void Timer_Init(void)      
  87. { TH0  = (65536 - ((ulong)TIMER0_TIME*Fosc/12)) >> 8 ;    //中断赋值
  88.   TL0  = (65536 - ((ulong)TIMER0_TIME*Fosc/12))-1;
  89.   TMOD = 0x01;//GATE1 C/T1      M11       M10  GATE0 C/T0  M01 M00
  90.   ET0  = 1;      //使能定时器0.
  91.   TR0  = 1;   //开启定时器0
  92. }


  93. //====================================定时器0中断======================================//
  94. //功能:定时器0中断函数。扫描,产生pwm。
  95. //========================================================================================//
  96. void Timer0( void ) interrupt 1
  97. {
  98. TH0   = (65536 - ((ulong)TIMER0_TIME*Fosc/12)) >> 8 ;  //中断赋值
  99. TL0   = (65536 - ((ulong)TIMER0_TIME*Fosc/12))-1;

  100.   
  101. if(++Fade_Count_Rg>(MAX_FADE_LEVEL-1))
  102.       Fade_Count_Rg = 0;
  103.     OR_1=(Fade_Count_Rg<LED_Fade_Rg[0])?1:0;
  104.     OG_1=(Fade_Count_Rg<LED_Fade_Rg[1])?1:0;
  105.     OB_1=(Fade_Count_Rg<LED_Fade_Rg[2])?1:0;

  106.     OR_2=(Fade_Count_Rg<LED_Fade_Rg[3])?1:0;
  107.     OG_2=(Fade_Count_Rg<LED_Fade_Rg[4])?1:0;

  108. }

  109. //==================================主函数================================//
  110. //功能:全部函数应用
  111. //========================================================================//
  112. void main(void)
  113. {
  114. init_MCU();              //单片机初始化
  115. Timer_Init();          //定时器初始化
  116. delay_time(5);           //延时
  117.   //外部中断0初始化           
  118.   TCON |= 0x01;       //下降沿触发     //IT0=1;
  119.   IE   |= 0x01;          //外部中断0允许位。//EX0=1;

  120.   EA    = 1;          //开中断
  121.   LED_Fade_Rg[0] = MAX_FADE_LEVEL-1;    //灰度赋值。
  122.   LED_Fade_Rg[1] = MAX_FADE_LEVEL-1;    //灰度赋值。
  123.   LED_Fade_Rg[2] = MAX_FADE_LEVEL-1;    //灰度赋值。
  124.   LED_Fade_Rg[3] = MAX_FADE_LEVEL-1;    //灰度赋值。
  125.   LED_Fade_Rg[4] = MAX_FADE_LEVEL-1;    //灰度赋值。



  126.   while(1);


  127. }


  128. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
双机通信5通道.rar (194.99 KB, 下载次数: 193)




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

使用道具 举报

沙发
ID:290081 发表于 2018-4-13 08:37 | 只看该作者
这么下载不了
回复

使用道具 举报

板凳
ID:266164 发表于 2019-12-18 14:18 | 只看该作者
正好研究这个呢。。。谢谢
回复

使用道具 举报

地板
ID:393634 发表于 2022-3-11 13:20 | 只看该作者
正好研究下载看下
回复

使用道具 举报

5#
ID:279581 发表于 2022-11-13 16:13 | 只看该作者
附件是双机通讯, 不是DMX512
回复

使用道具 举报

6#
ID:77589 发表于 2023-7-25 17:33 | 只看该作者
yangqfa 发表于 2022-11-13 16:13
附件是双机通讯, 不是DMX512

真的么,还好没有盲目下载,先看看评论
回复

使用道具 举报

7#
ID:433219 发表于 2023-7-25 17:47 | 只看该作者
还好没有盲目下载,先看看评论  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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