VHDL交通灯控制器_实验报告

VHDL交通灯控制器_实验报告
VHDL交通灯控制器_实验报告

一、设计要求--------------------------------------------------------------------------------

二、设计目的--------------------------------------------------------------------------------

三、设计方案--------------------------------------------------------------------------------

四、设计程序---------------------------------------------------------------------------------

五、管脚分配---------------------------------------------------------------------------------

六、硬件下载实现现象描述------------------------------------------

七、体会、对设计工作的总结与展-------------------------------------------

一、设计要求:

①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)

是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。

②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、

红灯的持续时间分别是20s、5s和25s。

③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车

辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。

二、设计方案:

计数器的计数值与交通灯亮灭的关系如图1所示。

49

东西方向

南北方向

24

19

图1 计数值与交通灯亮灭的关系

显然,本课题的核心是一个计数范围为0~49(共50 s )的计数器和一个根据计数值做出规定反应的控制器。另外,所用实验箱配备的晶振为20MH z ,因此还需要一个分频电路。最后,要驱动七段数码管,显然还需要一个译码电路。 根据上面的分析,可以画出如图2所示的系统框图。

图2 交通灯控制器系统框图 2、计数器的设计

这里需要的计数器的计数范围为0~49。计到49后,下一个时钟沿回复到0,开始下一轮计数。此外,当检测到特殊情况(Hold=’1’)发生时,计数器暂停计数,而系统复位信号Reset则使计数器异步清0。

3、控制器的设计

控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数译管的分位译码电路。此外,当检测倒特殊情况(Hold=’1’)发生时,无条件点亮红色的发光二级管。

由于控制器要对计数值进行判断,很容易想到用IF语句来实现。本控制器可以有两种设计方法,一种是利用时钟沿的下降沿读取前级计数器的计数值,然后做出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动。这两种方法各有所长,必须根据所用器件的特性进行选择:比如有些FPGA有丰富的寄存器资源,而且可用于组合逻辑的资源则相对较少,那么使用第1种方法会比较节省资源;而有些CPLD的组合逻辑资源则相对较多,用第2种方法可能会更好。大家可尝试两种方法,比较一下哪种方法所用资源较少,然后在最后的方案中采用这个方法。

4、分位译码电路的设计

因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位十进制数,如25分为2和5,7分为0和7)。

与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。控制器中,引入了寄存器。

三、程序语言:

-----------交通灯带有点阵显示---------------------

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY jtd IS

PORT(

duan : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

-- 数码管显示bcd码from 100 to 91

hang,lie:out std_logic_vector(7 downto 0); -----点阵行输出和列输出

led,light_cs : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- 数码管和灯扫描led 6 5 2 1 || light 66 67 68 69

led_no: OUT STD_LOGIC_VECTOR(1 DOWNTO 0); -- 4 3 light : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--灯72 70 71

B1eep : OUT STD_LOGIC; -- 7

clk,jinji : IN STD_LOGIC

-- 频率输入和紧急处理端-----

);

END jtd;

ARCHITECTURE one OF jtd IS

SIGNAL clk_1k,clk_1 : STD_LOGIC;

SIGNAL cnt4 : INTEGER RANGE 0 TO 3; ------------用于计数--------------

SIGNAL num,num1,num2,num3,num4 : INTEGER RANGE

0 TO 9;

SIGNAL L1,L2: STD_LOGIC_VECTOR(2 DOWNTO 0);---------灯显示---------------

SIGNAL time1,time2: INTEGER RANGE 0 TO 25;--------------时间显示--------------

signal t:std_logic_vector(2 downto 0); -----点阵信号传输

signal q:std_logic_vector(1 downto 0);---------点阵输出显示信号--------

BEGIN

led_no<="11";------------把数码管第三第四位屏蔽---------------

------1KHz频率输出--------------------------

process(clk)

variable cnt1: integer range 0 to 250;

variable cnt2: integer range 0 to 100;

Begin

if clk'event and clk='1' then

if cnt1=250 then

cnt1:=0;

if cnt2=100 then

cnt2:=0;

clk_1k<=not clk_1k;

else

cnt2:=cnt2+1;

end if;

else

cnt1:=cnt1+1;

end if;

end if;

end process;

-----------------点阵扫描-----------

process(clk_1k)

variable count:integer range 0 to 8;

begin

if clk_1k'event and clk_1k='1' then

if count<=8 then ------count数用于循环扫描行用if count=8 then

count:=0;

end if;

case count is

when 0 => hang<="00000001";t<="000";------扫描第一行,并把t赋予000 由于信号t的变化触发下一个进程

when 1 => hang<="00000010";t<="001";------扫描第二行

when 2 => hang<="00000100";t<="010";------扫描第三行

when 3 => hang<="00001000";t<="011";

when 4 => hang<="00010000";t<="100";

when 5 => hang<="00100000";t<="101";

when 6 => hang<="01000000";t<="110";

when 7 => hang<="10000000";t<="111";

when others =>hang<="00000000";t<="000";

end case;

count:=count+1;

end if;

end if;

end process;

----------------------------

process(t)

variable shu:integer range 0 to 7;

begin

case t is -----根据t的值去查表

when "000" => shu:=0;

when "001" => shu:=1;----变量的赋值是立即发生的

when "010" => shu:=2;

when "011" => shu:=3;

when "100" => shu:=4;

when "101" => shu:=5;

when "110" => shu:=6;

when "111" => shu:=7;

when others =>null;

end case;

case q is-----再根据相应的值送到列上去when "01"=>case shu is

when 0 => lie<="11111111";

when 1 => lie<="11111111";

when 2 => lie<="11111111";

when 3 => lie<="10111101";

when 4 => lie<="00000000";

when 5 => lie<="10111101";

when 6 => lie<="11111111";

when 7 => lie<="11111111";

when others =>lie<="11111111";

END CASE;

when "10"=>case shu is

when 0 => lie<="11101111";

when 1 => lie<="11000111";

when 2 => lie<="10000011";

when 3 => lie<="11101111";

when 4 => lie<="11101111";

when 5 => lie<="10000011";

when 6 => lie<="11000111";

when 7 => lie<="11101111";

when others =>lie<="11111111";

END CASE;

when "11"=>case shu is

when 0 => lie<="00111100";

when 1 => lie<="00111100";

when 2 => lie<="11011011";

when 3 => lie<="11100111";

when 4 => lie<="11100111";

when 5 => lie<="11011011";

when 6 => lie<="00111100";

when 7 => lie<="00111100";

when others =>lie<="11111111";

END CASE;

when others=>null;

end case;

end process;

-------------1s分频加计数-------------------

PROCESS(clk_1k)

V ARIABLE count_1k : INTEGER RANGE 0 TO 499;

BEGIN

IF clk_1k'EVENT AND clk_1k='1' THEN

IF cnt4=3 THEN

cnt4<=0;

ELSE

cnt4<=cnt4+1;

END IF;

IF count_1k=499 THEN

count_1k:=0;

clk_1<= NOT clk_1;

ELSE

count_1k:=count_1k+1;

END IF;

END IF;

END PROCESS;

-----------------倒计时和灯显示-----------------------

PROCESS(cnt4,L1,L2,time1,time2)

BEGIN

CASE time1 IS -------------输出时间1------------

WHEN 0 TO 9 => num1<=0;

WHEN 10 TO 19 => num1<=1;

WHEN 20 TO 25 => num1<=2;

WHEN OTHERS => num1<=0;

END CASE;

num2<=time1 REM 10; ------------取余-----

CASE time2 IS

WHEN 0 TO 9 => num3<=0;

WHEN 10 TO 19 => num3<=1;

WHEN 20 TO 25 => num3<=2;

WHEN OTHERS => num3<=0;

END CASE;

num4<=time2 REM 10;

CASE cnt4 IS

WHEN 0 =>

led<="1110"; -------------动态扫描数码管(从右到左)--------

num<=num1;

light_cs<="1110";

light<=L1;

WHEN 1 =>

led<="1101";

num<=num2;

light_cs<="1101";

light<=L2;

WHEN 2 =>

led<="1011";

num<=num3;

light_cs<="1011";

light<=L1;

WHEN 3 =>

led<="0111";

num<=num4;

light_cs<="0111";

light<=L2;

WHEN OTHERS =>

led<="1111";

light_cs<="1111";

END CASE;

END PROCESS;

--------------------译码------------------------

PROCESS(num)

BEGIN

CASE num IS

WHEN0=>duan<="00111111";

------0到9-------------

WHEN 1=>duan<="00000110";

WHEN 2=>duan<="01011011";

WHEN 3=>duan<="01001111";

WHEN 4=>duan<="01100110";

WHEN 5=>duan<="01101101";

WHEN 6=>duan<="01111101";

WHEN 7=>duan<="00000111";

WHEN 8=>duan<="01111111";

WHEN 9=>duan<="01101111";

WHEN OTHERS=>duan<="00000000";

END CASE;

END PROCESS;

--------------------------------------

PROCESS(clk_1)

V ARIABLE i,j : INTEGER RANGE 0 TO 2 :=0;

V ARIABLE w: INTEGER RANGE 0 TO 1 :=0;

BEGIN

IF clk_1'EVENT AND clk_1='1' THEN

IF jinji='0' then ----------------判断是否要紧急制动------------

IF time1=0 THEN

IF i=2 THEN

i:=0;

ELSE

i:=i+1;

END IF;

CASE i IS

WHEN 1 =>

time1<=20;

L1<="001";

B1eep<='0';

WHEN 2 =>

time1<=5;

L1<="010";

B1eep<='1';

WHEN 0 =>

time1<=25;

L1<="100";

B1eep<='0';

q<="01"; --------------点阵显示前进方向-----------

WHEN OTHERS =>

time1<=24;

END CASE;

ELSE

time1<=time1-1;

END IF;

IF time2=0 THEN

IF j=2 THEN

j:=0;

ELSE

j:=j+1;

END IF;

CASE j IS

WHEN 1 =>

time2<=25;

L2<="100";

B1eep<='0';

q<="10"; --------------点阵显示前进方向-----------

WHEN 2 =>

time2<=20;

L2<="001";

B1eep<='0';

WHEN 0 =>

time2<=5;

L2<="010";

B1eep<='1';

WHEN OTHERS =>

time2<=24;

END CASE;

ELSE

time2<=time2-1;

END IF;

else ------------------出现紧急制动情况的表现-----------

B1eep<='1';

time1<=0;

time2<=0;

q<="11";

IF w=1 THEN

w:=0;

ELSE

w:=w+1;

END IF;

CASE w IS ---------------红灯的闪烁--------------

WHEN 1 =>

L1<="100";

L2<="100";

WHEN 0 =>

L1<="000";

L2<="000";

end case;

end if;

END IF;

END PROCESS;

END one;

四、管脚分配

五、硬件下载实现现象描述

硬件上的实现是

(1)、东西方向的绿灯,跟黄灯亮25s时,南北方向亮着红灯,当南北方向红灯亮到25s时,将变成绿灯,而在东西方向黄灯亮5s时蜂鸣器同时响5s,

(2)、而与此同时,一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的

持续时间分别是20s、5s和25s。

(3)、点阵也会显示出东西,南北方向通行是的指示标。

(4)、当拨码开关拨表示出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上

均是红灯亮,倒计时停止,且显示数字在闪烁,点阵

出现X禁止通行的标号。当特殊运行状态结束后(即拨

回拨码开关),控制器恢复原来状态,继续正常运行。六:体会、对设计工作的总结及展望

这次的交通灯控制器是将点阵,彩灯,数码管的程序结合

起来编写的,刚开始是真的觉得很难,但是通过慢慢的分析开来,最后终于成功了。

哈工大FPGA设计与应用分频器设计实验报告

FPGA设计与应用 分频器设计实验报告 班级:1105103班 姓名:郭诚 学号:1110510304 日期:2014年10月11日

实验性质:验证性实验类型:必做开课单位:电信院学时:2学时 一、实验目的 1、了解Quartus II软件的功能; 2、掌握Quartus II的HDL输入方法; 3、掌握Quartus II编译、综合、适配和时序仿真; 4、掌握Quartus II管脚分配、数据流下载方法; 5、了解设计的资源消耗情况; 6、掌握分频器和计数器的实现原理; 7、掌握数码管的静态和动态显示原理 二、实验准备(1分) 2.1 EP2C8的系统资源概述 逻辑单元8,256 M4K RAM 块(4k比特+512校验比特) 36 总的RAM比特数165,888 嵌入式乘法器18 锁相环PLLs 2

