210:例子1:6个垃圾桶是否满的信息读取VSCODE实现

**

1、实验目的

**
六个垃圾桶,用六个传感器,判断是否垃圾桶满。
如果传感器从1—0,那么垃圾桶满,LED灯亮或者灭;

2、参考例程:

keypad控制RGB案例;
LED灯案例;

3、步骤

一、将keypad的案例程序,复制到在SDK的src里面,重命名,这里重命名为all_01;
二、打开LED的代码,后面参考用到
二、修改端口配置代码
(1)添加LED代码的pin_config.h文件,的代码复制到src对应的pin_config.h里面。这里LED的硬件引脚不能改变,因为开发板已经固定了。
在这里插入图片描述
(2)将keypad的配置文件的pin_config.h里面的硬件IO、软件IO、以及对应设置,修改成垃圾桶的,比如改名字等;
最后的文件

pin_config.h


#ifndef _PIN_CONFIG_H_
#define _PIN_CONFIG_H_
/*****************************HEAR-FILE************************************/
#include "fpioa.h"

/*****************************HARDWARE-PIN*********************************/
// 硬件IO口,与原理图对应
#define PIN_LED_0             (0)
#define PIN_LED_1             (17)

#define PIN_LJT_0             (18)  //垃圾桶LJT
#define PIN_LJT_1             (19)
#define PIN_LJT_2             (20)
#define PIN_LJT_3             (21)
#define PIN_LJT_4             (22)
#define PIN_LJT_5             (23)
/*****************************SOFTWARE-GPIO********************************/
// 软件GPIO口,与程序对应
#define LED0_GPIONUM          (0)
#define LED1_GPIONUM          (1)//
#define LJT0_GPIONUM          (2)
#define LJT1_GPIONUM          (3)
#define LJT2_GPIONUM          (4)
#define LJT3_GPIONUM          (5)
#define LJT4_GPIONUM          (6)
#define LJT5_GPIONUM          (7)
/*****************************FUNC-GPIO************************************/
// GPIO口的功能,绑定到硬件IO口
#define FUNC_LED0             (FUNC_GPIO0 + LED0_GPIONUM)
#define FUNC_LED1             (FUNC_GPIO0 + LED1_GPIONUM)
//IO口18--23对应HS高速口,看芯片手册的引脚定义表
#define FUNC_LJT0             (FUNC_GPIOHS0 + LJT0_GPIONUM)
#define FUNC_LJT1             (FUNC_GPIOHS0 + LJT1_GPIONUM)
#define FUNC_LJT2             (FUNC_GPIOHS0 + LJT2_GPIONUM)
#define FUNC_LJT3             (FUNC_GPIOHS0 + LJT3_GPIONUM)
#define FUNC_LJT4             (FUNC_GPIOHS0 + LJT4_GPIONUM)
#define FUNC_LJT5             (FUNC_GPIOHS0 + LJT5_GPIONUM)
#endif /* _PIN_CONFIG_H_ */

(3)修该src里面的,刚才复制,改名字的all_01的main.c代码。实现功能。
注意普通IO口,高速IO口的端口模式设置,以及IO的高低电平的定义。
普通IO口,210输出模式,驱动LED亮灭。

 gpio_set_drive_mode(LED0_GPIONUM, GPIO_DM_OUTPUT);
 gpio_set_drive_mode(LED1_GPIONUM, GPIO_DM_OUTPUT);

高速IO口,HS的,IO18—IO23.

  // 设置垃圾桶的传感器的GPIO模式为上拉输入
    gpiohs_set_drive_mode(LJT0_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT1_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT2_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT3_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT4_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT5_GPIONUM, GPIO_DM_INPUT_PULL_UP);

高低电平的信息标志类型是
gpio_pin_value_t

高低电平,这里不是1–0,而是GPIO_PV_HIGH和GPIO_PV_LOW

gpio_pin_value_t value = GPIO_PV_HIGH;// GPIO_PV_LOW

全部的main.c代码

//IO18---IO23,普通IO口,输入状态,判断是不是0,是0,说明垃圾满
#include <stdio.h>
#include <unistd.h>
#include "gpio.h"
#include "gpiohs.h"
#include "pin_config.h"
#include "sleep.h"

