当前位置:   article > 正文

基于FPGA的交通灯电路设计(含程序)_基于fpga的交通灯设计

基于fpga的交通灯设计

目录

题目要求

设计方法

部分程序设计


题目要求

(1) 以车为主体,绿灯、黄灯、红灯、绿灯依次点亮;

(2)十字路口,具有两组红绿灯

(3)采用倒计时显示剩余时间,数码管动态显示;

(4)红绿灯时间按键可调。

设计方法

用六位数码管显示,靠左和靠右两位数码管分别显示东西和南北方向的倒计时显示,我开发板刚好6个LED灯,但是是竖着的,上面三位表示南北方向的红黄绿灯,下面三位表示东西方向的红黄绿灯。平面图如下:

c63920811c514ee6956f5eb648d0214b.png

首先需要一个1hz频率进行倒计时计数,然后对倒计时在不同时间段做出不同的判断即可,为了方便理解,我画出流程图如下:(需要注意的是红灯亮的时间应该是黄灯和绿灯时间之和)

45ed9f4691414c05a56b398db7abebcd.png

部分程序设计

  1. module traffic(
  2. input clk,
  3. input rstn,
  4. input [6:0]d2,//绿灯点亮时间
  5. output reg [3:0] data1,
  6. output reg [3:0] data2,
  7. output reg [3:0] data5,
  8. output reg [3:0] data6,
  9. output reg [5:0] led
  10. );
  11. wire [6:0]d3; //红灯点亮时间
  12. assign d3=d2+5;
  13. //1hz生成
  14. reg [26:0]cn1;
  15. reg clk1hz;
  16. always@(posedge clk or negedge rstn)
  17. begin
  18. if(!rstn)
  19. begin
  20. cn1<=0;
  21. clk1hz<=0;
  22. end
  23. else if(cn1>=24_999_999)//1hz频率生成
  24. begin
  25. clk1hz<=!clk1hz;
  26. cn1<=0;
  27. end
  28. else
  29. cn1<=cn1+1;
  30. end
  31. //计数
  32. reg [6:0]count;
  33. always@(posedge clk1hz or negedge rstn)
  34. begin
  35. if(!rstn)
  36. count<=0;
  37. else if(count>=(d3+d3))//红灯时间d3,加上黄灯和绿灯时间d3
  38. count<=0;
  39. else
  40. count<=count+1;
  41. end
  42. //南北方向显示
  43. reg [6:0]north_red,north_green,north_yellow;
  44. always@(posedge clk1hz or negedge rstn)
  45. begin
  46. if(!rstn)
  47. begin
  48. north_red<=0;
  49. north_green<=0;
  50. north_yellow<=0;
  51. led[2:0]<=0;
  52. data1<=0;
  53. data2<=0;
  54. end
  55. else if(count<=d3)//南北方向红灯点亮
  56. begin
  57. north_red<=d3-count;
  58. led[2:0]<=3'b110;
  59. data1<=north_red%10;//取时间低位
  60. data2<=north_red/10;//取时间高位
  61. end
  62. else if((count>d3)&&(count<=(d3+d3-5)))//南北方向绿灯点亮
  63. begin
  64. north_green<=d3+d3-5-count;
  65. led[2:0]<=3'b011;
  66. data1<=north_green%10;
  67. data2<=north_green/10;
  68. end
  69. else
  70. begin
  71. north_yellow<=d3+d3-count;//南北方向黄灯点亮
  72. led[2:0]<=3'b101;
  73. data1<=north_yellow%10;
  74. data2<=north_yellow/10;
  75. end
  76. end
  77. //东西方向显示
  78. reg [6:0]east_red,east_green,east_yellow;
  79. always@(posedge clk1hz or negedge rstn)
  80. begin
  81. if(!rstn)
  82. begin
  83. east_red<=0;
  84. east_green<=0;
  85. east_yellow<=0;
  86. led[5:3]<=0;
  87. data5<=0;
  88. data6<=0;
  89. end
  90. else if(count<=d3-5)
  91. begin
  92. east_green<=d3-5-count;
  93. led[5:3]<=3'b011;
  94. data5<=east_green%10;
  95. data6<=east_green/10;
  96. end
  97. else if((count>=(d3-5))&&(count<=d3))
  98. begin
  99. east_yellow<=d3-count;
  100. led[5:3]<=3'b101;
  101. data5<=east_yellow%10;
  102. data6<=east_yellow/10;
  103. end
  104. else
  105. begin
  106. east_red<=d3+d3-count;
  107. led[5:3]<=3'b110;
  108. data5<=east_red%10;
  109. data6<=east_red/10;
  110. end
  111. end
  112. endmodule

   

工程.v文件https://download.csdn.net/download/m0_59487432/85684464?spm=1001.2014.3001.5503

92461e074321436fbc0761e978f79c08.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/830889
推荐阅读
相关标签
  

闽ICP备14008679号