数电 电子课设交通灯课程设计报告2文档格式.docx

上传人:b****6 文档编号:20253887 上传时间:2023-01-21 格式:DOCX 页数:19 大小:535.87KB
下载 相关 举报
数电 电子课设交通灯课程设计报告2文档格式.docx_第1页
第1页 / 共19页
数电 电子课设交通灯课程设计报告2文档格式.docx_第2页
第2页 / 共19页
数电 电子课设交通灯课程设计报告2文档格式.docx_第3页
第3页 / 共19页
数电 电子课设交通灯课程设计报告2文档格式.docx_第4页
第4页 / 共19页
数电 电子课设交通灯课程设计报告2文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数电 电子课设交通灯课程设计报告2文档格式.docx

《数电 电子课设交通灯课程设计报告2文档格式.docx》由会员分享,可在线阅读,更多相关《数电 电子课设交通灯课程设计报告2文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

数电 电子课设交通灯课程设计报告2文档格式.docx

三、模块功能描述

1.主控制器

主控制器决定控制电路的状态变化及输出两条干道上倒计时间(两位BCD码)。

主控制器的输入信号有:

复位R,‘1’有效、特殊状态EMERGE,‘1’有效。

功能如下表所示:

R

EMERGE

主干道(东西向)

支干道(南北向)

时间

状态

G

Y

1

X

复位

交替显示

暂停

50秒

东西通车

5秒

过渡态

30秒

南北通车

其中在紧急状态(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.系统顶层模块

总框图:

四、程序

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_unsigned.ALL;

useIEEE.STD_LOGIC_arith.ALL;

entityjiaotongdengis

Port(

R,CLK:

inSTD_LOGIC;

--复位("

1“有效)及时钟输入

EMERGE:

--紧急状态输入,‘1’有效

EWRYG:

outSTD_LOGIC_VECTOR(2downto0);

--东西向状态输出,顺序为红黄绿

SNRYG:

--南北向状态输出,顺序为红黄绿

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)--由复位端及紧急状态控制大计数循环的置数,暂停或减一操作

if(R='

1'

)then

cnt<

=90;

elsif(rising_edge(clk))then

if(cnt=0)then

elsif(emerge='

=cnt;

else

=cnt-1;

endif;

endprocess;

a:

process(clk)--东西向倒计时二进制码输出控制以及东西南北向状态灯颜色控制

variablep:

integerrange0to1;

if(rising_edge(clk))then

if(emerge='

)then--紧急状态时状态灯全置红,东西向倒计数在当前状态跟全零间交替显示

EWRYG<

="

100"

;

SNRYG<

;

if(p=0)then

p:

=1;

atime<

=aregtime;

=p-1;

=0;

if(cnt>

=40)then

aregtime<

=cnt-40;

EWRYG<

001"

SNRYG<

elsif(cnt>

=35)then

aregtime<

=cnt-35;

010"

elsif(cnt>

=0)then

=cnt-0;

=5)then

endprocess;

b:

process(clk)--南北向二进制码倒计时输出控制

variableq:

)then--紧急状态时南北向到计数在全零跟当天状态间交替显示

if(q=0)then

q:

btime<

=bregtime;

=q-1;

bregtime<

=cnt-35;

=cnt-5;

=cnt-0;

process(atime)--将东西向二进制码转换成两位BCD码

if(atime>

=90)then

EWH<

=9;

EWL<

=atime-90;

elsif(atime>

=80)then

=8;

=atime-80;

=70)then

=7;

=atime-70;

=60)then

=6;

=atime-60;

=50)then

EWH<

=5;

=atime-50;

=40)then

=4;

=atime-40;

=30)then

=3;

=atime-30;

=20)then

=2;

=atime-20;

=10)then

=atime-10;

=atime;

endif;

withEWHselect

EW(7downto4)<

="

1001"

when9,"

1000"

when8,"

0111"

when7,"

0110"

when6,"

0101"

when5,

"

0100"

when4,"

0011"

when3,"

0010"

when2,"

0001"

when1,"

0000"

when0,

whenothers;

withEWLselect

EW(3downto0)<

process(btime)--将南北向七位二进制码装换成两位BCD码输出

if(btime>

SNH<

SNL<

=btime-90;

elsif(btime>

SnL<

=btime-80;

=btime-70;

=btime-60;

SNH<

=btime-50;

=btime-40;

=btime-30;

=btime-20;

=btime-10;

=btime;

withSNHselect

SN(7downto4)<

withSNLselect

SN(3downto0)<

endBehavioral;

2.LCD控制器

--FilenameJTDLCD

--目的:

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='

THEN

CPCT<

=65535;

ELSIFCPIN='

ANDCPIN'

EVENTTHEN

IFCPCT=0THEN

CP<

=NOTCP;

ELSE

=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

--:

转S3

--;

N;

NULL

--S2:

给出STROBE信号。

转S1

--S1,S2完成初始化固定显示的功能

PROCESS(CP,R)

S<

=S0;

LCDPT<

RST<

='

ELSIFCP='

ANDCP'

CASESIS

WHENS0=>

=S1;

WHENS1=>

RST<

0'

STROBE<

IFBUSY='

LCDPT<

=LCDPT+1;

IFLCDPT=5THEN

=S3;

=S2;

WHENS2=>

--S3~S4完成扫描显示功能

--S3:

BUSY=0?

LCDPT循环+1,转S4

--S4:

给出STROBE信号,转S3

WHENS3=>

STROBE<

IFLCDPT=10THEN

=S4;

WHENS4=>

S<

WHENOTHERS=>

NULL;

ENDCASE;

ENDPROCESS;

--选择输出进程(LCDPT)

--LCDPT=0,NULL

--=1~4显示EWSNE45H,5W57H,6S53H,9N4EH,10

PROCESS(LCDPT,EW,ASCEW,SN,ASCSN)

CASELCDPTIS

WHEN0=>

WHEN1=>

DATA<

01000101"

ADDR<

OUTLINE<

WHEN2=>

01010111"

WHEN3=>

01010011"

WHEN4=>

01001110"

1010"

--LCDPT=5,6EWBCD码EH,5EL,6

--LCDPT=7EW红绿灯R,4

--LCDPT=89SNBCD码SH,9SL,10

--LCDPT=10SN红绿灯。

G,8R52H;

Y59H;

G47H

WHEN5=>

DATA<

&

EW(7DOWNTO4);

WHEN6=>

EW(3DOWNTO0);

WHEN7=>

=ASCEW;

WHEN8=>

SN(7DOWNTO4);

WHEN9=>

SN(3DOWNTO0);

WHEN10=>

=ASCSN;

WHENOTHERS=>

ENDCASE;

PROCESS(EWRYG)

CASEEWRYGIS

WHEN"

=>

ASCEW<

01010010"

01011001"

01000111"

PROCESS(SNRYG)

CASESNRYGIS

ASCSN<

endarchitectureJGT;

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;

process(cp,emerge)

ifemerge='

then

cpct<

speak<

elsifcp='

andcp'

eventthen

ifcpct=5then

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1