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毫秒完成一次循环,看不出显示闪. 主程序中处理主持开关即可.还有如果是大字段数码管驱动得加三极管, 如果每个按钮位距离远可用光耦来处理干扰问题. |