EDA交通灯程序
- 格式:doc
- 大小:42.50 KB
- 文档页数:5
交通信号灯控制电路的设计一、设计任务与要求1、任务用红、黄、绿三色发光二极管作为信号灯,设计一个甲乙两条交叉道路上的车辆交替运行,且通行时间都为25s的十字路口交通信号灯,并且由绿灯变为红灯时,黄灯先亮5s,黄灯亮时每秒钟闪亮一次。
2、要求画出电路的组成框图,用中、小规模集成电路进行设计与实现用EAD软件对设计的部分逻辑电路进行仿真,并打印出仿真波形图。
对设计的电路进行组装与调试,最后给出完整的电路图,并写出设计性实验报告。
二、设计原理和系统框图(一)设计原理1、分析系统的逻辑功能,画出其框图交通信号灯控制系统的原理框图如图2所示。
它主要由控制器、定时器、译码器和秒脉冲信号发生器等部分组成。
秒脉冲信号发生器是该系统中定时器和该系统中定时器和控制器的标准时钟信号源,译码器输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作,控制器是系统的主要部分,由它控制定时器和译码器的工作。
图1 交通灯控制电路设计框图图中:Tl:表示甲车道或乙车道绿灯亮的时间间隔为25s,即车辆正常通行的时间间隔。
定时时间到,Tl=1,否则,Tl=0.Ty:表示黄灯亮的时间间隔为5s。
定时时间到,Ty=1,否则,Ty=0。
St:表示定时器到了规定的时间后,由控制器发出状态转换信号。
它一方面控制定时器开始下一个工作状态的定时,另一方面控制着交通信号灯状态转换。
2、画出交通信号灯控制器ASM图(1)甲车道绿灯亮,乙车道红灯亮。
表示甲车道上的车辆允许通行,乙车道禁止通行。
绿灯亮足规定的时间隔TL时控制器发出状态信号ST转到下一工作状态。
(2)乙车道黄灯亮乙车道红灯亮。
表示甲车道上未过停车线的车辆停止通行已过停车线的车辆继续通行乙车道禁止通行。
黄灯亮足规定时间间隔TY时控制器发出状态转换信号ST转到下一工作状态。
(3)甲车道红灯亮乙车道绿灯亮。
表示甲车道禁止通行乙车道上的车辆允许通行绿灯亮足规定的时间间隔TL时 控制器发出状态转换信号ST转到下一工作状态。
实验一五人表决器设计一、实验目的1 加深对电路理论概念的理解3 加深计算机辅助分析及设计的概念4 了解及初步掌握对电路进行计算机辅助分析的过程二、实验要求制作一个五人表决器,共五个输入信号,一个输出信号。
若输入信号高电平数目多于低电平数目,则输出为高,否则为低。
三、实验原理根据设计要求可知,输入信号共有2^5=32种可能,然而输出为高则有15种可能。
对于本设计,只需一个模块就能完成任务,并采用列写真值表是最简单易懂的方法。
四、计算机辅助设计设A,B,C,D,E引脚为输入引脚,F为输出引脚。
则原理图如1所示图1.1 五人表决器原理图实验程序清单如下:MODULE VOTEA,B,C,D,E PIN;F PIN ISTYPE 'COM';TRUTH_TABLE([A,B,C,D,E]->[F])[0,0,1,1,1]->[1];[0,1,1,1,0]->[1];[0,1,0,1,1]->[1];[0,1,1,0,1]->[1];[1,0,1,1,1]->[1];[1,1,0,1,1]->[1];[1,1,1,0,1]->[1];[1,1,1,1,0]->[1];[1,1,1,0,0]->[1];[1,1,0,1,0]->[1];[1,1,1,1,1]->[1];[1,1,0,0,1]->[1];[1,0,0,1,1]->[1];[1,0,1,0,1]->[1];[1,0,1,1,0]->[1];END五、实验测试与仿真根据题目要求,可设输入分别为:0,0,0,0,0;1,1,1,1,1;1,0,1,0,0;0,1,0,1,1。
其测试程序如下所示:MODULE fivevoteA,B,C,D,E,F PIN;X=.X.;TEST_VECTORS([A,B,C,D,E]->[F])[0,0,0,0,0]->[X];[1,1,1,1,1]->[X];[1,0,1,0,0]->[X];[0,1,0,1,1]->[X];END测试仿真结果如图1.2所示:图1.2 五人表决器设计仿真图可知,设计基本符合题目要求。
矩阵键盘扫描主要代码分析:--数字分频器,对系统时钟进行适当分频,得1~10KHz左右的时钟进行矩阵键盘扫描process(clk)--分频器的进程variable cnt:integer range 0 to 500000;BEGINIF rst='0' then cnt:=0;else if clk'event and clk='1' thenIF cnt=499999 THENclkreg<=not clkreg;cnt:=0;ELSEcnt:=cnt+1;END IF;END IF;END IF;end process;--行扫描循环process(clkreg)beginif clkreg'event and clkreg = '1' thencase rowreg iswhen "1110" => rowreg <= "1101";when "1101" => rowreg <= "1011";when "1011" => rowreg <= "0111";when "0111" => rowreg <= "1110";when others => rowreg <= "1110";end case;end if;end process;row <= rowreg;com <= column&rowreg;--对行扫描信号和列扫描信号进行CASE语句判断。
得到是否有键被按下,输出按键按--键指示信号和按键的编码--数码管显示process(clkreg)beginif clkreg'event and clkreg = '1' thencase com iswhen "11010111" => display <= "11000000"; --数码管显示0when "11101011" => display <= "11111001"; --数码管显示1when "11011011" => display <= "10100100"; --数码管显示2when "10111011" => display <= "10110000"; --数码管显示3when "11101101" => display <= "10011001";--数码管显示4when "11011101" => display <= "10010010"; --数码管显示5when "10111101" => display <= "10000010"; --数码管显示6when "11101110" => display <= "11111000"; --数码管显示7when "11011110" => display <= "10000000"; --数码管显示8when "10111110" => display <= "10010000"; --数码管显示9when "10110111" => display <= "01111111"; --数码管显示.when "01111101" => display <= "10111001"; --数码管显示+when "01111011" => display <= "10111010"; --数码管显示enterwhen others => null;end case;end if;end process;weixuan<=q;交通灯控制代码分析:1、时钟分频代码:process(clk)variable cnt1 : integer range 0 to 50000000;beginif (clk'event and clk='1') thenif cnt1=24999999 thenclk_1<=not clk_1;cnt1:=0;else cnt1:=cnt1+1;end if;end if;end process;--产生1Hz的时钟频率,时间为一秒。
河南农业大学课程设计报告设计题目:交通灯控制器的设计学院:理学院专业:电子信息科学与技术班级: 08级电科(2)班学号: 0808101035姓名:石利芳电子邮件: Shiliminanyang@日期: 2011年12 月成绩:指导教师:贾树恒河南农业大学理学院课程设计任务书学生姓名石利芳指导教师贾树恒学生学号0808101035 专业电子信息科学与技术题目交通灯控制器的设计任务与要求主要内容:设计主干道的交叉路口交通信号灯无人自动管理的控制系统.将路口红绿灯的各种亮灯情况定义为不同的状态,路口状况定义为触发条件,组成有限状态机。
要求:(1)采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到EDA实验箱进行验证。
(2)熟练操作设计所用的软硬件系统:Max+plusⅡ软件。
(3)按要求编写课程设计报告,正确绘制程序流程图、实验接线图等,正确阐述设计原理、方法和实验结果。
(4)通过课程设计培养学生严谨的科学态度,认真地工作作风。
(5)在老师的指导下,要求每个学生独立完成课程设计报告的全部内容。
开始日期2011 年 12 月 6 日完成日期2011 年 12 月 15 日课程设计所在单位理学院电子科学系1引言当前,大量的信号灯电路正向着数字化、小功率、多样化、方便人、车、路三者关系的协调,多值化方向发展随着社会经济的发展,城市交通问题越来越引起人们的关注。
,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。
然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。
而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
基于EDA技术的智能交通信号灯的设计作者:杨荣来源:《商品与质量·消费视点》2013年第03期摘要:基于EDA技术,设计一个交通十字路口的智能控制系统。
控制系统由VHDL硬件语言编写,完成十字路口支路和干路上人行横道的红、绿、黄交通灯的运行控制,并且通过对相应路段的车数量检测,智能化地对绿灯的延时进行改变。
关键词:EDA;VHDL语言;可编程逻辑器件;交通灯控制系统引言:随着城市的日新月异,私人汽车数量的不断增加,交通灯的运行模式和管制变得越来越重要,智能数字化信息为基础建立起的数字化城市不断的发展。
随着数字电子技术的发展,当前数字系统的设计正向着速度快、容量大、体积小、重量轻的轨道上发展。
现代化城市交通作为城市发展的一个重要问题引起人们的注意,智能交通灯控制系统也是应用电子技术中较为经典的设计。
就目前而言尚存在一系列问题待解决,例如实际路口搭建的交通灯种类多、程序结构较复杂、数量较多等问题。
传统的电子设计方法电路应用元器件多、接线较复杂、故障率很高、系统维护不方便。
EDA(Electronic Design Automation)技术近年来不断发展,该技术不但可以大部分替代设计者完成设计中的工作,而且可以从程序中直接修改系统功能及错误,大大的缩短了研发周期,节约了成本。
本文采用EDA技术,基于VHDL语言,利用可编程逻辑器件(FPGA)器件通过QuartusⅡ软件的功能仿真和调试,完成整个的系统设计。
表现出了EDA 技术的优越性。
不仅使系统设计的产品集成化、小型化,而且最重要的是提高了系统的故障率,由于系统具有可编程的优点,从而大大降低设计成本费用、缩短了开发周期、方便进行产品的维修以及系统的升级。
系统总体功能描述:交通灯控制系统是每个城市必须的基础设施,对人、车、路三者进行调控。
根据交通规则的规定,来设计完成东西方向和南北方向的显示时间功能和交通指示灯控制。
在一个有一条主干道和一条支干道的实际十字路口,每条干道的每个入口设置了一组两位数码管显示装置和一组绿、红、黄信号指示灯,分别用来显示直行、左右转弯、禁止通行的通行信息,确保车辆安全通行。
单片机红绿灯程序完整版2篇第一篇:单片机红绿灯程序完整版(上)单片机红绿灯是一个经典的实验案例,它展示了单片机在控制和管理车辆行驶过程中的应用。
通过编写程序,我们可以模拟交通信号灯的运行,实现流畅和安全的交通流。
在这篇文章中,我将详细介绍单片机红绿灯程序的完整版,并向读者提供逐步实现该程序的指南。
我将从前期准备开始,包括所需材料和工具的概述,然后进入程序编写和单片机烧录的具体步骤。
最后,我将展示运行红绿灯程序的效果。
首先,让我们看一下所需的材料和工具。
为了完成这个项目,你将需要一块单片机开发板(如Arduino Uno),几个LED灯(红色、黄色和绿色),杜邦线,以及一台电脑。
需要特别注意的是,开发板和电脑之间需要通过USB线连接,以便将程序烧录到开发板中。
在准备好所有材料后,我们可以开始编写红绿灯程序。
我们将使用C语言来编写程序,并使用Arduino IDE作为代码编辑器。
首先,打开IDE并创建一个新的工程。
然后在代码编辑窗口中输入相关代码。
程序的主要逻辑是模拟交通信号灯的运行。
我们将交替点亮红、黄、绿三个LED灯,并设置不同的时间间隔来模拟红绿灯的变化。
例如,可以将红灯亮5秒钟,黄灯亮2秒钟,绿灯亮5秒钟。
然后,程序将循环执行这个过程,以实现连续的红绿灯变化。
在编写完程序后,我们需要将其烧录到单片机开发板中。
首先,通过USB线将开发板与电脑连接。
然后,在IDE中选择正确的开发板和端口,并点击“上传”按钮。
IDE将自动编译和烧录程序到开发板中。
一旦程序烧录完成,我们可以断开USB线,将开发板连接到电源,然后观察红绿灯的变化。
通过实验,我们可以看到红绿灯不断地在变化。
这个程序模拟了真实的交通信号灯,给我们提供了一个清晰的视觉指示,用于控制和管理车辆的行驶过程。
这个实验不仅展示了单片机的应用能力,还培养了我们对交通规则和安全的意识。
在红色、黄色和绿色的灯光交替运行中,我们可以思考如何实现更多的功能和效果。
实验一五人表决器的设计一、实验目的1、了解和初步掌握ISPlever软件的基本操作方法以及电子线路的程序编写abel语言的编写。
2、通过实验,加深电路设计的概念以及了解计算机辅助设计分析的过程3、培养学生的创新能力以及理论知识的应用能力。
二、实验内容及步骤本实验要求利用ISPLEVER软件完成对五人表决器的设计及仿真,表决规则是,多数胜少数。
分析题意,我们可以知道此次仿真应有五个输入端口,一个输出端口。
分别设置其A,B,C,D,E为输入端口,F为输出端口。
故分析可知其真值表如下所示:图1:无人表决器真值表可分析:无人中任意三人通过则表决可以通过,故得到其逻辑表达式为F=ABC+ABD+ABE+ACD+ACE+ADE+BCD+BCE+BDE+CDE实验步骤:1、打开ISPLEVER软件,新建一个项目,并命名为Untitled.syn。
2、在新建立的项目的基础上新建一个原理图文件,并为之命名为biaojueqi.sch。
用软件绘制原理图如下所示:图2:五人表决器原理图3、在顶层原理图的基础上,为模块编写ABEL语言程序,原理图中建立了WTF模块,新建立一个程序文件wtf.abl。
编写此项目的仿真文件程序biaojueqi.abv得到:对此项目文件进行仿真,得到仿真结果如图:图3:实验结果仿真分析三、实验结果分析本次实验设计的是五人表决器,要求A,B,C,D,E五个输入中只要有三个以上为1,那么实验的输出即为1。
通过分析,我们得到了表决器输出的逻辑表达式,然后根据表达式完成了VOTE项目的设计,项目设计后仿真得到,A,B,C,D,E全为1时则全票通过;A,B,D,E为1,C为0时F为1;A,B,E 为1,C,D为0时F为1;A,B为1,C,D,E为0时F为0;A,B,C,D为0,E 为1时输出F为0;当A,B,C,D,E全为0时,则F=0;经过TEST文件来对程序检测,发现设计基本可以完成表决任务。
四、实验小结作为EDA实验的第一个实验,在完成的过程中仍存在着操作不娴熟,操作失误等问题。
1、分频器的设计奇数y分频:(式中y为我们所要分频的数,而x取只要小于y就行,尽量取中间点的值)module jifenpin(clk,q,reset);input clk,reset;output q;reg[3:0] i;reg q;always@(posedge clk)if(!reset)beginq<=1;i<=0;endelse if(i==x)beginq<=~q;i<=i+1;endelse if(i==y)beginq<=~q;i<=0;endelsei<=i+1;endmodule偶数n分频module erfenpin (q,clk,reset); input reset,clk;output q;reg q;reg [4:0]i;always @ (posedge clk )if(!reset)beginq<=1'b1;i<=0;endelse if(i==n/2)beginq<=~q;i<=0;endelse i<=i+1;endmodule2、频率计module pinlvji(clk,fin,en,reset,load,reg32b); input clk,fin;output en,reset,load,reg32b;reg en;reg[5:0] i,j,reg32b;always @(posedge clk)en<=~en;assign reset=~(en|clk);assign load=~en;always @(posedge fin)beginif(reset)i=0;else if(en)i=i+1;j=i;endalways @(posedge load)if(en==0)reg32b=j;endmodule3、交通灯(状态机)modulejiaotongdeng(clk,reset,sensor1,sensor2,red1,red2,yellow1 ,yellow2,green1,green2);input clk,reset,sensor1;input [2:0]sensor2;output red1,red2,yellow1,yellow2,green1,green2;reg red1,red2,yellow1,yellow2,green1,green2;reg [2:0]state;always @(posedge clk)if(!reset)beginstate<=1;red1<=0;red2<=0;yellow1<=0;yellow2<=0;green1<=0;green2<=0;endelsecase(state)0:beginif(sensor1==0)beginstate<=1;green1<=1;red2<=1;endend1:beginif(sensor1==0&&sensor2[2]==1) beginstate<=2;red2<=1;yellow1<=1;endelse if(sensor1==1)beginred1<=1;red2<=1;state<=0;endelsestate=1;end2:beginif(sensor1==0&&sensor2[1]==1) beginstate<=3;red1<=1;green2<=1;endelse if(sensor1==1)beginred1=1;red2=1;state<=0;endelsestate=2;end3:beginif(sensor1==0&&sensor2[0]==1) beginstate<=4;red1<=1;yellow2<=1;endelse if(sensor1==1)beginred1=1;red2=1;state<=0;endelsestate=3;end4:beginif(sensor1==0&&sensor2[1]==1) beginstate<=1;red2<=1;green1<=1;endelse if(sensor1==1)beginred1=1;red2=1;state<=0;endelsestate=4;endendcaseendmodule4、数字时钟module shizhong(clk,s,m,h);input clk;output[5:0] s,m,h;reg[5:0] s,m,h;reg mt,ht;wire mtclk,htclk;always@(posedge clk) beginif(s==59)begins<=0;mt<=1;endelsebegins<=s+1;mt<=0;endendassign mtclk=mt; always@(posedge mtclk) beginif(m==59)beginm<=0;ht<=1;endelsebeginm<=m+1;ht<=0;endendassign htclk=ht; always@(posedge htclk) beginif(h==23)h<=0;elseh<=h+1;endendmodule5、组合逻辑(数字时钟)module digit_clock(s,m,h,clk,clr,en);output [7:0] s,m;output [7:0] h;input clk,clr,en;wire clk,clr,en;wire[7:0] s,m,h;wire count_s,count_m,count_h;count_60 u0(s[7:4],s[3:0],count_s,clk,clr,en);count_60u1(m[7:4],m[3:0],count_m,clk,clr,count_s);count_24u2(h[7:4],h[3:0],count_h,clk,clr,count_m); endmodule。
;======================P1口亮灯实验========================= ORG 0790H;----------------------------------------------------------SE18: MOV P1,#0FFH ;送P1口LO34: MOV A,#0FEH ;L1发光二极管点亮LO33: MOV P1,ALCALL SE19 ;延时RL A ;左移位SJMP LO33 ;循环;----------------------------------------------------------SE19: MOV R6,#0A0HLO36: MOV R7,#0FFHLO35: DJNZ R7,LO35DJNZ R6,LO36 ;延时RET;----------------------------------------------------------END;==================== 8255控制交通灯========================== ORG 0BB0HJOD0: MOV SP,#60HMOV DPTR,#0FFDBHMOV A,#88HMOVX @DPTR,A ;8255初始化MOV DPTR,#0FFD8HMOV A,#0B6HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;点亮4个红灯MOV R2,#25H ;延时LCALL DEL YJOD3: MOV DPTR,#0FFD8HMOV A,#75HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;东西绿灯亮,南北红灯亮MOV R2,#55HLCALL DEL Y ;延时MOV R7,#05H ;闪烁次数JOD1: MOV DPTR,#0FFD8HMOV A,#0F3HMOVX @DPTR,AINC DPTRMOV A,#0CHMOVX @DPTR,A ;东西黄灯亮,南北红灯亮MOV R2,#20HLCALL DEL Y ;延时MOV DPTR,#0FFD8HMOV A,#0F7HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;南北红灯亮MOV R2,#20HLCALL DEL Y ;延时DJNZ R7,JOD1 ;闪烁次数未到继续MOV DPTR,#0FFD8HMOV A,#0AEHMOVX @DPTR,AINC DPTRMOV A,#0BHMOVX @DPTR,A ;东西红灯亮,南北绿灯亮MOV R2,#55HLCALL DEL Y ;延时MOV R7,#05H ;闪烁次数JOD2: MOV DPTR,#0FFD8HMOV A,#9EHMOVX @DPTR,AINC DPTRMOV A,#07HMOVX @DPTR,A ;东西红灯亮,南北黄灯亮MOV R2,#20HLCALL DEL Y ;延时MOV DPTR,#0FFD8HMOV A,#0BEHMOVX @DPTR,AINC DPTRMOV A,#0FHMOVX @DPTR,A ;东西红灯亮MOV R2,#20HLCALL DEL Y ;延时DJNZ R7,JOD2 ;闪烁次数未到继续LJMP JOD3 ;循环;---------------------------------------------DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02HDJNZ R2,DEL2POP 02HDJNZ R2,DEL YRET;---------------------------------------------END;===================== 工业顺序控制======================== ORG 0000HLJMP PO10ORG 0013HLJMP PO16;----------------------------ORG 0190HPO10: MOV P1,#7FHORL P3,#00HPO11: JNB P3.4,PO11 ;开工吗?ORL IE,#84HORL IP,#01HMOV PSW,#00H ;初始化MOV SP,#53HPO12: MOV P1,#7EH ;第一道工序ACALL PO1BMOV P1,#7DH ;第二道工序ACALL PO1BMOV P1,#7BH ;第三道工序ACALL PO1BMOV P1,#77H ;第四道工序ACALL PO1BMOV P1,#6FH ;第五道工序ACALL PO1BMOV P1,#5FH ;第六道工序ACALL PO1BMOV P1,#0FH ;第七道工序ACALL PO1BSJMP PO12;----------------------------PO16: MOV B,R2 ;保护现场PO17: MOV P1,#7FH ;关输出MOV 20H,#0A0H ;振荡次数PO18: SETB P1.7 ;振荡ACALL PO1A ;延时CLR P1.7 ;停振ACALL PO1A ;延时DJNZ 20H,PO18 ;不为0转CLR P1.7ACALL PO1A ;停振JNB P3.3,PO17 ;故障消除吗?MOV R2,B ;恢复现场RETIPO1A: MOV R2,#06HACALL DEL Y ;延时RETPO1B: MOV R2,#30HACALL DEL Y ;延时RET;----------------------------DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02HDJNZ R2,DEL2POP 02HDJNZ R2,DEL YRET;----------------------------END;=================== A/D转换实验======================== ORG 05A0HSE11: MOV SP,#53HMOV 7EH,#00HMOV 7DH,#08HMOV 7CH,#00HMOV 7BH,#09HMOV 7AH,#10HMOV 79H,#10H ;显示缓冲区初值LO18: CALL DIS ;显示MOV A,#00HMOV DPTR,#0FFE0HMOVX @DPTR,A ;0809的0通道采样CALL DIS ;SSEEMOVX A,@DPTR ;取出采样值mov dptr,#0ffe4h ;new add --> 138 Y1cpl a ;new addmovx @dptr,a ;new add --> 驱动发光二极管cpl a ;new addMOV R0,#79HCALL PTDS ;采样值送显示缓冲区SJMP LO18 ;循环;---------------------------PTDS: MOV R1,A ;拆送显示缓冲区ACALL PTDS1MOV A,R1SW AP APTDS1: ANL A,#0FHMOV @R0,AINC R0RET;---------------------------DIS: PUSH DPHPUSH DPLSETB RS1MOV R0,#7EHMOV R2,#20HMOV R3,#00HMOV DPTR,#LS0LS2: MOV A,@R0MOVC A,@A+DPTRMOV R1,#0DCHMOVX @R1,AMOV A,R2inc R1MOVX @R1,ALS1: DJNZ R3,LS1CLR CRRC AMOV R2,ADEC R0JNZ LS2movx @r0,adec r0cpl amovx @r0,aCLR RS1POP DPLPOP DPHRET;-------------------------------------LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92HDB 82H,0F8H,80H,90H,88H,83H,0C6HDB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH;--------------------------------------END===================== D/A输出方波=========================;注意:进行本实验前,请先装载运行D/A 0V输出(调基准电压)程序Asm51\da_0v.asm ;使D/A输出端“AOUT”输出电压为0V,再进行本实验。
交通灯控制器 一 实验目的 1. 了解交通灯的亮灭规律。 2. 了解交通灯控制器的工作原理。 3. 熟悉VHDL语言编程,了解实际设计中的优化方案。 二 硬件需求 1.EDA/SOPC实验箱一台。 三 实验原理 交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车子如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂,本实验仅针对最简单的南北和东西直行的情况。 要完成本实验,首先必须了解交通路灯的亮灭规律。本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。其交通灯的亮灭规律为:初始态是两个路口的红灯全亮,之后东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。 在实验中使用8个七段码管中的任意两个数码管显示时间。东西路和南北路的通车时间均设定为20s。数码管的时间总是显示为19、18、17……2、1、0、19、18……。在显示时间小于3秒的时候,通车方向的黄灯闪烁。 四 实验内容 本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的交通灯模块和七段码管中的任意两个来显示。系统时钟选择时钟模块的1KHz时钟,黄灯闪烁时钟要求为2Hz,七段码管的时间显示为1Hz脉冲,即每1s中递减一次,在显示时间小于3秒的时候,通车方向的黄灯以2Hz的频率闪烁。系统中用S1按键进行复位。 五 实验步骤 完成交通灯控制器的实验步骤如下: 1.首先打开Quartus II软件,新建一个工程,并新建一个VHDL File。 2.按照自己的想法,编写VHDL程序。 3.对自己编写的VHDL程序进行编译并仿真。 4.仿真无误后,根据附录一的引脚对照表,对实验中用到时钟、七段码显示及交通灯模块的LED对应的FPGA引脚进行管脚绑定,然后再重新编译一次。 5.用下载电缆通过JTAG接口将对应的sof文件下载到FPGA中。 6.观察交通灯控制器的工作是否满足实验要求。 ==================================== 源代码如下 ==================================== library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; -------------------------------------------------------------------- entity exp18 is port( Clk : in std_logic; --时钟输入 Rst : in std_logic; --复位输入 R1,R2 : out std_logic; --红灯输出 Y1,Y2 : out std_logic; --黄灯输出 G1,G2 : out std_logic; --绿灯输出 Display : out std_logic_vector(7 downto 0); --七段码管显示输出 SEG_SEL : buffer std_logic_vector(2 downto 0) --七段码管扫描驱动 ); end exp18; -------------------------------------------------------------------- architecture behave of exp18 is signal Disp_Temp : integer range 0 to 15; signal Disp_Decode : std_logic_vector(7 downto 0); signal SEC1,SEC10 : integer range 0 to 9; signal Direction : integer range 0 to 15;
signal Clk_Count1 : std_logic_vector(9 downto 0); --产生0.5Hz时钟的分频计数器 signal Clk1Hz : std_logic; signal Dir_Flag : std_logic; --方向标志
begin process(Clk) begin if(Clk'event and Clk='1') then if(Clk_Count1<1000) then Clk_Count1<=Clk_Count1+1; else Clk_Count1<="0000000001"; end if; end if; end process; Clk1Hz<=Clk_Count1(9); process(Clk1Hz,Rst) begin if(Rst='0') then SEC1<=0; SEC10<=2; Dir_Flag<='0'; elsif(Clk1Hz'event and Clk1Hz='1') then if(SEC1=0) then SEC1<=9; if(SEC10=0) then SEC10<=1; else SEC10<=SEC10-1; end if; else SEC1<=SEC1-1; end if; if(SEC1=0 and SEC10=0) then Dir_Flag<=not Dir_Flag; end if; end if; end process;
process(Clk1Hz,Rst) begin if(Rst='0') then R1<='1'; G1<='0'; R2<='1'; G2<='0'; else --正常运行 if(SEC10>0 or SEC1>3) then if(Dir_Flag='0') then --横向通行 R1<='0'; G1<='1'; R2<='1'; G2<='0'; else R1<='1'; G1<='0'; R2<='0'; G2<='1'; end if; else if(Dir_Flag='0') then --横向通行 R1<='0'; G1<='0'; R2<='1'; G2<='0'; else R1<='1'; G1<='0'; R2<='0'; G2<='0'; end if; end if; end if; end process;
process(Clk1Hz) begin if(SEC10>0 or SEC1>3) then Y1<='0'; Y2<='0'; elsif(Dir_Flag='0') then Y1<=Clk1Hz; Y2<='0'; else Y1<='0'; Y2<=Clk1Hz; end if; end process;
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; when "001"=>Disp_Temp<=Direction; when "010"=>Disp_Temp<=SEC10; when "011"=>Disp_Temp<=SEC1; when "100"=>Disp_Temp<=Direction; when "101"=>Disp_Temp<=Direction; when "110"=>Disp_Temp<=SEC10; when "111"=>Disp_Temp<=SEC1; 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<="00111111"; --'0' when 1=>Disp_Decode<="00000110"; --'1' when 2=>Disp_Decode<="01011011"; --'2' when 3=>Disp_Decode<="01001111"; --'3' when 4=>Disp_Decode<="01100110"; --'4' when 5=>Disp_Decode<="01101101"; --'5' when 6=>Disp_Decode<="01111101"; --'6' when 7=>Disp_Decode<="00000111"; --'7' when 8=>Disp_Decode<="01111111"; --'8' when 9=>Disp_Decode<="01101111"; --'9' when 10=>Disp_Decode<="01001000"; --'=' when 11=>Disp_Decode<="00010100"; --'||' when others=>Disp_Decode<="00000000"; --全灭 end case; end process;
end behave;