OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2959|回复: 2

想请各位大佬看看这个代码哪里有问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-3-20
在线时间
0 小时
发表于 2018-3-20 14:25:30 | 显示全部楼层 |阅读模式
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£¬Ëùò&#212WMÆμÂêÎ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>


//°′&#188;ü3&#245;ê&#188;&#187;ˉ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&#196;üGPIOA,GPIOEê±&#214;ó

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //KEY0 KEY1 KEY2&#182;&#212;ó|òy&#189;&#197;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//&#198;&#213;í¨ê&#228;è&#235;&#196;£ê&#189;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//é&#207;à-
  GPIO_Init(GPIOE, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOE2,3,4
       
         
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//WK_UP&#182;&#212;ó|òy&#189;&#197A0
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//&#207;&#194;à-
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA0

}

u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;//°′&#188;ü°′&#203;é&#191;a±ê&#214;&#190;
        if(mode)key_up=1;  //&#214;§3&#214;á&#172;°′                  
        if(key_up&&(KEY1==0||KEY2==0||KEY3==0||WK_UP==1))
        {
                delay_ms(10);//è¥&#182;&#182;&#182;ˉ
                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;// &#206;T°′&#188;ü°′&#207;&#194;
}






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-3-20
在线时间
0 小时
 楼主| 发表于 2018-3-20 14:28:09 | 显示全部楼层
这是整个源文件

final (2).zip

5.83 MB, 下载次数: 15

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-21 01:33:42 | 显示全部楼层
仿真找问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 11:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表