新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2018-3-20
- 在线时间
- 0 小时
|
3金钱
我想实现的功能是,按键0,光敏感受器读数据,led0随着这个数值变大变小(期间一直不断读取数据,不是按一次读一次),按键1按下蜂鸣器响,三秒一次,按键2按下停止采集数据,蜂鸣器停止,led全灭,但是现在我前两个按键功能都可以实现,就是按键2停不下来,想知道哪里有问题,以下是源代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "beep.h"
#include "key.h"
#include "adc3.h"
#include "lsens.h"
#include "pwm.h"
#include "stdlib.h"
extern int flag1;
extern int flag2;
extern int flag3;
int main(void)
{
u8 key; //±£′æ¼üÖμ
u8 adcx;
u16 led0pwmval=0;
delay_init(168); //3õê¼»ˉÑóê±oˉêy
BEEP_Init(); //3õê¼»ˉ·äÃùÆ÷¶Ë¿ú
KEY_Init(); //3õê¼»ˉóë°′¼üᬽóμÄó2¼t½ó¿ú
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏè¼¶·Ö×é2
delay_init(168); //3õê¼»ˉÑóê±oˉêy
uart_init(115200); //3õê¼»ˉ′®¿ú2¨ìØÂêÎa115200
LED_Init(); //3õê¼»ˉLED
LCD_Init(); //3õê¼»ˉLCD FSMC½ó¿ú
Lsens_Init(); //3õê¼»ˉ1aÃô′«¸DÆ÷
TIM14_PWM_Init(500-1,84-1); //84M/84=1MhzμļÆêyÆμÂê,ÖØ×°ÔØÖμ500£¬ËùòÔ WMÆμÂêÎa 1M/500=2Khz.
POINT_COLOR=RED; //éèÖÃ×ÖìåÎaoìé«
LCD_ShowString(30,40,210,24,24,"2016141241126");
POINT_COLOR=BLUE; //éèÖÃ×ÖìåÎaà¶é«
LCD_ShowString(30,70,200,16,16,"shujianbo");
LCD_ShowString(30,90,200,12,12,"2018.3.18");
LCD_ShowString(30,130,200,16,16,"LSENS_VAL:");
while(1)
{
if(key==3){flag1=0;flag2=0;}
KEY_Scan(); //μÃμ½¼üÖμ
if(flag1)
{
adcx=Lsens_Get_Val();
LCD_ShowxNum(30+10*8,130,adcx,3,16,0);//ÏÔê¾ADCμÄÖμ
LED0=!LED0;
delay_ms(250);
delay_ms(10);
led0pwmval=adcx;
TIM_SetCompare1(TIM14,led0pwmval);//DT¸Ä±è½ÏÖ죬DT¸ÄÕ¼¿Õ±è
}
if(flag2){
LED0=0;
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_ms(3000);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_ms(3000);
break;
}
if(flag3){
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
}
}
}
下面是按键代码key.c
#include "key.h"
#include "delay.h"
#include <stdlib.h>
//°′¼ü3õê¼»ˉoˉêy
int flag1=0,flag2=0,flag3=0;
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE);//ê1ÄüGPIOA,GPIOEê±Öó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //KEY0 KEY1 KEY2¶Ôó|òy½Å
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//ÆÕí¨êäèëÄ£ê½
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
GPIO_Init(GPIOE, &GPIO_InitStructure);//3õê¼»ˉGPIOE2,3,4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//WK_UP¶Ôó|òy½Å A0
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//ÏÂà-
GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉGPIOA0
}
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//°′¼ü°′Ëé¿a±êÖ¾
if(mode)key_up=1; //Ö§3Öᬰ′
if(key_up&&(KEY1==0||KEY2==0||KEY3==0||WK_UP==1))
{
delay_ms(10);//襶¶¶ˉ
key_up=0;
if(KEY1==0)return 1;
else if(KEY2==0)return 2;
else if(KEY3==0)return 3;
else if(WK_UP==1)return 4;
}else if(KEY1==1&&KEY2==1&&KEY3==1&&WK_UP==0)key_up=1;
return 0;// ÎT°′¼ü°′ÏÂ
}
|
|