交通信号灯设计

**

设计说明:

**
此信号灯主要应用在主路与次路相交的交叉口处,信号灯共分为4个不同的状态,利用Moore型状态机实现,用六个灯代表主路与次路的六个信号灯(红、绿、黄),高电平时信号灯亮,低电平时灭。同时用4个数码管分别显示主路与次路当前信号状态下的剩余时间,并设置复位信号按键rst。
**

设计原理图:

**
电路原理图
整个电路可以分为4个部分,分别是时钟模块、BCD码与二进制转换模块、状态机模块、数码管显示模块。Zero1为复位按键,cp为输入的100MHZ时钟信号,red1、yellow1、green1、red2、yellow2、green2为输出的信号灯状态,1代表亮,0代表灭。a_to_g则分别对应于数码管的显示,an则是数码管的位选端,下面分别介绍这几个模块的具体功能。

  • 时钟模块:

此模块的输入为EGO1开发板上的100MHZ时钟,对应着P17管脚,可将时钟信号进行分频,数码管显示需要200HZ的时钟信号,状态机需要1HZ的时钟信号,没有时钟信号,整个系统也将无法正常工作,时钟模块的核心代码如下所示:(时钟模块代码不需要这么长,这里粘贴的是100MHZ的大部分分频,方便后续复习)

