找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1499|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1114858 發(fā)表于 2024-3-31 14:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
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)行按鍵判斷,將按鍵判斷的代碼直接寫到主程序的這樣是可以運(yùn)行的,為什么,返回值有問題嗎
普中的板子

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

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1113342 發(fā)表于 2024-4-1 12:01 | 只看該作者
找一個(gè)B站矩陣按鍵的函數(shù)看看,要消抖
回復(fù)

使用道具 舉報(bào)

板凳
ID:1114858 發(fā)表于 2024-4-1 20:46 | 只看該作者
kk555 發(fā)表于 2024-4-1 12:01
找一個(gè)B站矩陣按鍵的函數(shù)看看,要消抖

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

5#
ID:1114858 發(fā)表于 2024-4-1 22:36 | 只看該作者
lkc8210 發(fā)表于 2024-4-1 22:14
代碼邏輯問題
每一次主循環(huán)里,key()函數(shù)只可運(yùn)行一次
不要有類似

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

使用道具 舉報(bào)

6#
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);
這樣就只運(yùn)行了一次key();
或者可以switch(key()){case:1;case:2;}這樣是不是也行
回復(fù)

使用道具 舉報(bào)

7#
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ù)

使用道具 舉報(bào)

8#
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)用會消耗很多時(shí)間,這導(dǎo)致反應(yīng)變慢很多。你可以嘗試在定時(shí)器中斷里面做一個(gè)計(jì)數(shù)器,用來消除抖動(dòng)帶來的影響。只要不使用DELAY這種,一個(gè)比如1ms的定時(shí)器里可以做很多事,實(shí)在不行2ms也可以
回復(fù)

使用道具 舉報(bào)

9#
ID:1114858 發(fā)表于 2024-4-2 10:14 來自觸屏版 | 只看該作者
xiaobendan001 發(fā)表于 2024-4-2 09:55
調(diào)用多少次你自己說了算,但是類似您這樣大量使用delay的情況下多長重復(fù)調(diào)用會消耗很多時(shí)間,這導(dǎo)致反應(yīng) ...

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

使用道具 舉報(bào)

10#
ID:1114858 發(fā)表于 2024-4-2 13:17 來自觸屏版 | 只看該作者
lkc8210 發(fā)表于 2024-4-1 22:14
代碼邏輯問題
每一次主循環(huán)里,key()函數(shù)只可運(yùn)行一次
不要有類似

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

12#
ID:1114858 發(fā)表于 2024-4-2 15:59 來自觸屏版 | 只看該作者
lkc8210 發(fā)表于 2024-4-2 13:57
主要問題就在于55行的那個(gè)while(1)
把那個(gè)while(1)拆開分析歸納后的得出三個(gè)區(qū)域
a. key()==2 : 幾微秒

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

使用道具 舉報(bào)

13#
ID:1114752 發(fā)表于 2024-4-3 20:08 | 只看該作者
我像個(gè)NT一樣看著評論區(qū)
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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