打印
[LOOK]

LOOK菜鸟idle应用例程

[复制链接]
2879|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2011-5-25 00:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击下载LOOK_IDLE
LOOK_IDLE.rar (650.35 KB)

1.LOOK_IDLE.H
#ifndef __LOOK_IDLE_H
#define __LOOK_IDLE_H

#include "look_config.h"
#include <look.h>
#include <instantiate>

// 空闲任务类 task_LOOK_IDLE_t 的定义
class task_LOOK_IDLE_t : public idle_task_t {
public:
task_LOOK_IDLE_t() __OPT_ATTR__; // 构造函数
void on_signal(void* addr, uintptr_t signal); // 定义on_signal()
protected:
void routine() __attribute__((naked, noreturn)); // 任务例程
private:
timer_t timer1, timer2;
int interval1, interval2;
int count1, count2;
};

// 空闲任务类 LOOK_IDLE 的构造函数

__OPT_INLINE__ task_LOOK_IDLE_t::task_LOOK_IDLE_t()
: timer1(*this) // 初始化定时器实例,并指定触发对象。
, timer2(*this) // 初始化定时器实例,并指定触发对象。
, interval1(50) //初始化显示间隔
, interval2(50) //初始化显示间隔
, count1(0)
, count2(0)
{
// TODO: 在此初始化 task_LOOK_IDLE_t 的类成员
}

extern instantiate::idle<task_LOOK_IDLE_t, 2 * LOOK_STACK_SIZE> idle_task
;

#endif // __LOOK_IDLE_H

2.LOOK_IDLE.CPP
#include "LOOK_IDLE.h"
#include "NUC1xx.h"
#include "NUC1xxM051Seriescfg.h"

#define BEEP Pin10//BEEP在PB.10

// 空闲任务类 task_LOOK_IDLE_t 的例程
void task_LOOK_IDLE_t::routine()
{
// TODO: 在此编写 task_LOOK_IDLE_t 例程的内容
volatile unsigned int key;
timer1.start(interval1);//启动定时器1
while (true) {
// TODO: 在此编写 task_LOOK_IDLE_t 例程的内容
key = GPIOBs.PIN.Regs;//取键盘值
for (unsigned int i = 0; i < 0x8888; i++) asm volatile("nop");
if (key == GPIOBs.PIN.Regs) {//等待抖动过去
if ((key & (1 << 14)) == 0) {//Key2
while (key == GPIOBs.PIN.Regs);//等待键释放
if (interval1 <= 500) {
interval1 += 50;
count2 = 2;//响一声
timer2.start(interval2);//启动定时器2
}
}
else if ((key & (1 << 15)) == 0) {//Key1
while (key == GPIOBs.PIN.Regs);//等待键释放
if (interval1 > 50) {
interval1 -= 50;
count2 = 6;//响三声
timer2.start(interval2);//启动定时器2
}
}
}
}
__builtin_unreachable();
}


void task_LOOK_IDLE_t::on_signal(void* addr, uintptr_t signal)
{
if (addr == &timer1) {
//处理定时器事务
timer1.do_start(interval1);//重置定时器
GPIOAs.DMASK.Regs = ~0b111100;
GPIOAs.DOUT.Regs = (count1 << 2) ^ 0b111100;
count1 ++;
}
else if (addr == &timer2) {
//处理定时器事务
GPIOBs.DMASK.Bits.BEEP = 0;
if (count2 > 0) {
GPIOBs.DOUT.Bits.BEEP ^= 1;
timer2.do_start(interval2);//重置定时器
count2 --;
}
else {
GPIOBs.DOUT.Bits.BEEP = 0;
timer2.do_kill();//清除定时器
}
}
else {
idle_task_t::on_signal(addr, signal);
}

}

namespace look{//必须写!!!
instantiate::idle<task_LOOK_IDLE_t, 2* LOOK_STACK_SIZE> idle_task(false);
}

相关帖子

沙发
lzlz70707| | 2011-5-25 00:10 | 只看该作者
沙发

使用特权

评论回复
板凳
hotpower|  楼主 | 2011-5-25 01:13 | 只看该作者
这实际上是个裸奔的思想编写的LOOK程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://www.21ic.com/tools/HotWC3_V1.23.html]

1460

主题

21619

帖子

506

粉丝