【RISC-V MCU CH32V103测评】LED灯交替闪烁
[复制链接]
本帖最后由 jennyzhaojie 于 2021-1-26 00:20 编辑
板载的仅有外设资源要数LED灯了,其电路原理图如图1所示,那我们就用好它吧。
图1 LED电路原理图
其实使用LED灯的主要目的就是学习I/O的使用,值得点赞的是这2个LED灯是不占固定资源的,也就是说用到哪里连哪里。
那如何该如何实现LED灯的交替闪烁呢?
思路就是:
1)将2个I/O口设为输出,并使其与2个LED灯相连,这里用PA0控制LED1, 用PA1控制LED2;
2)使用变量i和j来控制高低电平的输出,并使2个I/O的高低电平输出在时间上错开, 令i=0时PA0输出高电平的语句为GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET)),令j=1时PA0输出低电平的语句为GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET));
3)使用延时函数按时对2个LED灯执行高低电平输出的状态切换,切换高低电平输出的语句为GPIO_WriteBit(GPIOx, GPIO_Pin_y, (z==0) ? (z=Bit_SET):(z=Bit_RESET)),延时函数为 Delay_Ms();
配置PA0和PA1为输出口的函数为:
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
其主程序为:
int main(void)
{
u8 i=0,j=1;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
GPIO_Toggle_INIT();
//GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_SET);
//GPIO_WriteBit(GPIOA, GPIO_Pin_1,Bit_RESET);
while(1)
{
Delay_Ms(250);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET));
GPIO_WriteBit(GPIOA, GPIO_Pin_1, (j==0) ? (j=Bit_SET):(j=Bit_RESET));
}
}
经编译,其编译结果如图2所示。
经下载,其运行效果如图3所示。
图3 运行效果
|