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

📄 dtt-110.c

📁 本人做的一款LED控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	000,000,000,		
};
Uchar code Ptab4[][3]= {
	000,000,000,
	255,000,000,
	000,000,000,
	000,255,000,
	000,000,000,
	000,000,255,
	000,000,000,
	255,255,000,
	000,000,000,
	255,000,255,
	000,000,000,
	000,255,255,
	000,000,000,
	255,255,255,
};

Uchar code Ptab5[][3]= {
	255,000,000,
	000,255,000,
	000,000,255,
	255,255,000,
	255,000,255,
	000,255,255,
	255,255,255,
    000,255,000,
	000,000,255,	
	255,000,255,
	255,000,000,
	000,000,000,
	000,255,000,
	000,000,000,
	000,000,255,	
	000,000,000,
	255,000,000,
	000,000,000,
	000,255,000,
	000,000,000,
	000,000,255,
	000,000,000,
	255,255,000,
	000,000,000,
	255,000,255,
	000,000,000,
	000,255,255,
	000,000,000,
	255,255,255,
};

void Progrun(void) {
	Uchar i;
	if(Program<=7){									 //固定七色
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab1[Program][i];
			dmxdat[3] = Maxout;
		}
		return;
	} 		
	if(Program==8){									 //自动七色
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab1[Step+1][i];
		    dmxdat[3] = Maxout;
		}
		dmxdat[4] = Fadetime;
		Uspeed = Speed;
		Step++;
		if(Step>=7)Step=0;
		return;
	}												
	if(Program==9){									// Auto R G B;
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab1[Step+1][i];
		    dmxdat[3] = Maxout;			
		}
		dmxdat[4] = Fadetime;
		Uspeed = Speed;
		Step++;
		if(Step>=3)Step=0;
		return;	
	}
	if(Program==10){									//Auto Roll R G B;
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab1[Step+1][i];
		    dmxdat[3] = Maxout;			
		}
		dmxdat[4] = 50;
		Uspeed = 5;
		Step++;
		if(Step>=3)Step=0;
		return;	
	}
    if(Program==11){							// G B P	
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab2[Step][i];
		    dmxdat[3] = Maxout;			
		}
		dmxdat[4] = Fadetime;
		Uspeed = Speed;
		Step++;
		if(Step>=3)Step=0;
		return;
	}
    if(Program==12){						   // Flash R G B
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab3[Step][i];
		    dmxdat[3] = Maxout;			
		}
		dmxdat[4] = Fadetime;
		Uspeed = Speed;
		Step++;
		if(Step>=6)Step=0;
		return;
	}										  
	if(Program==13){						  //Flash 7 color
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab4[Step][i];
		    dmxdat[3] = Maxout;			
		}
		dmxdat[4] = Fadetime;
		Uspeed = Speed;
		Step++;
		if(Step>=14)Step=0;
		return;
	}
	if(Program==14){						   //Roll 7 Color
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab1[Step+1][i];
		    dmxdat[3] = Maxout;			
		}
		dmxdat[4] = 100;
		Uspeed = 5;
		Step++;
		if(Step>=7)Step=0;
		return;
	}
	if(Program==15){						  //run all program
		for(i=0; i<3; i++){
			dmxdat[i] = Ptab5[Step][i];
		    dmxdat[3] = Maxout;			
		}
		dmxdat[4] = Fadetime;
		Uspeed = Speed;
		Step++;
		if(Step>=29)Step=0;
		return;
	}
}
Uchar Max(Uchar a,b){
	Uint i;

    i=a*b;
    a=i;
    b=i>>8;
    if(b>0x80){
       a=b+1; 
       return(a);
	}     
    if(a>0x80){
      a=b+1; 
      return(a);
	}
    return(a=b);
}
void Dmxrun(void) {
	Uchar i;

 	if(Dmxmode==0){
		for(i=0; i<3; i++){	dmxdat[i] = Ptab1[dmxdat[0]/32][i];}
		return; 		
	}
	if(Dmxmode==1){
		for(i=0; i<3; i++){	dmxdat[i] = Ptab1[dmxdat[0]/32][i];}
		buf[3] = dmxdat[1]; 		
		return;
	}
	if(Dmxmode==2){
		buf[0] = dmxdat[0];
		buf[1] = dmxdat[1];
		buf[2] = dmxdat[2];
		buf[3] = 0;				
		return;
	}
	if(Dmxmode==3){
		buf[0] = Max(dmxdat[0],dmxdat[3]);
		buf[1] = Max(dmxdat[1],dmxdat[3]);
		buf[2] = Max(dmxdat[2],dmxdat[3]);
		buf[3] = 0;			
		return;
	}
	if(Dmxmode==4){
		buf[0] = Max(dmxdat[0],dmxdat[3]);
		buf[1] = Max(dmxdat[1],dmxdat[3]);
		buf[2] = Max(dmxdat[2],dmxdat[3]);
		buf[3] = dmxdat[4];		 		
		return;
	}
}

