• 通过按键实现LED灯的亮灭(含两种情况)


     1 #include "stm32f10x.h"// 相当于51单片机中的  #include <reg51.h>
     2 #include "stm32f10x_gpio.h"
     3 /*通过按键实现LED灯的亮灭
     4 *本项目是两个效果,烧程序时注意分开!!!!!
     5 *1、LED实现的效果实是K1一直按下LED一直亮,直到K1松开LED熄灭
     6 *2、按一下key实现LED亮,再按一下实现LED灭
     7 *
     8 */
     9 
    10 /*配置GPIO
    11 *step1配置时钟
    12 *结构体:Speed、Mode、Pin
    13 *初始化
    14 */
    15 int main(void)
    16 {
    17     //点亮红色灯
    18     //step1:使能
    19     
    20     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    21     //结构体
    22     GPIO_InitTypeDef a;
    23     a.GPIO_Speed=GPIO_Speed_50MHz;
    24     a.GPIO_Pin=GPIO_Pin_5;
    25     //推挽输出
    26     a.GPIO_Mode=GPIO_Mode_Out_PP;
    27     //调用GPIO初始化函数
    28     GPIO_Init(GPIOB,&a);
    29     //设置PB5为低点平
    30     //GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    31     //GPIO_SetBits(GPIOB,GPIO_Pin_5);
    32     
    33     
    34     
    35     /**************按键初始*************/
    36     
    37     //step1:时钟使能
    38     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    39     //step2:定义GPIO初始化结构体变量
    40     GPIO_InitTypeDef b;
    41     b.GPIO_Speed=GPIO_Speed_50MHz;
    42     b.GPIO_Pin=GPIO_Pin_0;
    43     //浮空输入
    44     b.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    45     //stept3:调用GPIO初始化函数
    46     GPIO_Init(GPIOA,&b);
    47 /************************1********************************/
    48 /*
    49 *知识点:读取电平的函数:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
    50 *详细见后面截图
    51 */
    52 
    53         /*LED实现的效果实是K1一直按下LED一直亮,直到K1松开LED熄灭*/
    54         
    55     while(1)//死循环随时检测按键的情况
    56     {
    57             //读取引脚的点平并赋值给i
    58         int i = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
    59         if(i==0)//判断K1的电平是否为0
    60         {
    61                 //为0时,设置PB5为高电平,
    62             GPIO_SetBits(GPIOB,GPIO_Pin_5);
    63         }
    64         else
    65         {
    66             
    67                 //设置PB5为低点平
    68             GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    69         }
    70     }
    71     
    72 
    73 /***************************2*********************************/
    74 /*********以下代码实现按键按一下LED亮,再按以下LED灭*********/
    75     int pre=0;//上一次循环按键的点平
    76     while(1)
    77     {
    78         //读取引脚的点平
    79         int states = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
    80         if(states==0&&pre==1)//states是循环时检测的电平,难点在这???????????
    81         {
    82             //按键刚松开那一刻,states马上变为0,但是上一次循环中给pre赋的值还是1
    83             if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)//再判断是否为低电平
    84             {
    85                 //给GPIOB端口5赋值为高电平,实现LED亮
    86                 GPIO_SetBits(GPIOB,GPIO_Pin_5);
    87             }
    88             else
    89             {
    90                 //给GPIOB端口5赋值为低电平,实现LED灭
    91                     GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    92             }
    93         }
    94         pre=states;//把本次循环按键的电平赋值给上一次
    95     }
    96 /*******************************************************************/    
    97 }

  • 相关阅读:
    web安全与防御
    网页的分段传输与渲染
    关于promise的详细讲解
    mvc/mvvm小小的总结
    瀑布流布局:从上往下布局方式(——)往同级元素中高度最低的元素后面排列
    页面刷新-导航高亮不变
    safari浏览器会将时间、自动识别为号码(包括电话号码、qq号码全部标注为蓝色)
    fullpage.js配合bootstrap制作响应式网站
    bootstrap ----tooltip
    范围选择器,jquery.range插件使用
  • 原文地址:https://www.cnblogs.com/kinson/p/7689100.html
Copyright © 2020-2023  润新知