历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2019年01月14日 | STM32F103(按键控制流水灯方向)

2019-01-14 来源:eefocus

1:要求   用按键控制流水灯方向


2:基于Stm32F103RB


3:型号CT117E


/*STM32库头文件*/

#include "stm32f10x_gpio.h"

#include "stm32f10x_rcc.h"

#include "stm32f10x.h"

#include "core_cm3.h"

#include "misc.h"

GPIO口的设置,还有宏的定义

#define LED0    GPIO_Pin_8

#define LED1    GPIO_Pin_9

#define LED2    GPIO_Pin_10

#define LED3    GPIO_Pin_11

#define LED4    GPIO_Pin_12

#define LED5    GPIO_Pin_13

#define LED6    GPIO_Pin_14

#define LED7    GPIO_Pin_15

#define LED_ALL (LED0 | LED1 | LED2 | LED3 | LED4 | LED5 | LED6 | LED7)

#define LED_PORT GPIOC

#define N_LE GPIO_Pin_2

#define N_LE_PORT GPIOD

#define SWN 4

#define N_K1 GPIO_Pin_0

#define N_K2 GPIO_Pin_8

#define N_K3 GPIO_Pin_1

#define N_K4 GPIO_Pin_2

#define N_K1C GPIOA

#define N_K2C GPIOA

#define N_K3C GPIOB

#define N_K4C GPIOB

/*宏*/

#define LED_OUT(x) GPIO_SetBits(LED_PORT,LED_ALL), \

GPIO_ResetBits(LED_PORT, x<<8), \

GPIO_SetBits(N_LE_PORT,N_LE), \

GPIO_ResetBits(N_LE_PORT,N_LE)

定义数组和一些标记

typedef enum

FALSE = 0,

  TRUE

}y_bool;

static y_bool led_t = TRUE; //发光标记

static y_bool rl = TRUE; //左移右移标记

static y_bool key_t = FALSE; //按键的检测

void SystemInit()

{

 //SystemInit为空为了骗过编译器,没有任何作用

}


/*主函数*/

int main()

{

uint8_t key_dn;

init();

while(1)

{

if(led_t)

{

led_t = FALSE;

Led(); //

}

if(key_t)

{

key_t = FALSE;

key_dn = key_c();//按键检测

}


if(key_dn)

{

key_d(key_dn);//按键处理

key_dn = 0x00;

}

}

}


void init()//GPIO口的初始化 {  GPIO_InitTypeDef GPIO_InitStructure;  //  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);

 //LED  GPIO_InitStructure.GPIO_Pin = LED_ALL ;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  GPIO_Init(LED_PORT , &GPIO_InitStructure);

 /*N_LE*/  GPIO_InitStructure.GPIO_Pin=N_LE;  GPIO_Init(N_LE_PORT , &GPIO_InitStructure);    /* */  GPIO_InitStructure.GPIO_Pin =  N_K1 | N_K2;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  GPIO_Init(N_K1C , &GPIO_InitStructure);  GPIO_InitStructure.GPIO_Pin =  N_K3 | N_K4;  GPIO_Init(N_K3C , &GPIO_InitStructure);

 /*滴答定时器初始*/     SysTick_Config(8000); }

//SysTick 中断

void SysTick_Handler()    

{

 static uint16_t i = 0;

 if(++i >= 1000)        

  i = 0;

 if(i % 20 == 0)

  key_t = TRUE;

 if(i%500 == 0)

  led_t = TRUE;

}

/*Led显示*/

void Led()

{

static uint8_t led_b = 0x01;

LED_OUT(led_b);//数据的输出

if(rl)//判断左移还是右移

{

if((led_b <<= 1) == 0x00)

led_b = 0x01;

}

else

{

if((led_b >>= 1) == 0x00)

led_b = 0x80;

}

}

/*按键检测函数*/

uint8_t key_c()

{

static uint8_t key_o = 0x0f;

uint8_t i, key_n, x;

const uint16_t key_pin[SWN] = {N_K1, N_K2, N_K3, N_K4}; //各个按键的引脚

const GPIO_TypeDef* key_port[SWN] = {N_K1C, N_K2C, N_K3C, N_K4C};//各个按键的端口

for(key_n = 0, i = 0; i < SWN; i++)//当按键按下赋值到key_n中

{

key_n <<= 1;

if(GPIO_ReadInputDataBit((GPIO_TypeDef*)key_port[i], key_pin[i]))

key_n |= 0x01;

}

x = (key_n ^ key_o) & key_o;//检测有无按键按下

key_o = key_n;//与下一次值比较

return x;

}

//按键的处理

void key_d(uint8_t x)

{

if(x & 0x08)

rl = !rl;

}




/*刚刚入手学习STM32有不足之处,望大家指出*/


推荐阅读

史海拾趣

aconno公司的发展小趣事

