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

📄 bei20070111 led.c

📁 51单片机的
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
2007-01-05 22:30  2007-1-6 23:04
infrared
//ICC-AVR application builder : 2006-12-16 0:17:05    2006-12-18 20:04
// Target : M16
// Crystal: 16.000Mhz //注册大小写识别   开始必须为字母 红外线
*/
#include <iom16v.h>
#include <macros.h>
#include "led.h"
#include "delay.h"
//           值       0    1                                            10   11  12   13   14   15
//                    0    1    2    3    4     5   6    7    8   9     d     f            
uchar LED_DATA[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xa1,0X0e,0x00,0xff,0xef,0x3f}; //11 FOR "d"
uchar JS_001=0,JS_002=0;
long  JS_003=0;
uchar JS_004=0;
uchar JS_005=0;
uchar JS_006=0;
uchar JS_007=0;
uchar JS_008=0;
long  TIMER1_ICP_T,TIMER1_ICP_T1,TIMER1_ICP_T2;
uchar  LED_DISPLAY_V1=10;         // 初始值  显示 为 d001
uchar  LED_DISPLAY_V2=0;
uchar  LED_DISPLAY_V3=0;
uchar  LED_DISPLAY_V4=1;
uchar  LED_DISPLAY_V5=14;

long   JS_PRESS_ON_UP=0;
long   JS_PRESS_ON_DOWN=0;

uchar   JS_TIMER1_ICP_INPUT=0;
uchar   OUT_22_LOW;
uchar  JS_PRESS_ON_UP_1=0;
uchar  JS_PRESS_ON_UP_10000=0;
uchar  JS_PRESS_DWON_ON_1=0;
uchar  JS_PRESS_ON_DOWN_10000=0;
int    JS_PRESS_ON_UP_FAST=0;
int    JS_PRESS_OFF_UP=0;
uchar  JS_MODE_MODE=0;
uchar  JS_MENU_MODE=0;
uchar  JS_UP_MODE=0;
uchar  JS_DOWN_MODE=0;
int    JS_PRESS_OFF_DOWN;
int    JS_PRESS_ON_DOWN_FAST;
uchar  JS_PRESS_DOWN_ON_1;

uchar  ICP_TIME=0,ICP_TIME_T1=0;
uchar START_ICP_JS_TLOW=0;
uchar ICP_INT_SN=0;          //ICP 产生中断标志位
uchar KEY_BANK=0;
uchar KEY_PAN_MODE_1=0;
uchar KEY_PAN_MODE_2=0;
uchar KEY_PAN_MODE_3=0;
uchar KEY_PAN_3=0;
uchar KEY_PAN_4=0;
uchar KEY_PAN_5=0;
uchar KEY_PAN_6=0;
uchar KEY_PAN_7=0;
uchar KEY_PAN_8=0;

uchar PAN_ICP_INPUT_CHECK=0,JS_ICP_INT=0;

uchar N_001=1,SUM=0;
uchar IR_CUSTOM_CODE=0;IR_DATA_CODE=0;

// 共阳极用 
void port_init(void)
{
 PORTA = 0xFF;
 DDRA  = 0xFF;
 PORTB = 0x1F;
 DDRB  = 0x1F;
 PORTC = 0x1F; //m103 output only
 DDRC  = 0x10;
 PORTD = 0x00;
 DDRD  = 0x00;
}

//Watchdog initialize
// prescale: 16K 
//void watchdog_init(void)
//{
 //WDR(); //this prevents a timout on enabling
 //WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
//}       
//Watchdog initialize
// prescale: 2048K
void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
#pragma interrupt_handler eeprom_ready_isr:16
void eeprom_ready_isr(void)
{
 //eeprom ready event
}

/////////////////////////TIMER0/////////////////////////////////////////////////////////////
//TIMER0 initialize - prescale:8
// WGM: Normal
// desired value: 100uSec
// actual value: 100.000uSec (0.0%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0xCE; //set count
 OCR0  = 0x32;  //set compare
 TCCR0 = 0x02; //start timer
}