module clk_div(
  input CP_100MHz, 
  output clk_100MHz,
  output clk_1kHz,
  output clk_200Hz,
  output clk_100Hz,
  output clk_50Hz,
  output clk_20Hz,
  output clk_10Hz,
  output clk_5Hz,
  output clk_2Hz,
  output clk_1Hz
  );

  reg [16 : 0] cnt_1kHz;
  reg [2 : 0] cnt1_200Hz;
  reg [2: 0] cnt2_200Hz;
  reg [2 : 0] cnt_100Hz;
  reg [3 : 0] cnt_50Hz;
  reg [4 : 0] cnt_20Hz;
  reg [5 : 0] cnt_10Hz;
  reg [6 : 0] cnt_5Hz;
  reg [7 : 0] cnt_2Hz;
  reg [8 : 0] cnt_1Hz;
  reg clk_1kHz_reg;
  //reg clk_200Hz_reg;
  reg clk_200Hz_reg1;
  reg clk_200Hz_reg2;
  reg clk_100Hz_reg;
  reg clk_50Hz_reg;
  reg clk_20Hz_reg;
  reg clk_10Hz_reg;
  reg clk_5Hz_reg;
  reg clk_2Hz_reg;
  reg clk_1Hz_reg;
  initial
    begin
      cnt_1kHz=0;
      cnt_100Hz=0;
      cnt_50Hz=0;
      cnt_20Hz=0;
      cnt_10Hz=0;
      cnt_5Hz=0;
      cnt_2Hz=0;
      cnt_1Hz=0;                                
      clk_1kHz_reg=0;
      clk_200Hz_reg1=0;
      clk_200Hz_reg2=0;
      clk_100Hz_reg=0;
      clk_50Hz_reg=0;
      clk_20Hz_reg=0;
      clk_10Hz_reg=0;
      clk_5Hz_reg=0;
      clk_2Hz_reg=0;
      clk_1Hz_reg=0;
    end  
  always @ (posedge CP_100MHz) 
    begin      
      if (cnt_1kHz < 17'd100000/2-1)//17'h186A0=100000
        begin
          cnt_1kHz <= cnt_1kHz + 1;
          clk_1kHz_reg <= clk_1kHz_reg;
        end
      else
        begin
          cnt_1kHz = 0;
          clk_1kHz_reg <= ~clk_1kHz_reg;        
        end
    end
  //200Hz
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt1_200Hz < 3'd5-1)
        cnt1_200Hz <= cnt1_200Hz + 1;
      else
        cnt1_200Hz <= 0;  
    end     
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt1_200Hz < 3'd5/2)
          clk_200Hz_reg1 <= 1;
      else
          clk_200Hz_reg1 <= 0;
    end 
  always @ (negedge clk_1kHz) 
    begin      
      if (cnt2_200Hz < 3'd5-1)
        cnt2_200Hz <= cnt2_200Hz + 1;
      else
        cnt2_200Hz <= 0;  
    end      
  always @ (negedge clk_1kHz) 
    begin      
      if (cnt2_200Hz < 3'd5/2)
          clk_200Hz_reg2 <= 1;
      else
          clk_200Hz_reg2 = 0;
    end 
    assign clk_200Hz=clk_200Hz_reg1|clk_200Hz_reg2;
    //100Hz
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt_100Hz < 4'd10/2-1)
        begin
          cnt_100Hz <= cnt_100Hz + 1;
          clk_100Hz_reg <= clk_100Hz_reg;
        end
      else
        begin
          cnt_100Hz = 0;
          clk_100Hz_reg <= ~clk_100Hz_reg;        
        end
    end     
    //50Hz
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt_50Hz < 5'd20/2-1)
        begin
          cnt_50Hz <= cnt_50Hz + 1;
          clk_50Hz_reg <= clk_50Hz_reg;
        end
      else
        begin
          cnt_50Hz = 0;
          clk_50Hz_reg <= ~clk_50Hz_reg;        
        end
    end
    //20Hz
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt_20Hz < 6'd50/2-1)
        begin
          cnt_20Hz <= cnt_20Hz + 1;
          clk_20Hz_reg <= clk_20Hz_reg;
        end
      else
        begin
          cnt_20Hz = 0;
          clk_20Hz_reg <= ~clk_20Hz_reg;        
        end
    end
    //10Hz
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt_10Hz < 7'd100/2-1)
        begin
          cnt_10Hz <= cnt_10Hz + 1;
          clk_10Hz_reg <= clk_10Hz_reg;
        end
      else
        begin
          cnt_10Hz = 0;
          clk_10Hz_reg <= ~clk_10Hz_reg;        
        end
    end 
    //5Hz
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt_5Hz < 8'd200/2-1)
        begin
          cnt_5Hz <= cnt_5Hz + 1;
          clk_5Hz_reg <= clk_5Hz_reg;
        end
      else
        begin
          cnt_5Hz = 0;
          clk_5Hz_reg <= ~clk_5Hz_reg;        
        end
    end 
    //2Hz
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt_2Hz < 9'd500/2-1)
        begin
          cnt_2Hz <= cnt_2Hz + 1;
          clk_2Hz_reg <= clk_2Hz_reg;
        end
      else
        begin
          cnt_2Hz = 0;
          clk_2Hz_reg <= ~clk_2Hz_reg;        
        end
    end 
    //1Hz
  always @ (posedge clk_1kHz) 
    begin      
      if (cnt_1Hz < 10'd1000/2-1)
        begin
          cnt_1Hz <= cnt_1Hz + 1;
          clk_1Hz_reg <= clk_1Hz_reg;
        end
      else
        begin
          cnt_1Hz = 0;
          clk_1Hz_reg <= ~clk_1Hz_reg;        
        end
    end  
  assign clk_100MHz = CP_100MHz;  
  assign clk_1kHz = clk_1kHz_reg;
  assign clk_100Hz = clk_100Hz_reg;
  assign clk_50Hz  = clk_50Hz_reg;
  assign clk_20Hz  = clk_20Hz_reg;
  assign clk_10Hz  = clk_10Hz_reg;
  assign clk_5Hz   = clk_5Hz_reg;
  assign clk_2Hz   = clk_2Hz_reg;
  assign clk_1Hz   = clk_1Hz_reg;

endmodule

**

  • 状态机模块:*

**
此模块的输入为复位信号rst以及时钟信号clk,输出为red1,yellow1,green1;red2,
yellow2,green2。高电平时亮,低电平时灭,利用Moore型状态机实现,整个信号灯周期共分为4个状态,状态表如下图所示:
在这里插入图片描述

利用Verilog语言实现过程如下:

module state(  input rst,clk,
                output red1,yellow1,green1,red2,yellow2,green2,
                output [7:0] counter_x,counter_y);
    reg red1,yellow1,green1,red2,yellow2,green2;
    reg [3:0] current_state,next_state;
    reg [7:0] counter,counter_x,counter_y,timeover,timeover_x,timeover_y;
    parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;
    parameter time1 = 'd24, time2 = 'd4;
    //状态转换
    always @(posedge clk or negedge rst)
        if(!rst)
            begin
                current_state <= S0;
                counter <= time1;
                counter_x <= 'd24;
                counter_y <= 'd29;
               
            end
        else
            begin
                if(counter == 0)
                    begin
                        current_state <= next_state;
                        counter <= timeover;
                        counter_x <= timeover_x;
                        counter_y <= timeover_y;
                    end
                else
                    begin
                        counter <= counter - 1;
                        counter_x <= counter_x - 1;
                        counter_y <= counter_y -1;
                    end
            end
    //状态改变
    always @(current_state)
        begin
            case(current_state)
                S0:begin //横向绿灯,纵向红灯
                    red1 = 0; yellow1 = 0; green1 = 1;
                    red2 = 1; yellow2 = 0; green2 = 0;
                    next_state <= S1; timeover <= time2;
                    timeover_x <= 'd4;
                    timeover_y <= 'd4;
                    end
                S1:begin //横向黄灯,纵向红灯
                    red1 = 0; yellow1 = 1; green1 = 0;
                    red2 = 1; yellow2 = 0; green2 = 0;
                    next_state <= S2; timeover <= time1;
                    timeover_x <= 'd29;
                    timeover_y <= 'd24;
                    end
                S2:begin //横向红灯,纵向绿灯
                    red1 = 1; yellow1 = 0; green1 = 0;
                    red2 = 0; yellow2 = 0; green2 = 1;
                    next_state <= S3; timeover <= time2;
                    timeover_x <= 'd4;
                    timeover_y <= 'd4;
                    end
                S3:begin //横向红灯,纵向黄灯
                    red1 = 1; yellow1 = 0; green1 = 0;
                    red2 = 0; yellow2 = 1; green2 = 0;
                    next_state <= S1; timeover <= time1;
                    timeover_x <= 'd24;
                    timeover_y <= 'd29;
                    end
                default:begin //横向绿灯,纵向红灯
                            red1 = 0; yellow1 = 0; green1 = 1;
                            red2 = 1; yellow2 = 0; green2 = 0;
                            next_state <= S1; timeover <= time2;
                            timeover_x <= 'd4;
                            timeover_y <= 'd4;
                         end
            endcase
        end        
endmodule

  • 二进制与BCD码转换模块:

此模块的输入为状态机模块的counter_x与counter_y输出,分别表示主路与次路当前状态下所剩余的时间,但它们均是由二进制数表示的,为了让数码管可以正常显示,需要借助BCD码来实现,也就是将二进制转换成BCD码,此次设计采用大4加3移位算法,算法原理如下:

  1. 4位二进制数大于15则进位,4位BCD码大于9则进位,若使4位二进制数变为BCD码,则其大于9时加6,得到的便是其BCD码(由真值表规律可知),例如:12的二进制数为1100,它是大于9的,则1100+0110=1_0010,即为BCD码的12。
  2. 对于5位二进制,先判断高四位是否大于9,若大于9,则加6并向左移位;若小于9,则直接向左移位。例如30的二进制数为11110,高4位1111的BCD码为10101,因为其大于9,所以加6,变为1_0101,左移一位之后,得到0010_1010,新低四位的值1010大于9,所以新低4位加6得到0011_0000,即为30的BCD码。所以只要通过左移及大9加6(大于等于10加6),则可转换任意位2进制数为BCD码。
    但是该算法是移位加6,即加0110。而大4加3(0011)算法比此法占用资源少,但在算法上两者是等价的,即判断4位二进制数是否大于等于5,若大于等于5则加3,再移位;否则直接移位。例如10的二进制数0_1010
  3. 按照大9加6算法,5的二进制数为0101,左移一位之后变为1010(10),此时需要加6并左移一位,变为BCD码1_0000。即10+6=16(进1)
  4. 按照大4加3算法,5的二进制数为0101,大于4,此时需要加3并左移一位,变为BCD码1_0000。即(5+3)*2 = 16(进1),左移一位(低位补0)相当于乘以2。
  5. 8位2进制数最大能表示的数字为255,用BCD码表示,需要10位来表示。因此此模块的输入为8位二进制数,输出为10位二进制数。
    a.把二进制数左移一位;
    b.如果共移了8位,那么BCD数就在百位、十位和个位列,转换完成;
    c.如果在BCD列中,任何一个二进制数是5或比5更大,那么就在BCD列的数值加 3;
    d.返回步骤a。
    例如二进制数1111_1111到255的转换过程如下所示:
    在这里插入图片描述在这里插入图片描述

利用Verilog语言实现的过程如下:

module binbcd8 (
  input wire [7:0] b,
  output reg [9:0] p
);
  // 中间变量 
  reg [17:0] z;//8位输入,10位输出,共18个数
  integer i;
  always @ ( * )   //always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行
    begin 
      for (i = 0; i <=17; i = i + 1)
        z[i] = 0;
      z[10:3] = b;   // 向左移3位,8421码,左移两位均不会大于等于5
      repeat (5)                           // 重复5次
        begin 
          if (z[11:8] > 4)                     // 如果个位大于4
            z[11:8] = z[11:8] +3;              // 加3
          if (z[15:12] > 4)                     // 如果十位大于4 
            z[15:12] = z[15:12] +3;            // 加3
          z[17:1] = z[16:0];                   // 左移一位
        end
    p = z[17:8];                          // BCD 
    end
endmodule
  • 数码管显示模块:

此模块的输入为二进制转换为BCD码模块的输出,用来使数码管正确的显示十进制数,也就是此次实验设计中的各个信号灯所剩余的时间,利用Verilog语言实现的过程如下:

module hx7seg(
  input wire [11:0] x,//4的倍数,12位
  input wire cclk,//保证有一个足够的频率。一般工作在200HZ
  input wire clr,//清零端
  output reg [6:0] a_to_g,
  output reg [1:0] an//位选端,控制数码管的选择
);
  reg s;
  reg [3:0] digit;

// 2-位计数器
  always @ (posedge cclk or posedge clr)
    begin 
      if (clr ==1)//高电平清零
          s <= 0;
      else
          s <= s + 1;
    end

// Quad 4-to-1 MUX: mux44
  always @ ( * )//always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。
    case (s)//本项目中的所有时间均是两位数,因此s有两种状态即可
      0: digit = x[3:0];
      1: digit = x[7:4];
      default: digit = x[11:8];
    endcase
    
// 选择数码管
  always @ ( * )
    begin 
      an = 2'b00;  
      an[s] = 1;
    end

// 7段解码器:hex7seg
    always @ ( * )
      case (digit)
        0: a_to_g = 7'b1111110;
        1: a_to_g = 7'b0110000;
        2: a_to_g = 7'b1101101;
        3: a_to_g = 7'b1111001;
        4: a_to_g = 7'b0110011;
        5: a_to_g = 7'b1011011;
        6: a_to_g = 7'b1011111;
        7: a_to_g = 7'b1110000;
        8: a_to_g = 7'b1111111;
        9: a_to_g = 7'b1111011;
        'hA: a_to_g = 7'b1110111;
        'hB: a_to_g = 7'b0011111;
        'hC: a_to_g = 7'b1001110;
        'hD: a_to_g = 7'b0111101;
        'hE: a_to_g = 7'b1001111;
        'hF: a_to_g = 7'b1000111;
        default: a_to_g = 7'b0000000;  // 空白
      endcase
endmodule
  • 引脚约束:
set_property IOSTANDARD LVCMOS33 [get_ports zero1]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {an0[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {an0[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {an1[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {an1[0]}]
set_property PACKAGE_PIN P5 [get_ports zero1]
set_property PACKAGE_PIN P4 [get_ports zero2]
set_property IOSTANDARD LVCMOS33 [get_ports cp]
set_property IOSTANDARD LVCMOS33 [get_ports green1]
set_property IOSTANDARD LVCMOS33 [get_ports red1]
set_property IOSTANDARD LVCMOS33 [get_ports green2]
set_property IOSTANDARD LVCMOS33 [get_ports red2]
set_property IOSTANDARD LVCMOS33 [get_ports yellow2]
set_property IOSTANDARD LVCMOS33 [get_ports yellow1]
set_property IOSTANDARD LVCMOS33 [get_ports zero2]
set_property PACKAGE_PIN P17 [get_ports cp]
set_property PACKAGE_PIN J3 [get_ports red1]
set_property PACKAGE_PIN J2 [get_ports yellow1]
set_property PACKAGE_PIN K2 [get_ports green1]
set_property PACKAGE_PIN L1 [get_ports red2]
set_property PACKAGE_PIN M1 [get_ports yellow2]
set_property PACKAGE_PIN K3 [get_ports green2]
set_property PACKAGE_PIN C1 [get_ports {an0[1]}]
set_property PACKAGE_PIN H1 [get_ports {an0[0]}]
set_property PACKAGE_PIN E1 [get_ports {an1[1]}]
set_property PACKAGE_PIN G6 [get_ports {an1[0]}]
set_property PACKAGE_PIN B4 [get_ports {a_to_g0[6]}]
set_property PACKAGE_PIN A4 [get_ports {a_to_g0[5]}]
set_property PACKAGE_PIN A3 [get_ports {a_to_g0[4]}]
set_property PACKAGE_PIN B1 [get_ports {a_to_g0[3]}]
set_property PACKAGE_PIN A1 [get_ports {a_to_g0[2]}]
set_property PACKAGE_PIN B3 [get_ports {a_to_g0[1]}]
set_property PACKAGE_PIN B2 [get_ports {a_to_g0[0]}]
set_property PACKAGE_PIN D4 [get_ports {a_to_g1[6]}]
set_property PACKAGE_PIN E3 [get_ports {a_to_g1[5]}]
set_property PACKAGE_PIN D3 [get_ports {a_to_g1[4]}]
set_property PACKAGE_PIN F4 [get_ports {a_to_g1[3]}]
set_property PACKAGE_PIN F3 [get_ports {a_to_g1[2]}]
set_property PACKAGE_PIN E2 [get_ports {a_to_g1[1]}]
set_property PACKAGE_PIN D2 [get_ports {a_to_g1[0]}]
  • 效果图展示:
    初始状态
  • 视频展示:

视频链接如下所示:
视频展示

项目在Vivado运行一切正常,实验所用设备为EGO1开发板,源文件链接如下:(bit流文件与记忆文件均已生成,在traffic文件中,下载后可正常测试)

  • 链接

百度网盘链接分享
提取码:0000
–来自百度网盘超级会员V4的分享

首次blog,多多关照!!!

一 摘要 在城镇街道的十字交叉路口,为了保证交通秩序和行人安全,一般在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道路禁止通行;黄灯亮表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行;绿灯亮表示该条道路允许通行。交通灯控制电路自动控制十字路口、丁字路口和环形路口的红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现交通管理的自动化。如今,我国城市化迅速发展,机动车数量迅速增加,也对道路交通压力逐渐增大。像以前简单的一组交通灯已经很难有效的管理更为复杂的交通情况,交通灯向更智能,功能更全面的方向发展。 这次课程设计合理的相位,分别有二相位,三相位,四相位,八相位的交通灯。以KEIL为编程工具,PROTEUS为仿真工具分别实现。 二 课程设计内容与要求 二相位交通灯,三相位交通灯,四相位交通灯,八相位交通灯。 进行总体设计,画出原理图。 用Keil编写并调试程序。 用Proteus软件进行仿真。 三 系统设计(硬件,软件) 简要: 本次课程设计中,模拟交通灯控制器,使用的是单片机AT89C51,来控制LED和数码管,红绿黄灯交替,真实模拟交通灯功能,在Proteus中实现。用Keil程序编程。 二相位交通灯 交通灯实验报告(1)全文共7页,当前为第1页。 二相位交通灯相位图如下: 交通灯实验报告(1)全文共7页,当前为第1页。 第一相位 第二相位 由相位图设计电路图和单片机图如下: 二相位交通灯设计,也是最基本的交通灯设计。它在四个路口处各设红绿灯。如图第二相位中所示:东西走向的路口,红灯变量值为0,表示亮灯,表示此方向禁行,同时绿灯为1 ,表示灭灯;南北走向的路口,红灯变量为1,绿灯为0,表示此方向通行。 交通灯实验报告(1)全文共7页,当前为第2页。 交通灯实验报告(1)全文共7页,当前为第2页。 二相位电路设计图与单片机图 三相位交通灯 三相位交通灯相位图如下: 第一相位 第二相位 第三相位 由相位图设计的电路图和单片机图如下: 交通灯实验报告(1)全文共7页,当前为第3页。东西南北方向均在原基础的直行灯上添加了表示左转禁行或通行的红灯和绿灯。如相位图第一相位显示:在南北方向上,红灯和左转红灯变量值为0,表示亮灯,而其他绿灯为1,表示灭灯;在东西方向,直行绿灯和左转红灯变量值为0,表示此方向车辆尽可以直行,不可左转。其他相位的信号灯具体见代码。 交通灯实验报告(1)全文共7页,当前为第3页。 三相位交通灯设计电路和单片机部分 四相位交通灯 四相位交通灯相位图如下:(单向左转) 第一相位 第二相位 第三相位 第四相位 交通灯实验报告(1)全文共7页,当前为第4页。由相位图设计的电路图和单片机图如下: 交通灯实验报告(1)全文共7页,当前为第4页。 四相位电路图在东西南北方向各加了一组红绿灯来管理单向左转,来禁行或者通行。如相位图的第一相位显示:东西方向两个红灯变量值为0,表示亮灯,两个绿灯为1,表示灭灯,为东西向禁止通行包括左转;南北方向上,北方向上两红灯为0,两绿灯为1,同样禁行,南方向上两红灯变量值为1,两绿灯为0,表示通行,包括左转。其他相位见代码。 四相位的电路设计图和单片机图 八相位交通灯 八相位交通灯相位图如下: 第一相位 第二相位 第三相位 第四相位 交通灯实验报告(1)全文共7页,当前为第5页。 交通灯实验报告(1)全文共7页,当前为第5页。 第五相位 第六相位 第七相位 第八相位 由相位图设计的电路图和单片机图如下: 在八相位中,东南西北方向各加了一组红绿灯来管理左转方向,并且各路红绿灯都独立控制,独立显示。如图第二相位中:南北方向禁行,即各红灯变量值为0,表示亮灯,绿灯为1,表示灭灯;而在东西方向, 向东方向禁行,向西方向通行,即向东方向各红灯为0,亮灯,向西方向各绿灯为0,亮灯。其他相位见代码。 八相位电路设计图与单片机图 交通灯实验报告(1)全文共7页,当前为第6页。 交通灯实验报告(1)全文共7页,当前为第6页。 运行结果 首先,在Proteus中,通过对各不同相位图的理解,修改设计电路图。在Keil中,根据电路设计,定义各信号灯,通过代码的反复调试,正确后,生成.hex文件,在Proteus中,进行调用,实现功能。 通过实验检验,所有结果均正确,功能都实现。 任务分工 我们小组三人中,我主要负责四相位的电路设计以及编程工作。 体会感想 通过这次交通信号灯的课程设计,对于交通管理与控制的理念和技术思想有了进一步的理解,对于交通信号灯的控制原理有了全新的掌握,同时在过程中,锻炼了我的动手能力、分析能力、写作能力和团队协作精神,是学会了使用proteus和keil这两款软件。 同时在实验中,我们在添加新功能的点子中,发现了很多设计过程中的难题,特别是在左转灯中,我们
目 录 第一章 系统概述 1 1.1项目目的 1 1.2项目范围 1 第二章 设计要求与内容 2 2.1 设计要求 2 2.2 设计内容 2 第三章 设计方案 3 3.1 总体框图 3 3.2 定时器设计 3 3.3控制器的设计 4 3.4 总电路图 6 第四章 简单元器件 7 第五章 仿真与实现 8 结束语 10 参考文献 11 第一章 系统概述 1.1项目目的 运用和掌握所学的《数字逻辑与数字系统》的基本知识,使用电脑EWB仿真技术,独立完整地设计交通灯电路,以及仿真和调试等的综合能力。 通过指导学生循序渐进地独立完成数字电路的设计任务,加深学生对理论知识的理解,提高学生的动手能力,独立分析、解决问题能力,协调能力和创造性思维能力。提高学生在数字电路应用方面的实践技能,树立严谨的科学作风,培养学生综合运用理论知识解决实际问题的能力,学生通过电路的设计、安装、调试、整理资料等环节,初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。 本课程设计培养、启发学生的创造性思维,进一步理解数字系统的概念,掌握小型数字系统的设计方法,掌握小型数字系统的组装和调试技术,掌握查阅有关资料的技能。 1.2项目范围 该交通灯系统解决了现代城市交通控制与管理问题的现状,结合城乡交通的实际情况阐述了交通灯控制系统的工作原理,给出了一种简单实用的城市交通灯控制系统的硬件电路设计方案。随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。,然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与支道、城区同周边地区的交通拥堵状况。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sky.Grey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值