2.2 工程所用到的FPGA引脚及功能说明 工程所用到的FPGA引脚及功能说明: PIN_23是时钟引脚; PIN_114 PIN_117 PIN_127 PIN_134是数码管的位选引脚; PIN_133 PIN_116 PIN_110 PIN_112 PIN_128 PIN_118 PIN_115是数码管段选信号引脚;实验所用的LED是共阴级连接 2.3 数码管的动态显示原理 动态显示是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O 线控制,当输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于FPGA对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

杭州电子科技大学数电大作业实验报告电子琴

数电大作业实验报告如图是CODE3的case语句程序,该模块是一个编码器,即将输入的8位琴键信号进行编码,输出一个4位码,最多能对应16个音符(若有16个键)。 如图所示是INX2CODE的case语句程序,该模块是一个译码器,它将来自键盘输入的编码信号译码成数控分频器SPK0输出信号的频率控制字。 另外两个模块是M_CODE和DCD7SG,它们的case语句程序如上图所示。前者的功能是将来自CODE3的键盘编码译成简谱码和对应的音调高低值H,后者是一个数码管7段显示译码器,负责将简谱码译成数码管的显示信号。 如图所示是SPK0模块的内部结构。其中的计数器CNT11B是一个LPM宏模块,这是一个11位二进制加法计数器。在设置其结构参数时,应该选择同步加载控制,即sload(Synchronous Load),这样能较好地避免来自进位信号cout中可能的毛刺影响。异步加载aload极易受到随机窄脉冲的误触发,在此类电路中不宜采用。图中D触发器和反相器的功能是将用于控制加载的进位信号延迟半个时钟周期,一来也是为了滤除可能的毛刺,以免对加载更为可靠,因为这时,时钟上升沿正好处于加载脉冲的中点。 模块CODE3,INX2CODE和SPK0的主要工作过程是这样的: 当按琴键后,产生的数据经编码器获得一个编码(例如,当按下第二个键,对应0010,即2),它对应模块INX2CODE中的一个值(2对应390H)。当这个值(如390H)被置入模块SPK0中的11位可预置计数器中后。由于计数器的进位端与预置数加载段端相连,导致此计数器将不断以此值作为计数起始值,直至全1。

以下以预置值为390H为例,来计算SPK0输出信号的频率值。 当以390H为计数器起始值后,此计数器成为一个模(7FFH-390H=46FH=1135)的计数器。即每从CLK端输入1135个脉冲,BEEP端输出一个进位脉冲。由于输入的时钟频率是1MHz (周期是1us),于是BEEP输出的信号频率是1/(1135us)=841Hz。 由下面电子琴的顶层电路可见,SPK0的输出信号经过一个由D触发器接成的T’触发器后才输出给蜂鸣器。这时信号被作了二分频,于是,预置值390H对应的与蜂鸣器发音的基频F 约等于440Hz。 B 电子琴顶层电路中T’触发器有两个功能,一个作用是作二分频器;另一个作用是作为占空比均衡电路。这是因为由SPK0模块输出信号的脉宽极窄,功率极低,无法驱动蜂鸣器,但信号通过T’脉宽就均匀了(F 的占空比为50%)。 B 如图所示是电子琴顶层设计电路,含2个输入口和3个输出口。 1.工作时钟CLK,频率:1MHz。用于在主控模块中产生与琴键对应的振荡频率,以驱动蜂 鸣器发出相应的声音。 2.琴键输入DIN[7..0].8个音符,8位中只能有一位为0,即8个琴键中每一时刻只能按 一个键。 3.输出端口SPK0用于驱动蜂鸣器。 4.输出信号LED接数码管,用于显示对应的简码谱。H显示音高低。

PLC实验报告(交通灯控制系统)

交通灯控制系统 一、实验目的 (1)用PLC构成十字路口交通灯控制系统。 (2)掌握程序调试的步骤和方法。 (3)掌握构建实际PLC控制系统的能力。 二、实验要求 (1)复习PLC常用指令的功能及用法。 (2)复习PLC程序设计的一般方法。 (3)根据实验要求提前编写程序,待上机验证调试修改。 三、实验环境 软件:STEP 7-Micro_WIN V40+ SP9:S7-200的编程软件 STEP 7-Micro_WIN V32指令库 硬件:THSMS-2A型PLC实验箱(西门子)、电脑、连接导线、USB-PPI 通信电缆 四、实验内容及步骤 交通灯控制系统面板图如上图所示,控制要求如下: 交通信号灯受一个总控制开关控制,当总控制开关接通时,信号灯系统开始工作。 开始工作后,南北红灯和东西绿灯同时点亮,4秒后东西绿灯开始闪烁,闪烁2秒后熄灭,熄灭同时切换成东西黄灯亮,2秒后东西黄灯和南北红灯同时熄灭,东西红灯和南北绿灯同时点亮。4秒后南北绿灯开始闪烁,闪烁2秒后熄灭,熄灭同时切换成南北黄灯亮,2秒后南北黄灯和东西红灯同时熄灭,再次切换成南北红灯和东西绿灯同时点亮。如此循环,周而复始。 当总控制开关断开时,所有信号灯都熄灭。

