[Kinetis] YL-KL26Z-V2 - 第三弹 - PPT 翻页器

[复制链接]
1134|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 | 显示全部楼层
  1. InterruptIn sw4(PTA4);
照葫芦画瓢, 把SW4 按键的处理和定义加进来
  1. void sw4_press(void)
  2. {
  3.     button_pressed = 2;
  4.     ledthread->signal_set(0x1);
  5. }
  1. 在主任务中加入 注册SW4 按下的事件处理调用
 楼主| Micachl 发表于 2015-12-18 21:14 | 显示全部楼层
  1. sw4.fall(&sw4_press);
基本功能架子就出来了。这就差不多了。

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

  2. USBKeyboard kbd;
 楼主| Micachl 发表于 2015-12-18 21:14 | 显示全部楼层
然后在按键处理部分加入
  1.   if( button_pressed == 1 )
  2.         {//SW3
  3.             kbd.keyCode(147,0);  //发送Page Down
  4.             Thread::wait(80);
  5.             button_pressed = 0;
  6.         }
  7.         else if( button_pressed == 2 )
  8.         {//SW4
  9.             kbd.keyCode(146,0); //发送 Page Up
  10.             Thread::wait(80);
  11.             button_pressed = 0;
  12.         }
 楼主| 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的感觉?

附上代码,仓促测试通过,程序结构没设计,按键防抖等功能,也都没加进来,有不同意见勿喷。
 楼主| Micachl 发表于 2015-12-18 21:16 | 显示全部楼层
做好的工程是这样


main.c 的源代码如下
 楼主| Micachl 发表于 2015-12-18 21:17 | 显示全部楼层
  1. #include "mbed.h"
  2. #include "rtos.h"
  3. #include "USBKeyboard.h"

  4. USBKeyboard kbd;

  5. DigitalOut led1(LED1);
  6. DigitalOut led2(LED2);

  7. InterruptIn sw3(PTD6);
  8. InterruptIn sw4(PTA4);

  9. uint32_t button_pressed;
  10. Thread *ledthread;

  11. void sw3_press(void)
  12. {
  13.     button_pressed = 1;
  14.     ledthread->signal_set(0x1);
  15. }
 楼主| Micachl 发表于 2015-12-18 21:18 | 显示全部楼层
  1. void sw4_press(void)
  2. {
  3.     button_pressed = 2;
  4.     ledthread->signal_set(0x1);
  5. }

  6. void led_thread(void const *argument)
  7. {
  8.     while (true)
  9.     {
  10.         osEvent evt = Thread::signal_wait(0x1);
  11.         if( button_pressed == 1 )
  12.         {
  13.             led1 = 0;
  14.             Thread::wait(100);
  15.             led1 = 1;
  16.         }
  17.         else if( button_pressed == 2 )
  18.         {
  19.             led2 = 0;
  20.             Thread::wait(100);
  21.             led2 = 1;
  22.         }        
  23.     }
  24. }
 楼主| Micachl 发表于 2015-12-18 21:19 | 显示全部楼层
  1. int main()
  2. {
  3.     led1 = 1;
  4.     led2 = 1;

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

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

  9.     while (true)
  10.     {
  11.         if( button_pressed == 1 )
  12.         {//SW3
  13.             kbd.keyCode(147,0);
  14.             Thread::wait(80);
  15.             button_pressed = 0;
  16.         }
  17.         else if( button_pressed == 2 )
  18.         {//SW4
  19.             kbd.keyCode(146,0);
  20.             Thread::wait(80);
  21.             button_pressed = 0;
  22.         }   
  23.         else
  24.             Thread::wait(100);
  25.     }
  26. }

quray1985 发表于 2015-12-19 19:46 | 显示全部楼层
这个PPT翻页器是不是用到了USB啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

300

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部