打印
[Kinetis]

YL-KL26Z-V2 - 第三弹 - PPT 翻页器

[复制链接]
648|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Micachl|  楼主 | 2015-12-18 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上一弹聊到 RTOS,玩了下RTOS 以及按键和LED的显示,这把咱们玩玩 USB device。 看看用mBed开发一个USB 设备有多简单。
还是用上一把的RTOS 框架,基于RTOS的已有代码来修改。这把要玩USB了,得先把库加进来。
点Import 按钮,选择Libraries,在右边输入 USB  然后点 Search按钮,第一个就是USB Device,Author 里面写着 mBed official。是mBed官方的库。就他了,点中以后按 Import 按钮。USB Device库就加到工程里了。


在RTOS的工程里面咱们添加了SW3 按键,不够使,要弄翻页必须能上下翻啊,必须两个,嫌两个不够的同学,得自己改硬件了,板子上就两个按键可用,刚好够上下翻页的。  这次咱再来定义一个 SW4按键,SW4 接到的是PTA4,因此这样写

相关帖子

沙发
Micachl|  楼主 | 2015-12-18 21:11 | 只看该作者
InterruptIn sw4(PTA4);
照葫芦画瓢, 把SW4 按键的处理和定义加进来
void sw4_press(void)
{
    button_pressed = 2;
    ledthread->signal_set(0x1);
}
在主任务中加入 注册SW4 按下的事件处理调用

使用特权

评论回复
板凳
Micachl|  楼主 | 2015-12-18 21:14 | 只看该作者
sw4.fall(&sw4_press);
基本功能架子就出来了。这就差不多了。

下面来把USB功能加进来
在文件头部加入
#include "USBKeyboard.h"

USBKeyboard kbd;

使用特权

评论回复
地板
Micachl|  楼主 | 2015-12-18 21:14 | 只看该作者
然后在按键处理部分加入
  if( button_pressed == 1 )
        {//SW3
            kbd.keyCode(147,0);  //发送Page Down
            Thread::wait(80);
            button_pressed = 0;
        }
        else if( button_pressed == 2 )
        {//SW4
            kbd.keyCode(146,0); //发送 Page Up
            Thread::wait(80);
            button_pressed = 0;
        }

使用特权

评论回复
5
Micachl|  楼主 | 2015-12-18 21:15 | 只看该作者
基本这就OK了,点击mbed的 Compile,把下载得到的bin文件甩到 mbed盘中,
又见到YL-KL26Z-V2板子的红灯一阵乱闪,然后就。。。OK了

把接在OpenSDA这边的USB拔下来,接到另外一头的 USB上,按下SW3 和 SW4 。
看看是不是可以翻页啦?

简单不?下次出去讲PPT,掏出Freescale 的 32位 ARM M0+ 开发板,接在电脑上,让YL-KL26Z-V2设计的各种灯狂闪。喇叭狂叫,而当会场全都安静下,搞不懂你要玩什么的时候你淡定的按下YL-KL26Z-V2的按键,说:来,咱们开始讲PPT。 是不是很NB的感觉?

附上代码,仓促测试通过,程序结构没设计,按键防抖等功能,也都没加进来,有不同意见勿喷。

使用特权

评论回复
6
Micachl|  楼主 | 2015-12-18 21:16 | 只看该作者
做好的工程是这样


main.c 的源代码如下

使用特权

评论回复
7
Micachl|  楼主 | 2015-12-18 21:17 | 只看该作者
#include "mbed.h"
#include "rtos.h"
#include "USBKeyboard.h"

USBKeyboard kbd;

DigitalOut led1(LED1);
DigitalOut led2(LED2);

InterruptIn sw3(PTD6);
InterruptIn sw4(PTA4);

uint32_t button_pressed;
Thread *ledthread;

void sw3_press(void)
{
    button_pressed = 1;
    ledthread->signal_set(0x1);
}

使用特权

评论回复
8
Micachl|  楼主 | 2015-12-18 21:18 | 只看该作者
void sw4_press(void)
{
    button_pressed = 2;
    ledthread->signal_set(0x1);
}

void led_thread(void const *argument)
{
    while (true)
    {
        osEvent evt = Thread::signal_wait(0x1);
        if( button_pressed == 1 )
        {
            led1 = 0;
            Thread::wait(100);
            led1 = 1;
        }
        else if( button_pressed == 2 )
        {
            led2 = 0;
            Thread::wait(100);
            led2 = 1;
        }        
    }
}

使用特权

评论回复
9
Micachl|  楼主 | 2015-12-18 21:19 | 只看该作者
int main()
{
    led1 = 1;
    led2 = 1;

    ledthread = new Thread(led_thread, NULL, osPriorityAboveNormal);

    button_pressed = 0;
    sw3.fall(&sw3_press);
    sw4.fall(&sw4_press);

    while (true)
    {
        if( button_pressed == 1 )
        {//SW3
            kbd.keyCode(147,0);
            Thread::wait(80);
            button_pressed = 0;
        }
        else if( button_pressed == 2 )
        {//SW4
            kbd.keyCode(146,0);
            Thread::wait(80);
            button_pressed = 0;
        }   
        else
            Thread::wait(100);
    }
}

使用特权

评论回复
10
quray1985| | 2015-12-19 19:46 | 只看该作者
这个PPT翻页器是不是用到了USB啊

使用特权

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

本版积分规则

43

主题

300

帖子

1

粉丝