![]() |
發(fā)布時間: 2020-2-12 17:00
正文摘要:我的數(shù)碼管是直接和單片機(jī)連接的,沒有用鎖存器之類的。在按住按鍵時本來數(shù)碼管是全部滅的,因為按鍵有松手檢測,一直在那里死循環(huán)。可是我的秒鐘十位那個數(shù)碼管卻亮著,而程序和分鐘的十位一樣,分鐘十位的數(shù)碼管卻 ... |
沒有消隱,所以會顯示 |
進(jìn)去循環(huán)前把斷碼清零, |
應(yīng)該是掃描法驅(qū)動數(shù)碼管的,一般掃描都會有最后一位顯示過后不帶消隱。如果想按鍵不妨礙顯示,可以用分時序執(zhí)行來解決。 |
不在一一回復(fù)謝謝各位了。 找到問題了,秒鐘十位是放在數(shù)碼管顯示函數(shù)的最后一個,沒有消隱,所以會顯示。我現(xiàn)在也找到一個按住按鍵不放時會數(shù)碼管會顯示的方法,就是把顯示函數(shù)放在松手檢測死循環(huán)里了,具體見后面的程序截圖。 |
banalsheep 發(fā)表于 2020-2-12 21:59 謝謝,找到問題了,秒鐘十位是放在數(shù)碼管顯示函數(shù)的最后一個,沒有消隱,所以會顯示。我現(xiàn)在也找到一個按住按鍵不放時會數(shù)碼管會顯示的方法,就是把顯示函數(shù)放在松手檢測死循環(huán)里了,具體見后面的程序截圖。 |
程序有問題唄 |
不知道樓主的程序也搞不清現(xiàn)象,只能籠統(tǒng)的說了,一般都是設(shè)置一個數(shù)組做顯示緩存,比如4位顯示的數(shù)碼時鐘,設(shè)dat[4];調(diào)整小時的時候,顯示數(shù)據(jù)為: dat[0]=hour/10; dat[1]=hour%10; dat[2]=10; dat[3]=10; 顯示輸出的時候就是; for(i=0;i<4;i++) { Display_out(SEG7[dat[i]]); **** } 其中:10的含義為------SEG7[10]=熄屏碼,就是關(guān)閉不需要顯示的數(shù)位。 |
如果沒有電平的轉(zhuǎn)換指令,沒有鎖存也一樣的效果。 |
至少有4位數(shù)碼管,分鐘2位 ,秒鐘2位,按鍵前數(shù)碼管全滅,但按鍵后程序有相應(yīng)的顯示控制(數(shù)碼管要點亮),你的問題是按鍵未松開時,秒鐘的十位亮了,而分鐘也控制了且與秒鐘程序完全一樣,我想你這4個數(shù)碼管一定是采用動態(tài)顯示方式,動態(tài)顯示就要去控制某一位點亮(某一時間),通過分析剛才是這時你控制了秒鐘的十位亮了,最關(guān)鍵的是按鍵未松開怎么會有控制(你提到一直在那里死循環(huán)),最有可能的是你的按鍵在按下去抖動了,即你以為是一次按鍵,殊不知程序認(rèn)為按下了幾次,這樣分析不知道是不是能解決你的困惑 |
換IO口當(dāng)然不能解決問題,只能修改程序去控制IO口的電平狀態(tài)符合你想要的結(jié)果才能做到 |
你看下按下按鍵循環(huán)前單片機(jī)做的最后一個動作是啥,一般這個就是在按鍵循環(huán)前IO最后的狀態(tài)沒有清零. |
檢查一下是不是消隱問題 |
Powered by 單片機(jī)教程網(wǎng)