博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于库函数STM32流水灯的实现
阅读量:5890 次
发布时间:2019-06-19

本文共 5333 字,大约阅读时间需要 17 分钟。

  hot3.png

不想详细说了,直接甩代码!里面乱码的先不用管,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 
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); }}

 

转载于:https://my.oschina.net/hibony/blog/703005

你可能感兴趣的文章
C#实体对象序列化成Json,并让字段的首字母小写
查看>>
遍历PHP数组的6种方式
查看>>
重构-改善既有代码的设计(一)--重构,第一个案例
查看>>
MVPArms官方首发一键生成组件化,体验纯傻瓜式组件化开发
查看>>
块级格式化上下文(BFC)
查看>>
[LintCode] Buy Fruits
查看>>
ZStack源码剖析之二次开发——可扩展框架
查看>>
Elasticsearch分布式一致性原理剖析(一)-节点篇
查看>>
一个基于vue的图片轮播组件的实现
查看>>
Scrapy 之 settings
查看>>
动态规划入门H - 合唱队形 (最优子序列的另一个应用,这里是最优递增和最优递减子序列的结合)...
查看>>
游戏服务器JVM优化
查看>>
【359天】每日项目总结系列096(2018.01.30)
查看>>
HDU 1039 Easier Done Than Said?
查看>>
vue+微信支付目录+JSSDK签名解决方案
查看>>
搭建自己的博客 —— 关于域名设置
查看>>
mybatis sqlSession的运行过程
查看>>
你可能需要的优秀英文网站
查看>>
翻译 | 一行 JavaScript 代码的逆向工程
查看>>
ES6系列---对象功能扩展
查看>>