品质是aconno公司发展的基石。公司从一开始就注重产品质量和用户体验,从原材料采购到生产工艺,再到产品测试,每一个环节都严格把关。这种对品质的坚持,使得aconno的产品在市场上赢得了良好的声誉。同时,公司还建立了完善的售后服务体系,为用户提供及时、专业的技术支持,进一步增强了用户的信任度和忠诚度。

Hitachi Chemical Co America Ltd公司的发展小趣事

品质是aconno公司发展的基石。公司从一开始就注重产品质量和用户体验,从原材料采购到生产工艺,再到产品测试,每一个环节都严格把关。这种对品质的坚持,使得aconno的产品在市场上赢得了良好的声誉。同时,公司还建立了完善的售后服务体系,为用户提供及时、专业的技术支持,进一步增强了用户的信任度和忠诚度。

Green Power Solutions公司的发展小趣事
首先确保稳压器已断电,并拔掉电源插头,以防触电。
Display Elektronik GmbH公司的发展小趣事

随着环保意识的日益增强,Display Elektronik GmbH将绿色环保理念融入到了公司的发展中。公司采用环保材料和生产工艺,减少了对环境的污染。同时,Display Elektronik GmbH还积极推广绿色显示技术,为客户提供更加环保、节能的显示解决方案。这种对环保的关注和投入,让Display Elektronik GmbH在行业中树立了良好的形象。

AnDAPT__Inc.公司的发展小趣事

Display Elektronik GmbH公司自创立之初,就致力于显示技术的研发与创新。在21世纪初,公司推出了一款采用全新显示技术的液晶显示屏,其高分辨率、低功耗和长寿命的特点迅速赢得了市场的认可。随着技术的不断迭代,Display Elektronik GmbH逐步确立了在显示技术领域的领先地位。

Electronic公司的发展小趣事

AMD,曾经一度陷入困境的半导体公司,近年来实现了逆袭。AMD通过持续的技术创新和市场竞争策略的调整,成功在处理器和显卡市场取得了重要份额。AMD的产品性能不断提升,价格也更加亲民,赢得了消费者的广泛认可。同时,AMD还积极与游戏厂商和硬件厂商合作,推出了多款定制化的产品和解决方案。这些努力使得AMD在激烈的市场竞争中逐渐崭露头角。

问答坊 | AI 解惑

如何实现wince内核裁减?

刚接触嵌入式操作系统wince,不知从何入手,请大侠指点!     1、怎么实现内核裁减。程序加载后不想启动wince的界面,用自己的。     2、顺便给俺推荐几本书籍…

查看全部问答>

变频器的几种控制方式

低压通用变频输出电压为380~650V,输出功率为0.75~400kW,工作频率为0~400Hz,它的主电路都采用交?直?交电路。其控制方式经历了以下四代。 1. U/f=C的正弦脉宽调制(SPWM)控制方式 其特点是控制电路结构简单、成本较低,机械特性硬度也较 ...…

查看全部问答>

STM32学习初篇

#include <stm32f10x_map.h>#include "main.h"由于学习初没有找到中文资料,翻译了点,不管好坏,贴上来和大家分享吧!!!/* Private function prototypes ----------------------------------------------- ...…

查看全部问答>

求教2812 ad问题

各位好:我在ad程序里添加了两个变量:float  in_voltage[NP]; float  step_h[NP];后出现这个错误error: can\\\'t allocate .ebss (sz: 00002898 page: 1) in DRAMH0 (avail:            ...…

查看全部问答>

哪位大侠有CS5532的mega16的C源程序

我以前用51单片机调通过CS5532,现改用AVR mega16单片机,按原来的程序简单转换了一下,但调不通,急急…

查看全部问答>

can通讯

    有一个温度程序,用的是mc9s12xs128的,但是不知道怎么通过can输出,请高手指点。…

查看全部问答>

【活动讨论1】DIY低功耗东东

ddllxxrr 提出利用MSP430的低功耗特性,DIY一个低功耗的小东西,大家有啥想DIY的东西吗?咱们跟帖讨论吧…

查看全部问答>

请问各位前辈帮指点一下晚辈 甚是感谢

请问各位前辈 我想知道怎么调节两相占空比相同 相位相差一定角度 比如60 度 90度 在430中应该怎么设定啊…

查看全部问答>

关于I2C发送

我用lm3s6432的i2c给从机发送三个字节的数据,为什么从机接收到四个字节的数据,而且第一个字节和第四个字节的值相同,哪位大侠知道原因,能不能告诉一下,这个问题纠结了一天了 谢谢谢谢!!…

查看全部问答>

高性能交互总线设计(0)

本帖最后由 lelee007 于 2015-5-9 16:18 编辑 哥承认,标题党了,哈哈,不过本帖主题离标题不会偏太远,算是该设计的一个开篇之作。 废话不多扯,我们直奔主题。 我们这里提到的高性能交互,指的就是ALTERA的新一代SOC器件上ARM和FPGA portion ...…

查看全部问答>