?? 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兩編碼開關(guān)的選通位
sbit CD = P2^2; //CD兩編碼開關(guān)的選通位
sbit WDT = P2^7; //喂狗 在這次樣板中沒有用到
//標(biāo)志變量的定義
bit DataFlag; //接受數(shù)據(jù)標(biāo)志
bit StartFlag; //開始傳輸標(biāo)志
bit SyncFlag; //接受下一通道數(shù)據(jù)標(biāo)志
bit OKFlag; //接受完成標(biāo)志
bit startDMX=0;
//全局變量的定義
unsigned char TempData; //數(shù)據(jù)緩存
unsigned char MS;
unsigned int BM1,BM3;
unsigned int ChannelVal; //通道位
unsigned int address; //設(shè)定的地址
//===========================================
//函數(shù)名:time_Init
//描述:定時器初始化子程序
//輸入:無
//返回:無
//===========================================
void time_Init(void)
{
TMOD = 0x10;
AUXR = 0x40;
TH1=0x10;
TL1=0x20;
EA=1;
ET1=1;
TR1=1;
}
//===========================================
//函數(shù)名: timer1
//描述:定時器處理子程序
//輸入:無
//返回:無
//===========================================
void timer1(void) interrupt 3 using 1
{
WDT=~WDT; //喂狗
TH1=0x00;
TL1=0x20;
}
//===========================================
//函數(shù)名:MCU_Init
//描述:對STC12C5410AD進(jìn)行初始化
//輸入:無
//返回:無
//===========================================
void MCU_Init(void)
{
SCON = 0x90;
PCON = 0x00;
PS = 1;
ES = 1;
EA = 1;
}
//===========================================
//函數(shù)名:DMX_Init
//描述:DMX通信的初始化
//輸入:無
//返回:無
//===========================================
void DMX_Init(void)
{
unsigned int BM4,BM5; //編碼開關(guān)讀數(shù)處理的中間變量
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;
}
//===========================================
//函數(shù)名:SetDMXChannel
//描述:DMX通道的計算
//輸入:最大的通道數(shù)
//返回:無
//===========================================
void SetDMXChannel(unsigned int n)
{
ChannelVal = n + 0x0101;
}
//===========================================
//函數(shù)名:main
//描述:主函數(shù)
//輸入:無
//返回:無
//===========================================
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();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -