蓝桥杯赛前准备(三)LED&BUTTON配置

蓝桥杯赛前准备(三)LED&BUTTON配置

流水灯程序相信大家也是十分熟悉的了,在CE117E开发板中要注意的一点就是它连接了一个AT24C02,我们要拉高PD2,才能控制LED的亮灭。

首先,要添加结构体

GPIO_InitTypeDef GPIO_InitStruct;

然后,我们得使能GPIOD,还要GPIOC的时钟,RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);

然后就要开始配置,

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;

GPIO_Init(GPIOC, &GPIO_InitStruct);

 

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;

然后开始拉高PD2,再拉高PC0-15,再拉低PD2,

GPIO_SetBits(GPIOD, GPIO_Pin_2);

GPIO_SetBits(GPIOC, GPIO_Pin_All);  //LED1-8全灭

GPIO_ResetBits(GPIOD, GPIO_Pin_2);

要注意顺序,因为你要先拉高PD2才能控制LED0-8。

代码整合下来为

void LED_init(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;

GPIO_Init(GPIOC, &GPIO_InitStruct);

 

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;

 

GPIO_SetBits(GPIOD, GPIO_Pin_2);

GPIO_SetBits(GPIOC, GPIO_Pin_All);

GPIO_ResetBits(GPIOD, GPIO_Pin_2);

}

这是LED的配置已经好了,只要先执行GPIO_SetBits(GPIOD, GPIO_Pin_2);

然后控制LED的亮灭,再执行GPIO_ResetBits(GPIOD, GPIO_Pin_2);

通过把PD2拉低即可。

那么接下来就是BUTTON 的配置

首先第一步先观察是按键连接了哪个引脚,四个按键分别对应为PA0,PA8,PB1,PB2这四个引脚。

所以要使能GPIOA还有GPIOB的时钟。

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);

接下来就是配置四个IO口

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_8;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOB, &GPIO_InitStruct);

这样就配置好四个IO口了

写按键的扫描函数之前,建议先设定四个宏定义

#define KEY1 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) #define KEY2 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) #define KEY3 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) #define KEY4 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2)

添加这四个宏定义,之后写按键的扫描函数会方便一些。

void KEY_scan(void)

{

    if(KEY1 == 0)
    {
            Delay_Ms(5); //消抖
            if(KEY1 == 0)
            {
                    LCD_DisplayStringLine(Line1, "11111111111111111111111");//屏幕显示“1111111111111”
            }
            while(KEY1 == 0); //判断按键有没有松开
    }
    else if(KEY2 == 0)
    {
            Delay_Ms(5);
            if(KEY2 == 0)
            {
                    LCD_DisplayStringLine(Line1, "22222222222222222222222");//屏幕显示“22222222222”
            }
            while(KEY2 == 0);
    }
    else if(KEY3 == 0)
    {
            Delay_Ms(5);
            if(KEY3 == 0)
            {
                    LCD_DisplayStringLine(Line1, "33333333333333333333");//屏幕显示“3333333333”
            }
            while(KEY3 == 0);
    }
    else if(KEY4 == 0)
    {
            Delay_Ms(5);
            if(KEY4 == 0)
            {
                    LCD_DisplayStringLine(Line1, "4444444444444444444");//屏幕显示“44444444444444”
            }
            while(KEY4 == 0);
    }

}

LCD_DisplayStringLine();这个函数是用来检测按键是否配置好的,发现配置好之后,就可以改写语句来达到你想要的效果。

把按键跟LED的配置在一起。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值