数电 电子课设交通灯课程设计报告2.docx
- 文档编号:7155855
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:19
- 大小:535.87KB
数电 电子课设交通灯课程设计报告2.docx
《数电 电子课设交通灯课程设计报告2.docx》由会员分享,可在线阅读,更多相关《数电 电子课设交通灯课程设计报告2.docx(19页珍藏版)》请在冰豆网上搜索。
数电电子课设交通灯课程设计报告2
数字电子技术课程设计
设计课题:
交通灯设计
学生姓名:
学生学号:
专业班级:
学院名称:
电气与信息工程学院
指导老师:
目录
一、课程设计任务及要求-------------------------------------------------------3
二、系统原理框图-----------------------------------------------------------------3
三、模块功能描述------------------------------------------------------------------4
1主控制器--------------------------------------------------------------------------4
2LCD显示模块-------------------------------------------------------------------4
3蜂鸣器模块----------------------------------------------------------------------5
4.系统顶层模块-------------------------------------------------------------------5
四、程序-------------------------------------------------------------------------------5
1主控制器-------------------------------------------------------------------------5
2LCD显示模块-------------------------------------------------------------------9
2蜂鸣器模块--------------------------------------------------------------------11
五、硬件使用说明总体仿真----------------------------------------------------12
六、心得体会----------------------------------------------------------------------12
七、附(主控制器功能仿真图)----------------------------------------------13
八、教师评语----------------------------------------------------------------------15
一、任务及设计要求
1.用LCD显示字母R、Y、G,别代表红黄绿三种通行状态,主干道东西向,支干道B为南北走向。
2.主干道车辆较多,所以亮绿灯的时间设为50S;支干道亮绿灯的时间设为30S。
当主干道允许通行亮绿灯时则支干道亮红灯;相反,支干道允许通行亮绿灯时则主干道亮红灯。
每次由绿灯变为红灯时,其间要亮5S的黄灯作为过渡。
3.交通灯正常运行时用LCD上相应位置的数字代表个方向的倒计时。
4.能实现系统总清零,清零后计数器由初始状态开始计数,指示灯指示主干道亮绿灯。
5.具有一定的扩展功能:
它能实现特殊状态的功能显示,用开关EMERGE作为特殊信号传感器,EMERGE为1时进入特殊状态并实现下列特殊状态功能:
(1)倒计时数字闪烁,即在全0和当前计时时间中交替显示。
(2)计数器停止计数并保持原来的时间数据。
(3)东西、南北方向的三色灯全显示红色状态。
(4)特殊状态解除后能继续返回工作状态。
(5)进入特殊状态时,音响电路发出急促的“嘀嘟”声,以示警告。
二、系统原理框图
交通灯控制器原理框图如下图所示,包括状态输入模块,主控模块、蜂鸣模块、LCD接口LCD控制模块。
三、模块功能描述
1.主控制器
主控制器决定控制电路的状态变化及输出两条干道上倒计时间(两位BCD码)。
主控制器的输入信号有:
复位R,‘1’有效、特殊状态EMERGE,‘1’有效。
功能如下表所示:
R
EMERGE
主干道(东西向)
支干道(南北向)
时间
状态
R
G
Y
R
G
Y
1
X
1
0
1
0
0
X
复位
0
1
1
0
0
1
0
0
交替显示
暂停
0
0
0
1
0
1
0
0
50秒
东西通车
0
0
0
0
1
1
0
0
5秒
过渡态
0
0
1
0
0
0
1
0
30秒
南北通车
0
0
1
0
0
0
0
0
5秒
过渡态
其中在紧急状态(emerge=1)时,能实现设计所要求的扩展功能。
2.LCD控制译码及显示模块
JTDLCD--目的:
在LCD上按格式显示交通灯的2个2位BCD码,红绿黄灯
--输入:
EW[7..0]、SN[7..0]东西、南北向的2个2位BCD码
--EWRYG[2..0]、SNRYG[2..0]东西南北的红绿灯信号,顺序为红黄绿
--CPIN时钟脉冲输入按10MHz设计;复位R
然后JLDLCD的输出数据到altium自带的LCD16X2ALCD控制核,由该内核控制LCD显示
3.蜂鸣器模块
当emerge=1时,cp脉冲促使蜂鸣器发声,否则蜂鸣器不发声。
4.系统顶层模块
总框图:
四、程序
1.主控制器
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_unsigned.ALL;
useIEEE.STD_LOGIC_arith.ALL;
entityjiaotongdengis
Port(
R,CLK:
inSTD_LOGIC;--复位("1“有效)及时钟输入
EMERGE:
inSTD_LOGIC;--紧急状态输入,‘1’有效
EWRYG:
outSTD_LOGIC_VECTOR(2downto0);--东西向状态输出,顺序为红黄绿
SNRYG:
outSTD_LOGIC_VECTOR(2downto0);--南北向状态输出,顺序为红黄绿
EW:
outSTD_LOGIC_VECTOR(7downto0);--东西向两位BCD码计数输出
SN:
outSTD_LOGIC_VECTOR(7downto0)--南北向两位BCD码计数输出
);
endjiaotongdeng;
architectureBehavioralofjiaotongdengis
signalcnt,atime,aregtime,btime,bregtime,EWH,EWL,SNH,SNL:
integerrange0to90;
begin
process(clk,emerge,r)--由复位端及紧急状态控制大计数循环的置数,暂停或减一操作
begin
if(R='1')then
cnt<=90;
elsif(rising_edge(clk))then
if(cnt=0)then
cnt<=90;
elsif(emerge='1')then
cnt<=cnt;
else
cnt<=cnt-1;
endif;
endif;
endprocess;
a:
process(clk)--东西向倒计时二进制码输出控制以及东西南北向状态灯颜色控制
variablep:
integerrange0to1;
begin
if(rising_edge(clk))then
if(emerge='1')then--紧急状态时状态灯全置红,东西向倒计数在当前状态跟全零间交替显示
EWRYG<="100";
SNRYG<="100";
if(p=0)then
p:
=1;
atime<=aregtime;
else
p:
=p-1;
atime<=0;
endif;
else
if(cnt>=40)then
aregtime<=cnt-40;
EWRYG<="001";
SNRYG<="100";
elsif(cnt>=35)then
aregtime<=cnt-35;
EWRYG<="010";
SNRYG<="100";
elsif(cnt>=0)then
aregtime<=cnt-0;
if(cnt>=5)then
EWRYG<="100";
SNRYG<="001";
else
EWRYG<="100";
SNRYG<="010";
endif;
endif;
atime<=aregtime;
endif;
endif;
endprocess;
b:
process(clk)--南北向二进制码倒计时输出控制
variableq:
integerrange0to1;
begin
if(rising_edge(clk))then
if(emerge='1')then--紧急状态时南北向到计数在全零跟当天状态间交替显示
if(q=0)then
q:
=1;
btime<=bregtime;
else
q:
=q-1;
btime<=0;
endif;
else
if(cnt>=35)then
bregtime<=cnt-35;
elsif(cnt>=5)then
bregtime<=cnt-5;
elsif(cnt>=0)then
bregtime<=cnt-0;
endif;
btime<=bregtime;
endif;
endif;
endprocess;
process(atime)--将东西向二进制码转换成两位BCD码
begin
if(atime>=90)then
EWH<=9;
EWL<=atime-90;
elsif(atime>=80)then
EWH<=8;
EWL<=atime-80;
elsif(atime>=70)then
EWH<=7;
EWL<=atime-70;
elsif(atime>=60)then
EWH<=6;
EWL<=atime-60;
elsif(atime>=50)then
EWH<=5;
EWL<=atime-50;
elsif(atime>=40)then
EWH<=4;
EWL<=atime-40;
elsif(atime>=30)then
EWH<=3;
EWL<=atime-30;
elsif(atime>=20)then
EWH<=2;
EWL<=atime-20;
elsif(atime>=10)then
EWH<=1;
EWL<=atime-10;
else
EWH<=0;
EWL<=atime;
endif;
endprocess;
withEWHselect
EW(7downto4)<="1001"when9,"1000"when8,"0111"when7,"0110"when6,"0101"when5,
"0100"when4,"0011"when3,"0010"when2,"0001"when1,"0000"when0,
"0000"whenothers;
withEWLselect
EW(3downto0)<="1001"when9,"1000"when8,"0111"when7,"0110"when6,"0101"when5,
"0100"when4,"0011"when3,"0010"when2,"0001"when1,"0000"when0,
"0000"whenothers;
process(btime)--将南北向七位二进制码装换成两位BCD码输出
begin
if(btime>=90)then
SNH<=9;
SNL<=btime-90;
elsif(btime>=80)then
SNH<=8;
SnL<=btime-80;
elsif(btime>=70)then
SNH<=7;
SNL<=btime-70;
elsif(btime>=60)then
SNH<=6;
SNL<=btime-60;
elsif(btime>=50)then
SNH<=5;
SNL<=btime-50;
elsif(btime>=40)then
SNH<=4;
SNL<=btime-40;
elsif(btime>=30)then
SNH<=3;
SNL<=btime-30;
elsif(btime>=20)then
SNH<=2;
SNL<=btime-20;
elsif(btime>=10)then
SNH<=1;
SNL<=btime-10;
else
SNH<=0;
SNL<=btime;
endif;
endprocess;
withSNHselect
SN(7downto4)<="1001"when9,"1000"when8,"0111"when7,"0110"when6,"0101"when5,
"0100"when4,"0011"when3,"0010"when2,"0001"when1,"0000"when0,
"0000"whenothers;
withSNLselect
SN(3downto0)<="1001"when9,"1000"when8,"0111"when7,"0110"when6,"0101"when5,
"0100"when4,"0011"when3,"0010"when2,"0001"when1,"0000"when0,
"0000"whenothers;
endBehavioral;
2.LCD控制器
--FilenameJTDLCD
--目的:
在LCD上按格式显示交通灯的2个2位BCD码,红绿黄灯
--输入:
EW[7..0]、SN[7..0]东西、南北向的2个2位BCD码
--EWRYG[2..0]、SNRYG[2..0]东西南北的红绿灯信号,顺序为红黄绿
--CPIN时钟脉冲输入按10MHz设计;复位R
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityJTDLCDis
port(CPIN,R,BUSY:
INSTD_LOGIC;
EW,SN:
INSTD_LOGIC_VECTOR(7DOWNTO0);
EWRYG,SNRYG:
INSTD_LOGIC_VECTOR(2DOWNTO0);
CLK,RST,STROBE,OUTLINE:
OUTSTD_LOGIC;
DATA:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
ADDR:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
endentity;
architectureJGTofJTDLCDis
TYPESTATESIS(S0,S1,S2,S3,S4);
SIGNALS:
STATES;
SIGNALLCDPT:
INTEGERRANGE0TO10;
SIGNALCPCT:
INTEGERRANGE0TO65535;
SIGNALCP:
STD_LOGIC;
SIGNALASCEW,ASCSN:
STD_LOGIC_VECTOR(7DOWNTO0);
begin
PROCESS(CPIN,R)
BEGIN
CLK<=CPIN;
IFR='1'THEN
CPCT<=65535;
ELSIFCPIN='1'ANDCPIN'EVENTTHEN
IFCPCT=0THEN
CPCT<=65535;CP<=NOTCP;
ELSE
CPCT<=CPCT-1;
ENDIF;
ENDIF;
ENDPROCESS;--分频为500US周期
--主进程:
拟采用500us时钟,即在500us后完成状态转换,修改LCDPT指针
--S0:
初始状态,在R=1时,处于S0状态,LCDPT=0
--流程:
输出rst=1,转S1
--S1:
输出RST=0;判断BUSY=0?
:
Y:
LCDPT+1;LCDPT到固定最后?
:
:
N:
->S2
--:
:
Y:
转S3
--;N;NULL
--S2:
给出STROBE信号。
转S1
--S1,S2完成初始化固定显示的功能
PROCESS(CP,R)
BEGIN
IFR='1'THEN
S<=S0;LCDPT<=0;RST<='1';
ELSIFCP='1'ANDCP'EVENTTHEN
CASESIS
WHENS0=>S<=S1;LCDPT<=0;RST<='1';
WHENS1=>RST<='0';STROBE<='0';
IFBUSY='0'THEN
LCDPT<=LCDPT+1;
IFLCDPT=5THEN
S<=S3;
ELSE
S<=S2;
ENDIF;
ENDIF;
WHENS2=>S<=S1;STROBE<='1';
--S3~S4完成扫描显示功能
--S3:
BUSY=0?
:
Y:
LCDPT循环+1,转S4
--S4:
给出STROBE信号,转S3
WHENS3=>STROBE<='0';
IFBUSY='0'THEN
IFLCDPT=10THEN
LCDPT<=5;
ELSE
LCDPT<=LCDPT+1;
ENDIF;
S<=S4;
ENDIF;
WHENS4=>STROBE<='1';S<=S3;
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
ENDPROCESS;
--选择输出进程(LCDPT)
--LCDPT=0,NULL
--=1~4显示EWSNE45H,5W57H,6S53H,9N4EH,10
PROCESS(LCDPT,EW,ASCEW,SN,ASCSN)
BEGIN
CASELCDPTIS
WHEN0=>NULL;
WHEN1=>DATA<="01000101";ADDR<="0101";OUTLINE<='0';
WHEN2=>DATA<="01010111";ADDR<="0110";OUTLINE<='0';
WHEN3=>DATA<="01010011";ADDR<="1001";OUTLINE<='0';
WHEN4=>DATA<="01001110";ADDR<="1010";OUTLINE<='0';
--LCDPT=5,6EWBCD码EH,5EL,6
--LCDPT=7EW红绿灯R,4
--LCDPT=89SNBCD码SH,9SL,10
--LCDPT=10SN红绿灯。
G,8R52H;Y59H;G47H
WHEN5=>DATA<="0011"&EW(7DOWNTO4);ADDR<="0101";OUTLINE<='1';
WHEN6=>DATA<="0011"&EW(3DOWNTO0);ADDR<="0110";OUTLINE<='1';
WHEN7=>DATA<=ASCEW;ADDR<="0100";OUTLINE<='1';
WHEN8=>DATA<="0011"&SN(7DOWNTO4);ADDR<="1001";OUTLINE<='1';
WHEN9=>DATA<="0011"&SN(3DOWNTO0);ADDR<="1010";OUTLINE<='1';
WHEN10=>DATA<=ASCSN;ADDR<="1000";OUTLINE<='1';
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
PROCESS(EWRYG)
BEGIN
CASEEWRYGIS
WHEN"100"=>ASCEW<="01010010";
WHEN"010"=>ASCEW<="01011001";
WHEN"001"=>ASCEW<="01000111";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
PROCESS(SNRYG)
BEGIN
CASESNRYGIS
WHEN"100"=>ASCSN<="01010010";
WHEN"010"=>ASCSN<="01011001";
WHEN"001"=>ASCSN<="01000111";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
endarchitectureJGT;
3.蜂鸣器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityspeais
port(emerge,cp:
instd_logic;
speakers:
outstd_logic
);
endspea;
architecturejgtofspeais
signalcpct:
integerrange0to5;
signalspeak:
std_logic;
begin
process(cp,emerge)
begin
ifemerge='0'then
cpct<=0;speak<='0';
elsifcp='1'andcp'eventthen
ifcpct=5then
cpct<=0;speak<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数电 电子课设 交通灯课程设计报告2 电子 交通灯 课程设计 报告