📄 main.c
字号:
#define OS_MAIN
#include "\jacos\incl\jacos.h"
#include "\jacos\prim\prim_io.h"
OST_TASK_T key_monitor_tcb;
OST_TASK_T led_1_tcb;
OST_TASK_T led_2_tcb;
OST_TASK_T led_3_tcb;
#define LED1 0x01
#define LED2 0x02
#define LED3 0x04
#define key1 0x08
#define key2 0x10
#define key3 0x20
#define led1_stop 0x40
#define LED_OFF(a) {PORTB |= (a);}
#define LED_ON(a) {PORTB &= ~(a);}
#if defined(_AVR_) || defined(_GAVR_)
#define is_key_pressed(a) !(PINB & (a))
#define PORT_INIT() {DDRB = (char)(~(key1+key2+key3));}
#elif defined(_PIC_) || defined(_PIC18I)
#define is_key_pressed(a) !(PORTB & (a))
#define PORT_INIT() {TRISB = key1+key2+key3;}
#endif
unsigned char keys;
const unsigned char sos[3] = {10,30,10};
__task void key_monitor(void)
{
static unsigned char m_key1, m_key2, m_key3;
PORT_INIT();
while(1) {
OS_Delay(3);
if (is_key_pressed(key1)) {
if (++m_key1 & 0x04) keys |= key1;
} else {
keys &= ~key1;
m_key1 = 0;
}
if (is_key_pressed(key2)) {
if (++m_key2 & 0x04) keys |= key2;
} else {
m_key2 = 0;
keys &= ~key2;
}
if (is_key_pressed(key3)) {
if (++m_key3 == 0x04) {
keys ^= led1_stop;
keys |= key3;
}
} else {
m_key3 = 0;
keys &= ~key3;
}
}
}
__task void led_1( void )
{
while(1) {
while(1) {
if (keys & led1_stop) break;
LED_ON(LED1);
OS_Delay(25);
LED_OFF(LED1);
OS_Delay(25);
if (keys & led1_stop) break;
LED_ON(LED1);
if (keys & key1) {
OS_Delay(150);
} else {
OS_Delay(25);
}
LED_OFF(LED1);
OS_Delay(25);
}
OS_Task_Stop();
}
}
__task void led_2( void )
{
static unsigned char symb, cou;
while(1) {
symb = 0;
do {
for (cou = 3; cou != 0; cou--) {
LED_ON(LED2);
OS_Delay(sos[symb]);
LED_OFF(LED2);
OS_Delay(10);
}
OS_Delay(20);
} while (++symb < 3);
OS_Delay(100);
if (keys & key2) {
OS_Delay(150);
}
}
}
__task void led_3( void )
{
while(1) {
LED_ON(LED3);
OS_Delay(10);
LED_OFF(LED3);
OS_Delay(50);
}
}
void OS_Idle(void)
{
if ((OS_Task_Status(&led_1_tcb) & OSS_STOPPED) && !(keys & led1_stop)) {
OS_Task_Resume(&led_1_tcb);
}
}
void main(void)
{
OS_Init();
OS_Task_Create(key_monitor,&key_monitor_tcb);
OS_Task_Create(led_1,&led_1_tcb);
OS_Task_Create(led_2,&led_2_tcb);
OS_Task_Create(led_3,&led_3_tcb);
#include "\jacos\prim\prim_t10.c"
while(1) {
OS_Scheduler();
}
}
//__interrupt void intr(void)
#include "\jacos\prim\prim_isr.c"
{
OS_Timer_Tick_Set();
OS_Timer();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -