![]() |
發布時間: 2020-2-12 17:00
正文摘要:我的數碼管是直接和單片機連接的,沒有用鎖存器之類的。在按住按鍵時本來數碼管是全部滅的,因為按鍵有松手檢測,一直在那里死循環。可是我的秒鐘十位那個數碼管卻亮著,而程序和分鐘的十位一樣,分鐘十位的數碼管卻 ... |
沒有消隱,所以會顯示 |
進去循環前把斷碼清零, |
應該是掃描法驅動數碼管的,一般掃描都會有最后一位顯示過后不帶消隱。如果想按鍵不妨礙顯示,可以用分時序執行來解決。 |
不在一一回復謝謝各位了。 找到問題了,秒鐘十位是放在數碼管顯示函數的最后一個,沒有消隱,所以會顯示。我現在也找到一個按住按鍵不放時會數碼管會顯示的方法,就是把顯示函數放在松手檢測死循環里了,具體見后面的程序截圖。 |
banalsheep 發表于 2020-2-12 21:59 謝謝,找到問題了,秒鐘十位是放在數碼管顯示函數的最后一個,沒有消隱,所以會顯示。我現在也找到一個按住按鍵不放時會數碼管會顯示的方法,就是把顯示函數放在松手檢測死循環里了,具體見后面的程序截圖。 |
程序有問題唄 |
不知道樓主的程序也搞不清現象,只能籠統的說了,一般都是設置一個數組做顯示緩存,比如4位顯示的數碼時鐘,設dat[4];調整小時的時候,顯示數據為: 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]=熄屏碼,就是關閉不需要顯示的數位。 |
如果沒有電平的轉換指令,沒有鎖存也一樣的效果。 |
至少有4位數碼管,分鐘2位 ,秒鐘2位,按鍵前數碼管全滅,但按鍵后程序有相應的顯示控制(數碼管要點亮),你的問題是按鍵未松開時,秒鐘的十位亮了,而分鐘也控制了且與秒鐘程序完全一樣,我想你這4個數碼管一定是采用動態顯示方式,動態顯示就要去控制某一位點亮(某一時間),通過分析剛才是這時你控制了秒鐘的十位亮了,最關鍵的是按鍵未松開怎么會有控制(你提到一直在那里死循環),最有可能的是你的按鍵在按下去抖動了,即你以為是一次按鍵,殊不知程序認為按下了幾次,這樣分析不知道是不是能解決你的困惑 |
換IO口當然不能解決問題,只能修改程序去控制IO口的電平狀態符合你想要的結果才能做到 |
你看下按下按鍵循環前單片機做的最后一個動作是啥,一般這個就是在按鍵循環前IO最后的狀態沒有清零. |
檢查一下是不是消隱問題 |