void Faderun(unsigned char fade){ unsigned char i; 
if(Fclock==1){Fclock=0;  
 if(fade==0){ for(i=0;i<3;i++){out[i]=buf[i];}return;}
  for(i=0;i<3;i++){
   if(out[i]==buf[i])goto fade_n;
   if(out[i]<buf[i]){out[i]=(buf[i]-out[i])/(fade+1)+1+out[i];goto fade_n;}
   if(out[i]>buf[i]){out[i]=out[i]-((out[i]-buf[i])/(fade+1)+1);}
    fade_n:;  
    }
   }
  }
Uchar Timerchk(void) {
	Uchar i,t;
	Uchar sw = 0;
	Uchar sec,min,hr;
	reset_3w();
	wbyte_3w(0xbf);							//以多字节突发方式读取时钟数据
	sec = BCD2HEX(rbyte_3w());				//秒
	min = BCD2HEX(rbyte_3w());				//分
	hr  = BCD2HEX(rbyte_3w());				//小时	
	reset_3w();	
	for(i=0; i<8; i++){
        t = Timer[i*3+0x02];
		if(t > 0){
			t = Timer[i*3+0x00];
			if(hr >= t){
				t = Timer[i*3+0x01];
				if(min >= t){
					sw =  Timer[i*3+0x02];
					goto next; 	
				}								
			}
			return(sw);						
	    }	
	next:;		  		
	}
	return(0);	
}
Uint Tempchk(void){
	Uint t1;
	float tmep;
	t1 = Readtemp();
	tmep = t1*0.0625;
	t1 = tmep;
	return(t1);
}

void main(void) {
	 
	 Delay400Ms();
	 LcdReset();
	 ePutstr(0,0,"  Welcome Use   DTT-110 REV: 1.0");
	 Delay400Ms();
	 Delay400Ms();
	 Delay400Ms();
	 Delay400Ms();	 
	 TMOD = 0x21; 	 
	 PCON = 0;
	 SCON = 0xc0;
	 T2CON= 0x34;
	 TH2  = 0xff;
	 TL2  = 0xfd;
	 RCAP2L=0xfd;
	 RCAP2H=0xff;
	 TR2  = 1;
	 TH1  = 178;
	 ET1  = 1;
	 TR1  = 1;
	 IT0  = 1;
	 EX0  = 1;	 
	 EA   = 1;
	 Discmd =1;
 	 Readset();
	 if('Y'==Checkdate())
cke: 	if(Password()=='N')goto cke;
	 Menu1 = 0;
	 Menu2 = 0;	
 	while(1) {		
		if(Mode==0) {
			I_O = 0; 
			REN = 1; 
			ES = 1; 
			M_s_com = 0x00;
			Dmxrun(); 
			goto common;
		}
		if(Mode==1) {
			I_O = 0; 
			REN = 1; 
			ES = 1; 
			M_s_com = 0x55;
			buf[0] = dmxdat[0];
			buf[1] = dmxdat[1];
			buf[2] = dmxdat[2];
			buf[3] = dmxdat[3];
			buf[4] = dmxdat[4]; 
		}
		if(Mode==2) {
			I_O = 1; 
			REN = 0; 
			ES = 0;
			if(Program < 8)	{
				Progrun();
				goto mon;
			}
			if(Pclock == 1){
				Pclock = 0;
				Progrun();
			}

mon:		buf[0] = Max(dmxdat[0],dmxdat[3]);
			buf[1] = Max(dmxdat[1],dmxdat[3]);
			buf[2] = Max(dmxdat[2],dmxdat[3]);
			buf[3] = dmxdat[4];			
			goto common;	

		}
		if(Mode==3) {
			I_O = 1; 
			REN = 0; 
			ES = 0; 
			if(Timerchk()==0){
				buf[0] = 0;
				buf[1] = 0;
				buf[2] = 0;
				buf[3] = 0;	
				goto common;
			}
			if(Timerchk()==1){
				if(Pclock == 1){
					Pclock = 0;
					Progrun();
				}
				buf[0] = Max(dmxdat[0],dmxdat[3]);
				buf[1] = Max(dmxdat[1],dmxdat[3]);
				buf[2] = Max(dmxdat[2],dmxdat[3]);
				buf[3] = dmxdat[4];			
				goto common;
			}
			if(Timerchk()==2){
			    buf[0] = 0;
				buf[1] = 0;
				buf[2] = 0;
				buf[3] = 0;	 			
			}
		}
		
common:	if(Tclock==1){
			Tclock = 0;
temp:		if(Tempchk() > 75){
				out[0] = 0;
				out[1] = 0;
				out[2] = 0;
				ePutstr(0,0,"   Warning!!!   ");
				ePutstr(0,1,"Temperature Out ");
				goto temp;			
			}
		}		

		if(P2_3 == 0) {
			out[0] = 0;
			out[1] = 0;
			out[2] = 0;
			ePutstr(0,0,"   Warning!!!   ");
			ePutstr(0,1,"  Load Out 15A  ");
			goto common;				
		}
			
		if(Display==0){
			Setup();
			Saveset();
		}
		PDisplay();
		Faderun(buf[3]);
		 
  }				   
}
void SERI_DMX() interrupt 4 using 2{RI=0;
	if (RB8==0){CHK_SIGN=0;if (SBUF!=0){DMX_SIGN=1;return;}	
                DMX_SIGN=0;ADDR_CON=0;RECDAT=0;return;}
	else if (CHK_SIGN!=1){if (DMX_SIGN==0){
									DMX_SIGN=1;	 
	                          if (SBUF==M_s_com) {CHK_SIGN=1;Dconter=200;return;}
	                          }     
                    return;  }
	    if(RECDAT==0){
            ADDR_CON++;
         if(ADDR_CON==Dmxaddr)goto rec; return;
       }  
       rec:dmxdat[RECDAT]=SBUF;            
           RECDAT++;
           if(RECDAT>=5)RECDAT=0;                   	   
}      

