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

📄 led.c

📁 51单片机的
💻 C
📖 第 1 页 / 共 2 页
字号:
             LED_DISPLAY_V3=--LED_DISPLAY_V3;  
       }
    else 
      LED_DISPLAY_V4=--LED_DISPLAY_V4;     
}
////////////LED_DISPLAY_SCAN/////////////////////////////////////////////////////////////////////////////////////
void LED_SCAN()
{
   JS_001=++JS_001;
   
if (JS_001<=10)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   LED_SCAN_PORTB|=0xff;
   LED_SCAN_PORTB&=~LED_V1;       //PB0=0
   LED_DATA_PORTA&=0X00;          //OUT LED_DATA
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V1];
   if (JS_001>=3)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   }
else if (JS_001>10,JS_001<=20)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =0
   LED_SCAN_PORTB|=0xff;
   LED_SCAN_PORTB&=~LED_V2;       //PB1=0
   LED_DATA_PORTA&=0X00;
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V2];
   if (JS_001>=13)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   }
else if (JS_001>20,JS_001<=30)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   LED_SCAN_PORTB=0xff;
   LED_DATA_PORTA&=0X00;
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V3];
   LED_SCAN_PORTB&=~LED_V3;       //PB2=0
   if (JS_001>=23)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   } 
else if (JS_001>30,JS_001<=40)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   LED_SCAN_PORTB=0xff;
   LED_DATA_PORTA&=0X00;
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V4];
   LED_SCAN_PORTB&=~LED_V4;       //PB3=0
   if (JS_001>=33)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   }     
else if (JS_001>40,JS_001<=50)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   LED_SCAN_PORTB=0xff;
   LED_DATA_PORTA|=0Xff;
   LED_DATA_PORTA&=LED_DATA[LED_DISPLAY_V5];
   LED_SCAN_PORTB&=~LED_V5;       //PB4=0
   if (JS_001>=43)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   if (JS_001==50)
       JS_001&=0; 
   }

}
/*
////////////////////////////TIMER1///////////////////////////////////////////////////////////////////////////
//TIMER1 initialize - prescale:Falling edge
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 0Hz
// actual value: Out of range
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0x00 ; //setup
 TCNT1L = 0x00 ;
 OCR1AH = 0x00 ;
 OCR1AL = 0x00 ;
 OCR1BH = 0x00 ;
 OCR1BL = 0x00 ;
// OCR1CH = $OCR1CH$;
// OCR1CL = $OCR1CL$;
 ICR1H  = 0x00 ;
 ICR1L  = 0x00 ;
 TCCR1A = 0x00;
 TCCR1B = 0x87; //start Timer   详见p173  ICP 选上升沿触发  47 87
}
/*
///////////////////////ICP_INPUT//////////////////////////////////////////////
#pragma interrupt_handler timer1_capt_isr:6                                 
void timer1_capt_isr(void)
{
 //timer 1 input capture event, read (int)value in ICR1 using;
 // value=ICR1L;            //Read low byte first (important)
 // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
  //LED_DISPLAY_V4=8;          //TEST  OK
  JS_TIMER1_ICP_INPUT=++JS_TIMER1_ICP_INPUT;    //8 bit  IR INT/TIMES  ++
       
   ICP_INT_SN=1;         //ICP 产生中断标志位

      
  OUT_22_LOW=JS_TIMER1_ICP_INPUT;  // 记数 二进制显示  test use
  LED_DISPLAY_V1=(OUT_22_LOW>>3)&0X01;   
  OUT_22_LOW=JS_TIMER1_ICP_INPUT;     
  LED_DISPLAY_V2=(OUT_22_LOW>>2)&0X01;
  OUT_22_LOW=JS_TIMER1_ICP_INPUT;
  LED_DISPLAY_V3=(OUT_22_LOW>>1)&0X01;
  OUT_22_LOW=JS_TIMER1_ICP_INPUT;
  LED_DISPLAY_V4=OUT_22_LOW&0X01;
  LED_DISPLAY_V5=15;       
       
}
  
    
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
 //TIMER1 has overflowed
 TCNT1H = 0x00; //reload counter high value
 TCNT1L = 0x00; //reload counter low value
 
}
*/
////////////////////////////UART0//////////////////////////////////////////////////////////////////////

//UART0 initialize
// desired baud rate: 250000
// actual: baud rate:250000 (0.0%)
// char size: 9 bit
// parity: Odd
void uart0_init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x03;
 UCSRC = BIT(URSEL) | 0x36;
 UBRRL = 0x07; //set baud rate lo
 UBRRH = 0x00; //set baud rate hi
 UCSRB = 0xFC;
}


#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
 //uart has received a character in UDR
}

#pragma interrupt_handler uart0_udre_isr:13
void uart0_udre_isr(void)
{
 //character transferred to shift register so UDR is now empty
}

#pragma interrupt_handler uart0_tx_isr:14
void uart0_tx_isr(void)
{
 //character has been transmitted
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
//watchdog_init();
 timer0_init();

 uart0_init();
 
 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x25; //timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

////////////////////////MAIN////////////////////////////////////////////////////////////////////
void main(void)
{
  
 
 init_devices();
 while (1)
 {
 if (bIrCmdOk) CheckIrCmd();
 if (bCmdOk) ReadCmd();
 }
 
 //insert your functional code here...
 
  
 //while(N_001<=100)
 //{
 //      N_001=N_001+SUM;
 //}

  //insert your functional code here...
 
 
 
} 
      
void display_times()     //输入三位10进制&8位无符号数 (0xef) 用led 输出 成功
{
char temp1,temp2,temp3;
           temp1=iIrData[0]>>4;
           temp2=iIrData[0]>>4;
           //temp1=(iIrData[2]+(iIrData[1]>>4));
           //temp2=(iIrData[2]+(iIrData[1]>>4));
           LED_DISPLAY_V2=temp1/100;
           temp2=temp2%100;
           temp3=temp2;
           LED_DISPLAY_V3=temp2/10;
           LED_DISPLAY_V4=temp3%10;
         // LED_DISPLAY_V4=6; //testy
}

//红外解码
void CheckIR()
{
   //uchar iNowBit,iPos;
  if ((PIND&(1<<IR))>0)    //ICP INPUT CHECK
       iNowBit=0;
   else 
     iNowBit=1;//先反相
   
   //把信号持续的处理作为公共处理
   if ((iPreBit==1)&&(iNowBit==1))//hight++  
		  { iHight++;
		    return;
		  }
   if ((iPreBit==0)&&(iNowBit==0))//low++
		  { iLow++;
		    return;
		  }
		  
   switch (iIrMode)
   {
     case 0://等待9ms的高电平
	      if ((iPreBit==0)&&(iNowBit==1))//0->1:start
		  { iPreBit=1;
		    iHight=1;
			return;
		  }
		  
		  if ((iPreBit==1)&&(iNowBit==0))//1->0
		  { iPreBit=0;
		    if (iHight>12)//1.30ms
			  { iIrMode=1;
			    iLow=1;
				iHight=0;
			    //bCmdOk=1;iCmd=10;//Test..
			  }
			else
			   {iHight=0;//reset
			   }
			return;
		  }
	      break;
		  
	 case 1://等待1.6ms的低电平
	      if ((iPreBit==0)&&(iNowBit==1))//0->1
		  { iPreBit=1;
		    if (iLow>15)//1.6ms
			  {  iIrMode=2;
			     iBitCount=0;
				 iIrData[0]=0;iIrData[1]=0;iIrData[2]=0;iIrData[3]=0;
				 iHight=1;
				 //bCmdOk=1;iCmd=10;//Test..
			  }
			else
			  { iIrMode=0;
			    //确实只发送一次,后面的是按键保持信号,无按键码信息
			  }
		    return;
		  }
	      
	      break;
		  
	 case 2://接收用户码和按键码,共32Bit
	      
	      if ((iPreBit==1)&&(iNowBit==0))//1->0
		  { iPreBit=0;
		    iLow=1;
		  }
		  if ((iPreBit==0)&&(iNowBit==1))//0->1
		  { iPreBit=1;
		    //已经接收1Bit,根据占空比判断01
			if (iLow>(iHight+iHight)) iNowBit=0;else iNowBit=1;

			//Bit0在前,右移位
			iPos=iBitCount/4;
			iIrData[iPos]=iIrData[iPos]>>1;
	            if (iNowBit==1)  iIrData[iPos]|=0x80;
			
			iBitCount++;
			if (iBitCount>=24)
			{ bIrCmdOk=1;
			  iIrMode=0;
			  //bCmdOk=1;iCmd=10;//Test..
			}
			
			iHight=1;//must!
		  }
	 	  break;
     default:
	 	  iIrMode=0;
		  break;
   }
}
//对红外命令判断操作
void CheckIrCmd()
{uchar i;
   bIrCmdOk=0;  
   if ((iIrData[0]>>4)==CUSTOMCODE)      //CUSTOMCODE ==9
   i=(iIrData[2]+(iIrData[1]>>4));
   //BeepN(i&0x0f);
   switch (i)
   { case POWER_ON:
        bCmdOk=1;iCmd=POWER_ON;
        break;
	 case STAND_BY:
	    bCmdOk=1;iCmd=STAND_BY;
		break;
	 case DMX:
	    bCmdOk=1;iCmd=DMX;
		break;
	 case AUTO:
	    bCmdOk=1;iCmd=AUTO;
		break;
	 case AUDIO:
	    bCmdOk=1;iCmd=AUDIO;
	    break;
	 case FADETIME_UP:
	    bCmdOk=1;iCmd=FADETIME_UP;
	    break;
	 case FADETIME_DOWN:
	    bCmdOk=1;iCmd=FADETIME_DOWN;
	    break;
	 case PATTERN_UP:
	    bCmdOk=1;iCmd=PATTERN_UP;
	    break;
	 case PATTERN_DOWN:
	    bCmdOk=1;iCmd=PATTERN_DOWN;
	    break;           
   }
}

//命令执行
void ReadCmd()
{
    bCmdOk=0;
	//Beep();
	switch (iCmd)
	{
	   case POWER_ON:
	       
	       break;
	   case STAND_BY:
	       
	       break;
	   case DMX:
	       
		   break;
	   case AUTO:
	      
		   break;
	   case AUDIO:
	     
		   break;
	   case FADETIME_UP:
	     
		   break;
	   case FADETIME_DOWN:
	     
		   break;
	   case PATTERN_UP:
	                      LED_DISPLAY_UP_DMX512();
		   break;
           case PATTERN_DOWN:
	                      LED_DISPLAY_DOWN_DMX512();
		   break;		   	   	   	   
	}
}











⌨️ 快捷键说明

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