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

📄 bei no word led.c

📁 51单片机的
💻 C
📖 第 1 页 / 共 2 页
字号:
   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 /*INVALID SETTING*/; //setup
 TCNT1L = 0x00 /*INVALID SETTING*/;
 OCR1AH = 0x00 /*INVALID SETTING*/;
 OCR1AL = 0x00 /*INVALID SETTING*/;
 OCR1BH = 0x00 /*INVALID SETTING*/;
 OCR1BL = 0x00 /*INVALID SETTING*/;
// OCR1CH = $OCR1CH$;
// OCR1CL = $OCR1CL$;
 ICR1H  = 0x00 /*INVALID SETTING*/;
 ICR1L  = 0x00 /*INVALID SETTING*/;
 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 /*INVALID SETTING*/; //reload counter high value
 TCNT1L = 0x00 /*INVALID SETTING*/; //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();
 timer1_init();
 timer2_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();
 //ICP_INPUT();
 
 
 //insert your functional code here...
 
  
 //while(N_001<=100)
 //{
 //      N_001=N_001+SUM;
 //}

  //insert your functional code here...
 
 
 
}
       
void ICP_INT_JS()    //10US /TIEMS
{
if (ICP_INT_SN==1)
   {
   if ((ICP_INPUT>>6)&0X01==1)
        {
        JS_ICP_INT=++JS_ICP_INT;
        }
   }
}
void ICP_INT_CLR_JS()
{
  if (JS_ICP_INT>100)              //100x100us=10ms  clr 
      {
            ICP_INT_SN=0;
            //JS_TIMER1_ICP_INPUT=0;
            
       }
}
/*
void ICP_T()    //time0 ovf 100us/times
{ 

if (START_ICP_JS_TLOW==1)             //interrupt 中断信号 第一个
     {
     if   ((ICP_INPUT>>6)&0X01==1)     //icp ==1  pd6==1
          {
          JS_002=++JS_002;             //ok 上升沿触发 检到高电平1 加1记数 ok
          }
     else 
          {
          ICP_TIME=JS_002;             //SAVE TIME   head时间 test ok
          JS_002=0;                   //clr js_002
          } 
     }

                
    //display_times();    test use it       
} */
void display_times()     //输入三位10进制&8位无符号数 (0xef) 用led 输出 成功
{
uchar temp1,temp2,temp3;

           temp1=IR_CUSTOM_CODE;
           temp2=IR_CUSTOM_CODE;
           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 IR_CDOE()    //10us 检测一次
{
uchar temp1;
  switch(JS_TIMER1_ICP_INPUT)
  {
       case 1:
              
       case 2:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME<40)                      //脉冲时间>4ms  译为1
      			        IR_CUSTOM_CODE|=0X01;        //DATA0  1111  1111 DATA0
       			else
          			IR_CUSTOM_CODE|=0X00;      
               break;
       case 3:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>40) 
          			IR_CUSTOM_CODE|=0X02;        //DATA1
       			else
          			IR_CUSTOM_CODE|=0X00;      
               break; 
       case 4:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>40) 
          			IR_CUSTOM_CODE|=0X04;        //DATA3
       			else
          			IR_CUSTOM_CODE|=0X00;      
               break;  
       case 5:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>40) 
          			IR_CUSTOM_CODE|=0X08;        //DATA4
       			else
          			IR_CUSTOM_CODE|=0X00;     
               display_times();		 
               break; 
       case 10:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			temp1=++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>3) 
          			IR_DATA_CODE|=0X01;        //DATA4
       			else
          			IR_DATA_CODE|=0X00;      
               break; 
       case 11:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			temp1=++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>3) 
          			IR_DATA_CODE|=0X02;        //DATA4
       			else
          			IR_DATA_CODE|=0X00;      
               break; 
        case 12:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			temp1=++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>3) 
          			IR_DATA_CODE|=0X04;        //DATA4
       			else
          			IR_DATA_CODE|=0X00;      
               break;
        case 13:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			temp1=++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>3) 
          			IR_DATA_CODE|=0X08;        //DATA4
       			else
          			IR_DATA_CODE|=0X00;      
               break; 
        case 14:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			temp1=++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>3) 
          			IR_DATA_CODE|=0X10;        //DATA4
       			else
          			IR_DATA_CODE|=0X00;      
               break;
         case 15:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			temp1=++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>3) 
          			IR_DATA_CODE|=0X20;        //DATA4
       			else
          			IR_DATA_CODE|=0X00;      
               break;                                                                              
        case 16:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			temp1=++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>3) 
          			IR_DATA_CODE|=0X40;        //DATA4
       			else
          			IR_DATA_CODE|=0X00;      
               break; 
         case 17:
                	if   ((ICP_INPUT>>6)&0X01==1)        //icp ==1  pd6==1
          			temp1=++temp1;             //ok 上升沿触发 检到高电平1 加1记数 ok
     			else 
          			{
          			ICP_TIME=temp1;             //SAVE TIME   head时间 test ok
          			temp1=0;                    //clr js_002
          			}
      			if (ICP_TIME>3) 
          			IR_DATA_CODE|=0X80;        //DATA4
       			else
          			IR_DATA_CODE|=0X00;      
               break; 
          case 25:  
                  JS_TIMER1_ICP_INPUT=0;          
  }
 
}










⌨️ 快捷键说明

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