精华内容
下载资源
问答
  • 基于VHDL的交通灯设计(实训要求)

    千次阅读 多人点赞 2019-10-31 17:07:10
    本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱 的交通灯模块和七段码管中的任意两个来显示。系统时钟选择时钟模块的 1KHz 时钟,黄灯闪烁时钟要求为 2Hz,七段码管的时间显示为 1Hz 脉冲,即...

    简介

    本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱 的交通灯模块和七段码管中的任意两个来显示。系统时钟选择时钟模块的 1KHz 时钟,黄灯闪烁时钟要求为 2Hz,七段码管的时间显示为 1Hz 脉冲,即每 1s 中递减一次,在显示时间小于 3 秒的时候,通车方向的黄灯以 2Hz 的频率闪烁。系统中用 S1 按键进行复位。
    该设计基于vhdl程序设计,分别编译分频、计数、数码管、交通灯程序,然后将每个模块连接起来,构成一个系统,完成交通灯的功能实现。其交通灯的燃灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。
    结论:由这个设计可以得出,每一个模块都可以单独实现其功能,只要选好输入输出就可以将每个模块连接起来,构建成一个系统,从而综合的完成交通灯的功能。

    红绿灯路口模型

    在这里插入图片描述

    方案设计


    该系统主要由分为分频模块,计数器模块,交通灯控制模块,数码管控制模块构成。
    其中分频模块是将系统输入的基准时钟信号转换成1HZ和2HZ的激励信号,分别驱动计数模块计数和交通灯控制模块。交通灯控制模块根据计数情况,控制交通灯亮灭和蜂鸣器的声音。数码管控制模块根据计数模块将时间以倒计时的形式通过数码管显示出来。

    模块设计

    时钟模块

    模块


    从输入端clk输入1khz的时钟信号,经过内部程序设计,将其分为1hz和2hz的信号进行输出,实现了1khz转化到1hz的设计

    波形图测试


    从波形仿真中可以看出,经过了1k个时钟输入信号clk1hz才得到一次上升沿,也就是相当于,将1khz的信号变为了1hz的信号,同样clk2hz就是clk1hz的一半,在clk500次时得到一次上升沿,将1khz的信号转化为2hz信号。从而达到分频的目的

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity FreDevider is
      port (clk:in std_logic;
            clk2hz:out std_logic;--定义时钟输出
            clk1hz:out std_logic);--定义时钟输出
      end FreDevider;
      architecture behave of FreDevider is
            signal clk_count1: std_logic_vector(9 downto 0);
            begin 
              process(clk)
            begin 
              if(CLK'EVENT AND CLK='1')THEN--时钟上升沿
                 IF(clk_count1<1000)then
                 clk_count1<=clk_count1+1;--时钟加计数
              else
                 clk_count1<="0000000000";
              end if;
              END IF;
              end process;
            clk1hz<=clk_count1(9);
            CLK2HZ<=CLK_COUNT1(8);
          end behave;   
    

    计数模块

    模块


    将分频得到的1hz信号输入clk1hz提供时钟激励,外加一个rst复位按键,按下按键进行计数清零。输出sec1和sec10为数码管的个位和十位计数,dir_flag为模式转换的标志输出信号,当其为0时,代表横向通过,为1时代表纵向通过

    波形图测试


    从波形仿真中可以看出,当1hz信号每次上升沿来的时候个位进行计数加1,当个位加到9后,下一个上升沿来时十位计数加1。当十位完成一次1到0的转换时dir_flag改变一次,也就是发生一次标志位转换(横纵向)

    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    USE IEEE.STD_LOGIC_ARITH.ALL;
    USE IEEE.STD_LOGIC_UNSIGNED.ALL;
    ENTITY counter IS
    PORT (CLK1HZ:IN STD_LOGIC;
    RST:IN STD_LOGIC;
    SEC1,SEC10:BUFFER INTEGER RANGE 0 TO 9;   --缓冲区整数范围0 ~ 9;十进制组成 
    DIR_FLAG:BUFFER STD_LOGIC);   ----------方向  
    END counter;
    ARCHITECTURE BEHAVE OF counter IS
    SIGNAL DIR_FLAG1:STD_LOGIC;
    BEGIN
    PROCESS (CLK1HZ,RST)
    BEGIN
         IF (RST='0') THEN     ----------初始化
            SEC1<=0;
            SEC10<=0;
            DIR_FLAG<='0';
         ELSE IF (CLK1HZ'EVENT AND CLK1HZ='1') THEN    ---------上升沿
               IF (SEC1=0) THEN
                  SEC1<=9;
               IF (SEC10=0) THEN
                                -- 方向0 sec10 =1  方向1 sec10=5
                       SEC10<=1;
               ELSE
                   SEC10<=SEC10-1;       --sec10 !=0 减法运算
               END IF;   
               ELSE
                   SEC1<=SEC1-1;         --sec1!=0 减法运算
               END IF;
           END IF; 
           END IF;
           IF (SEC1=0 AND SEC10=0) THEN     --计算同时清零,交换方向
               DIR_FLAG<=NOT DIR_FLAG;
           END IF;
    END PROCESS;
    END BEHAVE; 
    
    

    数码管控制模块

    模块


    Sec1与sec10从计数模块获取数码管计数信号作为数码管的输入,dir_flag也是从计数模块中获取标志位转换作为输入,clk为1khz时钟信号,作为数码管驱动扫描信号。Display为7段译码管的输出,其内部程序中定义了“0”~“9”“横向”和“纵向”的显示。Seg_sel为数码管显示的位选输出,其内部定义了数码管的显示端。

    波形图测试


    由波形图仿真可以看到,当时钟来时dir_flag在低电平时,数码管位选为一个状态,高电平时为一个状态,display为数码管在0~32之间显示,完成了数码管的控制功能

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity dtsm is
       port(display:out std_logic_vector(6 downto 0);
         sec1,sec10:in integer range 0 to 9;
         dir_flag:in std_logic;
         clk:in std_logic;
         seg_sel:buffer std_logic_vector(2 downto 0));
    end dtsm;
      architecture behave of dtsm is 
      signal disp_temp: integer range 0 to 15;
      signal disp_decode: std_logic_vector(6 downto 0);
      signal direction: integer range 0 to 15;
      begin process(dir_flag)
      begin
        if(dir_flag='0') then 
        direction<=10;
      else
        direction<=11;
      end if;
      end process;
      process(seg_sel)
      begin case(seg_sel+1) is
     when "000"=>disp_temp<=direction;----0
     when "001"=>disp_temp<=direction;---1
     when "010"=>disp_temp<=sec10;----2
     when "011"=>disp_temp<=sec1;----- 3      数码管位选
     when "100"=>disp_temp<=direction;---4
     when "101"=>disp_temp<=direction;----5
     when "110"=>disp_temp<=sec10;---6
     when "111"=>disp_temp<=sec1;----7
    end case;
    end process;
    process(clk)
     begin if (clk'event and clk='1') then
              seg_sel<=seg_sel+1;
              display<=disp_decode;
              end if;
    end process;
    process (disp_temp)
      begin
        case disp_temp is 
      when 0=>disp_decode<="0111111";
      when 1=>disp_decode<="0000110";
      when 2=>disp_decode<="1011011";
      when 3=>disp_decode<="1001111";
      when 4=>disp_decode<="1100110";
      when 5=>disp_decode<="1101101";
      when 6=>disp_decode<="1111101";
      when 7=>disp_decode<="0000111";
      when 8=>disp_decode<="1111111";
      when 9=>disp_decode<="1101111";
      when 10=>disp_decode<="1001000";---横向
      when 11=>disp_decode<="0010100";-----纵向
      when others=>disp_decode<="0000000";
    end case;
    end process;
    end behave; 
    
    

    红绿灯控制模块

    模块


    Clk2hz为从分频模块获得的2hz时钟作为输入激励,sec1,sec10为计数模块作为输入控制,dir_flag为状态转换标志位,ret为复位控制键。R1,R2,为两路口的红灯控制,Y1,Y2为两路口黄灯控制,G1,G2为两路口绿灯控制,beep为蜂鸣器控制

    波形图测试


    从波形中可以看到,当时钟有效时,红黄绿三种灯根据计数的改变而改变,这里只设置了部分数,可以看到当计数在0~3附近时黄灯亮,当dir_flag为低电平时横向绿灯亮,纵向红灯亮,当dir_flag为高电平时纵向绿灯亮横向红灯亮。基本显示了路口红绿灯的功能

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity countroller is
     port(clk2hz:in std_logic;
          sec1,sec10:in integer range 0 to 9;
          dir_flag:in std_logic;
          rst: in std_logic;
          R1,R2:out std_logic;    --red
          Y1,Y2:out std_logic;       --yellow
          G1,G2:out std_logic;
          beep: out std_logic);        --green
      end countroller;
      architecture behave of countroller is
         begin process(clk2hz,rst)
         begin 
            if(rst='0')then        --fuwei    red 1  other 0 
               R1<='1';
               G1<='0';
               R2<='1';
               G2<='0';
              
             else                           ---- 
                if (sec10>0 or sec1>3 ) then
                    if(dir_flag='0') THEN
                   R1<='1';
                   G1<='0';
                   R2<='0';
                   G2<='1';
                else
                   R1<='0';
                   G1<='1';
                   R2<='1';
                   G2<='0';
                end if;
             else  if(dir_flag='0')then 
                   R1<='1';
                   G1<='0';
                   R2<='0';
                   G2<='0';
               else R1<='0';
                    G1<='0';
                    R2<='1';
                    G2<='0';
                 end if;
                 end if;
                 end if;
               end process;
             process(clk2hz)
            begin 
                    
                     if (sec10=0 and sec1<5 and dir_flag='0' )then
                         Y1<='0';
                         Y2<=clk2hz;
                         beep<=clk2hz;
                       elsif(sec10=0 and sec1<5)then
                         
                         Y1<=clk2hz;
                         beep<=clk2hz;
                         Y2<='0';
                       elsif(sec10=0 and (sec1<6 and sec1>3))then
                         Y1<='1';
                         Y2<='1';
                         beep<='1';
                     else 
                     Y1<='0';
                     Y2<='0';
                      end if;
                      end process;
                      end behave;
    
    

    整机电路图设计

    在这里插入图片描述
    各模块连接如上图3.9,加上输入输出,定义引脚仿真调试,成功后,写入试验箱验证功能

    调试

    在这里插入图片描述
    在这里插入图片描述

    总结:"本次实训过程十分艰辛,本想通过网络资源来修改代码,导致自己陷进去,没有自己的思路,使结果不能如愿,写代码还是要全程靠自己的思路写,不要想着取巧,可以说整个实训过程,我是处于非常被动的场面,本想投机取巧的找捷径,结果偷鸡不成,使自己晕头转向。就应该听老师的自己编写程序,这样还可以将程序简单化,自己理解起来也会轻松很多。总之本次实训,让我感受颇深,也让我对vhdl语言有了更加深刻的理解,在以后做项目中,我会铭记这次的教训,老老实实的自己敲程序,少走捷径,脚踏实地的写好自己程序,完成项目。 "

    展开全文
  • 0 引言  一个高效的单片机智能控制系统, ...道路交通灯是常见的一种多任务控制系统, 本文以此为例, 详细阐述了 51嵌入式实时操作系统 RTX51开发软件的方法和步骤。  1 系统硬件电路设计  交通信号灯控制系统主
  • EDA:交通灯控制的项目

    2010-05-30 10:30:35
    (4)设交通灯信号控制器用于主干道与支道公路的交叉路口,要求是优先保证主干道的畅通。因此,当主支干道均无车辆要求通行时应处于“主干道绿灯,支道红灯”状态,此时,若支干道有车辆要求通行,则允许其通行;若...
  • 0 引言  一个高效的单片机智能控制系统, ...道路交通灯是最常见的一种多任务控制系统, 本文以此为例, 详细阐述了 51嵌入式实时操作系统 RTX51开发软件的方法和步骤。  1 系统硬件电路设计  交通信号灯控制系统
  • 本课程设计以十字路口智能交通灯控制系统为要求,利用中断、计时、动态显示等方式,以AT89C51单片机为芯片,通过Kiel C和Proteus进行联合设计、仿真、调试,最终设计出拥有7个交通相位的交通灯控制系统,该系统并配...
  • 3. 每个项目的实际的项目要求和实现的现象我就不挨个去描述了,太多了!!40多个小项目。(一个包里面只有一个小项目哈) 4. 有的项目可能会有多个程序,因为用的代码有点差异,比如密码锁,就会分显示的数码管的...
  • 项目训练三 简易交通信号 一任务目标 设计一个简易的交通信号控制器其设计任务如下 某交通十字路口南北向为主干道东西向为支道每个道口安装一组信号每组信号有红黄绿3种信号各信号按以下规则循环显示交通...
  • 基于51单片机模拟交通灯程序

    千次阅读 多人点赞 2020-02-21 21:42:01
    基于51单片机模拟交通灯程序 系统概要:由于该交通系统设计一个十字路口,A道为主干道,B道为支干道。由于主干道的交通压力较大车流量大,所以A道的通行时间(即A道的绿灯与黄灯的时间应该比B道的绿灯与黄灯时间长)...

    基于51单片机模拟交通灯程序

    系统概要:由于该交通系统设计一个十字路口,A道为主干道,B道为支干道。由于主干道的交通压力较大车流量大,所以A道的通行时间(即A道的绿灯与黄灯的时间应该比B道的绿灯与黄灯时间长),只有A道的通行时间比B道的通行时间长才能合理的分配十字交通路口的交通压力。并且该系统应该有紧急的交通情况,也就是遇到交通的紧急情况,A道与B道的交通灯应该为红色,禁止A道与B道的车辆通过,使紧急车辆通过后。重新恢复到A道与B道红绿灯状态。在这里插入图片描述
    首先a道方向绿灯亮,b到方向红灯亮,同时开始计时60s,在段数码管上显示时间60秒倒数。当时间少于10s倒计时A道方向切换黄灯,B道依然为红灯。当60s倒计时结束后,A道方向黄灯开始转变为红灯,B道方向红灯开始转变为绿灯。并开始倒计时30秒,当时间少于5s时B道方向由绿灯转变为黄灯,A道方向还是红灯亮。当5s倒计时结束后B道黄灯转变为红灯,A道开始由红灯转变为绿灯。接着又开始循环以上步骤。应该还包含一个紧急车辆的情况,当有紧急车辆通过时,AB道都应该为红灯。(绿灯用亮3个灯,黄灯亮一个灯,红灯则不亮,紧急情况用按下按键K3)
    废话不多说直接上代码:

    #include<reg51.h>
    #define uchar unsigned char
    #define uint unsigned int
    
    sbit DU=P2^0;//段码锁存器开关
    //sbit DU1=P2^0;
    //sbit DU2=P2^0;
    sbit WE=P2^1;//位码锁存器开关
    sbit beep=P2^3;
    sbit gd=P2^2;
    
    //sbit B_red=P1^5
    
    sbit anniu=P3^2;
    
    unsigned int pp;
    unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,	 //0到6显示
                            0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//7到f显示
    uchar j,k,l=255;
    uchar a1,a0;
    uchar shijian,deng=1;
    void delay(unsigned int i) //位码的转换	3*5*125=1875ms=1.875s
    {
      for(j=i;j>0;j--)
        for(k=125;k>0;k--);
    }
    
    void display(unsigned char sh_c,unsigned char g_c)
    {  gd=0;
       DU=0;
       P0=table[sh_c]; //时间十位
       DU=1;
       DU=0;
       
       WE=0;
       P0=0xfe;
       WE=1;
       WE=0;
       delay(5);
       
       P0=table[g_c];//时间个位
       DU=1;
       DU=0;
       
       P0=0xfd;
       WE=1;
       WE=0;
       delay(5);
    }
    
    
    
    void int0(void) interrupt 0	//interrupt是声明函数为中断服务函数,0是编译器对中断的编号
    {							//外部中断0
    P1=0Xff;		            //特殊情况A,B道都为红灯
    while(anniu==0);            //低电频触发
    }
    
    
    
    
    
    
    void main()
    {
    	TMOD=0x01;//使用定时器T0的工作方式一
    	TR0=1;//使用定时器T0;
    	TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
    	TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
    	EA=1; //打开中断总允许
    	ET0=1;//定时器0允许位
    	EX0=1;//外部中断0允许位
    	PX0=1;//外部中断0优先级
    	PT0=1;//定时器0优先级
    	while(1)
    	{	
    		if(shijian==0)
    		{
    			switch(deng)
    			{
    			/*	case 0: shijian=50;		  //红灯
    						deng=1;
    						break;
    				case 1: shijian=15;		  //黄灯
    						deng=2;
    						break; */
    				case 1: shijian=60;	//A道行驶,B道禁止	  //绿灯
    						deng=2;
    						break;
    				case 2: shijian=30;	//A道禁止,B道行驶	  //黄灯
    						deng=1;
    						break;
    			}
    		}
    		if(pp==20)
    		{	pp=0;
    			shijian--;
    		}
    		a0=shijian%10; //时间个位
    		a1=shijian/10; //时间十位
    		display(a1,a0);
    		switch(deng)
    		{
    			/*case 1: /*P1=0X00;			 //红灯
    					break;
    					P1=0xde;
    					break;
    			case 2: 			//黄灯
    					/*if(shijian%2==0)
    					P1=0x00;
    					if(shijian%2==1)
    					P1=0xff;				  1
    					break;
    					P1=0xee;
    					break;*/	 
    			case 2: 		//绿灯
    					/*if(shijian%2==0)
    					P1=0x55;
    					if(shijian%2==1)
    					P1=0xaa;
    					break; */
    					P1=0xdc;
    					if(shijian<=10){ //当时间<=10,A道进入黄灯
    					P1=0xfe;
    					}
    					break;
    			case 1:	/*if(shijian%2==0)	  //黄灯
    					P1=0x00;
    					if(shijian%2==1)
    					P1=0xff;
    					break;*/
    					P1=0xe3;
    					if(shijian<=5){//当时间<=5,B道进入黄灯
    					P1=0xf7;
    					}
    					break;	
    		}
    	}
    }
    
    void time0() interrupt 1        //定时器T0溢出中断
    {	TH0=(65536-46080)/256;     //fc(计数器频率)=fosc(晶振频率)/12;
    	TL0=(65536-46080)%256;	  //T=1/f;T为周期;
    	pp++;					  //X=2的十六次方-T/T机;
    }
    

    本项目较为困难的是段位码、定时器和外部中断0的使用,多看几遍相信大家都能看懂
    如果大家想看整个完整项目可以到我博客上传资源那里下载链接如下:
    点击此处下载:(https://download.csdn.net/download/weiweiweiIT/12166055

    展开全文
  • 交通灯系统设计 educoder实训项目 logisim实现

    千次阅读 多人点赞 2021-01-26 23:16:03
    交通灯系统设计 educoder实训项目 logisim实现 第1关:7段数码管驱动电路设计 实验内容 在 logisim 中打开实验资料包中的TrafficLight.circ 文件,在数码管驱动子电路中实现对应功能。 ​ 框架内...

    交通灯系统设计 educoder实训项目 logisim实现


    代码等文件下载

    第1关:7段数码管驱动电路设计

    实验内容
    在 logisim 中打开实验资料包中的TrafficLight.circ 文件,在数码管驱动子电路中实现对应功能。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    ​ 框架内数码管驱动测试

    根据引脚绑定设置好真值表,然后生成电路。完成后利用文本编辑工具打开TrafficLight.circ 文件,将所有文字信息复制粘贴到 Educoder 平台代码区域,再点击评测按钮即可进行本关测试。

    第2关:四位无符号比较器设计

    实验内容

    设计实现四位无符号比较器,该电路有8个输入,真值表表项256项,用真值表实现过于繁琐,且容易出错,所以对于这类电路只能通过构建逻辑表达式的方式实现,仔细思考四位无符号比较器的逻辑表达式,利用logisim自动生成电路功能自动生成该电路。

    在这里插入图片描述

    L1=X3~Y3+~(X3^Y3)X2~Y2+~(X3^Y3)~(X2^Y2)X1~Y1+~(X3^Y3)~(X2^Y2)~(X1^Y1)X0~Y0
    
    L2=(~X3)Y3+~(X3^Y3)(~X2)Y2+~(X3^Y3)~(X2^Y2)(~X1)Y1+~(X3^Y3)~(X2^Y2)~(X1^Y1)(~X0)Y0
    
    L3=~(X3^Y3)~(X2^Y2)~(X1^Y1)~(X0^Y0)
    
    X3~Y3  :  X3比Y3大则输出为1
    ~(X3^Y3)  :  X3和Y3相等则输出为1
    

    3关:8位无符号比较器设计

    实验内容
    利用已经设计完成的四位无符号比较器构建8位无符号比较器。

    在这里插入图片描述

    要注意每一个分线端口应该对应哪一位,可以通过测试看哪个端口对应的线亮了判断,与上图类似!

    第4关:1位2路选择器设计

    实验内容
    利用基本逻辑门构成1位的2路选择器。

    Y=~Sel D0 + Sel D1

    在这里插入图片描述

    第5关:8位2路选择器设计;

    实验内容
    利用一位的2路选择器构建8位的2路选择器,请认真思考如何进行电路并发,如何构建电路绘图最简单。

    将1位选择信号Sel扩展到8位,然后根据表达式绘图
    Y=~Sel D0 + Sel D1

    在这里插入图片描述

    第6关:双向BCD码计数器状态机设计

    实验内容
    设计BCD双向计数器的状态机。

    C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210126204332097.png
    )]

    8421
    0000,0001,0010,0011,0100
    0101,0110,0111,1000,1001
    
    余3码
    0011~1100
    
    2421
    0000,0001,0010,0011,0100
    1011,1100,1101,1110,1111
    
    双向计数
    Mode=0
    0→1→2→3→4→5→6→7→8→9→0... 
    Mode=1
    9→8→7→6→5→4→3→2→1→0→9...
    

    利用 BCD双向计数逻辑自动生成.xlsx 生成逻辑表达式,然后复制表达式自动生成电路
    在这里插入图片描述在这里插入图片描述

    N3 N2 N1 N0
    
    ~S3&S2&S1&S0&~Mode+S3&~S2&~S1&~S0&~Mode+S3&~S2&~S1&S0&Mode+~S3&~S2&~S1&~S0&Mode
    
    ~S3&~S2&S1&S0&~Mode+~S3&S2&~S1&~S0&~Mode+~S3&S2&~S1&S0&~Mode+~S3&S2&S1&~S0&~Mode+S3&~S2&~S1&~S0&Mode+~S3&S2&S1&S0&Mode+~S3&S2&S1&~S0&Mode+~S3&S2&~S1&S0&Mode
    
    ~S3&~S2&~S1&S0&~Mode+~S3&~S2&S1&~S0&~Mode+~S3&S2&~S1&S0&~Mode+~S3&S2&S1&~S0&~Mode+S3&~S2&~S1&~S0&Mode+~S3&S2&S1&S0&Mode+~S3&S2&~S1&~S0&Mode+~S3&~S2&S1&S0&Mode
    
    ~S3&~S2&~S1&~S0&~Mode+~S3&~S2&S1&~S0&~Mode+~S3&S2&~S1&~S0&~Mode+~S3&S2&S1&~S0&~Mode+S3&~S2&~S1&~S0&~Mode+S3&~S2&~S1&~S0&Mode+~S3&S2&S1&~S0&Mode+~S3&S2&~S1&~S0&Mode+~S3&~S2&S1&~S0&Mode+~S3&~S2&~S1&~S0&Mode
    

    第7关:双向BCD码计数器输出函数设计

    实验内容
    设计BCD双向计数器的输出函数,生成计数器的进位借位信号,该输出信号与状态和输入信号有关。

    利用 真值表自动生成表达式.xlsx 生成逻辑表达式,然后复制表达式自动生成电路

    Cout
    正向计数时进位输出,即Mode=0、Q=9时Cout=1
    反向计数时借位输出,即Mode=1、Q=0时Cout=1
    
    S3&~S2&~S1&S0&~Mode+~S3&~S2&~S1&~S0&Mode
    

    在这里插入图片描述

    在这里插入图片描述

    第8关:双向BCD码计数器设计

    实验内容
    利用已经设计完成的BCD双向计数器的状态机、输出函数,采用D触发器构建最终的双向BCD计数器,该计数器支持异步预置功能,当预置控制位为1,直接将Din数据写入触发器中。

    用Di去控制对应触发器的置1端和置0端完成异步预置

    在这里插入图片描述

    第9关:两位BCD码双向计数器设计

    实验内容
    利用已经设计完成的BCD双向计数器,级联构建双位十进制双向计数器。

    低位计数到9,再次计数时,高位加一。高位计数一次应该由低位产生一次进位信号决定,即高位计数器的CLK信号上升沿是低位的进位由1变为0时!

    在这里插入图片描述

    第10关:交通灯核心状态机设计

    实验内容
    设计交通灯控制系统核心状态机。
    在这里插入图片描述
    该交通灯实现主道和辅道双向控制。
    各状态切换条件为T1~T4和Emerg

    利用 交通灯控制系统状态机逻辑自动生成.xlsx 生成逻辑表达式,然后复制表达式自动生成电路

    状态用3位二进制数表示000 001 010 011 100 分别代表状态S0,S1,S2,S3,S4

    在这里插入图片描述

    ~S2&~S1&~S0&EMERG+~S2&~S1&S0&EMERG+~S2&S1&~S0&EMERG+~S2&S1&S0&EMERG+S2&~S1&~S0&EMERG
    
    ~S2&~S1&S0&T2&~EMERG+~S2&S1&~S0&T3&~EMERG+~S2&S1&~S0&~T3&~EMERG+~S2&S1&S0&~T4&~EMERG
    
    ~S2&~S1&~S0&T1&~EMERG+~S2&S1&~S0&T3&~EMERG+~S2&~S1&S0&~T2&~EMERG+~S2&S1&S0&~T4&~EMERG
    

    第11关:交通灯输出函数设计

    实验内容
    设计交通灯控制系统状态输出函数,根据状态机的状态生成主道辅道红绿灯控制信号,以及当前道路通行情况。

    在这里插入图片描述

    S0状态:主道绿灯、辅道红灯
    S1状态:主道黄灯、辅道红灯
    S2状态:主道红灯、辅道绿灯
    S3状态:主道红灯、辅道黄灯
    S4状态:主道红灯、辅道红灯

    通过引脚绑定和各个状态的关系完成真值表,并利用交通灯状态输出函数真值表.xlsx生成逻辑表达式,然后复制表达式自动生成电路

    在这里插入图片描述

    R1 Y1 G1 R2 Y2 G2 Pass1 Pass2
    
    ~S2&S1&~S0+~S2&S1&S0+S2&~S1&~S0
    ~S2&~S1&S0
    ~S2&~S1&~S0
    ~S2&~S1&~S0+~S2&~S1&S0+S2&~S1&~S0
    ~S2&S1&S0
    ~S2&S1&~S0
    ~S2&~S1&~S0+~S2&~S1&S0
    ~S2&S1&~S0+~S2&S1&S0
    

    第12关:交通灯系统集成设计

    实验内容
    基于已经设计完成交通灯控制系统和新状态机,状态输出函数,以及前面完成的组合逻辑电路:数码管驱动器、8位无符号比较器,8位多路选择器,双位十进制双向计数器,设计一个十字路口交通灯控制系统。
    实验分析
    该系统主道辅道轮流通行,其中主道通行20s,然后辅道通行10s,依次循环。
    注意主道绿灯转红灯之前有3s的黄灯时间,同样辅道绿灯转黄灯之前也有3s的黄灯时间,倒计数时间应通过数码管部件进行显示。
    如果按下紧急按键,双向红灯,关闭紧急按键,则系统重新进入S0状态,也就是主道通行模式开始循环。

    实验步骤

    构建核心状态机数据通路,将状态寄存器,状态机,输出函数连接起来构成核心控制器系统,控制红绿灯信号。
    分别构建主道和辅道的倒计时电路,利用已经设计好的双位十进制双向计数器构建倒计时电路,要求利用系统复位信号自动预置通行时间,利用设计好的8位无符号比较器比较计数器输出值生成计时完成信号T1,T2,T3,T4,注意黄灯应该保持3秒,也就是三个时钟节拍。注意非当前道通行时,当前倒计时电路应该预置为初始值,当前道通行时,当前倒计时电路开始倒计时。
    构建倒计时电路显示模块,由于主道辅道显示时间一致,所以只保留一个显示模块,但显示模块要根据当前是主道通行还是辅道通行显示不同计数器的值,这里需要使用前面已经实现的多路选择器,和数码管驱动电路。
    系统联调,时钟频率调整为4HZ,ctrl+k驱动,测试系统功能。

    紧急情况会导致什么显示器一直在初状态,应该使RST一直为1

    主道倒计时初值在T4或者RST条件下会还原,辅道倒计时初值T2或者RST条件下会还原

    主道辅道Mode=1时倒计时

    模块,由于主道辅道显示时间一致,所以只保留一个显示模块,但显示模块要根据当前是主道通行还是辅道通行显示不同计数器的值,这里需要使用前面已经实现的多路选择器,和数码管驱动电路。
    系统联调,时钟频率调整为4HZ,ctrl+k驱动,测试系统功能。

    紧急情况会导致什么显示器一直在初状态,应该使RST一直为1

    主道倒计时初值在T4或者RST条件下会还原,辅道倒计时初值T2或者RST条件下会还原

    主道辅道Mode=1时倒计时

    在这里插入图片描述

    展开全文
  • 实验步骤 按照图填写真值表 生成电路 第12关:交通灯系统集成设计 实验内容 基于已经设计完成交通灯控制系统和新状态机,状态输出函数,以及前面完成的组合逻辑电路:数码管驱动器、8位无符号比较器,8位多路选择器...

    第1关:7段数码管驱动电路设计

    实验内容
    在 logisim 中打开实验资料包中的 RGLED.circ 文件,在数码管驱动子电路中实现对应功能。
    实验步骤
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    按照图示填真值表,填完后自动生成。
    在这里插入图片描述

    第2关:四位无符号比较器设计;

    实验内容
    设计实现四位无符号比较器,该电路有8个输入,真值表表项256项,用真值表实现过于繁琐,且容易

    展开全文
  • plc项目4.2【plc-交通灯顺控】ppt课件
  • 第11章 交通灯控制系统;引子;11.1 项目目标; 本项目的目标就是用NI PCI6221数据采集卡实现常见十字路口交通信号灯功能的模拟实现除要求有基本的红绿灯状态的改变同时要求有时间的倒计时显示要求可对各灯的时长可进行...
  • 利用《微型计算机技术》课程中所学的主要可编程接口芯片8251、8253、8255A和微机内部的中断控制器8259设计一个交通信号系统。
  • 经典面试项目--交通灯管理系统

    万次阅读 2013-09-23 04:10:16
    项目由来: 该项目原本是软通动力的一道面试题,交由面试者带回去自行完成,审核通过后即通过面试,当然现在不可能再作为面试题了。不过这个项目还是非常有实践意义的,在网络上传播广泛,从中我们可以学习面向对象...
  • 实验设备为HK3000T,利用双色灯模拟交通灯,器件有8255A 8253 8259, 程序在设备上完美运行,关于控制灯的控制字需要根据设备不同适当改变。
  • 二、设计要求: 设计一个十字路口交通灯控制器。用单片机控制LED灯模拟指示 具有基本交通灯功能; 分时段闪烁信号灯; 有重置按钮,回到交通灯的闪烁开始时候 三、资源内含: 设计总图、hex文件、.c文件等一系列...
  • [项目]交通灯管理系统  ASP.Net+Android+IO开发、.Net培训、期待与您交流! 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: Ø 异步随机...
  • 单片机直接控制东西方向和南北方向红、黄、绿信号灯的状态变化,将发光二极管接到单片机p1口上,利用单片机的定时器产生秒信号,控制十字路口的红绿黄灯交替点亮和熄灭,使四个路口的交通灯按照既定的功能要求进行有...
  • java交通灯管理项目

    2013-11-25 16:07:00
    java交通灯管理项目 交通灯管理需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: • 异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆---- 直行车辆 由西向而来去往南向的...
  • 这个课程设计是我花啦好多时间做出来的心血,是丁字路口的具体实现,考虑实际项目的成本问题,一共使用四个单片机(老师要求)。项目可以正常的运行,实在是良心的计算机妹妹,把我的项目,代码,课设的报告,答辩的...
  • 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆。 例如:  由南向而来去往北向的车辆—- 直行车辆  由西向而来去往南向的车辆—- 右转车辆  由东向而来去往南向的...
  • PLC实验:十字路口交通灯控制

    千次阅读 多人点赞 2020-12-16 20:47:10
    实验项目名称: 十字路口交通灯控制 一、面板图 二、实验控制要求 二、端口分配 四、实验程序梯形图
  • 实训一:四向交通灯 一 实验目的: 实验4:运用AT89C51芯片实现四向交通灯: (1) 掌握C语言编程单片机控制程序的方法。 (2) 掌握使用Keil4软件编写、编译、调试程序的方法。 (3) 掌握使用Proteus软件绘制电路...
  • LED模拟交通灯

    千次阅读 2014-12-24 19:37:20
    1.LED模拟交通灯(51,pic16f877A不限) 12只LED分东西向和南北向两组,各组指示灯均有相同的2只红色、2只黄色与2只绿色的LED. 要求模拟十字路口交通信号灯的切换过程与显示效果,绿灯亮,黄灯闪烁,红灯亮,交替...
  • 交通灯报告

    2021-08-08 23:23:19
    交通灯1、绪论1.1交通灯的背景1.1.1交通灯的历史1.1.2交通灯的出现1.2交通灯的意义2、系统方案设计与要求2.1单片机交通灯控制系统通行方案设计2.2单片机交通控制系统的功能要求2.2.1显示模块功能2.2.2 按键模块功能...
  • 本文是基于张孝祥Java视频做的总结,本人新手,不喜勿喷 需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向...
  • 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转...
  • 在Arduino开发板上设计红黄绿Led定时循环同步数码管显示,以数码管时间显示进行定时循环控制,要求红绿灯定时15秒,黄灯定时5秒。并在此基础之上设计串口通信键盘输入变量进行红黄绿LED定时修改(修改定时范围0~...
  • ava交通灯管理项目

    2012-07-24 16:12:04
    java交通灯管理项目 交通灯管理需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: • 异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆---- 直行车辆 由西向而来去往...
  • 1.交通灯管理系统的项目需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: Ø 异步随机生成按照各个路线行驶的车辆。 例如:  由南向而来去往北向的车辆 ---- 直行车辆  由西向而来去往南向的车辆...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,043
精华内容 2,417
关键字:

交通灯项目要求