第四章 按键输入试验 上一章,我们介绍了 W7500 的 IO 口作为输出的使用,这一章,将向大家介绍如何使用 W7500 的 IO 口作为输入使用。在本章中将利用W7500EVB的功能按键,来控制板载的RGB LED 的亮灭。通过本章的学习,将了解到 W7500 的 IO 口作为输入口的使用方法。
本章分为如下几个小节:
4.1 W7500 IO 口简介
4.2 硬件设计
4.3 软件设计
4.4 下载验证
4.1 W7500 按键简介W7500 的 IO 口在上一章已经有了比较详细的介绍,这里不再多说。W7500 的 IO口作为输入使用时,是通过调用GPIO_ReadInputDataBit()函数来读取 IO 口的状态的。了解了这点,就可以开始代码的编写了。 这一章,将通过 W7500EVB 开发板上载有的1个功能按键,来控制板上的 RBGLED, KEY 控制RBGLED, 按一次亮,再按一次灭。 4.2 硬件设计本实验用到的硬件资源有: 1) 指示灯RGB LED 2) 功能按键KEY 在W7500EVB上的按键 KEY 连接在PC12 上,如图4.2.1所示: 图4.2.1 W7500EVB 按键原理图 W7500EVB上搭载的功能按键是默认上拉,所以按键是低电平有效。 4.3 软件设计在W7500EVB KEY工程目录中,我们引入了 key.c 文件以及头文件 key.h。
我们首先打开 key.c 文件,代码如下: [mw_shl_code=c,true]void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //指定引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_Init(GPIOC, &GPIO_InitStructure);
PAD_AFConfig(PAD_PC, GPIO_Pin_12, PAD_AF1); //选择功能2
}
uint8_t KEY_Scan(void)
{
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_12) == 0)
{
delay_ms(200);
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_12) == 0)
{
return 0; //按下返回0
}
}
return 1; //没按下返回1
}
[/mw_shl_code] 这段代码包含2个函数, void KEY_Init(void)和 uint8_t KEY_Scan(void), KEY_Init()是用来初始化按键输入的 IO 口的。 KEY_Scan()函数,则是用来扫描这 IO 口是否有按键按下。该函数有返回值,如果有按键按下,则返回0,如果没有,则返回1。
最后,我们看看 main.c 里面编写的主函数代码如下: [mw_shl_code=c,true]int main()
{
uint8_t flag = 0;
SystemInit(); /* 系统内部时钟初始化 */
delay_init(); /* 系统滴答时钟配置*/
LED_Configuration(); /* RGB LED 初始化 */
KEY_Init(); /* KEY 初始化 */
/*------------------------------------------------------------------------------------------
| 炜世科技—WIZnet W7500官方代理商,全程技术支持,价格绝对优势! |
-------------------------------------------------------------------------------------------*/
while(1)
{
if(KEY_Scan() == 0 && flag == 0)
{
flag = 1;
}
else if(KEY_Scan() == 0 && flag == 1)
{
flag = 0;
}
if(flag)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_8);
}
else
{
GPIO_SetBits(GPIOC, GPIO_Pin_8);
}
}
}
[/mw_shl_code] 主函数代码比较简单,先进行一系列的初始化操作,然后在死循环中调用按键扫描函数KEY_Scan()扫描按键值,最后根据按键值控制 RGB LED翻转。 4.4 下载验证
程序成功下载到W7500EVB上之后,当按下按键GEB LED就翻转一次。
|