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

📄 light_samplesession.c

📁 nec demo source code
💻 C
字号:
//============================================================================
// PROJECT      = 78K0S/KA1+ Low Pin Count - DemoKit-KA1
// MODULE       = light_samplesession.c
// SHORT DESC.  = -
// DEVICE       = uPD78F9222
// VERSION      = 1.0
// DATE         = 22.12.2004
// LAST CHANGE  = -
// ===========================================================================
// Description:  This sample programs plays one of eight predefined lightshows.
//               After the program-start-signal, the program plays the first 
//               lightshow. By pressing button SW1 the next show is selected.
//               Pressing button SW2 restarts the application
//		
//				 Change sim variable and compile code to run in either SM+ or to
//				 flash device.
// ===========================================================================

#pragma sfr
#pragma DI
#pragma EI
#pragma interrupt INTTM80 isr_INTTM80
#pragma interrupt INTP0 isr_INTP0
#pragma section @@CNST  OPT AT 80H
const char OPTION=0x98;

//-----------------------------------------------------------------------------
// Global Defines
//-----------------------------------------------------------------------------

#define LED1   P2.3    	    // LED D1
#define LED2   P13.0	    // LED D2
#define LED3   P4.5         // LED D3
#define LED4   P12.3	    // LED D4

//-----------------------------------------------------------------------------
// Function prototypes
//-----------------------------------------------------------------------------

void drive_LED(unsigned char value);
void LShow1(void);
void LShow2(void);
void LShow3(void);
void LShow4(void);
void LShow5(void);
void LShow6(void);
void LShow7(void);
void LShow8(void);

//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------

unsigned char Timer80Flag;
unsigned char IntP0Flag;
unsigned char sim = 0;						   //Set sim = 1 for SM+
											   //Set sim = 0 for DemoKit board

void(* pShow[8])(void)={LShow1,LShow2,         // Function-Pointer array
                        LShow3,LShow4,
                        LShow5,LShow6,
                        LShow7,LShow8};


//-----------------------------------------------------------------------------
// Module:   init_CPU
// Function: Initialization of CPU
//-----------------------------------------------------------------------------
void init_CPU (void)
{
// stop watchdog timer
  WDTM = 0x70;

//clock gererator settings
  PCC = 0x00;			// set CPU clock to fx
  PPCC = 0x00;

  LSRCM = 0x01;			// low speed ring oscillator stops

  OSTS  = 0x00;			//shortest stabilisation time 2^10/fx

// interrupt setting
   IF0  = 0x00;
   IF1  = 0x00;
   MK0  = 0xFF;
   MK1  = 0xFF;
}

//-----------------------------------------------------------------------------
// Module:   init_LED
// Function: Initialization of LED ports
//-----------------------------------------------------------------------------
void init_LED (void)
{
  PMC2.3=0;           // set port mode control of P23 to port mode
  PM2.3=0;            // set port P23 to output mode -> LED1
  PM4.5=0;            // set port P45 to output mode -> LED3
  PM12.3=0;           // set port P123 to output mode -> LED4

  LED1=0;     	// drive LED1
  LED2=0;	    // drive LED2
  LED3=0;       // drive LED3
  LED4=0;	    // drive LED4

  LED1=1;	    // switch LED1 off
  LED2=1;	    // switch LED2 off
  LED3=1;	    // switch LED3 off
  LED4=1;	    // switch LED4 off
}

//-----------------------------------------------------------------------------
// Module:   init_TM80
// Function: Initialization of Timer80
//-----------------------------------------------------------------------------
void init_TM80 (void)
{
   TCE80 = 0;			//disable timer80
   TMC80 = 0x06;	        //set input clock to fxp / 2^16 = 120 Hz @ 8MHz
   CR80  = 0x06;		//interval time = 50 ms	
   TMIF80 = 0;			//clear interrupt request flag
   TMMK80=0;			//enable timer80 interrupt
}

//-----------------------------------------------------------------------------
// Module:   restart_TM80
// Function: restarting of Timer80
//-----------------------------------------------------------------------------
void restart_TM80 (void)
{
   Timer80Flag=0;               //Reset status flag Timer80
   TCE80 = 0;			//disable timer80
   TCE80 = 1;			//enable timer80
}

//-----------------------------------------------------------------------------
// Module:   Wait50
// Function: This module delays the program for n * 50 ms.
//-----------------------------------------------------------------------------
void Wait50(unsigned char Number)
{
unsigned char simval = sim*50;
  restart_TM80();
  while(Number+simval>0)
  {
        while(Timer80Flag==0);
        Timer80Flag=0;               // Reset status flag Timer80
        Number--;
  }
  return;
}

//-----------------------------------------------------------------------------
// Module:   main
// Function: main program
//-----------------------------------------------------------------------------
void main(void)
{
unsigned char i=0;

  DI();        // global interrupt disable
  init_CPU();           	// CPU initialization
  init_LED();		 	// LED port initialization
  init_TM80();			// initialization of timer80
  INTM0=0x00;			// set falling edge detection for INTP0	
  PMK0=0;			// enable external interrupt INTP0

  EI(); 	// global interrupt enable

  while(1)
  {
      if(IntP0Flag)          	// Key1 pressed?
      {
          IntP0Flag=0;          // Reset status flag Key1
          if(i<7)
            i++;
          else
            i=0;
       }
       pShow[i]();              // call selected show
    }
}

