ESP8266_03--------------按键点灯

1.硬件电路:

2.软件设计:

我们要实现按下按键LED灯的状态实现反转

 1.GPIO 输⼊输出相关宏

2.设置按键所用的GPIO引脚为输入模式
    //设置GPIO0引脚的功能为GPIO
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0);
    //设置GPIO为输入模式 禁止GPIO输出
    GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));
    //禁止内部上拉
    PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U);

3.使用GPIO_INPUT_GET(引脚号)读取引脚的电平状态

GPIO_INPUT_GET(GPIO_ID_PIN(0));//读取引脚0的状态

3.程序的功能和源码:

   程序功能:第一次按下LED点亮,再次按下LED熄灭.

   程序源码

//#include "ets_sys.h"
#include "user_config.h"//用户配置
#include "eagle_soc.h"//GPIO函数,宏定义
#include "c_types.h" //变量类型
#include "osapi.h"   //系统函数

#include "user_interface.h"


/******************************************************************************
 * FunctionName : user_rf_cal_sector_set
 * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.
 *                We add this function to force users to set rf cal sector, since
 *                we don't know which sector is free in user's application.
 *                sector map for last several sectors : ABCCC
 *                A : rf cal
 *                B : rf init data
 *                C : sdk parameters
 * Parameters   : none
 * Returns      : rf cal sector
*******************************************************************************/
uint32 ICACHE_FLASH_ATTR
user_rf_cal_sector_set(void)
{
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
            rf_cal_sec = 512 - 5;
            break;
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
            rf_cal_sec = 1024 - 5;
            break;
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        case FLASH_SIZE_64M_MAP_1024_1024:
            rf_cal_sec = 2048 - 5;
            break;
        case FLASH_SIZE_128M_MAP_1024_1024:
            rf_cal_sec = 4096 - 5;
            break;
        default:
            rf_cal_sec = 0;
            break;
    }

    return rf_cal_sec;
}



void ICACHE_FLASH_ATTR
user_rf_pre_init(void)
{
}

//毫秒延时函数
void ICACHE_FLASH_ATTR
delay_ms(u32 C_time)
{
	for(;C_time>0;C_time--){
		os_delay_us(1000);//1ms
	}
}

//按键初始化
void KEY_GPIO_Init(void)
{
	//设置GPIO0引脚的功能为GPIO
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0);
	//设置GPIO为输入模式 禁止GPIO输出
	GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));
	//禁止内部上拉
	PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U);

}

//LED初始化
void LED_GPIO_Init(void)
{
	//设置GPIO4引脚的功能为GPIO
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4);
	//默认输出为高点平
	GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);
}
/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
{
  uint8_t ledflag=0;
  //LED、KEY初始化
  LED_GPIO_Init();
  KEY_GPIO_Init();
  //波特率=74880
  os_printf("\r\nESP8266按键点灯\r\n");
  while(1)
  {
      system_soft_wdt_feed();//喂狗
	  if(GPIO_INPUT_GET(GPIO_ID_PIN(0))==0 && (ledflag==0))
	  {
		  while(GPIO_INPUT_GET(GPIO_ID_PIN(0))==0);
		  GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0);
		  ledflag=1;
	  }
	  else if(GPIO_INPUT_GET(GPIO_ID_PIN(0))==0 &&(ledflag==1))
	  {
		  while(GPIO_INPUT_GET(GPIO_ID_PIN(0))==0);
		  GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);
		  ledflag=0;
	  }
  }
}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值