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

📄 dmx-driver.c

📁 DMX驱动器
💻 C
字号:


#include<STC12C5410AD.H>
#include<intrins.h>

void redchangedark(unsigned char rgb,unsigned char rate,unsigned char LD);

sbit AB = P2^0;                          //AB两编码开关的选通位
sbit CD = P2^2;                          //CD两编码开关的选通位
sbit WDT = P2^7;                         //喂狗 在这次样板中没有用到

//标志变量的定义
bit DataFlag;                            //接受数据标志
bit StartFlag;                           //开始传输标志
bit SyncFlag;                            //接受下一通道数据标志
bit OKFlag;                              //接受完成标志
bit startDMX=0;

//全局变量的定义
unsigned char TempData;                  //数据缓存
unsigned char MS;
unsigned int BM1,BM3;
unsigned int ChannelVal;                 //通道位
unsigned int address;                    //设定的地址

//===========================================
//函数名:time_Init
//描述:定时器初始化子程序
//输入:无
//返回:无
//===========================================
void time_Init(void)
{
	TMOD = 0x10;
	AUXR = 0x40;
	TH1=0x10;
	TL1=0x20;
	EA=1;
	ET1=1;
	TR1=1;
}

//===========================================
//函数名: timer1
//描述:定时器处理子程序
//输入:无
//返回:无
//===========================================
void timer1(void)  interrupt 3 using 1
{   
	WDT=~WDT; //喂狗
	TH1=0x00;
	TL1=0x20;
}
//===========================================
//函数名:MCU_Init
//描述:对STC12C5410AD进行初始化
//输入:无
//返回:无
//===========================================
void MCU_Init(void)
{
	SCON = 0x90;
	PCON = 0x00;
	PS = 1;
	ES = 1;
	EA = 1;
}

//===========================================
//函数名:DMX_Init
//描述:DMX通信的初始化
//输入:无
//返回:无
//===========================================
void DMX_Init(void)
{
	unsigned int BM4,BM5;                       //编码开关读数处理的中间变量
	DataFlag = 0;
	StartFlag = 0;
	SyncFlag = 0;
	OKFlag = 0;
//===========================================
//	读取地址值
    AB=0;
	P1=0xFF;
	BM1=P1;
	BM1=0xFF-BM1;
	BM1=BM1&0x00F0;
	BM1=BM1<<4;
	AB=1;
	address=0;
	CD=0;
	P1=0xFF;
	BM4=P1;
	BM5=BM4;
	BM4=0x00FF-BM4;
	BM5=0x00FF-BM5;
	BM4=BM4&0x000F;
	BM5=BM5&0x00F0;
	BM4=BM4<<4;
	BM5=BM5>>4;
	BM5=BM5+BM4;
	address=BM5+BM1;
	P1=0;
}

//===========================================
//函数名:SetDMXChannel
//描述:DMX通道的计算
//输入:最大的通道数
//返回:无
//===========================================
void SetDMXChannel(unsigned int n)
{
	ChannelVal = n + 0x0101;
}

//===========================================
//函数名:main
//描述:主函数
//输入:无
//返回:无
//===========================================
void main(void)
{
	unsigned char rgbdata,delayrate;
	rgbdata=1;
  	DMX_Init();
  	SetDMXChannel(address);
  	MCU_Init();
	time_Init();
	while(1)
	{
		if(startDMX==0)
		{
		if(startDMX==0)redchangedark(0,10,1);
		if(startDMX==0)redchangedark(1,10,1);
		if(startDMX==0)redchangedark(2,10,1);
		if(startDMX==0)redchangedark(3,10,1);
		if(startDMX==0)redchangedark(4,10,1);
		if(startDMX==0)redchangedark(5,10,1);
		if(startDMX==0)redchangedark(6,10,1);
		if(startDMX==0)redchangedark(7,10,1);

		if(startDMX==0)redchangedark(10,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		if(startDMX==0)redchangedark(11,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		if(startDMX==0)redchangedark(12,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		if(startDMX==0)redchangedark(13,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		if(startDMX==0)redchangedark(14,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		if(startDMX==0)redchangedark(15,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		if(startDMX==0)redchangedark(8,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<8;delayrate++);
		if(startDMX==0)redchangedark(10,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<10;delayrate++);
		if(startDMX==0)redchangedark(11,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<10;delayrate++);
		if(startDMX==0)redchangedark(12,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<10;delayrate++);
		if(startDMX==0)redchangedark(13,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		if(startDMX==0)redchangedark(14,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		if(startDMX==0)redchangedark(15,1,1);
		if(startDMX==0)for(delayrate=0;delayrate<20;delayrate++);
		}

	    setmode();
		shiltin();
        send_data(DmxData[22]);send_data(DmxData[23]);
		send_data(DmxData[21]);send_data(DmxData[19]);
		send_data(DmxData[20]);send_data(DmxData[18]);
		send_data(DmxData[16]);send_data(DmxData[17]);
		send_data(DmxData[15]);send_data(DmxData[13]);
		send_data(DmxData[14]);send_data(DmxData[12]);
		send_data(DmxData[10]);send_data(DmxData[11]);
		send_data(DmxData[9]);send_data(DmxData[7]);
		send_data(DmxData[8]);send_data(DmxData[6]);
		send_data(DmxData[4]);send_data(DmxData[5]);
		send_data(DmxData[3]);send_data(DmxData[1]);
		send_data(DmxData[2]);send_data(DmxData[0]);	
		latch();
		stopemit();
		emitting();	
	}
}

⌨️ 快捷键说明

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