#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
  TCNT0 = 0xCE; //reload counter value  100us
  LED_SCAN(); 
  KEY_CHK(); 
    
   JS_003=++JS_003;                //KEY_CHECK 
   TEST();
  //ICP_T();        //TEST USE
  
  
   
}
/////////////////test/////////////////////////////////////
void  TEST()
{
  //LED_DISPLAY_V4=8;          //TEST
  if (JS_003==10000)
           {
           LED_DISPLAY_V5=14;
             
           }  
    else if (JS_003==20000)  
         {
         JS_003=0;  
         LED_DISPLAY_V5=13;
         } 
}
/////////////////////////timer2///////////////////////////////////////////////////////////////////
//TIMER2 initialize - prescale:32
// WGM: Normal
// desired value: 10uSec
// actual value: 10.000uSec (0.0%)
void timer2_init(void)
{
 TCCR2 = 0x00; //stop
 ASSR  = 0x00; //set async mode
 TCNT2 = 0xFB; //setup
 OCR2  = 0x05;
 TCCR2 = 0x03; //start
}

#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)   //10us
{
 TCNT2 = 0xFB; //reload counter value
 //ICP_INT_JS();
 //ICP_INT_CLR_JS();
 IR_CDOE();
}
/////////////////////////KEY_CHK/////////////////////////////////////////////////////////////

void KEY_CHK()
{

    
KEY_CHK_MODE();                  // 调用   KEY_CHK_MODE
KEY_CHK_MENU();                  // 调用   KEY_CHK_MENU
KEY_CHK_UP();                    // 调用   KEY_CHK_UP
KEY_CHK_DOWN();                  // 调用   KEY_CHK_DOWN		
}
//////////////////////////MODE///////////////////////////////////////////////////////////
void KEY_CHK_MODE()                   //100us /times
{
    KEY_BANK=KEY_INPUT;               // 取PINC值
    KEY_BANK&=0X01;                   // 取mode 值	
if (KEY_BANK==0)     //有按下 执行   
   {      //TEST--------OK------------->>>>  
       KEY_BANK=1;               
       JS_004=++JS_004;
       if (JS_004==1)
                        {
  		 		  //LED_DISPLAY_V1=11;
 	 			  LED_DISPLAY_V2=0;
  				  LED_DISPLAY_V3=0;
  				  LED_DISPLAY_V4=1;  				  
                        }
       else if (JS_004==2)
                         {
                                  JS_004&=0;
             	  	          //LED_DISPLAY_V1=10;
 	 	   	 	  LED_DISPLAY_V2=0;
  			 	  LED_DISPLAY_V3=0;
  			 	  LED_DISPLAY_V4=1;
                         }
   }
   else
      KEY_BANK=0;
    
}

void KEY_PRESS_CHECK_OFF()
{
       KEY_BANK=KEY_INPUT;      // 取PINC值
       KEY_BANK&=0X01;    
     if  (KEY_BANK==0)          // V1有按下
         KEY_PAN_MODE_3=1;
     else                       // V1没有按下  
         KEY_PAN_MODE_3=0;
}
///////////////////////////////MENU/////////////////////////////////////////////////////////////////
void KEY_CHK_MENU() 
{
}
///////////////////////////////UP///////////////////////////////////////////////////////////////////////
void KEY_CHK_UP() 
{
    KEY_BANK=KEY_INPUT;               // 取PINC值
    KEY_BANK=KEY_BANK>>2;
    KEY_BANK&=0X01;                   // 取DOWN 值
  if (KEY_BANK==0)              //press on  do it
      {    
           
           JS_PRESS_OFF_UP==0;  
           
       if (JS_PRESS_ON_UP_1==0)            //press on  yes   first times
           {
           JS_PRESS_ON_UP_1=1;
           JS_PRESS_ON_UP=0;
           JS_PRESS_ON_UP_FAST=0;      
           JS_PRESS_ON_UP_10000=0;
           LED_DISPLAY_UP_DMX512();
           
              // JS_UP_MODE=++JS_UP_MODE;
              //   if (JS_UP_MODE==4)
              //   JS_UP_MODE=0;
           }  
        else
        {
               if (JS_PRESS_ON_UP_10000==1)
                   {
                                      if (JS_PRESS_ON_UP_FAST==2000)
                                        {
                    			JS_PRESS_ON_UP_FAST=0;          
                    			LED_DISPLAY_UP_DMX512();
                    			}
               			     else
                   			JS_PRESS_ON_UP_FAST=++JS_PRESS_ON_UP_FAST; 			
                   }
                   
               if (JS_PRESS_ON_UP==30000)
                    {
                    JS_PRESS_ON_UP=0;          
                    JS_PRESS_ON_UP_10000=1; 
                    }
               else
                   JS_PRESS_ON_UP=++JS_PRESS_ON_UP;                   
         }       
     }
  else        //unpress     
           {
               JS_PRESS_ON_UP=0;
               JS_PRESS_ON_UP_10000=0; 
               JS_PRESS_ON_UP_FAST=0;     
               JS_PRESS_OFF_UP=++JS_PRESS_OFF_UP; 
             if (JS_PRESS_OFF_UP==2000)
                          { 
                           JS_PRESS_ON_UP_1=0;
                           JS_PRESS_OFF_UP=0;          
                          } 
	    }		   
                        
}
//----------------UP_DMX512-------------------------------------
void LED_DISPLAY_UP_DMX512()
{
if (LED_DISPLAY_V2==5)
                        {
                          if (LED_DISPLAY_V3==1)
                             {
                                if (LED_DISPLAY_V4==2)
                                   {
                                   LED_DISPLAY_V2=0;
                                   LED_DISPLAY_V3=0;
                                   LED_DISPLAY_V4=0;
                                   }
                             }
                         }
if (LED_DISPLAY_V4==9)
       {
        LED_DISPLAY_V4=0;
          if (LED_DISPLAY_V3==9)
            {
             LED_DISPLAY_V3=0;
             LED_DISPLAY_V2=++LED_DISPLAY_V2;
            } 
          else 
             LED_DISPLAY_V3=++LED_DISPLAY_V3;  
       }
    else 
      LED_DISPLAY_V4=++LED_DISPLAY_V4;     
}
////////////////////////////////DOWN/////////////////////////////////////////////////////////////////////////

