7人投票, 是排隊投票的不需要7個按鈕, 否則就需要14個按鈕(每個人都是贊成反對2個按鈕), 所以開關是要15個, 7人投票, 最多只是到7, 所以贊成票數顯示只要一位數碼管就好了, 反對也要一位數碼管共要2個一位數碼管. 單片機IO占用, 二個數碼管的abcdefg段同字段連接占7個IO, 另外7個贊成開關, 7個反對開關也連這7個IO,然后2個數碼管的位(一般用共陰的多)占2個IO, 7個贊成開關共地占一個IO, 7個反對開關共地占一個IO, 主持開關單獨一個IO, 這樣要12個IO的單片機就好了. 程序設計開一個2mS定時中斷, 在中斷中4步循環, 第一步,2個顯示位,2個開關位置1, 第一個顯示數據到7段字段IO然后第一位IO置0顯示第一位后退出中斷. 下一次進中斷時執行第二步, 2個顯示位2個開關位置1, 取第二位數據到顯示段后開第二段顯示后退出. 第三次進中斷執行第三步, 2個顯示位置和一個開關位置1, 另一個開關位置0, 7個IO置1后可讀7個開關狀態,開關穩定(防抖)后進行處理(就是加贊成或反對數或不加)后退出中斷. 第四次時中斷執行第四步, 處理另7個開關, 下一次進中斷又從第一步開始. 這樣8毫秒完成一次循環,看不出顯示閃. 主程序中處理主持開關即可.還有如果是大字段數碼管驅動得加三極管, 如果每個按鈕位距離遠可用光耦來處理干擾問題. |