找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1380|回復(fù): 12
收起左側(cè)

51單片機板子按鍵返回值求大佬幫幫忙

[復(fù)制鏈接]
ID:1114858 發(fā)表于 2024-3-31 14:15 | 顯示全部樓層 |閱讀模式
unsigned char  Positional_Selection()//位選:選擇更改位{

        if(Key()==2)
        {
               
                Bit_selection++;
               
        }
      
        if(Bit_selection>5)
        {
               
                Bit_selection=0;
      
        }

      
        return Bit_selection;
}
按下按鈕后
if(Key()==2)
        {

                Bit_selection++;

        }

這段代碼判斷失效
求各位大佬幫忙看下到底是哪出了問題
如果不使用函數(shù)進(jìn)行按鍵判斷,將按鍵判斷的代碼直接寫到主程序的這樣是可以運行的,為什么,返回值有問題嗎
普中的板子

DS1302時鐘顯示 - 可調(diào)時鐘.rar

60.28 KB, 下載次數(shù): 5

回復(fù)

使用道具 舉報

ID:1113342 發(fā)表于 2024-4-1 12:01 | 顯示全部樓層
找一個B站矩陣按鍵的函數(shù)看看,要消抖
回復(fù)

使用道具 舉報

ID:1114858 發(fā)表于 2024-4-1 20:46 | 顯示全部樓層
kk555 發(fā)表于 2024-4-1 12:01
找一個B站矩陣按鍵的函數(shù)看看,要消抖

謝謝,key函數(shù)里寫了消抖
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2024-4-1 22:14 | 顯示全部樓層
代碼邏輯問題
每一次主循環(huán)里,key()函數(shù)只可運行一次
不要有類似
if(key()==1){...}
if(key()==2){...}
這種寫法
回復(fù)

使用道具 舉報

ID:1114858 發(fā)表于 2024-4-1 22:36 | 顯示全部樓層
lkc8210 發(fā)表于 2024-4-1 22:14
代碼邏輯問題
每一次主循環(huán)里,key()函數(shù)只可運行一次
不要有類似

大佬您好,非常感謝您能回復(fù)我的貼子,您說的我想了想還是不太明白,所以想問下您key()函數(shù)怎么改合適一點,麻煩您給我指一下方向,大概給個思路,真的很謝謝您。
回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-4-2 07:39 | 顯示全部樓層
下一站過后 發(fā)表于 2024-4-1 22:36
大佬您好,非常感謝您能回復(fù)我的貼子,您說的我想了想還是不太明白,所以想問下您key()函數(shù)怎么改合適一 ...

例如char t;
t = key();
if(t==1);
if(t==2);
這樣就只運行了一次key();
或者可以switch(key()){case:1;case:2;}這樣是不是也行
回復(fù)

使用道具 舉報

ID:1114858 發(fā)表于 2024-4-2 09:39 來自手機 | 顯示全部樓層
xiaobendan001 發(fā)表于 2024-4-2 07:39
例如char t;
t = key();
if(t==1);

非常感謝大佬您的回復(fù),麻煩問下我可不可以理解為每一次循環(huán)相同的函數(shù)只會調(diào)用一次,剛學(xué)沒多久,不大明白,謝謝您
回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-4-2 09:55 | 顯示全部樓層
下一站過后 發(fā)表于 2024-4-2 09:39
非常感謝大佬您的回復(fù),麻煩問下我可不可以理解為每一次循環(huán)相同的函數(shù)只會調(diào)用一次,剛學(xué)沒多久,不大明 ...

調(diào)用多少次你自己說了算,但是類似您這樣大量使用delay的情況下多長重復(fù)調(diào)用會消耗很多時間,這導(dǎo)致反應(yīng)變慢很多。你可以嘗試在定時器中斷里面做一個計數(shù)器,用來消除抖動帶來的影響。只要不使用DELAY這種,一個比如1ms的定時器里可以做很多事,實在不行2ms也可以
回復(fù)

使用道具 舉報

ID:1114858 發(fā)表于 2024-4-2 10:14 來自手機 | 顯示全部樓層
xiaobendan001 發(fā)表于 2024-4-2 09:55
調(diào)用多少次你自己說了算,但是類似您這樣大量使用delay的情況下多長重復(fù)調(diào)用會消耗很多時間,這導(dǎo)致反應(yīng) ...

謝謝您的回復(fù),這段程序的問題主要是出在延時函數(shù)的問題嗎?延時函數(shù)確實會影響到程序運行的效率,它會影響到我這個按鍵的判斷嗎?這個邏輯我不是很明白,謝謝您。麻煩您有空指導(dǎo)一下我的問題是出在哪。
回復(fù)

使用道具 舉報

ID:1114858 發(fā)表于 2024-4-2 13:17 來自手機 | 顯示全部樓層
lkc8210 發(fā)表于 2024-4-1 22:14
代碼邏輯問題
每一次主循環(huán)里,key()函數(shù)只可運行一次
不要有類似

大佬您好,我想問下您說的這個每一次主循環(huán)里key()函數(shù)只可運行一次,這個是什么意思,為什么只可以運行一次,我查了很久的資料也沒有答案,麻煩您有空解答一下,謝謝
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2024-4-2 13:57 | 顯示全部樓層
主要問題就在于55行的那個while(1)
把那個while(1)拆開分析歸納后的得出三個區(qū)域
a. key()==2 : 幾微秒
b. 一堆LCD_ShowNum():幾百毫秒
c. key()==1 : 幾微秒
你覺得按鍵按下時,會在哪個區(qū)域?
當(dāng)然是b
然后就進(jìn)入c
基于key()里有放手死等
所以就算按下了2
進(jìn)入C區(qū)域,也要等到放手才離開
結(jié)果就是a區(qū)域的key()==2永不成立
回復(fù)

使用道具 舉報

ID:1114858 發(fā)表于 2024-4-2 15:59 來自手機 | 顯示全部樓層
lkc8210 發(fā)表于 2024-4-2 13:57
主要問題就在于55行的那個while(1)
把那個while(1)拆開分析歸納后的得出三個區(qū)域
a. key()==2 : 幾微秒

謝謝您的回復(fù),我明白了,太感謝了,困擾我好久了,謝謝
回復(fù)

使用道具 舉報

ID:1114752 發(fā)表于 2024-4-3 20:08 | 顯示全部樓層
我像個NT一樣看著評論區(qū)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表