【STM32学习】(4)按键控制流水灯

学习单片机都要学习流水灯,因为流水灯比较简单,易于实现,效果也比较好呈现。

本次是通过按键控制流水灯,按键按一下启动流水灯,按键的使用,在单片机开发中是必不可少的。

这里我用的单片机型号为STM32F103VET

8个LED灯接在了PA口的低八位。

注意点:

1.开启GPIOA和GPIOB的时钟

2.设置GPIOA口的工作模式,和GPIOB口的工作模式

          GPIOA:

                 1)打开0-7  IO口

                 2)设置8个口为推挽输出

                 3)速度为50MHz

          GPIOB:(和按键相接)

                1)设置0口

                2)为上拉输入

工程布局如下图:

【STM32学习】(4)按键控制流水灯_第1张图片

代码也比较简单,代码如下:(这里我没有将代码模块化,只在main函数中实现,便于初学者理解,以后的代码会逐渐模块化)

#include "stm32f10x.h"                  // Device header
#include "stm32f10x_gpio.h"

void delay(void);
int main(void)
{
	unsigned char temp=0XF0;
	RCC_DeInit();	//	将外设RCC寄存器重设为缺省值
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//	使能或者失能APB2外设时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitTypeDef GPIO_InitStruct;	//	定义结构体 包含了外设GPIO的配置信息	
	GPIO_DeInit(GPIOA);		//	将外设GPIOA寄存器重设为缺省值
	GPIO_DeInit(GPIOB);
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;	//  选中低8为管脚
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;	//	推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	//	最高输出速率50MHz
	GPIO_Init(GPIOA,&GPIO_InitStruct);	//	根据GPIO_InitStruct中指定的参数初始化外设GPIOA寄存器
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	GPIO_Write(GPIOA,0X00F0);
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) == 0)	//	检查按键是否按下
		{
			delay();	//	消抖
			if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) == 0)	//	再次判断按键是否按下
			{
				temp = ~temp;
				GPIO_Write(GPIOA,temp);
				while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) == 0);		//	开关松开检测
			}
		}
	}
}

void delay(void)
{
	int i,j;
	for(i=0;i<400;i++)
	{
		for(j=0;j<400;j++);
	}
}

效果就是流水灯了,请自行测试。

代码链接,其实上面已经把代码贴出了,大家不需要化积分下载。

https://download.csdn.net/download/xiaocaidayong/11884602

 

你可能感兴趣的:(单片机c语言)