📄 dmx-driver.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 + -