gaoyang9992006 发表于 2021-9-17 19:50

PIC18F16Q41单片机使用按键控制LED闪烁频率示例

思路:
设置一个IO为带弱上拉的输入模式,用于实现按键功能
设置一个IO为输出模式,用于驱动LED开关状态;
在主循环函数进行LED闪烁操作,即翻转后执行一个带传入参数的延时函数;
然后执行按键扫描程序,当按键被按下,按键函数修改延时函数的参数。
通过MCC创建工程,按键和LED的端口配置如下所示:

点击Generate生产工程代码,然后完善main.c文件如下:

#include "mcc_generated_files/mcc.h"

void get_button(int *i)
{
    __delay_ms(5);
    if(BUTTON_GetValue()==0)
    {
      while(BUTTON_GetValue()==0);
      (*i)--;
      if(*i<=0) *i=10;
    }
}

void main(void)
{
    int t=10;
    int i=0;
    SYSTEM_Initialize();

    while (1)
    {
      LED_Toggle();
      get_button(&t);
      for(i=0;i<t;i++)
            __delay_ms(50);      
    }
}
编译,烧录,LED刚开始以1Hz闪烁,每按一下快一点,当最快到10Hz时候,再按下就回到了1Hz的频率。

gaoyang9992006 发表于 2021-9-17 22:14

本帖最后由 gaoyang9992006 于 2021-9-17 22:27 编辑

https://www.bilibili.com/video/BV1zb4y1y7ZG/
视频地址工程文件





小明的同学 发表于 2021-9-21 23:24

上拉电阻用外部的应该也是可以的吧。
页: [1]
查看完整版本: PIC18F16Q41单片机使用按键控制LED闪烁频率示例