本帖最后由 hotpower 于 2011-6-19 01:25 编辑
LOOK实现两个小任务:
① 助学板上四个LED小灯轮流点亮,有两种显示模式,方式 1为LED1--->LED2--->LED3--->LED4--->LED1循环,方式2为LED4--->LED3--->LED2--->LED1--->LED4循环,初始化为方式1;
② 助学板上KEY2按下调整LED的循环方式。
虽然Lee老师一直普及CPP,但是看到CPP的程序依旧是云里雾里。此贴仅是根据老师0510的群课多加个任务,完全是照猫画虎,望多多指教!
关于大叔的红杏头文件,暂时还无法自如运用,首先因为一直用新唐的库熟悉NUC120,对其寄存器不是很熟悉,其次对大叔的红杏头文件了解不深,最后是暂时无法智能感知。
初次接触LOOK,初次使用红杏,望各位高手不要见笑!
部分源程序:
LED.CPP (20110515 17:25更正)
#include "NUC1xx.h"
#include "NUC1xxM051Seriescfg.h"
#include "led.h"
uint8_t **_FlashMode = TRUE;
// 任务类 task_led_t 的例程
void task_led_t::routine()
{
// TODO: 在此编写 task_led_t 例程的内容
GPIOAs.DMASK.Regs = ~0b111100;
GPIOAs.DOUT.Regs = ~0b100;
while (true) {
// TODO: 在此编写 task_led_t 例程的内容
uint32_t data = GPIOAs.DOUT.Regs & 0b111100;
if (**_FlashMode)
{
data <<= 1;
data += data >> 4;
}
else
{
data >>= 1;
data += data << 4;
}
GPIOAs.DOUT.Regs = data;
delay(LOOK_TICKS_PER_SEC);
}
}
// 任务类 task_key_t 的例程
void task_key_t::routine()
{
// TODO: 在此编写 task_led_t 例程的内容
while (true) {
// TODO: 在此编写 task_led_t 例程的内容
if (key_read())
**_FlashMode = !**_FlashMode;
delay(LOOK_TICKS_PER_SEC/10);
}
}
// 任务类 task_key_t 的成员函数
__OPT_INLINE__ int8_t task_key_t::key_read()
{
uint32_t Key_Tmp = TRUE;
static uint32_t Key_Record = TRUE; //按键记录
Key_Tmp = GPIOBs.PIN.Bits.Pin14;
if(Key_Tmp==TRUE) //无有效按键按下
{
Key_Record = TRUE; //清除按键记录
return FALSE; //程序退出
}
if(Key_Record!=Key_Tmp) //为新按键
{
Key_Record=Key_Tmp; //保存本次结果
delay(LOOK_TICKS_PER_SEC/100); //延时去抖动
Key_Tmp = GPIOBs.PIN.Bits.Pin14;
if(Key_Tmp==Key_Record)
return TRUE;
}
return FALSE;
}
#ifdef LOOK_SCHEDULING_PRIORITY
instantiate::task<task_led_t, LOOK_STACK_SIZE> task_led(0);
#else
instantiate::task<task_led_t, LOOK_STACK_SIZE> task_led;
#endif
#ifdef LOOK_SCHEDULING_PRIORITY
instantiate::task<task_key_t, LOOK_STACK_SIZE> task_key(0);
#else
instantiate::task<task_key_t, LOOK_STACK_SIZE> task_key;
#endif
LED.h
#include "look_config.h"
#include <look.h>
#include <instantiate>
// 任务类 task_led_t 的定义
class task_led_t : public task_t {
public:
task_led_t() __OPT_ATTR__; // 构造函数
protected:
void routine(); // 任务例程
};
// 任务类 task_led_t 的构造函数
__OPT_INLINE__ task_led_t::task_led_t()
{
// TODO: 在此初始化 task_led_t 的类成员
}
// 任务类 task_key_t 的定义
class task_key_t : public task_t {
public:
task_key_t() __OPT_ATTR__; // 构造函数
int8_t key_read() __OPT_ATTR__;
protected:
void routine(); // 任务例程
};
// 任务类 task_key_t 的构造函数
__OPT_INLINE__ task_key_t::task_key_t()
{
// TODO: 在此初始化 task_led_t 的类成员
}
extern instantiate::task<task_led_t, LOOK_STACK_SIZE> task_led;
extern instantiate::task<task_key_t, LOOK_STACK_SIZE> task_key;
工程结构:
工程包:
Led.zip
(589.84 KB)
|