中级会员
 
- 积分
- 250
- 金钱
- 250
- 注册时间
- 2020-3-3
- 在线时间
- 85 小时
|
////main.c
int main(void)
{
//串口2
u8 key_val;
extern u8 switch_sta;
extern u16 ccr;
extern u16 cnt1;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
SMG_Init();
camer_Init();
TIM4_PWM_Init(35999,1); //pwm频率为1khz,周期为1ms
switch_Init();
detect_Init();
//TIM8_Cap_Init(99,71); //每100更新一次计数,计数频率为1Mhz,周期为1us
//TIM1_Cap_Init(0xffff,71); //定时器的技术频率为1Mhz
ec11_Init();
while(1)
{
key_val=key_scan();
if(key_val)
{
switch(key_val)
{
case KEY0_Press:
printf("\r\n按键0按下\r\n");
break;
case KEY1_Press:
printf("\r\n按键1按下\r\n");
break;
case KEY2_Press:
printf("\r\n按键2按下\r\n");
break;
case KEY3_Press:
printf("\r\n 按键3按下 \r\n");
break;
case KEY4_Press:
printf("按键4按下");
break;
case KEY5_Press:
printf("按键5按下");
//通道选择pwm的通道
break;
}
} else delay_ms(10);
//key.c
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//配置A端口 A8-11 //key2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
//上拉输入,低电平有效
//GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置端口 C 8 12
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
GPIO_SetBits(GPIOC,GPIO_Pin_8|GPIO_Pin_12);
}
u8 key_scan()
{
static u8 key_up=1; //按键按&松开标志
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0))
{
delay_ms(10); //按键去抖动,消抖
key_up=0;
//按键已松开,去判断是哪个按键按下
if(KEY0==0) return KEY0_Press;
else if(KEY1==0) return KEY1_Press;
else if(KEY2==0) return KEY2_Press;
else if(KEY3==0) return KEY3_Press;
else if(KEY4==0) return KEY4_Press;
}
else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1) key_up=1;
return 0;
}
//key.h
#ifndef _KEY_H
#define _KEY_H
#include "sys.h"
#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)//读取按键0 (按键0我未按下,串口却得到的是按键0的按键值)
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)//读取按键1
#define KEY2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)//读取按键2 (按键2是我按下的按键,但是串口没得有得到按键值)
#define KEY3 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)//读取按键3
#define KEY4 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)//读取按键4
#define KEY5 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)//读取按键5
#define KEY0_Press 1
#define KEY1_Press 2
#define KEY2_Press 3
#define KEY3_Press 4
#define KEY4_Press 5
#define KEY5_Press 6
void KEY_Init(void);
u8 key_scan(void);
#endif
|
|