查看: 13085|回复: 36

[原创] 【FRDM-K64F开发经验】+ 04 + 按键中断控制LED(非PE实现)

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16864
    最后登录
    1970-1-1
    发表于 2015-6-22 23:41:01 | 显示全部楼层 |阅读模式
    接前帖子:
    【FRDM-K64F开发经验】+ 02 + LEDRGB灯点亮
    https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=599762&fromuid=336767

    【FRDM-K64F开发经验】+ 03 + LEDRGB灯点亮(非PE实现)
    https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=599771&fromuid=336767

    这次来个按键中断方式控制LED吧,来学习学习PORT的中断使用
    ====================================================================

    一、功能描述
    使用SW2中断控制红色的LED亮;SW3控制红色的LED灭。

    二、电路分析
    1、LED部分直接上图,可以看出红色LED接PTB21
    1410.jpg
    2、SW2接PTC6,SW3接PTA4。当有按键按下时,会向K64F发送下降沿中断。
    1401.jpg

    三、功能实现
    1、新建工程"key-interrupt"
    1402.jpg
    2、不使用PE编程
    1403.jpg
    4、按这个帖子建立工程,并添加必要的系统文件,以及环境设置。这里就不细说了。
    https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=599771&fromuid=336767
    (1)工程结构
    1404.jpg
    (2)头文件路径
    1405.jpg
    (3)链接库路径设置
    1406.jpg
    5、接下来就是在main.c中写程序。
    (1)在主函数中配置按钮引脚为下降沿触发中断
    1407.jpg
    (2)中断服务中先判断,然后清中断标志,最后控制LED。
    1408.jpg
    (3)最后是完整的程序
    1. #include "fsl_device_registers.h"
    2. #include "fsl_clock_manager.h"
    3. #include "fsl_debug_console.h"
    4. #include "pin_mux.h"
    5. #include "board.h"
    6. #include "stdio.h"


    7. int main(void)
    8. {

    9.     /* Write your code here */
    10.     CLOCK_SYS_EnablePortClock(PORTA_IDX);
    11.     CLOCK_SYS_EnablePortClock(PORTB_IDX);
    12.     CLOCK_SYS_EnablePortClock(PORTC_IDX);
    13.     CLOCK_SYS_EnablePortClock(PORTE_IDX);

    14.     BOARD_ClockInit();
    15.     dbg_uart_init();

    16.     printf("\nPress SW2 to set the red led. \r\n");
    17.     printf("\nPress SW3 to clear the red led. \r\n");

    18.     switchPins[0].config.interrupt = kPortIntFallingEdge;
    19.     switchPins[1].config.interrupt = kPortIntFallingEdge;

    20.     GPIO_DRV_Init(switchPins, ledPins);

    21.     /* This for loop should be replaced. By default this loop allows a single stepping. */
    22.     for (;;) {
    23.         ;
    24.     }
    25.     /* Never leave main */
    26.     return 0;
    27. }

    28. void PORTA_IRQHandler()
    29. {
    30.     if (GPIO_DRV_IsPinIntPending(kGpioSW3))
    31.     {
    32.         GPIO_DRV_ClearPinIntFlag (kGpioSW3);
    33.         GPIO_DRV_SetPinOutput(BOARD_GPIO_LED_RED);
    34.         printf("\n Switch 3 is pressed, and the red led is off. \r\n");
    35.      }
    36. }

    37. void PORTC_IRQHandler()
    38. {
    39.     if (GPIO_DRV_IsPinIntPending(kGpioSW2))
    40.     {
    41.         GPIO_DRV_ClearPinIntFlag (kGpioSW2);
    42.         GPIO_DRV_ClearPinOutput(BOARD_GPIO_LED_RED);
    43.         printf("\n Switch 2 is pressed, and the red led is on. \r\n");
    44.      }
    45. }
    复制代码

    四、编译调试
    这个过程很简单,省了

    五、演示
    上个串口输出的信息,可以看到系统的工作。
    1409.jpg
    演示效果就不上图了。

    回复

    使用道具 举报

    该用户从未签到

    10

    主题

    46

    帖子

    0

    注册会员

    Rank: 2

    积分
    108
    最后登录
    2018-5-24
    发表于 2015-6-23 10:45:22 | 显示全部楼层
    支持一下,先收了学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-6-23 10:54:20 | 显示全部楼层
    非常感谢你关于Kinetis的经验分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-6-23 12:50:15 | 显示全部楼层
    i have a dream...
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-22 09:09
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    24

    主题

    446

    帖子

    0

    高级会员

    Rank: 4

    积分
    876
    最后登录
    2019-3-8
    发表于 2015-6-23 16:10:54 | 显示全部楼层
    开始出好贴子了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16864
    最后登录
    1970-1-1
     楼主| 发表于 2015-6-23 17:13:43 | 显示全部楼层
    digua96 发表于 2015-6-23 16:10
    开始出好贴子了

    多谢支持
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-8-30 16:02
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    1065

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1851
    最后登录
    2019-11-19
    发表于 2015-6-23 23:37:48 | 显示全部楼层
    多谢分享!希望楼主有不断的更新
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16864
    最后登录
    1970-1-1
     楼主| 发表于 2015-6-24 07:55:00 | 显示全部楼层
    kingsings 发表于 2015-6-23 23:37
    多谢分享!希望楼主有不断的更新

    多谢支持,随后还有跟上
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    60

    帖子

    0

    注册会员

    Rank: 2

    积分
    157
    最后登录
    2015-7-24
    发表于 2015-7-10 11:18:51 | 显示全部楼层
    我的串口没有信息啊,是我不会用么.....  楼主指点一下啊,演示效果有,就串口不行
    捕获.PNG
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16864
    最后登录
    1970-1-1
     楼主| 发表于 2015-7-10 12:43:07 | 显示全部楼层
    水草田 发表于 2015-7-10 11:18
    我的串口没有信息啊,是我不会用么.....  楼主指点一下啊,演示效果有,就串口不行 ...

    你串口用的对不?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 14:36 , Processed in 0.112511 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表