第三个--对于按键的总结

其实对于stm32的按键操作函数和那个51的操作函数是类似的  ,没啥太大区别,无非就是 电平识别,,消抖,,状态处理

1-----和那个led的基本上是一样的,就是先操作那个GPIO,然后再按键处理

2-----接下来就是代码展示了:

 1 #include "stm32f10x.h"
 2 #define RB1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
 3 #define RB2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)
 4 #define RB3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)
 5 #define RB4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)//四个按键对应的端口
 6 u32 TimingDelay=0;
 7 extern u8 alarm_flag;//按键标志
 8 void Key_Init(void);//按键初始化
 9 u8 Key_Scan(void);//按键扫描
10 void Delay_Ms(u32 ntime);//延时函数
11 void Led_Init();//LED灯的初始化
12 void Led_Control(u16 led,u8 status);//led灯显示函数
13 void main()
14 {
15       u8 num;
16       void Led_Init();
17       void Led_Control(LEDALL,0);
18       void Key_Init(void);
19        num= Key_Scan(void);
20        LED_Control(num+8, 1);  
21         for (i = 0x3fffff; i > 0; i--)  
22         LED_Control(num+8, 0);  
23         for (i = 0x3fffff; i > 0; i--) 
24       
25 
26 }
27 
28 void Delay_Ms(u32 ntime)
29 {
30     TimingDelay=ntime;
31     while(TimingDelay);
32 }
33 void Key_Init(void)
34 {
35     GPIO_InitTypeDef GPIO_InitStructure;
36     
37     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);//A,B时钟使能
38 
39     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_8;//A0,A8
40 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//输出模式 41 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 42 43 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;//B1,,B2初始化 44 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//模式 45 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 46 } 47 u8 Key_Scan(void) 48 { 49 static u8 mode=1; 50 if((mode==1)&&((RB1==0)||(RB2==0)||(RB3==0)||(RB4==0))) 51 { 52 Delay_Ms(10); 53 mode=0; 54 if(RB1==0) return 1; 55 else if (RB2==0) return 2; 56 else if(RB3==0) return 3; 57 else if(RB4==0) return 4; 58 } 59 else if((mode==0)&&((RB1==1)&&(RB2==1)&&(RB3==1)&&(RB4==1))) mode=1; 60 return 0; 61 62 } 63 void Led_Init() 64 { 65 GPIO_InitTypeDef GPIO_InitStructure; 66 67 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE); 68 69 GPIO_InitStructure.GPIO_Pin = LED1|LED2|LED3|LED4|LED5|LED6|LED7|LED8; 70 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 71 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 72 GPIO_Init(GPIOC, &GPIO_InitStructure); 73 74 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 75 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 76 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 77 GPIO_Init(GPIOD, &GPIO_InitStructure); 78 } 79 void Led_Control(u16 led,u8 status) 80 { 81 if(status) 82 { 83 GPIO_ResetBits(GPIOC,led); 84 GPIO_SetBits(GPIOD,GPIO_Pin_2); 85 GPIO_ResetBits (GPIOD,GPIO_Pin_2); 86 } 87 else 88 { 89 GPIO_SetBits(GPIOC,led); 90 GPIO_SetBits(GPIOD,GPIO_Pin_2); 91 GPIO_ResetBits (GPIOD,GPIO_Pin_2); 92 } 93 } 94

 

posted @ 2017-03-18 13:22  小油菜1  阅读(303)  评论(0编辑  收藏  举报