找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

按鍵加減為什么會出現(xiàn)兩次1 附單片機程序

查看數(shù): 2399 | 評論數(shù): 19 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2023-5-24 11:22

正文摘要:

/******************************************************************** * 文件名  : 獨立按鍵.c * 描述    :  該程序實現(xiàn)獨立按鍵去控制 LED燈 的亮滅,并講訴了對按鍵的處理方 ...

回復

ID:1079863 發(fā)表于 2023-5-26 14:26
按鍵加減時出現(xiàn)兩次1的情況通常是由于按鍵抖動引起的。按鍵抖動是指在按下或釋放按鍵時,由于機械性質或電氣接觸不穩(wěn)定等原因,導致按鍵信號在短時間內多次切換狀態(tài)。這種抖動可能會導致單片機在檢測按鍵狀態(tài)時誤認為按鍵被按下了兩次。  為了解決按鍵抖動問題,可以在軟件中使用適當?shù)陌存I消抖算法。一種常用的按鍵消抖方法是使用軟件延時和狀態(tài)判斷的組合。
ID:45879 發(fā)表于 2023-5-26 09:23
沒細看程序,完按鍵,記得檢測按鍵松開
ID:213173 發(fā)表于 2023-5-26 08:47
188610329 發(fā)表于 2023-5-26 00:05
你明白抖動的意思么?
按你的代碼,如果按鍵抖動,應該按一次后,連續(xù)發(fā)出 01,02  甚至還有 03
但是, ...

同意17樓意見,雖然樓主按鍵代碼寫得......,但問題核心不在于此。在于串口初始化函數(shù)被胡亂開啟中斷。眾所周知,T1作為波特率發(fā)生器就得禁止定時器1中斷。否則就可能發(fā)生不可預測的錯誤。按如下設置問題迎刃而解。
void InitUART(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD |= 0x20;                //設置定時器模式
        TL1 = 0xFD;                //設置定時初始值
        TH1 = 0xFD;                //設置定時重載值
        ET1 = 0;                //禁止定時器1中斷
        TR1 = 1;                //定時器1開始計時
}
ID:624769 發(fā)表于 2023-5-26 00:05
sr861126 發(fā)表于 2023-5-25 08:28
按一次,抖動了出現(xiàn)了兩個“1”

你明白抖動的意思么?
按你的代碼,如果按鍵抖動,應該按一次后,連續(xù)發(fā)出 01,02  甚至還有 03
但是,你是發(fā)兩次  01, 說明,運行了兩次  SBUF = cost, 卻沒有運行兩次 cost++,所以和抖動沒有任何關系。
ID:330059 發(fā)表于 2023-5-25 20:01
按鍵代碼需要做消抖處理
ID:384109 發(fā)表于 2023-5-25 10:28
找個例程看看防抖怎么做吧,暫時看是防抖沒做好,或者說沒做防抖
ID:302293 發(fā)表于 2023-5-25 10:11
A-set 發(fā)表于 2023-5-24 17:23
按鍵1消抖后里面的延時去掉看看還有沒有

去掉延時是一樣de
ID:302293 發(fā)表于 2023-5-25 08:59
sr861126 發(fā)表于 2023-5-25 08:43
沒有關系,還是抖動的問題

為什么消不掉呢
ID:302293 發(fā)表于 2023-5-25 08:45
123456ZXC1 發(fā)表于 2023-5-24 12:29
可能是由于按鍵的按下動作引起了按鍵的抖動

是抖動,剛上電按下出現(xiàn)抖動,后面按就沒有抖動了
ID:302293 發(fā)表于 2023-5-25 08:43
huaruolong 發(fā)表于 2023-5-24 18:41
你這程序是沒copy全,還是就是這樣, SBUF,TI,都沒看到定義。難到不會報錯。另建議key,不要用p3.2,P3.3 ...

沒有關系,還是抖動的問題
ID:302293 發(fā)表于 2023-5-25 07:56
188610329 發(fā)表于 2023-5-24 22:21
和按鍵抖動無關, 如果抖動了, 發(fā)送前 肯定會 ++ 或者 -- 一次, 絕對有別的代碼,  所謂的 發(fā)兩次1 是要發(fā) 2  ...

別人的地方?jīng)]有--,初始時是0,按理說按一次就加1,但是按了2次才加1,后面按就正常按一次加1
ID:624769 發(fā)表于 2023-5-24 22:21
和按鍵抖動無關, 如果抖動了, 發(fā)送前 肯定會 ++ 或者 -- 一次, 絕對有別的代碼,  所謂的 發(fā)兩次1 是要發(fā) 2 的時候被 -1 了,  看你那個  5 后面  發(fā)了個3 就知道, 肯定有個地方在  - cost
ID:213173 發(fā)表于 2023-5-24 21:18
描述與按鍵代碼不一致,你這代碼近乎長短按,短按響應一次,長按每隔0.5秒重復響應。延時消抖被注釋掉了,移放在不恰當?shù)奈恢谩?/td>
ID:202023 發(fā)表于 2023-5-24 18:41
你這程序是沒copy全,還是就是這樣, SBUF,TI,都沒看到定義。難到不會報錯。另建議key,不要用p3.2,P3.3,p3.4.因為這幾個IO有第二功能,在用這幾個io時就有可能和其他沖突,程序肯定不會報錯,但可能會有莫名奇妙的問題產(chǎn)生。
ID:1079614 發(fā)表于 2023-5-24 17:23
sr861126 發(fā)表于 2023-5-24 15:51
但是后面再按就沒有抖動了,只是初始時有這樣的情況

按鍵1消抖后里面的延時去掉看看還有沒有
ID:1079614 發(fā)表于 2023-5-24 17:22
按鍵1的消抖再判斷之后的里面的那個延時去掉看看還有沒有
ID:302293 發(fā)表于 2023-5-24 15:51
123456ZXC1 發(fā)表于 2023-5-24 12:29
可能是由于按鍵的按下動作引起了按鍵的抖動

但是后面再按就沒有抖動了,只是初始時有這樣的情況
ID:526543 發(fā)表于 2023-5-24 12:29
可能是由于按鍵的按下動作引起了按鍵的抖動

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

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

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