按键切换LCD界面???

2019-07-21 05:07发布

写了个按键切换LCD界面的代码
目的是KEY_B2按一下界面就切换一次,还没按下去界面就不停快速切换,大家有没有遇到过类似问题,请指教







int main(void)
{       
         float adcx;
         u8  string[20];         u8  string1[20];         u8  string2[20]; u8  string3[20];u8  string4[20];u8  string5[20];
         float temp;
          u32   arr=72000;//71999(1kHZ)~~7199(10kHZ)
       

         key_Init();
         Adc_Init();
         TIM1_PWM_Init(arr,0);//

        STM3210B_LCD_Init();//LCD3õê¼»ˉ//LCD1¤×÷Ä£ê½ÅäÖÃ
         
        LCD_Clear(White);
        LCD_SetTextColor(Black);
        LCD_SetBackColor(White);

        LCD_DisplayStringLine(Line1,"    jiemian      ");

        LCD_SetTextColor(Black);
        LCD_SetBackColor(White);
               
                unsigned int b4=0;
                unsigned int b2=1;
               
     while(1)
        {
                 u16 PA9pwmout;//PA9±è½ÏÖμ  D¡óúarrêä3öμíμçƽ

                if(KEY_B2==0) b2=!b2;
                       
        if(b2==0)      //////////////////////// ///////////////////////////////////////////////////////////////////////////////////////b2=0界面1
        {       

                if(KEY_B4==0) b4=!b4;       

                if(b4==1)PA9pwmout=arr;
                else     PA9pwmout=arr-(adcx*arr)/0xfff;//±è½ÏÖμóëμçÑ11ØÏμ//pwnêä3ö   Õ¼¿Õ±è=V/3.3       
               
               
                    TIM_SetCompare2(TIM1,PA9pwmout);

                                adcx=Get_Adc( ADC_Channel_8);
                    temp=adcx*(3.3/0xfff);

                    sprintf((char*)string,"%s%.2f","  ADC Value:",temp);
                    LCD_DisplayStringLine(Line3,string);//LCDÏÔê¾ADC
                               
                    sprintf((char*)string1,"%s%.1f %%","   PA9:",(float)100*(arr-PA9pwmout)/arr);
                    LCD_DisplayStringLine(Line5,string1);//PA9Õ¼¿Õ±è
                               
                    sprintf((char*)string2,"%s%.1f %%","   PB14:",100-(float)100*(arr-PA9pwmout)/arr);
                    LCD_DisplayStringLine(Line6,string2);//PB14Õ¼¿Õ±è
               
                    sprintf((char*)string3,"%s%.1f","        ",(float)72000000/(1000*arr));//KHz
                    LCD_DisplayStringLine(Line8,string3);//LCDÏÔê¾ÆμÂê
                 
                 
                    sprintf((char*)string4,"%s%.1f","",(float)arr);
                    LCD_DisplayStringLine(Line2,string4);
                               
                                LCD_DisplayStringLine(Line4,"   state:stop");
                    unsigned int i;for(i=0x3fffff; i>0; i--);
                        }               
                else ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////b2=1界面2
                       
                {
                                if(KEY_B3==0)
                  {       
                         if(arr==72000)          arr=36000;   
                        else if(arr==36000)arr=24000;   
                         else if(arr==24000)arr=18000;
                         else if(arr==18000)arr=14400;
                         else if(arr==14400)arr=12000;
                         else if(arr==12000)arr=10285;
                         else if(arr==10285)arr=9000;
                         else if(arr==9000)arr=8000;
                         else if(arr==8000)arr=7200;
                         else if(arr==7200)arr=72000;
                         
                               
                  }
                 
                          sprintf((char*)string5,"%s%.1f","        ",(float)72000000/(1000*arr));//KHz
                         LCD_DisplayStringLine(Line4,string5);//LCDÏÔê¾ÆμÂê
               
               
                }                       
        }


        }
        [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。