(1)确定I/O点数。列出详细的I/O地址分配表。如(该表仅为举例, (3)输入编好的PLC控制程序。 (4)运行程序,按控制要求设置各输入量,观察PLC运行情况,记录南北、东西各灯顺序亮、灭的运行情况。调试程序直至正确为止。 解:由题目要求得,

②梯形图如下图①,语句表如下图②,时序图如下图③: 图①图① 图②图② 图③ 五、注意事项

单片机交通灯实训报告

机电工程学院课程设计报告 课程名称:单片机课程设计 专业班级: 13电本2班 学号: 2013041632 学生:罗炜 指导教师:王清辉、何文丰 完成时间: 报告成绩:

交通灯设计 一、设计任务与要求 设计基本要求: (1)车辆通行繁忙的十字交叉路口,设计一交通灯控制器,设东西方向通行时间为30秒,当剩余3秒时黄灯亮,南北方向通行时间为20秒,当剩余3秒时黄灯亮。(2)东西、南北方向各用三个(绿、黄、红)LED表示,并用数码管显示东西、南北方向的剩余时间。 (3)可利用按键修改时间参数,可以利用按键切换东西南北交通灯的当前状态(即立刻东西由红变绿,南北有绿变红,并按设定的时间工作)。 二、方案设计与论证 表2-1:交通灯的工作状态表 根据表2-1所示可将交通灯的工作状态设为以下几个步骤: 1、初始状态时即为东西方向绿灯通行27秒+3秒黄灯,此时南北红灯亮。 2、随后是南北方向绿灯通行17秒+3秒黄灯,此时东西红灯亮。 3、通过按模式选择键一次来切换东西南北交通灯的当前状态。(通过设置定时计时器T1实现交通灯的计时) 4、通过按模式选择键第二次切换至南北方向红绿灯的计时设置,通过加减按键来确定南北方向红绿灯的计时数。 5、确定南北方向计数值后,通过按模式选择键第三次切换至东西方向红绿灯的计

时设置,通过加减按键来确定东西方向红绿灯的计时数。 6、确定交通灯计时数后再按下模式选择键后,交通灯便进入工作状态。 时间计时的实现:采用定时中断实现秒的精确计时(详细方案入下列程序设计所示)。 按键输入的实现:通过编写按键读取函数,来实现交通灯的状态以及时间值得设定(详细方案入下列程序设计所示)。

分频器实验报告

分频器实验报告 分频器实验报告 start simulation直至出现 simulation as suessful,仿真结束。观察仿真结果。 时序仿真 图 : 六.实验过程所出现的问题及其解决 通过本次实验,初步掌握了语言的初步设计,收获颇多。但在实验过 程中也遇到了许多的问题,通过自己的独立思考和老师同学的相互讨 论对这个实验有了进一步的了解和认识。在最初建立工程的地方出现 了不少问题,因为没有详细阅读教材,导致无法成功建立工程运行程 序,最后认真熟读教材后,解决了问题。通过对错误的分析和解决, 让自己更好的掌握这一软件的基础操作,为下一次试验打下了见识的 基础。篇五: 八位十进制分频器实验报告 重庆交通大学信息科学与工程学院综合性实 验报告 姓名: 赵娅琳学号 10950214 班级:

通信工程专业201X级 2班 实验项目名称: 8位16进制频率及设计 实验项目性质: 设计性 实验所属课程: 数字设计基础 实验室 BEGIN IF CLKK'EVENT AND CLKK='1' THEN --1Hz时钟2分频 Div2CLK <= NOT Div2CLK; END IF; END PROCESS; PROCESS BEGIN IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1'; --产生计数器清零信号 ELSE RST_CNT <='0'; END IF; END PROCESS; Load <= NOT Div2CLK; CNT_EN <= Div2CLK; END behav; 3、十进制计数模块

EDA实验报告

实验一计数器设计 一、实验目的 计数器是实际中最为常用的时序电路模块之一,本实验的主要目的是掌握使用HDL描述计数器类型模块的基本方法。 二、实验仪器与器材 1.EDA开发软件一套 2.微机一台 3.实验开发系统一台 4.其他器材与材料若干 三、实验说明 计数器是数字电路系统中最重要的功能模块之一,设计时可以采用原理图或HDL语言完成。下载验证时的计数时钟可选连续或单脉冲,并用数码管显示计数值。 四、实验要求 1.设计一个带有计数允许输入端、复位输入端和进位输入端的十进制计数器。 2.编制仿真测试文件,并进行功能仿真。 3.下载并验证计数器功能。 4.为上述设计建立元件符号。 5.在上述基础上设计计数器。 五、实验结果

十进制计数器程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter10 is port(en,reset,clk:in std_logic; q:buffer std_logic_vector(3 downto 0); co:out std_logic); end counter10; architecture behav of counter10 is begin process(clk,en) begin if clk'event and clk='1' then if reset='1' then q<="0000"; elsif en='1' then if q<"1001" then q<=q+'1'; else q<="0000"; end if; end if; end if; end process;

数字系统课程设计-交通灯控制器实验报告

交通灯控制器 ——数字系统设计报告 姓名: 学号:

一.实验目的 1.基本掌握自顶向下的电子系统设计方法 2.学会使用PLD和硬件描述语言设计数字电路,掌握 Quartus II等开发工具的使用方法 3.培养学生自主学习、正确分析和解决问题的能力 二.设计要求 我所选择的课题是用Verilog HDL实现交通灯控制器。该课题的具体内容及要求如下: 主干道与乡村公路十字交叉路口在现代化的农村星罗棋布,为确保车辆安全、迅速地通过,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。红灯禁止通行;绿灯允许通行;黄灯亮则给行驶中的车辆有时间行驶到禁行线之外。主干道和乡村公路都安装了传感器,检测车辆通行情况,用于主干道的优先权控制。 (1)当乡村公路无车时,始终保持乡村公路红灯亮,主干道绿灯亮。 (2)当乡村公路有车时,而主干道通车时间已经超过它的最短通车时间时,禁止主干道通行,让乡村公路通行。主干道最短通车时间为25s 。 (3)当乡村公路和主干道都有车时,按主干道通车25s,乡村公路通车16s交替进行。 (4)不论主干道情况如何,乡村公路通车最长时间为16s。 (5)在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时

间的黄灯作为过渡。 (6)用开关代替传感器作为检测车辆是否到来的信号。用红、绿、黄三种颜色的发光二极管作交通灯。 (7)要求显示时间,倒计时。 (C表示乡村道路是否有车到来,1表示有,0表示无;SET用来控制系统的开始及停止;RST是复位信号,高电平有效,当RST=1时,恢复到初始设置;CLK是外加时钟信号;MR、MY、MG分别表示主干道的红灯、黄灯和绿灯;CR、CY、CG分别表示乡村道路的红灯、黄灯和绿灯,1表示亮,0表示灭) 系统流程图如下:(MGCR:主干道绿灯,乡村道路红灯;MYCR:主干道黄灯,乡村道路红灯;MRCG:主干道红灯,乡村道路绿灯;MRCY:主干道红灯,乡村道路黄灯;T0=1表示主干道最短通车时间到,T1=1表示5秒黄灯时间到,T2=1表示乡村道路最长通车时间到。)

单片机实验三(急救车与交通灯)

单片机技术与应用 实验报告 实验名称:外部中断实验(急救车与交通灯)班级:11062811 学号:11061118 姓名:吕琳涛 指导老师:谷雨 2013年5月20日

1. 实验要求 由以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理,并允许急救车优先通过的要求。有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验以按键为中断申请,表示有急救车通过。 2. 实验目的 1.学习外部中断技术的基本使用方法。 2.学习中断处理程序的编程方法。 3. 程序说明: 在本次实验中,我们可以确定外部中断的作用是用于有救护车行驶过来时对程序的进行的简单的控制。对于正常的红绿灯的亮灭我们可以参考第一个实验中流水灯的设计理念。综上所述我们这一次的实验就是流水灯与外部中断的结合。 通过对七种情况的罗列 1 0 0 1 0 1 1 0 南北绿,东西红 0 1 1 0 1 0 0 1 南北红,东西绿 1 0 0 1 1 1 1 1 只亮东西红 0 1 1 0 1 1 1 1 只亮南北红 0 0 0 0 0 1 1 0 南北黄,东西红 0 0 0 0 1 0 0 1 南北红,东西黄 0 0 0 0 1 1 1 1 全红 我们可以利用XBYTE[0xf200]这个函数对这几种情况进行读取与显

示,在不同情况进行显示的过程中我们用以前的delay函数进行时间上的规划从而达到依次显示的效果。 0x0f 全红XBYTE[0xf200]=0x0f; 0x96 南北绿,东西红XBYTE[0xf200]=0x96; 0x9f 只亮东西红XBYTE[0xf200]=0x9f; 0x06 南北黄,东西红XBYTE[0xf200]=0x06; 0x69 南北红,东西绿XBYTE[0xf200]=0x69; 0x6f 只亮南北红XBYTE[0xf200]=0x6f; 0x09 南北红,东西黄XBYTE[0xf200]=0x09; 在具体的实验代码编写过程中,我们会用到EA=1;EX0=1;IT0=1;用于设定外部中断0为跳变沿触发方式,默认为电平触发方式。interrupt 0函数是处理有救护车驶过时的情况。 至此,程序编写完成,放入软件中进行编译和下载。

八位十进制分频器实验报告

重庆交通大学 信息科学与工程学院 综合性实验报告 姓 名: 赵娅琳 学 号 10950214 班 级: 通信工程专业2010级 2班 实验项目名称: 8位16进制频率及设计 实验项目性质: 设计性 实验所属课程: 数字设计基础 实验室(中心): 现代电子实验中心 指 导 教 师 : 李 艾 星 实验完成时间: 2012 年 6 月 18 日

教师评阅意见: 签名:年月日 实验成绩: 一、课题任务与要求 1、验证8位16进制频率计的程序; 2、根据8位16进制频率计的程序设计8位10进制频率计; 二、设计系统的概述 频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率,通常情况下计算每秒内待测的脉冲个数,此时闸门时间为1秒,闸门时间也可以大于或小于1秒。频率信号易于传输,抗干扰性强,可以获得较好的测量精度。 数字频率计的关键组成部分包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包括脉冲发生器、姨妈驱动电路和显示电路。 工作过程:系统正常工作时,脉冲信号发生器输入1HZ的标准信号,经过测频控制信号发生器的处理,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。测量信号时,将被测信号通过计数器作为时钟。当技术闸门信号高平有效时,计数器开始计数,并将计数结果送入锁存器中。设置锁存器的好处是现实的数据稳定,不会由于周期的清零信号而不断闪烁。最后将所存的数值由外部的译码器并在数码管上显示。 三、单元电路的设计与分析(重点描述自己设计部分) 1、八位十进制计数顶层模块设计 (1)、此模块是元件例化语句将各个元件(测频控制模块、十进制计数模块、测频锁存器模块)连接形成一个整体,完成最终频率计所期望的功能。

电子琴实验报告乐曲硬件演奏电路设计本科论文

武夷学院实验报告 课程名称:逻辑设计与FPGA 项目名称: 乐曲硬件演奏电路设计 ______________ 姓名: 专业:微电子学 班级:14微电子 学号:04实验日期 、 实验预习部分: 1. 实验目的: 学习利用数控分频器设计硬件乐曲演奏电路。 2. 实验原理: 综合利用数控分频器、LPM ROMPLL 等单元电路设计硬件乐曲演奏电路。系统框图如图 1 所示由三个模块组成,分别为 NOTETABSTONETABASPEAKERA NOTETAB 模块(把教材图9-4中的CNT138T 和MUSIC 模块合在一起即为此模块)类似于弹 琴人的手指;TONETAB 模块类似于琴键;SPEAKER 类似于琴弦或音调发生器。 音符的频率由SPEAKER 模块(与教材图9-4中的SPKEF 模块对应)获得,这是一个数控分 频器。由其CLK 端输入一具有较高频率(12MHZ 的信号,通过SPEAKER 分频后由SPKOU 输出。 SPEAKER 对CLK 输入信号的分频比由11位预置数TONE[10..0]决定。SPKOU 的输出频率将决定 每一音符的音调,这样,分频计数器的预置值 TONE[10..0]与SPKOU 的输出频率就有了对应关 系。例如在TONETAB 模块(与教材图9-4中的F_COD 模块对应)中若取 TONE[10..0] = 1036, 图1硬件乐曲演奏电路结构框图 i.;E-Z

将发出音符“ 3”音的信号频率。

实验预习成绩(百分制)____________________ 实验指导教师签字:_________________________

EDA实验报告实验五:交通灯控制器设计

实验五十字路口交通灯控制器设计一.实验目的 1.进一步加强经典状态机的设计 2.学会设计模可变倒计时计数器 二.实验要求 一条主干道,一条乡间公路。组成十字路口,要求优先保证主干道通行。有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;交通灯由绿→红有4秒黄灯亮的间隔时间,由红→绿没有间隔时间;系统有MRCY、MRCG、MYCR、MGCR四个状态; 乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号S=1,其余时间S=0; 平时系统停留在MGCR(主干道通行)状态,一旦S信号有效,经MYCR(黄灯状态)转入MRCG(乡间公路通行)状态,但要保证MGCR的状态不得短于一分钟;一旦S信号无效,系统脱离MRCG状态。随即经MRCY(黄灯状态)进入MGCR 状态,即使S信号一直有效,MRCG状态也不得长于20秒钟。 三.实验设计: 1.一条主道,一条乡道,组成十字路口,要求优先保证主道通行。 2.当主道没有车通行,且乡道友车要通行时,并且此时主道通行时间大于1分钟,则主道变黄灯,乡道保持红灯,经过4秒倒计时时间进入主道为红灯乡道为绿灯的状态。再倒计时20秒钟。在倒计时过程中,若乡道突然没有车通行,马上进入主道红灯,乡道黄灯状态,倒计时4秒。 3.之后主道变为绿灯,乡道为红灯,这时无论乡道有无车通行都要倒计时60秒,然后若乡道有车通行则主道为黄灯,乡道为红灯,若乡道一直没有车要通行则保持主道通行,若乡道友车通行则按照上面的状态依次进行转换。 按照以上的思路,设计两个底层文件和一个顶层文件: 1.模块1是状态改变控制6盏灯的亮与灭。

VHDL非整数分频器设计实验报告

非整数分频器设计 一、 输入文件 输入时钟CLK: IN STD_LOGIC 二、 设计思路 1. 方法一:分频比交错 (1) 确定K 值 先根据学号S N 确定M 和N :为了保证同学们的学号都不相同,取学号的后四位,即N S =1763 ()mod 1920(mod 17)0 17mod 17 S S S N N if N then M else M N =+=== 由以上公式,得N=(1763 mod 19)+20=35 M=(1763 mod 17)=12 然后根据下式计算分频比K 的值: 8()9N M M K N -+= = =8.34285714 (2) 确定交错规律 使在35分频的一个循环内,进行12次9分频和23次8分频,这样,输出F_OUT 平均为F_IN 的8.34285714分频。为使分频输出信号的占空比尽可能均匀,8分频和9分频应‘交替’进 (3) 设计框图:要求同步时序设计

(4)代码 在实体内定义两个进程(PROCESS P1和PROCESS P2),一个进程控制输出8/9分频,一个进程控制35分频周期比例输出。控制器输出FS_CTL信号控制输出是8分频还是9分频,分频器输出C_ENB信号来控制35分频计数器计数。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DIV IS--定义实体,实体名DIV PORT(F_IN: IN STD_LOGIC;--输入时钟信号 F_OUT: OUT STD_LOGIC--输出时钟信号 ); END DIV; ARCHITECTURE A OF DIV IS SIGNAL CN1: INTEGER RANGE 0 TO 7;--8分频计数器 SIGNAL CN2: INTEGER RANGE 0 TO 8;--9分频计数器 SIGNAL CN: INTEGER RANGE 0 TO 34;--整体计数器 SIGNAL C_ENB: STD_LOGIC;--整体计数器时钟驱动信号 SIGNAL FS_CTL: STD_LOGIC;--控制8、9分频比例信号,高电平8分频,低电平9分频 BEGIN P1:PROCESS(F_IN)--8、9分频计数进程 BEGIN IF (F_IN'EVENT AND F_IN='1') THEN IF(FS_CTL='0') THEN--9分频 IF CN2=8 THEN--计数 CN2<=0; ELSE CN2<=CN2+1; END IF; IF CN2>4 THEN--控制输出,占空比0.5 F_OUT<='1'; ELSE F_OUT<='0'; END IF; IF CN2=8 THEN--控制整体计数器驱动信号 C_ENB<='1'; ELSE C_ENB<='0'; END IF; ELSE IF CN1=7 THEN--8分频计数,同上 CN1<=0; ELSE CN1<=CN1+1; END IF; IF CN1>3 THEN F_OUT<='1'; ELSE F_OUT<='0'; END IF; IF CN1=7 THEN C_ENB<='1'; ELSE C_ENB<='0'; END IF; END IF; END IF; END PROCESS P1; P2:PROCESS(C_ENB)--整体计数进程 BEGIN IF (C_ENB'EVENT AND C_ENB='1') THEN--由驱动信号驱动 IF CN=34 THEN--计数 CN<=0; ELSE CN<=CN+1; END IF; IF (CN=34 OR CN=2 OR CN=5 OR CN=8 OR CN=11 OR CN=14 OR CN=17 OR CN=20 OR CN=23 OR CN=26 OR CN=29 OR CN=32) THEN FS_CTL<='0'; ELSE FS_CTL<='1'; END IF;--8、9分频比例分配 ELSE CN<=CN; END IF; END PROCESS P2; END A;

EDA实验报告

EDA 实验报告 实验一:组合电路的设计 实验内容是对2选1多路选择器VHDL 设计,它的程序如下: ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d <= a AND (NOT S) ; e <= b AND s ; y <= d OR e ; END ARCHITECTURE one ; Mux21a 仿真波形图 以上便是2选1多路选择器的VHDL 完整描述,即可以看成一个元件mux21a 。mux21a 实体是描述对应的逻辑图或者器件图,图中a 和b 分别是两个数据输入端的端口名,s 为通道选择控制信号输入端的端口名,y 为输出端的端口名。Mux21a 结构体可以看成是元件的内部电路图。最后是对仿真得出的mux21a 仿真波形图。 Mux21a 实体 Mux21a 结构体

实验二:时序电路的设计 实验内容D 触发器的VHDL 语言描述,它的程序如下: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q <= D ; END IF; END PROCESS ; END bhv; D 触发器的仿真波形图 最简单并最具代表性的时序电路是D 触发器,它是现代可编程ASIC 设计中最基本的时序元件和底层元件。D 触发器的描述包含了VHDL 对时序电路的最基本和典型的表达方式,同时也包含了VHDL 中许多最具特色的语言现象。D 触发器元件如上图所示,其在max+plus2的仿真得出上面的波形 D 触发器

交通灯控制器课程设计实验报告

2011级课程设计实验报告 交 通 灯 控 制 器 院(系):计算机与信息工程学院 专业年级: 2011级通信工程一班 姓名: 谢仙 学号: 指导教师: 杨菊秋 2013年06月25日

目录 1 引言 (3) 2 任务与要求 (3) 3 课程设计摘要及整体方框图 (3) 4 课程设计原理 (4) 555定时器 (5) 七位二进制计数器4024 (6) 二进制可逆计数器74LS193 (8) 数码显示电路 (9) 结论 (10) 体会与收获 (10) 附录: 1、整体电路原理图 (11) 2、元件表 (12) 3、焊接与调试 (12) 1引言

交通信号灯常用于交叉路口,用来控制车辆的流量,提高交叉路口车辆的通行能力,减少交通事故。本交通灯设计主要由秒脉冲发生器、计数器、译码显示电路组成。秒脉冲发生器由NE555产生脉冲,计数器由74LS193和4024实现,译码电路采用74LS48和七段数码管来显示。 2设计任务与要求 交通灯控制信号的应用非常广泛。本电路设计一个交通灯控制器,需要达到的目的如下; 一个周期64秒,平均分配,前32秒红灯亮,后32秒绿灯亮。 在红灯亮的期间的后8秒与红灯在一起的黄灯闪烁(注意:红灯同时亮)。为了显示效果明显,设计闪烁频率为1。 在绿灯亮的期间的后8秒与绿灯在一起的黄灯闪烁(注意:绿灯同时亮),为了显示效果明显,设计闪烁频率为1。 在黄灯闪烁期间,数码管同时倒计时显示,在此期间以外,数码管不亮。 3课程设计摘要及整体方框图 为了完成交通灯控制电路的设计,方案考虑如下: 一个脉冲信号发生器,一个二进制加法计数器,一个十进制减法计数器,红灯与绿灯以及黄灯是否亮是由二进制加法计数器的输出端状态来决定的,因此,设计一个组合逻辑电路,它的输入信号就是二进制加法计数器的输出信号,它的输出就是发光二极管的控制信号,因此,需要一个组合逻辑电路,六个发光二极管(二个红色发光二极管,二个绿色发光二极管,二个黄色发光二极管)电路,一个数码管显示电路。结构图如下: 4 课程设计原理分析及相关知识概述

基于AT89C51单片机的交通灯实验报告

/* * 实现基于C51的交通信号灯的控制操作 * 使用器件->> * 1.74HC138用于控制LED的位选码的设定 * 2.T0->>实现一个时间的定时操作(设置为10ms) * 3.P0->>作为LED现实的断码输出端 * 4.P1->>作为LED交通灯的信号灯的控制端 * 5.P2->>作为74HC138的为选码的控制端 * 6.P3.2->>作为一个复位的中断信号处理(与K1相连用于控制复位交通信号灯) * 需要考虑的一个问题是-》这个难道南北方向和东西方向的时间控制长短是一样的?#include //LED显示的字符段码 static char[] LED_TABLE = {0x3f , 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; /* * SN_IFGREEN:用于控制南北方向的灯的显示操作 * EW_IFGREEN:用于控制东西方向的灯的显示操作 * 0:红灯 * 1:绿灯 */ int SN_IFGREEN = 0; int EW_IFGREEN = 1; /* 用于控制定时时间为1s */ int TIME1S = 100; /* 用于控制时间为60s */ int LEDTIME = 60; /* LED交通灯的设置*/ sbit SN_RED = P1^0; sbit SN_YELLOW = P1^1; sbit SN_GREEN = P1^2; sbit EW_RED = P1^3; sbit EW_YELLOW = P1^4; sbit EW_GREEN = P1^5; /* 设置74HC138的位选码*/ sbit PA = P2^2; sbit PB = P2^3; sbit PC = P2^4; //初始化系统信息 void init_SYS(); //每当时间运行1s时进行操作处理 void time_SUB();

EDA分频器实验教案

实验三:整数分频器的设计 一实验目的 了解利用类属设计可配置的重用设计技术。 二实验原理 利用类属n 可以改变分频器的分频系数,输出q的频率是输入信号clk频率的1/n。通过给n赋不同的值,就可以得到需要的频率。 三实验器材 EDA实验箱 四实验内容 1.参考教材第5章中5.3.1,完成整数分频器的设计。 2.修改5. 3.1中的分频系数n,观察仿真波形和实验箱输入/输出信号的变化。 3.在试验系统上硬件验证分频器的功能。 在实验三中,建议将实验箱的实验电路结构模式设定为模式7。输入信号clk由键7的输出来模拟,输入信号reset_n由键8模拟,输出信号q接至LED:D14。当然,也可以由实验者设定到其它功能相似的键或者LED。

代码:(参考教材第5章中5.3.1) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity div is generic(n:integer:=8); port(clk,reset_n:in std_logic; q: out std_logic); end div; architecture behavl_div of div is signal count:integer range n-1 downto 0; begin process(reset_n,clk) begin if reset_n='0' then q<='0'; count<=n-1; elsif(clk'event and clk='1' and clk'last_value='0')then count<=count-1; if count>=(n/2)then q<='0'; else q<='1'; end if; if count<=0 then count<=n-1; end if; end if; end process; end behavl_div; 五实验注意事项 1.编写代码时一定要书写规范 2模式的选择和引脚的配置一定要合理 六实验报告 简述实验过程,将实验项目分析设计,仿真和测试写入实验报告。

数控分频器实验报告

《数控分频实验》 姓名:谭国榕班级:12电子卓越班学号:201241301132 一、实验目的 1.熟练编程VHDL语言程序。 2.设计一个数控分频器。 二、实验原理 本次实验我是采用书上的5分频电路进行修改,通过观察其5分频的规律进而修改成任意奇数分频,再在任意奇数分频的基础上修改为任意偶数分频,本次实验我分为了三个部分,前两部分就是前面所说的任意奇数分频和任意偶数分频,在这个基础上,再用奇数输入的最低位为1,偶数最低位为0的原理实现合并。 三、实验步骤 1.任意奇数分频 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DIV1 IS PORT(CLK:IN STD_LOGIC; D:IN INTEGER RANGE 0 TO 255; K1,K2,K_OR:OUT STD_LOGIC ); END; ARCHITECTURE BHV OF DIV1 IS SIGNAL TEMP3,TEMP4:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL M1,M2:STD_LOGIC; --SIGNAL OUT1,OUT2,OUT3:STD_LOGIC; BEGIN PROCESS(CLK,TEMP3) BEGIN IF RISING_EDGE(CLK) THEN IF(TEMP3=D-1) THEN TEMP3<="00000000"; ELSE TEMP3<=TEMP3+1; END IF; IF(TEMP3=D-(D+3)/2) THEN M1<=NOT M1; ELSIF (TEMP3=D-2) THEN M1<=NOT M1; END IF; END IF; END PROCESS; PROCESS(CLK,TEMP4) BEGIN IF FALLING_EDGE(CLK) THEN IF(TEMP4=D-1) THEN TEMP4<="00000000"; ELSE TEMP4<=TEMP4+1; END IF; IF(TEMP4=D-(D+3)/2) THEN M2<=NOT M2; ELSIF (TEMP4=D-2) THEN M2<=NOT M2;

交通灯控制逻辑电路设计实验报告

《数字设计》课程实验报告 实验名称:交通灯控制逻辑电路的设计与仿真实现 学员:学号: 培养类型:年级: 专业:所属学院: 指导教员:职称: 实验室:实验日期:

交通灯控制逻辑电路的设计与仿真实现 实验目的: 1. 熟悉Multisim仿真软件的主要功能和使用。 2. 熟悉各种常用的MSI时序逻辑电路的功能和使用。 3. 运用逻辑设计知识,学会设计简单实用的数字系统。 二、实验任务及要求: 1.设计一个甲干道和乙干道交叉十字路口的交通灯控制逻辑电路。每个干道各一组指示灯(红、绿、黄)。要求:当甲干道绿灯亮16秒时,乙干道的红灯亮;接着甲干道的黄灯亮5秒,乙干道红灯依然亮;紧接着乙干道的绿灯亮16秒,这时甲干道红灯亮;然后乙干道黄灯亮5秒,甲干道红灯依然亮;最后又是甲干道绿灯亮,乙干道变红灯,依照以上顺序循环,甲乙干道的绿红黄交通指示灯分别亮着。 2.要求: (1)分析交通灯状态变换,画出基于格雷码顺序的交通灯控制状态图。 (2)设计时序逻辑电路部分,写出完整的设计过程,画出逻辑电路图。在Multisim 仿真平台上,搭建设计好的该单元电路,测试验证,将电路调试正确。 (3)设计组合逻辑电路部分,写出完整的设计过程,画出逻辑电路图。在Multisim 仿真平台上,搭建设计好的该单元电路,测试验证,将电路调试正确。 (4)用74LS161计数器构造16秒定时和5秒定时的定时电路,画出连线图。在Multisim仿真平台上,选用74LS161芯片连线,测试验证,将电路调试正确。(5)在Multisim仿真平台上形成整个系统完整的电路,统调测试结果。 三、设计思路与基本原理: 依据功能要求,交通灯控制系统应主要有定时电路、时序逻辑电路及信号灯转换器组合逻辑电路组成,系统的结构框图如图1所示。其中定时电路控制时序逻辑电路状态的该表时间,时序逻辑电路根据定时电路的驱动信号而改变状态,进而通过组合逻辑电路控制交通灯系统正常运行。 在各单元电路的设计顺序上,最先设计基础格雷码顺序的交通灯控制状态图,由此确定时序逻辑电路的设计,并完成该部分电路的调试。接着在设计好时序路逻辑电路的基础上,根据状态输出设计组合逻辑电路,并完成该部分的调试。最后完成定时电路的设计与调试。整合电路,形成整个系统完整的电路,统调测试结果。

单片机仿真交通灯实验

实验报告实验名称:交通灯实验 姓名 班级 日期

实验要求: 1. 请使用单片机系统主机板和单片机系统键盘、显示板设计一个硬件系统,最终实 现一个交通路口红绿灯的控制。用两个数码管显示秒,8个LED灯分成四组,分别作为十字交叉路口的红绿灯。 2. 相对双向绿灯的最后几秒时,绿灯要闪烁,即亮灭交替,亮灭时间均为0.5秒, 然后变成红灯。 3. 每组同学可自行设计进行连接,形成一个单片机硬件系统。 4. 模拟调试完成后,用STC-ISP下载编程软件将生成的*。HEX文件在线下载到单片 机中。 5.下载后,按复位键执行程序,检验程序运行结果。 硬件连线方案:

程序流程图:

源代码: #include //51单片机头文件声明 unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //定义无符号数组,定义的数据要放在ROM(程序存储区)里面 sbit dula=P1^3; //特殊功能位定义,数码管段码控制信号 sbit G1=P1^4; //数码管位选控制信号 sbit c=P1^5; //c表示P1.0口,地址最高位 sbit b=P1^6; //地址次高位 sbit a=P1^7; //地址最低位 sbit xl=P2^0; //特殊功能位声明,xl表示P2.0口 sbit xh=P2^1; // sbit yl=P2^2; sbit yh=P2^3; sbit sl=P2^4; sbit sh=P2^5; sbit zl=P2^7; sbit zh=P2^6; char count=100; //定时时间取10ms,循环100次即为1s unsigned char ssx=14; //秒上下,为上下绿灯亮时倒计数 unsigned char szy=10; //秒左右,为左右绿灯亮时倒计数 char sx=1; //方向标志,上下绿灯亮 void delay(char x) //延时函数,通过for循环进行延时 { char a,b;

vhdl实验报告--蜂鸣器

VHDL 实验报告 一、实验目的 1、掌握蜂鸣器的使用; 2、通过复杂实验,进一步加深对VHDL语言的掌握程度。 二、实验原理乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。 乐曲的12 平均率规定:每2 个八度音(如简谱中的中音1 与高音1)之间的频率相差1 倍。在2个八度音之间,又可分为12个半音。另外,音符A(简谱中的低音6)的频率为440Hz, 音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音I至高音1 之间每个音符的频率,如表所示。 音名频率/Hz 音名频率/Hz 音名频率/Hz 低音1 中音1 高音1 低音2 中音2 高音2 低音3 中音3 高音3 低音4 中音4 高音4 低音5 392 中音5 784 高音5 1568 低音6 440 中音6 880 高音6 1760 低音7 中音7 高音7 表简谱音名与频率的对应关系 产生各音符所需的频率可用一分频器实现, 由于各音符对应的频率多为非整数, 而分频系数又不能为小数, 故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低, 则由于分频系数过小, 四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。实际的设计应综合考虑两方面的因素, 在尽量减小频率误差的前提下取合适的时钟频率。实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。因此, 要控制音符的音 长,就必须知道乐曲的速度和每个音符所对应的节拍数, 本例所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s 的话,那么一拍所应该持续的时间为秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。 本例设计的音乐电子琴选取40MHZ的系统时钟频率。在数控分频器模块,首先对时钟频率进行40分频,得到1MHZ的输入频率,然后再次分频得到各音符的频率。由于数控分频器 输出的波形是脉宽极窄的脉冲波, 为了更好的驱动蜂鸣器发声, 在到达蜂鸣器之前需要均衡占空比, 从而生成各音符对应频率的对称方波输出。这个过程实际上进行了一次二分频, 频率变为原来的二分之一即。 因此,分频系数的计算可以按照下面的方法进行。以中音1为例,对应的频率值为 523. 3Hz,它的分频系数应该为: 0.375MHZ 0.375 106 716 523.3 523.3

相关文档
最新文档