📄 artx_key_demo.c
字号:
/*----------------------------------------------------------------------------
* A R T X K e r n e l E x a m p l e
*----------------------------------------------------------------------------
* Name: BLINKY.C
* Purpose: Advanced RTX example program
* Rev.: V2.00 / 19-oct-2005
*----------------------------------------------------------------------------
* This code is part of the ARTX-ARM kernel package of Keil Software.
* Copyright (c) 2004-2005 Keil Software. All rights reserved.
*---------------------------------------------------------------------------*/
#include <ARTX.h>
#include <LPC21xx.H> /* LPC21xx definitions */
OS_TID t_GetKey; /* assigned task id of task: phase_a */
OS_TID t_clock; /* assigned task id of task: clock */
OS_TID t_phaseA;
#define LED_A 0x100000
#define LED_B 0x200000
#define LED_C 0x040000
#define LED_D 0x080000
#define LED_CLK 0x800000
#define KEY1 13
#define KEY2 15
#define KEY3 7
#define KEY4 6
void init_port(void)
{
//port initialized
IODIR1=0x00FF0000;
IODIR0=0x40600010;
IOSET1 = 0x00FF0000; //ALL LED OFF
}
unsigned char Scan_Key(void)
{
unsigned int k;
unsigned char key,i;
i=0;
key=0;
k=IOPIN0;
if((k&1<<KEY4)==0)key+=1;
key=key<<1;
if((k&1<<KEY3)==0)key+=1;
key=key<<1;
if((k&1<<KEY2)==0)key+=1;
key=key<<1;
if((k&1<<KEY1)==0)key+=1;
switch(key)
{
case 0x00:
i=0;
break;
case 0x08:
i=4;
break;
case 0x04:
i=3;
break;
case 0x02:
i=2;
break;
case 0x01:
i=1;
break;
case 0x0F: //复合键
i=0XF;
break;
case 0x0E:
i=0X0E;
break;
default:
i=0;
break;
}
return i;
}
/*----------------------------------------------------------------------------
* Function 'signal_func' called from multiple tasks
*---------------------------------------------------------------------------*/
void signal_func (OS_TID task) {
os_evt_set (0x0100, t_clock); /* send event signal to clock task */
os_dly_wait (9); /* delay 50 clock ticks */
// os_evt_set (0x0100, t_clock); /* send event signal to clock task */
// os_dly_wait (9); /* delay 50 clock ticks */
os_evt_set (0x0001, task); /* send event to task 'task' */
// os_dly_wait (10); /* delay 50 clock ticks */
}
/*----------------------------------------------------------------------------
* Task 1 'GetKey ':
*---------------------------------------------------------------------------*/
void phaseA (void) __task {
for (;;) {
os_evt_wait_and (0x0001, 0xffff); /* wait for an event flag 0x0001 */
IOCLR1 = LED_B;
signal_func (t_GetKey); /* call common signal function */
IOSET1 = LED_B;
}
}
void GetKey (void) __task {
unsigned char i;
for (;;) {
os_evt_wait_and (0x0001, 0xffff); /* wait for an event flag 0x0001 */
i=Scan_Key();
if(i!=0)IOCLR1 = (0x00008000<<i);
signal_func(t_phaseA);
//os_dly_wait (100);
if(i!=0)IOSET1 = (0x00008000<<i);
//IOSET1 = 0x006f0000; //ALL LED OFF
}
}
/*----------------------------------------------------------------------------
* Task 5 'clock': Signal Clock
*---------------------------------------------------------------------------*/
void clock (void) __task {
for (;;) {
os_evt_wait_and (0x0100, 0xffff); /* wait for an event flag 0x0100 */
IOSET1 = LED_CLK;
os_dly_wait (8); /* delay 8 clock ticks */
IOCLR1 = LED_CLK;
}
}
/*----------------------------------------------------------------------------
* Task 6 'init': Initialize
*---------------------------------------------------------------------------*/
void init (void) __task {
IODIR1 = 0xFF0000; /* P1.16..23 defined as Outputs */
init_port();
t_phaseA = os_tsk_create (phaseA, 0); /* start task phaseB */
t_GetKey = os_tsk_create (GetKey, 0); /* start task phaseA */
// t_phaseC = os_tsk_create (phaseC, 0); /* start task phaseC */
// t_phaseD = os_tsk_create (phaseD, 0); /* start task phaseD */
t_clock = os_tsk_create (clock, 0); /* start task clock */
os_evt_set (0x0001, t_phaseA); /* send signal event to task phaseA */
os_tsk_delete_self ();
}
/*----------------------------------------------------------------------------
* Main: Initialize and start ARTX Kernel
*---------------------------------------------------------------------------*/
void main (void) {
os_sys_init (init); /* Initialize ARTX and start init */
}
/*----------------------------------------------------------------------------
* end of file
*---------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -