标题:
DMX512灯光控制程序案例 单片机双机通信5通道程序
[打印本页]
作者:
lifeng513513
时间:
2017-8-26 14:40
标题:
DMX512灯光控制程序案例 单片机双机通信5通道程序
51单片机驱动DMX512灯光控制程序案例
0.png
(36.02 KB, 下载次数: 84)
下载附件
2017-8-26 17:13 上传
单片机驱动DMX512源程序(从机)如下:
/*******************************************************************************
文 件:DMX_5_slave.C
功能描述:使用STC89c52rc接收多通道dmx数据。
编 作:Travis copyright 2012
版 本: dmx——V2.1
*********************************************************************************/
#include <intrins.h>
# include <STC89C51RC_RD_PLUS.H>
# define uchar unsigned char
# define unint unsigned int
# define ulong unsigned long
/* 常量定义 */
# define BAUD0ATE 4800 //4800
# define Fosc 16 //晶振16MHz
# define MAX_FADE_LEVEL 256 //灰度等级 /////////
# define TIMER0_TIME 80 //80ms
# define PIXELS 8
# define MAX_FADE 256
/*联合体类型说明 */
typedef union User_Data_Type
{
uchar Ch[2];
unint In;
}U16TP;
/* 可位元寻址区定义 */
sbit SYN = P3^2;//INT0 //外部中断0
sbit OR_1 = P2^7;//R //颜色引脚(使用软件产生pwm)
sbit OG_1 = P2^6;//G
sbit OB_1 = P2^5;//B
sbit OR_2 = P2^4;//W
sbit OG_2 = P2^3;//P
/* 变量定义 */
uchar Int0_Count_Rg; //外部中断计数变量
uchar Rec_Data_Rg[5]; //外部中断接收数据数组
uchar Data_Count_Rg; //外部中断数据检测变量
uchar LED_Fade_Rg[5]; //led灰度值
uchar Fade_Count_Rg; //灰度变化变量
//=================================延时函数===============================================//
//功能:无用时间,解决外设与内设通信反应时间。
//=======================================================================================//
void delay_time(unint time_delay)
{ while(time_delay--);}
//====================================单片机初始化======================================//
//功能:单片机初始化中断
//======================================================================================//
void init_MCU()
{
IPH&=0XFC;
IP|=0X01;
}
//=======================================外部中断0服务程序==================================//
//功能:接收主机数据
//==========================================================================================//
void Int0(void) interrupt 0
{ uchar temp;
temp = P1&0xFF; //检测数据
switch(Int0_Count_Rg)
{ case 0:
if(temp == 0xaa) {Int0_Count_Rg++; } //如果是0XAA,进入下一次中断循环
else Int0_Count_Rg = 0;
break;
case 1:
if(temp == 0x11) { Data_Count_Rg = 0;Int0_Count_Rg++;} //如果是0X11,进入下一次中断循环
else Int0_Count_Rg = 0;
break;
case 2:
Rec_Data_Rg[Data_Count_Rg] = temp; //接收5位灰度数据值
if(++Data_Count_Rg>=6)
{ LED_Fade_Rg[0] = Rec_Data_Rg[0];
LED_Fade_Rg[1] = Rec_Data_Rg[1];
LED_Fade_Rg[2] = Rec_Data_Rg[2];
LED_Fade_Rg[3] = Rec_Data_Rg[3];
LED_Fade_Rg[4] = Rec_Data_Rg[4];
Int0_Count_Rg = 0;
}
break;
default:
break;
}
}
//===============================定时器0初始化===============================================//
//功能:定时器0初始化,16定时器模式中断开启 ,循环扫描。
//===========================================================================================//
void Timer_Init(void)
{ TH0 = (65536 - ((ulong)TIMER0_TIME*Fosc/12)) >> 8 ; //中断赋值
TL0 = (65536 - ((ulong)TIMER0_TIME*Fosc/12))-1;
TMOD = 0x01;//GATE1 C/T1 M11 M10 GATE0 C/T0 M01 M00
ET0 = 1; //使能定时器0.
TR0 = 1; //开启定时器0
}
//====================================定时器0中断======================================//
//功能:定时器0中断函数。扫描,产生pwm。
//========================================================================================//
void Timer0( void ) interrupt 1
{
TH0 = (65536 - ((ulong)TIMER0_TIME*Fosc/12)) >> 8 ; //中断赋值
TL0 = (65536 - ((ulong)TIMER0_TIME*Fosc/12))-1;
if(++Fade_Count_Rg>(MAX_FADE_LEVEL-1))
Fade_Count_Rg = 0;
OR_1=(Fade_Count_Rg<LED_Fade_Rg[0])?1:0;
OG_1=(Fade_Count_Rg<LED_Fade_Rg[1])?1:0;
OB_1=(Fade_Count_Rg<LED_Fade_Rg[2])?1:0;
OR_2=(Fade_Count_Rg<LED_Fade_Rg[3])?1:0;
OG_2=(Fade_Count_Rg<LED_Fade_Rg[4])?1:0;
}
//==================================主函数================================//
//功能:全部函数应用
//========================================================================//
void main(void)
{
init_MCU(); //单片机初始化
Timer_Init(); //定时器初始化
delay_time(5); //延时
//外部中断0初始化
TCON |= 0x01; //下降沿触发 //IT0=1;
IE |= 0x01; //外部中断0允许位。//EX0=1;
EA = 1; //开中断
LED_Fade_Rg[0] = MAX_FADE_LEVEL-1; //灰度赋值。
LED_Fade_Rg[1] = MAX_FADE_LEVEL-1; //灰度赋值。
LED_Fade_Rg[2] = MAX_FADE_LEVEL-1; //灰度赋值。
LED_Fade_Rg[3] = MAX_FADE_LEVEL-1; //灰度赋值。
LED_Fade_Rg[4] = MAX_FADE_LEVEL-1; //灰度赋值。
while(1);
}
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
双机通信5通道.rar
(194.99 KB, 下载次数: 193)
2017-8-26 14:40 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
自由飞翔123
时间:
2018-4-13 08:37
好资料,51黑有你更精彩!!!
作者:
woojoon1981
时间:
2019-12-18 14:18
正好研究这个呢。。。谢谢
作者:
q395418298
时间:
2022-3-11 13:20
正好研究下载看下
作者:
yangqfa
时间:
2022-11-13 16:13
附件是双机通讯, 不是DMX512
作者:
Longan.Wang
时间:
2023-7-25 17:33
yangqfa 发表于 2022-11-13 16:13
附件是双机通讯, 不是DMX512
真的么,还好没有盲目下载,先看看评论
作者:
wkman
时间:
2023-7-25 17:47
还好没有盲目下载,先看看评论
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1