EDA交通灯控制.docx
- 文档编号:11472682
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:22
- 大小:390.70KB
EDA交通灯控制.docx
《EDA交通灯控制.docx》由会员分享,可在线阅读,更多相关《EDA交通灯控制.docx(22页珍藏版)》请在冰豆网上搜索。
EDA交通灯控制
交通灯控制器设计
一、实验目的
1了解交通灯管理的基本工作原理。
2熟悉8253计数器/定时器、8259A中断控制器和8255A并行接口的工作方式及应用编程。
3掌握多位LED显示的方法。
二、实验内容与要求
设计一个用于十字路口的交通灯控制器
基本要求:
设计一个由一条主干道和一条支干道的十字路口的交通灯控制器,具体要求如下:
1主,支干道各设有一个绿,黄,红指示灯,2个显示数码管
2主干道处于常允许通行状态,而支干道有车来才允许通行。
当主干道允许通行亮绿灯时,支干道亮红灯。
而支干道允许通行亮绿灯时,主干道亮红灯。
3当主,支干道均有车时,两者交替允许通行,主干道每次放行45s,支干道每次放行25s,由亮绿灯变成亮红灯转换时,先亮5s的黄灯作为过渡,并进行减计时显示。
三、实验报告要求
1.设计目的和内容
2.总体设计
3.硬件设计:
原理图(接线图)及简要说明
4.软件设计框图及程序清单
5.设计结果和体会(包括遇到的问题及解决的方法)
四、总体设计
本设计硬件由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。
定时模块采用硬件定时和软件定时相结合的方法,用8253定时/计数器定时100ms,再用软件计时实现所需的定时。
发光二极管模块由8255控制发光二极管来实现。
数码管显示模块由实验平台上的LED显示模块实现。
紧急中断模块是由单脉冲发生单元和8279中断控制器组成。
程序主要是由定时子程序、发光二极管显示子程序、数码管显示子程序和中断服务程序组成。
包括对8253、8255以及8259等可编程器件的编程。
五、硬件设计
定时模块是由8253的计数器0来实现定时100ms。
Clk0接实验平台分频电路输出Q6,f=46875hz。
GATE0接8255的PA0,由8255输出来控制计数器的起停。
OUT0接8259的IRQ2,定时完成申请中断,进入中断服务程序。
发光二极管显示模块由8255输出来控制发光二极管的亮灭。
8255输出为低电平时,对应的发光二极管就点亮,否则就熄灭。
实验平台上提供一组六个LED数码管。
插孔CS1用于数码管段选的输出选通,插孔CS2用于数码管位选信号的输出选通。
本设计用4个数码管来倒计时。
紧急中断模块是由单脉冲发生单元和8259中断控制器,单脉冲发生单元主要用来请求中断,然后做出紧急情况处理。
Q6
OUT0
8253GATE0
Clk0
PA0
8255PC
地址CS1
译码CS2
电路CS3
CS4
路
数码管显示模块
IRQ2
8259IRQ3
发光二极管电路
单脉冲发生单元
PCBUS
图1系统硬件电路图
图28255接口电路
六、软件设计
设计源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJTDKZIS
PORT(CLK,SM,SB:
INSTD_LOGIC;
MR,MY0,MG0,BR,BY0,BG0:
OUTSTD_LOGIC);
ENDENTITYJTDKZ;
ARCHITECTUREARTOFJTDKZIS
TYPESTATE_TYPEIS(A,B,C,D);
SIGNALSTATE:
STATE_TYPE;
BEGIN
CNT:
PROCESS(CLK)IS
VARIABLES:
INTEGERRANGE0TO45;
VARIABLECLR,EN:
BIT;
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFCLR='0'THENS:
=0;
ELSIFEN='0'THENS:
=S;
ELSES:
=S+1;
ENDIF;
CASESTATEIS
WHENA=>MR<='0';MY0<='0';MG0<='1';BR<='1';BY0<='0';BG0<='0';
IF(SBANDSM)='1'THEN
IFS=45THENSTATE<=B;CLR:
='0';EN:
='0';
ELSESTATE<=A;CLR:
='1';EN:
='1';
ENDIF;
ELSIF(SBAND(NOTSM))='1'THENSTATE<=B;CLR:
='0';EN:
='0';
ELSESTATE<=A;CLR:
='1';EN:
='1';
ENDIF;
WHENB=>MR<='0';MY0<='1';MG0<='0';BR<='1';BY0<='0';BG0<='0';
IFS=5THENSTATE<=C;CLR:
='0';EN:
='0';
ELSESTATE<=B;CLR:
='1';EN:
='1';
ENDIF;
WHENC=>MR<='1';MY0<='0';MG0<='0';BR<='0';BY0<='0';BG0<='1';
IF(SMANDSB)='1'THEN
IFS=25THENSTATE<=D;CLR:
='0';EN:
='0';
ELSESTATE<=C;CLR:
='1';EN:
='1';
ENDIF;
ELSIFSB='0'THENSTATE<=D;CLR:
='0';EN:
='0';
ELSESTATE<=C;CLR:
='1';EN:
='1';
ENDIF;
WHEND=>MR<='1';MY0<='0';MG0<='0';BR<='0';BY0<='1';BG0<='0';
IFS=5THENSTATE<=A;CLR:
='0';EN:
='0';
ELSESTATE<=D;CLR:
='1';EN:
='1';
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESSCNT;
ENDARCHITECTUREART;
设计仿真的截图:
倒计时传输、控制模块模块的实现
简单设计思路:
根据EN45、EN25、EN05M、EN05B的信号以及3个倒计时计数器的计数状态决定输出3个倒计时计数器中某个的状态输出。
原理图模块:
设计源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCSKZIS
PORT(INA:
INSTD_LOGIC;
OUTA:
OUTSTD_LOGIC);
ENDENTITYCSKZ;
ARCHITECTUREARTOFCSKZIS
BEGIN
PROCESS(INA)IS
BEGIN
IFINA='1'THENOUTA<='1';
ELSEOUTA<='0';
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
设计仿真的截图:
倒计时45s模块的实现
简单思路:
CLK上升沿到来时,若到计时使能信号和SB信号有效,倒计时45s开始计数,并将输入状态通过DOUT45M、DOUT45B分别输出到主、支干道显示。
设计的原理图模块:
设计源程序:
3
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT45SIS
PORT(SB,CLK,EN45:
INSTD_LOGIC;
DOUT45M,DOUT45B:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCNT45S;
ARCHITECTUREARTOFCNT45SIS
SIGNALCNT6B:
STD_LOGIC_VECTOR(5DOWNTO0);
BEGIN
PROCESS(SB,CLK,EN45)IS
BEGIN
IFSB='0'THENCNT6B<=CNT6B-CNT6B-1;
ELSIF(CLK'EVENTANDCLK='1')THEN
IFEN45='1'THENCNT6B<=CNT6B+1;
ELSIFEN45='0'THENCNT6B<=CNT6B-CNT6B-1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT6B)IS
BEGIN
CASECNT6BIS
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHEN""=>DOUT45M<="";DOUT45B<="";
WHENOTHERS=>DOUT45M<="";DOUT45B<="";
ENDCASE;
ENDPROCESS;
END;
设计仿真的截图:
倒计时25s模块的实现
简单思路:
CLK上升沿到来时,若到计时使能信号、SM信号和SB信号有效,倒计时25s开始计数,并将输入状态通过DOUT25M、DOUT25B分别输出到主、支干道显示。
设计的原理图模块:
设计源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSI
GNED.ALL;
ENTITYCNT25SIS
PORT(SB,SM,CLK,EN25:
INSTD_LOGIC;
DOUT25M,DOUT25B:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYCNT25S;
ARCHITECTUREARTOFCNT25SIS
SIGNALCNT5B:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
PROCESS(SB,SM,CLK,EN25)IS
BEGIN
IFSB='0'THENCNT5B<=CNT5B-CNT5B-1;
ELSIFSM='0'THENCNT5B<=CNT5B-CNT5B-1;
ELSIF(CLK'EVENTANDCLK='1')THEN
IFEN25='1'THENCNT5B<=CNT5B+1;
ELSIFEN25='0'THENCNT5B<=CNT5B-CNT5B-1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT5B)IS
BEGIN
CASECNT5BIS
WHEN"00000"=>DOUNT25B<="";DOUT25M<="";
WHEN"00001"=>DOUNT25B<="";DOUT25M<="";
WHEN"00010"=>DOUNT25B<="";DOUT25M<="";
WHEN"00011"=>DOUNT25B<="";DOUT25M<="";
WHEN"00100"=>DOUNT25B<="";DOUT25M<="";
WHEN"00101"=>DOUNT25B<="";DOUT25M<="";
WHEN"00110"=>DOUNT25B<="";DOUT25M<="";
WHEN"00111"=>DOUNT25B<="";DOUT25M<="";
WHEN"01000"=>DOUNT25B<="";DOUT25M<="";
WHEN"01001"=>DOUNT25B<="";DOUT25M<="";
WHEN"01010"=>DOUNT25B<="";DOUT25M<="";
WHEN"01011"=>DOUNT25B<="";DOUT25M<="";
WHEN"01100"=>DOUNT25B<="";DOUT25M<="";
WHEN"01101"=>DOUNT25B<="";DOUT25M<="";
WHEN"01110"=>DOUNT25B<="";DOUT25M<="";
WHEN"01111"=>DOUNT25B<="";DOUT25M<="";
WHEN"10000"=>DOUNT25B<="";DOUT25M<="";
WHEN"10001"=>DOUNT25B<="";DOUT25M<="";
WHEN"10010"=>DOUNT25B<="";DOUT25M<="";
WHEN"10011"=>DOUNT25B<="";DOUT25M<="";
WHEN"10100"=>DOUNT25B<="";DOUT25M<="";
WHEN"10101"=>DOUNT25B<="";DOUT25M<="";
WHEN"10110"=>DOUNT25B<="";DOUT25M<="";
WHEN"10111"=>DOUNT25B<="";DOUT25M<="";
WHEN"11000"=>DOUNT25B<="";DOUT25M<="";
WHENOTHERS=>DOUNT25B<="";DOUT25M<="";
ENDCASE;
ENDPROCESS;
END;
设计仿真的截图:
倒计时5s模块的实现
简单思路:
CLK上升沿到来时,若到计时使能信号有效,倒计时5s开始计数,并将输入状态通过DOUT05输出到主、支干道显示。
设计的原理图模块:
设计源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT05SIS
PORT(CLK,EN05M,EN05B:
INSTD_LOGIC;
DOUT5:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCNT05S;
ARCHITECTUREARTOFCNT05SIS
SIGNALCNT3B:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
PROCESS(CLK,EN05M,EN05B)IS
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFEN05M='1'THENCNT3B<=CNT3B+1;
ELSIFEN05B='1'THENCNT3B<=CNT3B+1;
ELSIFEN05B='0'THENCNT3B<=CNT3B-CNT3B-1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT3B)
BEGIN
CASECNT3BIS
WHEN"000"=>DOUT5<="";
WHEN"001"=>DOUT5<="";
WHEN"010"=>DOUT5<="";
WHEN"011"=>DOUT5<="";
WHEN"100"=>DOUT5<="";
WHENOTHERS=>DOUT5<="";
ENDCASE;
ENDPROCESS;
END;
设计仿真的截图:
显示译码器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYYIMA7IS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
YIMA:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDYIMA7;
ARCHITECTUREARTOFYIMA7IS
BEGIN
PROCESS(A)IS
BEGIN
CASEAIS
WHEN"0000"=>YIMA<="";
WHEN"0001"=>YIMA<="";
WHEN"0010"=>YIMA<="";
WHEN"0011"=>YIMA<="";
WHEN"0100"=>YIMA<="";
WHEN"0101"=>YIMA<="";
WHEN"0110"=>YIMA<="";
WHEN"0111"=>YIMA<="";
WHEN"1000"=>YIMA<="";
WHEN"1001"=>YIMA<="";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
ENDART;
整体组装和测试
自动转换出来的源程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYwork;
ENTITYBlock1IS
port
(CLK:
INSTD_LOGIC;
SM:
INSTD_LOGIC;
SB:
INSTD_LOGIC;
MR:
OUTSTD_LOGIC;
MY:
OUTSTD_LOGIC;
MG:
OUTSTD_LOGIC;
BR:
OUTSTD_LOGIC;
BY:
OUTSTD_LOGIC;
BG:
OUTSTD_LOGIC;
DOUT1:
OUTSTD_LOGIC_VECTOR(7downto0);
DOUT2:
OUTSTD_LOGIC_VECTOR(7downto0));
ENDBlock1;
ARCHITECTUREbdf_typeOFBlock1IS
componentcnt05s
PORT(CLK:
INSTD_LOGIC;
EN05M:
INSTD_LOGIC;
EN05B:
INSTD_LOGIC;
DOUT5:
OUTSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentcnt25s
PORT(SB:
INSTD_LOGIC;
SM:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
EN25:
INSTD_LOGIC;
DOUT25B:
OUTSTD_LOGIC_VECTOR(7downto0);
DOUT25M:
OUTSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentcnt45s
PORT(SB:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
EN45:
INSTD_LOGIC;
DOUT45B:
OUTSTD_LOGIC_VECTOR(7downto0);
DOUT45M:
OUTSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentjtdkz
PORT(CLK:
INSTD_LOGIC;
SM:
INSTD_LOGIC;
SB:
INSTD_LOGIC;
MR:
OUTSTD_LOGIC;
MY0:
OUTSTD_LOGIC;
MG0:
OUTSTD_LOGIC;
BR:
OUTSTD_LOGIC;
BY0:
OUTSTD_LOGIC;
BG0:
OUTSTD_LOGIC);
endcomponent;
componentxskz
PORT(EN45:
INSTD_LOGIC;
EN25:
INSTD_LOGIC;
EN05M:
INSTD_LOGIC;
EN05B:
INSTD_LOGIC;
AIN05:
INSTD_LOGIC_VECTOR(7downto0);
AIN25B:
INSTD_LOGIC_VECTOR(7downto0);
AIN25M:
INSTD_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 交通灯 控制
![提示](https://static.bdocx.com/images/bang_tan.gif)