欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4508|回復: 14
收起左側

請問按鈕怎樣關機和開機?附單片機程序

[復制鏈接]
ID:103131 發表于 2021-5-10 15:58 | 顯示全部樓層 |閱讀模式
按鈕要長按才能顯示關機,放手就不行了,我想要的是按一下就永久關機,再按一下就永久開機。

void KEY_TEST2(void)
{
    static unsigned int i = 0;
     if(KEY2==0)//按鍵1
       {
        delay_ms(50);
        if(KEY2==0)
          {     
             i = ++i%2;        
                        
                           printf("i =  %d\r\n",i);
              switch(i)
                          {
                                  case(0):
                                       
                                          POWER_OFF_MODE();break;

                                  case(1):
                                       
                                        AD_TEST();break;
                                 
                          }   
                            while(!KEY2);
                   }
                  
                }
         
}




void main(void)
{        
        
        
               

        while(1)
        {               
         
                 AD_TEST();
                 KEY_TEST2();
               
        }


               


               
}


回復

使用道具 舉報

ID:103131 發表于 2021-5-10 18:14 | 顯示全部樓層
為什么程序一起工作,按鈕按下沒法鎖定信號?
回復

使用道具 舉報

ID:101869 發表于 2021-5-10 20:16 來自觸屏版 | 顯示全部樓層
while(!KEY2);這個是等待按鍵抬起,一般都是抬起后再執行關機吧
回復

使用道具 舉報

ID:103131 發表于 2021-5-10 20:40 | 顯示全部樓層
非凡科技 發表于 2021-5-10 20:16
while(!KEY2);這個是等待按鍵抬起,一般都是抬起后再執行關機吧

兩個函數一起運行,KEY按下后再放下就沒有鎖定了,請問有什么辦法讓按一下關閉,再按一下就打開?
回復

使用道具 舉報

ID:889094 發表于 2021-5-10 21:42 | 顯示全部樓層
   i = ++i%2;        神一樣的句子,讓我專門去百度%和左++的優先級

按一下關,再按一下開,直接檢測放開不好么?
按下,消抖,等待放開然后操作,似乎更容易理解一些,你如果想按下和放開有不同的操作的話才會一定要在按下的時候來執行操作的。

另外求教一下:    printf("i =  %d\r\n",i);是打印到串口了嗎?函數是怎么重定向的?
回復

使用道具 舉報

ID:889094 發表于 2021-5-10 22:02 | 顯示全部樓層
goldbirderman 發表于 2021-5-10 20:40
兩個函數一起運行,KEY按下后再放下就沒有鎖定了,請問有什么辦法讓按一下關閉,再按一下就打開?

單片機怎么會有同時執行的問題?單片機是任務執行的,應該沒有同時執行的情況吧
回復

使用道具 舉報

ID:101869 發表于 2021-5-10 22:23 來自觸屏版 | 顯示全部樓層
把開關取反就行了
回復

使用道具 舉報

ID:213173 發表于 2021-5-11 07:40 | 顯示全部樓層
樓上討論的都不在問題核心點上。此按鍵函數內只在開/關機函數中2選1調用,但主函數始終在執行開機函數,當然按鍵關機后一旦松手即又開機,是樓主犯了邏輯錯誤。
回復

使用道具 舉報

ID:824490 發表于 2021-5-11 09:04 | 顯示全部樓層
http://m.raoushi.com/bbs/dpj-203511-1.html
看年這個對你是不是有幫助?
回復

使用道具 舉報

ID:103131 發表于 2021-5-11 14:33 | 顯示全部樓層
wulin 發表于 2021-5-11 07:40
樓上討論的都不在問題核心點上。此按鍵函數內只在開/關機函數中2選1調用,但主函數始終在執行開機函數,當 ...

static  unsigned int i = 0;

    if(KEY2==0)//按鍵1
       {
        delay_ms(50);
        if(KEY2==0)
          {     
            i++;
                          if(i>1)
                                  i = 0;
                       
                           printf("i =  %d\r\n",i);
              switch(i)
                          {
                                  case(0):
                                       
                                       while(!i)
                                          POWER_OFF_MODE();break; 我改成這樣就可以鎖定,可是沒法讓它開機
回復

使用道具 舉報

ID:213173 發表于 2021-5-11 16:01 | 顯示全部樓層
goldbirderman 發表于 2021-5-11 14:33
static  unsigned int i = 0;

    if(KEY2==0)//按鍵1

不要白忙活,原來的按鍵程序可以用,把main函數里AD_TEST();注釋掉即可。
void main(void)
{        
        while(1)
        {
//                AD_TEST();
                KEY_TEST2();
        }
}
回復

使用道具 舉報

ID:103131 發表于 2021-5-11 16:17 | 顯示全部樓層
wulin 發表于 2021-5-11 16:01
不要白忙活,原來的按鍵程序可以用,把main函數里AD_TEST();注釋掉即可。
void main(void)
{        

可是我AD_TEST()這個函數也要運行
回復

使用道具 舉報

ID:139866 發表于 2021-5-11 16:51 | 顯示全部樓層
goldbirderman 發表于 2021-5-11 16:17
可是我AD_TEST()這個函數也要運行

那就設置標志位,別直接拿去用函數
回復

使用道具 舉報

ID:103131 發表于 2021-5-11 16:54 | 顯示全部樓層
天ノ憶 發表于 2021-5-11 16:51
那就設置標志位,別直接拿去用函數

怎樣標志位?
回復

使用道具 舉報

ID:609524 發表于 2021-5-12 10:58 | 顯示全部樓層

設置一個標志位,為1開,為0關,標志位到按鍵里面取反就行了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表