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

发布时间:2024-08-14  

 1 #include 'stm32f10x.h'// 相当于51单片机中的  #include

 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 }

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>