熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2023-5-24 11:22
正文摘要:/******************************************************************** * 文件名 : 獨(dú)立按鍵.c * 描述 : 該程序?qū)崿F(xiàn)獨(dú)立按鍵去控制 LED燈 的亮滅,并講訴了對(duì)按鍵的處理方 ... |
| 按鍵加減時(shí)出現(xiàn)兩次1的情況通常是由于按鍵抖動(dòng)引起的。按鍵抖動(dòng)是指在按下或釋放按鍵時(shí),由于機(jī)械性質(zhì)或電氣接觸不穩(wěn)定等原因,導(dǎo)致按鍵信號(hào)在短時(shí)間內(nèi)多次切換狀態(tài)。這種抖動(dòng)可能會(huì)導(dǎo)致單片機(jī)在檢測(cè)按鍵狀態(tài)時(shí)誤認(rèn)為按鍵被按下了兩次。 為了解決按鍵抖動(dòng)問題,可以在軟件中使用適當(dāng)?shù)陌存I消抖算法。一種常用的按鍵消抖方法是使用軟件延時(shí)和狀態(tài)判斷的組合。 |
沒細(xì)看程序,完按鍵,記得檢測(cè)按鍵松開![]() |
188610329 發(fā)表于 2023-5-26 00:05 同意17樓意見,雖然樓主按鍵代碼寫得......,但問題核心不在于此。在于串口初始化函數(shù)被胡亂開啟中斷。眾所周知,T1作為波特率發(fā)生器就得禁止定時(shí)器1中斷。否則就可能發(fā)生不可預(yù)測(cè)的錯(cuò)誤。按如下設(shè)置問題迎刃而解。 void InitUART(void) //9600bps@11.0592MHz { SCON = 0x50; //8位數(shù)據(jù),可變波特率 TMOD |= 0x20; //設(shè)置定時(shí)器模式 TL1 = 0xFD; //設(shè)置定時(shí)初始值 TH1 = 0xFD; //設(shè)置定時(shí)重載值 ET1 = 0; //禁止定時(shí)器1中斷 TR1 = 1; //定時(shí)器1開始計(jì)時(shí) } |
sr861126 發(fā)表于 2023-5-25 08:28 你明白抖動(dòng)的意思么? 按你的代碼,如果按鍵抖動(dòng),應(yīng)該按一次后,連續(xù)發(fā)出 01,02 甚至還有 03 但是,你是發(fā)兩次 01, 說明,運(yùn)行了兩次 SBUF = cost, 卻沒有運(yùn)行兩次 cost++,所以和抖動(dòng)沒有任何關(guān)系。 |
| 按鍵代碼需要做消抖處理 |
|
找個(gè)例程看看防抖怎么做吧,暫時(shí)看是防抖沒做好,或者說沒做防抖 |
A-set 發(fā)表于 2023-5-24 17:23 去掉延時(shí)是一樣de |
sr861126 發(fā)表于 2023-5-25 08:43 為什么消不掉呢 |
123456ZXC1 發(fā)表于 2023-5-24 12:29 是抖動(dòng),剛上電按下出現(xiàn)抖動(dòng),后面按就沒有抖動(dòng)了 |
huaruolong 發(fā)表于 2023-5-24 18:41 沒有關(guān)系,還是抖動(dòng)的問題 |
188610329 發(fā)表于 2023-5-24 22:21 別人的地方?jīng)]有--,初始時(shí)是0,按理說按一次就加1,但是按了2次才加1,后面按就正常按一次加1 |
| 和按鍵抖動(dòng)無關(guān), 如果抖動(dòng)了, 發(fā)送前 肯定會(huì) ++ 或者 -- 一次, 絕對(duì)有別的代碼, 所謂的 發(fā)兩次1 是要發(fā) 2 的時(shí)候被 -1 了, 看你那個(gè) 5 后面 發(fā)了個(gè)3 就知道, 肯定有個(gè)地方在 - cost |
| 描述與按鍵代碼不一致,你這代碼近乎長(zhǎng)短按,短按響應(yīng)一次,長(zhǎng)按每隔0.5秒重復(fù)響應(yīng)。延時(shí)消抖被注釋掉了,移放在不恰當(dāng)?shù)奈恢谩?/td> |
| 你這程序是沒copy全,還是就是這樣, SBUF,TI,都沒看到定義。難到不會(huì)報(bào)錯(cuò)。另建議key,不要用p3.2,P3.3,p3.4.因?yàn)檫@幾個(gè)IO有第二功能,在用這幾個(gè)io時(shí)就有可能和其他沖突,程序肯定不會(huì)報(bào)錯(cuò),但可能會(huì)有莫名奇妙的問題產(chǎn)生。 |
sr861126 發(fā)表于 2023-5-24 15:51 按鍵1消抖后里面的延時(shí)去掉看看還有沒有 |
| 按鍵1的消抖再判斷之后的里面的那個(gè)延時(shí)去掉看看還有沒有 |
123456ZXC1 發(fā)表于 2023-5-24 12:29 但是后面再按就沒有抖動(dòng)了,只是初始時(shí)有這樣的情況 |
| 可能是由于按鍵的按下動(dòng)作引起了按鍵的抖動(dòng) |
Powered by 單片機(jī)教程網(wǎng)