//-----------------------------------------------------------------------------
// ISR: 	  isr_INTTM80
// Function: Interrupt service routine of Timer80
//-----------------------------------------------------------------------------
__interrupt void isr_INTTM80(void)
{
  Timer80Flag=0x1;    		 // Set status flag for Timer80
}

//-----------------------------------------------------------------------------
// ISR: 	  isr_INTP0
// Function: Interrupt service routine for external interrupt INTP0
//-----------------------------------------------------------------------------
__interrupt void isr_INTP0(void)
{
  IntP0Flag=1;   		 // Set status flag INTP0 (Key1)
}

//-----------------------------------------------------------------------------
// Module:   drive_LED
// Function: Output of 4-bit value to LED port
//-----------------------------------------------------------------------------
void drive_LED(unsigned char value)
{
  LED1 =~(value>>3);
  LED2 =~(value>>2);
  LED3 =~(value>>1);
  LED4 =~(value);
}

//-----------------------------------------------------------------------------
// Module:   LShow1
// Function: This module defines lightshow number1
//-----------------------------------------------------------------------------
void LShow1(void)
{
    unsigned char i;
    unsigned char pattern=0x1;
    drive_LED(pattern);
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=pattern<<1;
        Wait50(1);                   // Delay of 500 ms
    }
    for(i=0;i<4;i++){
        drive_LED(0x8);
        Wait50(1);                   // Delay of 500 ms
        drive_LED(0x0);
        Wait50(1);                   // Delay of 500 ms
    }
    pattern=0x8;
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=pattern>>1;
        Wait50(1);                   // Delay of 500 ms
    }
    for(i=0;i<4;i++){
        drive_LED(0x1);
        Wait50(1);                   // Delay of 500 ms
        drive_LED(0x0);
        Wait50(1);                   // Delay of 500 ms
    }
}

//-----------------------------------------------------------------------------
// Module:   LShow2
// Function: This module defines lightshow number2
//-----------------------------------------------------------------------------
void LShow2(void)
{
    unsigned char i;
    unsigned char pattern=0x1;
    drive_LED(pattern);
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=(pattern<<1)+1;
        Wait50(2);                   // Delay of 500 ms
    }
    pattern=0x8;
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=(pattern>>1)+0x8;
        Wait50(2);                   // Delay of 500 ms
    }
}

//-----------------------------------------------------------------------------
// Module:   LShow3
// Function: This module defines lightshow number3
//-----------------------------------------------------------------------------
void LShow3(void)
{
    unsigned char i;
    for(i=0;i<4;i++){
        drive_LED(0x9);
        Wait50(1);                   // Delay of 500 ms
        drive_LED(0x0);
        Wait50(1);                   // Delay of 500 ms
    }
    for(i=0;i<4;i++){
        drive_LED(0x6);
        Wait50(1);                   // Delay of 500 ms
        drive_LED(0x0);
        Wait50(1);                   // Delay of 500 ms
    }
}

//-----------------------------------------------------------------------------
// Module:   LShow4
// Function: This module defines lightshow number4
//-----------------------------------------------------------------------------
void LShow4(void)
{
    unsigned char i;
    unsigned char pattern=0x1;
    drive_LED(pattern);
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=pattern<<1;
        Wait50(1);                   // Delay of 500 ms
    }
    pattern=0x8;
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=pattern>>1;
        Wait50(1);                   // Delay of 500 ms
    }
}

//-----------------------------------------------------------------------------
// Module:   LShow5
// Function: This module defines lightshow number5
//-----------------------------------------------------------------------------
void LShow5(void)
{
    unsigned char i;
    unsigned char pattern=0x1;
    drive_LED(pattern);
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=(pattern<<1)+1;
        Wait50(2);                   // Delay of 500 ms
    }
    pattern=0xf;
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=(pattern<<1);
        Wait50(1);                   // Delay of 500 ms
    }
    pattern=0xf0;
    drive_LED(pattern);
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=(pattern>>1);
        Wait50(2);                   // Delay of 500 ms
    }
    pattern=0xf;
    for(i=0;i<4;i++){
        drive_LED(pattern);
        pattern=(pattern>>1);
        Wait50(1);                   // Delay of 500 ms
    }
}

//-----------------------------------------------------------------------------
// Module:   LShow6
// Function: This module defines lightshow number6
//-----------------------------------------------------------------------------
void LShow6(void)
{
        drive_LED(0x5);
        Wait50(3);                   // Delay of 500 ms
        drive_LED(0xa);
        Wait50(3);                   // Delay of 500 ms
}

//-----------------------------------------------------------------------------
// Module:   LShow7
// Function: This module defines lightshow number7
//-----------------------------------------------------------------------------
void LShow7(void)
{
        drive_LED(0x9);
        Wait50(2);                   // Delay of 500 ms
        drive_LED(0x6);
        Wait50(2);                   // Delay of 500 ms
}

//-----------------------------------------------------------------------------
// Module:   LShow8
// Function: This module defines lightshow number8
//-----------------------------------------------------------------------------
void LShow8(void)
{
    unsigned char i;
    for(i=0;i<6;i++){
        drive_LED(0xc);
        Wait50(1);                   // Delay of 500 ms
        drive_LED(0x0);
        Wait50(1);                   // Delay of 500 ms
    }
    for(i=0;i<6;i++){
        drive_LED(0x3);
        Wait50(1);                   // Delay of 500 ms
        drive_LED(0x0);
        Wait50(1);                   // Delay of 500 ms
    }
}

⌨️ 快捷键说明

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