文档章节

基于库函数STM32流水灯的实现

Bony
 Bony
发布于 2016/06/30 01:55
字数 700
阅读 103
收藏 0

不想详细说了,直接甩代码!里面乱码的先不用管,kell编辑器惹的祸

KEY_LED.c文件:

/**
  ******************************************************************************
  * @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文件过度

#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文件,带有执行入口的哦!

#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);
	}
}

 

© 著作权归作者所有

Bony
粉丝 14
博文 156
码字总数 98892
作品 0
深圳
QA/测试工程师
私信 提问
C语言程序设计之STM32,在这里轻松学习嵌入式编程

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/03/25
0
0
STM32系统滴答_及不可不知的延时技巧 - (上)

我想每个单片机爱好者及工程开发设计人员都有过点灯的经历。流水灯是个好东西,尤其是在调试资源有限的环境中,有时会帮上大忙。 然在最初入门时,如何让这些小灯们按照我们的想法欢快地跑起...

小汉憨憨
2014/04/29
9.1K
0
STM32总结一 STM32三种点亮LED灯方式的不同之处(寄存器点亮,模板点亮和位带操作)

STM32点亮LED灯有很多种方法。第一种是操作寄存器来点亮LED灯,(以GPIOC的第一个LED为例)操作的方法是首先在中文手册,首先要声明的是,手册里面看到的地址,都是字节,表示第多少多少个字...

wise18146705004
2018/04/18
0
0
普中PZ6806开发板 STM32学习笔记2 使用寄存器点亮一个LED

版权声明:(谢厂节的博客)博主文章绝大部分非原创,转载望留链接。 https://blog.csdn.net/xundh/article/details/84349565 LED 模块电路 我们程序目的是要让PC0输出低电平。如果要闪烁,就...

谢厂节
2018/11/22
0
0
STM32学习笔记-点亮第一个led

首先感谢河北科技大学航模协会-能给我这样的学习机会-感谢那些带我们教我们的学长学姐们. 点亮第一个led灯之前要先大概了解一下单片机的工作方式并且有一定的编程基础,能看懂程序 单片机上有...

qq_18984151
2018/03/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
6
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部