野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 27138|回复: 3

按键问题

[复制链接]
发表于 2021-1-5 18:39:43 | 显示全部楼层 |阅读模式
我按键KEY0明明是选择模式,按键KEY2减键,为什么KEY0和KEY2会混乱,变成KEY0可以减,KEY2可以选择模式???大佬们求指导?









#include "mode.h"
#include "sys.h"
#include "delay.h"
#include "AMG8833.h"
#include "oled.h"
#include "led.h"
#include "key.h"
#include "oled_i2c.h "
extern int mode,k;
extern float x;

float compare(float *c,u8 size)
{
  int i;
  float max = *c;
  for(i=0;i<size;i++)
  {
    c++;
    if( max>*c );
    else max = *c;
  }
  return max;
}


/*温度显示模式*/
void  mode1()
{

      float a=100,b[64],c;
            IIC_Init();
      KEY_Init();
            delay_init();                                //延时初始化
      OLED_Init();
            OLED_Clear() ;
      AMG8833_Init();
      LED_Init();
      OLED_ShowString(0,1,"loading.....",16);
            delay_ms(30);
        while(1)
        {

        amg88xx_readPixels(b,64);     //读取温度
        a=compare(b,64)+x;            //显示温度a等于读取值+修正值
         if(a>k)                       //温度超标,LED闪烁
        {
                                 GPIO_SetBits(GPIOA,GPIO_Pin_3);
                     delay_ms(3);
                      GPIO_ResetBits(GPIOA,GPIO_Pin_3);
                                 delay_ms(100);
                                 GPIO_SetBits(GPIOA,GPIO_Pin_3);
        //  OLED_Clear();
         //OLED_Showdecimal(20,6,a,8,16);
         //OLED_ShowString(3,3,"fever!!",16);       
        }
                    OLED_ShowString(0,1,"temperature:",16);
        OLED_Showdecimal(20,3,a,8,16);
        OLED_ShowString(3,5,"T:",16);
        OLED_ShowNum(20,6 ,k,9,16);

                                if (KEY0 == 0)                     
                        {
                                        delay_us(200);
                                        if (KEY0 == 0)
                                {
                                        mode=2;break;               //进入阈值调节模式
                                }
                        }                 
        }
}

//阈值调节模式
void mode2()
{

  OLED_Clear();
        OLED_ShowString(0,1,"Threshold",16);
        OLED_ShowString(0,3,"value",16);
       
        OLED_ShowNum(20,6 ,k,9,16);
        delay_ms(250);
        while(1)
        {
   if(KEY1==0)
   {
    //delay_us(20);
   // while(KEY1==0)
                //{
                        delay_ms(20);
                        if(KEY1==0)
                        {
       k++;
                         OLED_ShowNum(20,6 ,k,9,16);
      }
          //}
   }
       if(KEY2==0)
    {
       //delay_ms(2);
       //while(KEY2==0)
    //{
                        delay_ms(20);
                        if(KEY2==0)
                        {
      k--;
                               
                        OLED_ShowNum(20,6 ,k,9,16);
      }
          //}
          }
                 if (KEY0 == 0)                     
                        {
                                delay_ms(20);
                                if (KEY0 == 0)
                                {
                                mode=1;break;              //进入修正值调节模式
                                }
                        }
                 
    }
}


/*修正值调节模式*/
//void mode3()
//{
//  OLED_Clear();
//        OLED_ShowString(0,1,"corrected",16);
//        OLED_ShowString(0,3,"value",16);
//       
//        OLED_Showdecimal(20,6 ,x,9,16);
//        delay_ms(250);
//        while(1)
//        {
//   
//   if(KEY1==0)
//                {
//                        delay_ms(10);
//                        if(KEY1==0)
//                        {
//       x=x+0.5;
//                         OLED_Showdecimal(20,6 ,x,9,16);
//      }
//          }
//   
//      
//    if(KEY2==0)
//    {
//                        delay_ms(10);
//                        if(KEY2==0)
//                        {
//      x=x-0.5;
//                               
//                        OLED_Showdecimal(20,6 ,x,9,16);
//      }
//          }
//          
//                 if (KEY0 == 0)                     
//                        {
//                                delay_ms(2);
//                                if (KEY0 == 0)
//                                {
//                                mode=1;break;              //返回温度显示模式
//                                }
//                        }
//                 
//    }
//}
//



void menu(int t)
{
        switch(t)
        {
                case 1:mode1();break;
          case 2:mode2();break;
//                case 3:mode3();break;
        }
}

回复

使用道具 举报

 楼主| 发表于 2021-1-6 15:10:10 | 显示全部楼层
已解决,队友焊的按键,有角接在一起了。。。。。。
回复 支持 反对

使用道具 举报

发表于 2021-1-6 10:31:57 | 显示全部楼层

回帖奖励 +2 火花

按键检测是怎么实现的,用的外部中断嘛?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-6 15:09:09 | 显示全部楼层
ZZZ_XXJ 发表于 2021-1-6 10:31
按键检测是怎么实现的,用的外部中断嘛?

这两个按键有个角接在一起了...
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-27 12:22 , Processed in 0.032320 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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