基於庫函數STM32流水燈的實現

不想詳細說了,直接甩代碼!裏面亂碼的先不用管,kell編輯器惹的禍編輯器

KEY_LED.c文件:ui

/**
  ******************************************************************************
  * @file    KEY_LED.c
  * @author  fire
  * @version V1.0
  * @date    2016-06-11
  * @brief   °´¼ü¿ØÖÆled
  ******************************************************************************
  * @attention
**/
	
#include "stm32f10x.h"

void setDelay(__IO uint32_t nCount)	 //¼òµ¥µÄÑÓʱº¯Êý
{
	for(; nCount != 0; nCount--);
}
void setGPIO(GPIO_TypeDef * GP,uint16_t IO,int TYPE){
	switch(TYPE){
		case 0:GP->BRR=IO; break; 
		case 1:GP->BSRR=IO; break;
		case 2:GP->ODR ^=IO; break;
		default:break;
	}
}
void LED_Init(void)
{		
		
		GPIO_InitTypeDef GPIO_InitStructure;//¶¨ÒåÒ»¸öGPIO_InitTypeDefÀàÐ͵ĽṹÌå
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //¿ªÆôGPIOFµÄÍâÉèʱÖÓ
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//ÉèÖÃÒý½ÅģʽΪͨÓÃÍÆÍìÊä³ö 
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ÉèÖÃÒý½ÅËÙÂÊΪ50MHz 
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;//Ñ¡ÔñÒª¿ØÖƵÄGPIOFÒý½Å
		GPIO_Init(GPIOF,&GPIO_InitStructure);//µ÷Óÿ⺯Êý£¬³õʼ»¯GPIO_Pin_All
		setGPIO(GPIOF,GPIO_Pin_All,0);//¹Ø±ÕËùÓÐledµÆ
}
void KEY_Init(void) //IO³õʼ»¯
{ 
		GPIO_InitTypeDef GPIO_InitStructure;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC,ENABLE);//ʹÄÜPORTDʱÖÓ
		GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13;//PC13
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖóÉÉÏÀ­ÊäÈë GPIO_Mode_IPU/GPIO_Mode_IPD
		GPIO_Init(GPIOC,&GPIO_InitStructure);//³õʼ»¯GPIOE0
		GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PE0
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖóÉÉÏÀ­ÊäÈë GPIO_Mode_IPU/GPIO_Mode_IPD
		GPIO_Init(GPIOE,&GPIO_InitStructure);//³õʼ»¯GPIOE0
}
int scanKey(){	 
	int key1=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0);
	int key2=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13);
	if(key1==0&&key2==0){
			setDelay(0x000100);//È¥¶¶¶¯ 
			if(key1==0&&key2==0){
				return 3;
			}
			return 0;
	}else if(key1==0||key2==0){
			setDelay(0x000100);//È¥¶¶¶¯ 
			if(key1==0){return 1;}
			else{
				return 2;
			}
	}else{		
			return 0;// ÎÞ°´¼ü°´ÏÂ
	}
}
void key_led(int key){
	__IO uint32_t delaytime=0x030000;
	/* ·½·¨2£¬Ê¹Óù̼þ¿â¿ØÖÆIO */
		if(key==1){
			setGPIO(GPIOF,GPIO_Pin_0,2);			  //±ä»»×´Ì¬
			setGPIO(GPIOF,GPIO_Pin_7,2);
			setDelay(delaytime*3);
			setGPIO(GPIOF,GPIO_Pin_1,2);
			setGPIO(GPIOF,GPIO_Pin_6,2);
			setDelay(delaytime*3);
			setGPIO(GPIOF,GPIO_Pin_2,2);
			setGPIO(GPIOF,GPIO_Pin_5,2);
			setDelay(delaytime*3);
			setGPIO(GPIOF,GPIO_Pin_3,2);
			setGPIO(GPIOF,GPIO_Pin_4,2);
			setDelay(delaytime*3);
		}else if(key==2){
			setGPIO(GPIOF,GPIO_Pin_4,2);			  //±ä»»×´Ì¬
			setGPIO(GPIOF,GPIO_Pin_3,2);
			setDelay(delaytime*3);
			setGPIO(GPIOF,GPIO_Pin_5,2);
			setGPIO(GPIOF,GPIO_Pin_2,2);
			setDelay(delaytime*3);
			setGPIO(GPIOF,GPIO_Pin_6,2);
			setGPIO(GPIOF,GPIO_Pin_1,2);
			setDelay(delaytime*3);
			setGPIO(GPIOF,GPIO_Pin_7,2);
			setGPIO(GPIOF,GPIO_Pin_0,2);
			setDelay(delaytime*3);
		}else if(key==3){
			setGPIO(GPIOF,GPIO_Pin_All,2);
			setDelay(delaytime);
		}else{			
			setGPIO(GPIOF,GPIO_Pin_0,2);			  //±ä»»×´Ì¬
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_1,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_2,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_3,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_4,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_5,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_6,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_7,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_0,2);			  //±ä»»×´Ì¬
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_1,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_2,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_3,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_4,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_5,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_6,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_7,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_7,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_6,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_5,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_4,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_3,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_2,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_1,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_0,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_7,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_6,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_5,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_4,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_3,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_2,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_1,2);
			setDelay(delaytime);
			setGPIO(GPIOF,GPIO_Pin_0,2);
			setDelay(delaytime);
		}
}

KEY_LED.h文件,以前使用AVR都是能夠直接include點C文件的,這個好像不行,還必須本身弄個點h文件過分code

#include "stm32f10x.h"
void setDelay(__IO uint32_t nCount);	 //¼òµ¥µÄÑÓʱº¯Êý
void setGPIO(GPIO_TypeDef * GP,uint16_t IO,int TYPE);
void LED_Init(void);
void KEY_Init(void); //IO³õʼ»¯
int scanKey(void);
void key_led(int key);

main.c文件,帶有執行入口的哦!ip

#include "stm32f10x.h"
#include "KEY_LED.h"
#include <stdio.h>

int main(void)
{	
  int key=0,flag=0;
	LED_Init();	 
	KEY_Init();
	NVIC_Configuration();
	while(1){
		key=scanKey();
		if(key==1)flag=1;
		if(key==2)flag=2;
		if(key==3)flag=3;
		key_led(flag);
	}
}
相關文章
相關標籤/搜索