---------------------------------------------------------------------------------------------------------------------------------------
本文主要介绍CH582的GPIO的基础外设的使用,并且利用GPIO外设点亮LED灯和按键扫描功能。将两者结合,实现按键控制LED灯的状态。
<控制LED灯-硬件电路设计>
从沁恒官网中可以下载CH582开发板的原理图PDF版本,下载网址:https://www.wch.cn/downloads/CH583EVT_ZIP.html,
在下载的CH583EVT文件中,打开PUB>CH583SCH,在原理图中可以找到开发板上已焊接两个LED灯分别对应LED1和LED2,如图所示。
从图中可以看出,LED灯串接一个IK限流电阻,LED正极接电源3.3V,另一端接网络端口标识LED1、LED2。只需要当LED1和LED2引脚端口输出一个低电平,可以导通LED灯,使其点亮。在此实验中,采用自己焊接的LED硬件电路,如图所示。
<控制LED灯-软件程序设计>
在程序设计中,先配置系统时钟源和时钟频率,再初始化LED对应连接IO端口(PA0、PA4、PA6),设置引脚为推挽输出最大5mA模式。这样可以通过设置IO端口的高低电平控制LED状态,也可实现LED流水灯的效果。LED.C函数如下。
#include "CH58x_common.h" void LED_Init(void) { SetSysClock(CLK_SOURCE_PLL_60MHz); //配置系统时钟源和时钟频率 //初始化GPIO口 GPIOA_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); ////推挽输出最大5mA GPIOA_ModeCfg(GPIO_Pin_6, GPIO_ModeOut_PP_5mA); GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA); } //LED亮 void LED1_ON(void) { GPIOA_ResetBits(GPIO_Pin_4); //PA4置低电平 } //LED灭 void LED1_OFF(void) { GPIOA_SetBits(GPIO_Pin_4); //PA4置高电平 } //LED1翻转 void LED1_Turn(void) { if (GPIOA_ReadPortPin(GPIO_Pin_4) == 0) //读取PA4端口是否为低电平 { GPIOA_SetBits(GPIO_Pin_4); //PA4置高电平 } else { GPIOA_ResetBits(GPIO_Pin_4); //PA4置低电平 } } void LED2_ON(void) { GPIOA_ResetBits(GPIO_Pin_6); //PA6置低电平 } void LED3_ON(void) { GPIOA_ResetBits(GPIO_Pin_0); //PA0置低电平 } void LED2_OFF(void) { GPIOA_SetBits(GPIO_Pin_6); //PA6置高电平 } void LED3_OFF(void) { GPIOA_SetBits(GPIO_Pin_0); //PA0置高电平 } //LED2翻转 void LED2_Turn(void) { if (GPIOA_ReadPortPin(GPIO_Pin_6) == 0) { GPIOA_SetBits(GPIO_Pin_6); //PA6置高电平 } else { GPIOA_ResetBits(GPIO_Pin_6); //PA6置低电平 } } //LED3翻转 void LED3_Turn(void) { if (GPIOA_ReadPortPin(GPIO_Pin_0) == 0) { GPIOA_SetBits(GPIO_Pin_0); //PA0置高电平 } else { GPIOA_ResetBits(GPIO_Pin_0); //PA0置低电平 } } //LED流水灯 void LED_RUN(void) { GPIOA_ResetBits(GPIO_Pin_4); GPIOA_SetBits(GPIO_Pin_6); GPIOA_SetBits(GPIO_Pin_0); DelayMs(500); GPIOA_ResetBits(GPIO_Pin_6); GPIOA_SetBits(GPIO_Pin_0); GPIOA_SetBits(GPIO_Pin_4); DelayMs(500); GPIOA_ResetBits(GPIO_Pin_0); GPIOA_SetBits(GPIO_Pin_6); GPIOA_SetBits(GPIO_Pin_4); DelayMs(500); } void LED_shan(void) { GPIOA_ResetBits(GPIO_Pin_4); GPIOA_ResetBits(GPIO_Pin_6); GPIOA_ResetBits(GPIO_Pin_0); DelayMs(500); GPIOA_SetBits(GPIO_Pin_0); GPIOA_SetBits(GPIO_Pin_6); GPIOA_SetBits(GPIO_Pin_4); DelayMs(500); }
标签:GPIO,Pin,void,开发板,GPIOA,WCH,CH582,LED,SetBits From: https://www.cnblogs.com/ZYL-FS/p/17612620.html