使用RT_Thread Studio 按键(轮询)的使用教程

大家好,我又回来了,今天给大家交流下按键的操作。按键的实现方法有很多。比如电平判断,中断,我们这里用的是操作系统。我们就可以有几个方法。我们可以建立两个线程,一个线程运行LED的程序,一个用来检测案件的状态。也可以把他们放到一个线程中去(我认为这样会更方便)。但是我们今天用的是第一个方法。😄😄😄😄

端口、变量定义

我们先定义一个LED和一个按键的引脚。因为现在还没有学习信号量所以我们同时定义一个全局变量来记录按键的状态。

#define LED0  GET_PIN(B,0)  //LED 定义
#define KEY   GET_PIN(A,0)  //按键定义
rt_bool_t count=0;   //按键标志

新建按键线程

先设置KEY的GPIO为上拉输入,在线程中不断读取KEY引脚的状态 ,通过全局变量count 传递给LED线程 (这里我们还没有学习信号量 下次我们使用信号量实现)

static void Key_entry(void*parameter)
{

    rt_pin_mode(KEY,PIN_MODE_INPUT);
    while(1)
    {
        if(rt_pin_read(KEY)==PIN_LOW)
        {
            rt_kprintf("key up");
            while(rt_pin_read(KEY)==PIN_LOW);//松手检测
            count=~count;
        }
        rt_thread_delay(10);
    }
}

新建LED线程

在上面我们定义了 按键的标志 当按键的标志为真是,LED0电平拉低LED0点亮,否则LED0熄灭。

static void Blink_entry(void* parameter)
{

    rt_pin_mode(LED0, PIN_MODE_OUTPUT);
    while(1)
    {
        if (count) {
            rt_pin_write(LED0, PIN_LOW);
           // rt_kprintf("OPEN_LED\n");
        } else {
            rt_pin_write(LED0, PIN_HIGH);
           // rt_kprintf("CLOSE_LED\n");
        }
       // count++;
        rt_thread_delay(10);
    }
}

编写主函数

使能线程,加入系统。

int main(void)
{

    led_thread = rt_thread_create("led",
            Blink_entry,
            RT_NULL,
            512,
            15,
            20);
    if(led_thread!=RT_NULL)
        rt_thread_startup(led_thread);
    else
        return -1;
    key_thread = rt_thread_create("led",
            Key_entry,
            RT_NULL,
            512,
            10,
            20);
    if(key_thread!=RT_NULL)
        rt_thread_startup(key_thread);
    else
        return -1;

}

今天的教程就到这里,我们下次再见。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值