📄 light_samplesession.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 + -