**
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开发板。有错误,就自己检查修改。
4、效果
**
用杜邦线,将IO-18接到GND,看到LED0和LED1会得到一种状态;
IO—19接到GND,也是一种LED状态;
**
注意:
**
高低电平不是1和0,而是。。上面文章有;
有普通的IO和HS高速IO;一定要注意,多看案例,参考案例。