void KEY_CHK_DOWN() 
{

    KEY_BANK=KEY_INPUT;               // 取PINC值
    KEY_BANK=KEY_BANK>>3;
    KEY_BANK&=0X01;                   // 取DOWN 值
  if (KEY_BANK==0)              //press on  do it
      {    
           
           JS_PRESS_OFF_DOWN==0;  
           
       if (JS_PRESS_DOWN_ON_1==0)            //press on  yes   first times
           {
           JS_PRESS_DOWN_ON_1=1;
           JS_PRESS_ON_DOWN=0;
           JS_PRESS_ON_DOWN_FAST=0;      
           JS_PRESS_ON_DOWN_10000=0;
           LED_DISPLAY_DOWN_DMX512();
           
              // JS_DOWN_MODE=++JS_DOWN_MODE;
              //   if (JS_DOWN_MODE==4)
              //   JS_DOWN_MODE=0;
           }  
        else
        {
               if (JS_PRESS_ON_DOWN_10000==1)
                   {
                                      if (JS_PRESS_ON_DOWN_FAST==2000)
                                        {
                    			JS_PRESS_ON_DOWN_FAST=0;          
                    			LED_DISPLAY_DOWN_DMX512();
                    			}
               			     else
                   			JS_PRESS_ON_DOWN_FAST=++JS_PRESS_ON_DOWN_FAST; 			
                   }
                   
               if (JS_PRESS_ON_DOWN==30000)
                    {
                    JS_PRESS_ON_DOWN=0;          
                    JS_PRESS_ON_DOWN_10000=1; 
                    }
               else
                   JS_PRESS_ON_DOWN=++JS_PRESS_ON_DOWN;                   
         }       
     }
  else        //unpress     
           {
               JS_PRESS_ON_DOWN=0;
               JS_PRESS_ON_DOWN_10000=0; 
               JS_PRESS_ON_DOWN_FAST=0;     
               JS_PRESS_OFF_DOWN=++JS_PRESS_OFF_DOWN; 
             if (JS_PRESS_OFF_DOWN==2000)
                          { 
                           JS_PRESS_DOWN_ON_1=0;
                           JS_PRESS_OFF_DOWN=0;          
                          } 
	    }		   
                        
}
//----------------------DOWN_DMX512-----------------------
void LED_DISPLAY_DOWN_DMX512()
{
if (LED_DISPLAY_V2==0)
                        {
                          if (LED_DISPLAY_V3==0)
                             {
                                if (LED_DISPLAY_V4==1)
                                   {
                                   LED_DISPLAY_V2=5;
                                   LED_DISPLAY_V3=1;
                                   LED_DISPLAY_V4=3;
                                   }
                             }
                         }
if (LED_DISPLAY_V4==0)
       {
        LED_DISPLAY_V4=9;
          if (LED_DISPLAY_V3==0)
            {
             LED_DISPLAY_V3=9;
             LED_DISPLAY_V2=--LED_DISPLAY_V2;
            } 
          else 
             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)
   {

⌨️ 快捷键说明

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