void Saveset(void){
	if (Wr == 1){
		if (key_read == 0){
			Wr = 0;
			W_P = 0;
			Write_addr(0);
			Send(0x55);
			Send(Mode);
			Send(Dmxaddr);
			Send(Dmxaddr>>8);
			Send(Dmxmode);
			Send(Program);
			Send(Speed);
			Send(Speed>>8);
			Stop();
			Delay5Ms();
			Write_addr(0x08);
			Send(Fadetime);
			Send(Year);
			Send(Month);
			Send(Day);
			Send(Timer[0]);
			Send(Timer[1]);
			Send(Timer[2]);
			Send(Timer[3]);				
			Stop();
			Delay5Ms();
			Write_addr(0x10);
			Send(Timer[4]);
			Send(Timer[5]);
			Send(Timer[6]);
			Send(Timer[7]);
			Send(Timer[8]);
			Send(Timer[9]);
			Send(Timer[10]);
			Send(Timer[11]);
			
			Stop();
			Delay5Ms();
			Write_addr(0x18);
			Send(Timer[12]);
			Send(Timer[13]);
			Send(Timer[14]);
			Send(Timer[15]);
			Send(Timer[16]);
			Send(Timer[17]);
			Send(Timer[18]);
			Send(Timer[19]);			
			Stop();
			Delay5Ms();
			Write_addr(0x20);
			Send(Timer[20]);
			Send(Timer[21]);
			Send(Timer[22]);
			Send(Timer[23]);
			Send(Maxout);
			Stop();		
			Delay5Ms();
			W_P = 1;			 
		}	
	}
}
void Readset(void) {
	Uchar r;

	Write_addr(0x00);
	Start();
	Send(0xa1);
	if (Read() == 0x55){
		Mode = Read();
		Dmxaddr = Read();
		Dmxaddr = Dmxaddr>>8 | Read();
		Dmxmode = Read();
		Program = Read();
		Speed   = Read();
		Speed   = Speed >>8 | Read();
		Fadetime = Read();
		Year = Read();
		Month = Read();
		Day = Read();
		for (r=0; r<24; r++) {
			Timer[r] = Read();
		}	
		Maxout = Read();
	}
	Stop();
}

⌨️ 快捷键说明

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