/**
* Function       hardware_init
* @author        Gengyue
* @date          2020.05.27
* @brief         硬件初始化,绑定GPIO口
* @param[in]     void
* @param[out]    void
* @retval        void
* @par History   无
*/
void hardware_init(void)
{
    
    
    fpioa_set_function(PIN_LED_0, FUNC_LED0);
    fpioa_set_function(PIN_LED_1, FUNC_LED1);

    fpioa_set_function(PIN_LJT_0, FUNC_LJT0);
    fpioa_set_function(PIN_LJT_1, FUNC_LJT1);
    fpioa_set_function(PIN_LJT_2, FUNC_LJT2);
    fpioa_set_function(PIN_LJT_3, FUNC_LJT3);
    fpioa_set_function(PIN_LJT_4, FUNC_LJT4);
    fpioa_set_function(PIN_LJT_5, FUNC_LJT5);

}

/**
* Function       main
* @author        Gengyue
* @date          2020.05.27
* @brief         主函数,程序的入口
* @param[in]     void
* @param[out]    void
* @retval        0
* @par History   无
*/
int main(void)
{
    
    
    hardware_init();// 硬件引脚初始化

    gpio_init();    // 使能GPIO的时钟
    
    // 设置LED0和LED1的GPIO模式为输出
    gpio_set_drive_mode(LED0_GPIONUM, GPIO_DM_OUTPUT);
    gpio_set_drive_mode(LED1_GPIONUM, GPIO_DM_OUTPUT);
    
    // 先关闭LED0和LED1
    gpio_pin_value_t value = GPIO_PV_HIGH;
    gpio_set_pin(LED0_GPIONUM, value);
    gpio_set_pin(LED1_GPIONUM, value);

    // 设置垃圾桶的传感器的GPIO模式为上拉输入
    gpiohs_set_drive_mode(LJT0_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT1_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT2_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT3_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT4_GPIONUM, GPIO_DM_INPUT_PULL_UP);
    gpiohs_set_drive_mode(LJT5_GPIONUM, GPIO_DM_INPUT_PULL_UP);

    while (1)
    {
    
    
       //查询几个GPIO垃圾桶,返回传感器..参考keypad的案例代码
       gpio_pin_value_t state_LJT0 =  gpiohs_get_pin(LJT0_GPIONUM);
       gpio_pin_value_t state_LJT1 =  gpiohs_get_pin(LJT1_GPIONUM);
       gpio_pin_value_t state_LJT2 =  gpiohs_get_pin(LJT2_GPIONUM);
       gpio_pin_value_t state_LJT3 =  gpiohs_get_pin(LJT3_GPIONUM);
       gpio_pin_value_t state_LJT4 =  gpiohs_get_pin(LJT4_GPIONUM);
       gpio_pin_value_t state_LJT5 =  gpiohs_get_pin(LJT5_GPIONUM);
 
       //LED 低电平亮,高电平不亮
       if(!state_LJT0)
              {
    
    
                  gpio_set_pin(LED0_GPIONUM, GPIO_PV_LOW);
                  gpio_set_pin(LED1_GPIONUM, GPIO_PV_LOW);
              }
        if(!state_LJT1)
              {
    
    
                  gpio_set_pin(LED0_GPIONUM, GPIO_PV_LOW);
                  gpio_set_pin(LED1_GPIONUM, GPIO_PV_HIGH);
              }
        if(!state_LJT2)
              {
    
    
                  gpio_set_pin(LED0_GPIONUM, GPIO_PV_HIGH);
                  gpio_set_pin(LED1_GPIONUM, GPIO_PV_LOW);
              }
        if(!state_LJT3)
              {
    
    
                  gpio_set_pin(LED0_GPIONUM, GPIO_PV_HIGH);
                  gpio_set_pin(LED1_GPIONUM, GPIO_PV_HIGH);
              }
    }
    return 0;
}

**

编译和下载

在SDK,右键,用VS打开;
终端里面输入cd build回车运行
输入cmake .. -DPROJ=all_01 -G "MinGW Makefiles"
运行
输入make
运行,
如果没错误,就将all_01.bin下载到210开发板。有错误,就自己检查修改。

扫描二维码关注公众号,回复: 12261684 查看本文章

4、效果

**
杜邦线,将IO-18接到GND,看到LED0和LED1会得到一种状态;
IO—19接到GND,也是一种LED状态;

**

注意:

**
高低电平不是1和0,而是。。上面文章有;
有普通的IO和HS高速IO;一定要注意,多看案例,参考案例。

猜你喜欢

转载自blog.csdn.net/lmf666/article/details/111141549
今日推荐