查看: 5214|回复: 3

【试用之旅】投票神器之四人表决器

[复制链接]
  • TA的每日心情
    奋斗
    2017-5-12 23:48
  • 签到天数: 214 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-8-28 09:53:40 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 蒲公英╯ 于 2016-8-28 12:16 编辑

    锆石科技的实战项目配备讲解的是三人表决器,因为三人表决器的输入变化少很适合初学,而且有一定代表性,但锆石科技的A4开发板有四个电容按键,三人表决器只用到了三个,这让我感到有点可惜,所以自己在三人表决器的基础上修改成了四人表决器,让电容按键全部得到利用,下面是效果图和修改过的代码
    P60828-093733.gif
    效果动图
    P60828-093755.gif
    四个按键同时按下动态效果图
    P60828-094015.jpg
    四个按键同时按下效果
    P60828-094026.jpg
    一个按键按下
    P60828-094022.jpg
    按个按键按下
    代码:


    1. //---------------------------------------------------------------------------
    2. module A4_Vote4                                 //模块名
    3. (
    4.         //输入端口
    5.         KEY1,KEY2,KEY3,KEY4,
    6.         //输出端口
    7.         LED1,LED2,LED3,LED4,SEG_DATA,SEG_EN                 
    8. );

    9. //---------------------------------------------------------------------------
    10. //--        外部端口声明
    11. //---------------------------------------------------------------------------
    12. input                       KEY1,KEY2,KEY3,KEY4;        //按键
    13. output                      LED1,LED2,LED3,LED4;        //LED
    14. output      [5:0] SEG_EN;           //数码管使能管脚
    15. output reg  [6:0] SEG_DATA;         //数码管数据管脚

    16. //---------------------------------------------------------------------------
    17. //--        内部端口声明
    18. //---------------------------------------------------------------------------
    19. parameter        SEG_NUM0 = 7'h3f,       //数字0
    20.                                 SEG_NUM1 = 7'h06,       //数字1
    21.                                 SEG_NUM2 = 7'h5b,       //数字2
    22.                                 SEG_NUM3 = 7'h4f,       //数字3
    23.                                 SEG_NUM4 = 7'h66;       //数字4
    24.                                 //SEG_NUM4 = 7'h6d;     //数字5
    25.                                 //SEG_NUM4 = 7'h7d;     //数字6
    26.                                 //SEG_NUM4 = 7'h07;       //数字7
    27.                                 //SEG_NUM4 = 7'h7f;         //数字8
    28.                                 //SEG_NUM4 = 7'h6f;          //数字9
    29.                                 

    30. //---------------------------------------------------------------------------
    31. //--        逻辑功能实现        
    32. //---------------------------------------------------------------------------
    33. always @ (*)                      //组合电路,实现四人表决器电路(行为描述)
    34. begin                  
    35.         case({KEY4,KEY3,KEY2,KEY1})                        //检测按键是否按下,按下为1,悬空为0
    36.                 4'b0000 : SEG_DATA = SEG_NUM0;        //当有0个按键按下时,数码管就显示数字0
    37.                
    38.                 4'b0001 : SEG_DATA = SEG_NUM1;        //当有1个按键按下时,数码管就显示数字1
    39.                 4'b0010 : SEG_DATA = SEG_NUM1;        //当有1个按键按下时,数码管就显示数字1
    40.                 4'b0100 : SEG_DATA = SEG_NUM1;        //当有1个按键按下时,数码管就显示数字1
    41.                 4'b1000 : SEG_DATA = SEG_NUM1;        //当有1个按键按下时,数码管就显示数字1
    42.                
    43.                 4'b1100 : SEG_DATA = SEG_NUM2;        //当有2个按键按下时,数码管就显示数字2
    44.                 4'b0110 : SEG_DATA = SEG_NUM2;        //当有2个按键按下时,数码管就显示数字2
    45.                 4'b0011 : SEG_DATA = SEG_NUM2;        //当有2个按键按下时,数码管就显示数字2
    46.                 4'b1001 : SEG_DATA = SEG_NUM2;        //当有2个按键按下时,数码管就显示数字2
    47.                 4'b1010 : SEG_DATA = SEG_NUM2;        //当有2个按键按下时,数码管就显示数字2
    48.                 4'b0101 : SEG_DATA = SEG_NUM2;        //当有2个按键按下时,数码管就显示数字2
    49.                
    50.                 4'b1101 : SEG_DATA = SEG_NUM3;        //当有3个按键按下时,数码管就显示数字3
    51.                 4'b1011 : SEG_DATA = SEG_NUM3;        //当有3个按键按下时,数码管就显示数字3
    52.                 4'b1110 : SEG_DATA = SEG_NUM3;        //当有3个按键按下时,数码管就显示数字3
    53.                 4'b0111 : SEG_DATA = SEG_NUM3;        //当有3个按键按下时,数码管就显示数字3
    54.                
    55.                 4'b1111 : SEG_DATA = SEG_NUM4;        //当有4个按键按下时,数码管就显示数字4
    56.                 default: SEG_DATA = SEG_NUM0;
    57.         endcase                                                        //case语句的结束
    58. end                                                                      //begin语句的结束

    59. assign LED1 = !KEY1;                //当触摸按键1按下其对应的D1将会亮起
    60. assign LED2 = !KEY2;                //当触摸按键2按下其对应的D2将会亮起
    61. assign LED3 = !KEY3;                //当触摸按键3按下其对应的D3将会亮起
    62. assign LED4 = !KEY4;                //当触摸按键4按下其对应的D4将会亮起
    63. assign SEG_EN = 6'b011111;          //SEG1-SEG5熄灭,SEG6点亮
    64.   
    65. endmodule                                                                        //模块的结束
    复制代码

    输入完代码后就是关键配置,下面是锆石A4开发板的硬件连接图
    1.png
    电容按键
    2.png
    用到的LED1-LED4做状态指示
    4.png
    数码管做为数目显示
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-13 08:40
  • 签到天数: 138 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-8-28 21:22:07 | 显示全部楼层
    学以致用
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-12-11 14:10
  • 签到天数: 173 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-8-28 23:41:01 | 显示全部楼层
    来个无线的话比较好啊!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-3-28 22:24 , Processed in 0.151563 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.