数电实验实验报告

更新时间:2023-10-30 23:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数电实验报告

一、实验目的

1、 了解交通灯的状态转换规律,学会用硬件描述语言来建立交通灯的模块。 2、 利用该软件进行可编程逻辑器件设计,完成交通灯的逻辑仿真功能。

3、 使用编译器将设计实现,下载到JDEE—10 实验箱上进行调试和验证所设计的十字

路口交通管理信号灯的功能。

二、实验设计

实验的主要任务是模拟十字路口信号灯的工作原理。信号灯工作主要分为以下几部分: 1、 时钟部分

利用硬件提供的4MHz晶振,经过21次分频后得到1Hz的信号源。

2、 计数部分

利用时钟产生的1Hz的信号,通过一个模为24的计数器即可实现每一盏红绿灯的24秒的循环状态。

计数器采用软件提供的计数器,模为24,其中有一个异步清零端,主要用途是为了实现拓展4,利用计数器的清零从而实现整个过程的清零,该清零端接在一个微动开关上,利用开启开关时产生的一个脉冲信号,使计数器异步清零。 3、 主红绿灯的控制部分

利用计数器提供的状态信息,每一个状态(即每一秒)对应一个数码管显示的信息。所以,该模块输入即为计数线,输出有数码管十位和个位的显示数字,以及确定数码管是否亮灯的信息(亮灯则输出高电平)。

该模块的源文件:

SUBDESIGN main ( incount[4..0]: INPUT; %模为24的1Hz的计数器% out1[3..0]: OUTPUT; %十位% out2[3..0]: OUTPUT; %个位%

digselect: OUTPUT; %确定是否在数码管上显示% ) begin table

incount[4..0] => out1[3..0], out2[3..0], digselect; h\h\h\h\h\h\h\h\

h\h\h\

h\h\

h\h\h\h\h\h\h\h\h\h\h\end table; end;

4、 主红绿灯点阵显示控制部分

由于需要实现扩展1,所以需要用到点阵,点阵的控制原理与数码管大致相同,即每一个状态(每一秒)对应一个亮灯信息(是否亮灯及亮什么颜色的灯)。所以,该模块输入为计数线和时间控制线(主要实现扩展3,功能将在下面介绍),点阵形状控制线(确定点阵上的形状),输出为对应点阵的红色及绿色借口。

当时间控制线为1,即白天,则每一秒对应亮灯信息,即绿灯先亮8秒,绿灯闪烁3秒,黄灯(即红绿一起点亮)亮2秒,红灯亮11秒。

该模块的源文件:

SUBDESIGN display_main ( time_control: INPUT; %1=normal,0=night% incount[4..0]: INPUT; %1Hz的计数器% color[8..1]: INPUT; %确定点阵显示形状% dataout_red1[8..1]: OUTPUT; %红色启动点阵1% dataout_green1[8..1]: OUTPUT; %绿色启动点阵1% ) begin

if time_control==1 then

case incount[] is

when h\

dataout_green1[]=color[8..1]; %green flash%

when h\when h\when h\when h\when h\when h\when h\when h\tringle%

when h\when h\when h\dataout_green1[]=color[8..1]; %yellow flash%

when h\dataout_green1[]=color[8..1];

when h\dataout_green1[]=h\

when h\when h\when h\when h\when h\when h\when h\when h\when h\when h\end case; end if;

if time_control==0 then if incount[0] then dataout_red1[]=color[8..1]; dataout_green1[]=color[8..1];

else dataout_red1[]=h\end if; end if; end;

5、 白天黑夜控制部分

为了实现扩展3,需要增加这个模块。该模块的目的主要是产生时间信息,当时间在7点到21点时,确保红绿灯正常工作;当时间在22点到6点时,控制点阵显示为闪烁黄灯(对于数码管,由于在夜间其没有作用,故忽略对其在夜间的控制)。所以,该模块输入为时间线(该时间线不同于上面的由1Hz的信号产生,而是可以由微动开关控制,以实现题目的要求。当点击一次微动开关时,则触发模为24的计数器计数一次),输出为时间控制线(正常输出1,黑夜输出0),以及提供显示在数码管上的信息(包括显示时间的十位和个位数字)。

该模块的源文件:

SUBDESIGN normal_or_night ( time_count[4..0]:INPUT; %模为24的可自己控制的计数器% time_control: OUTPUT; %控制正常或者夜晚模式1=normal0=night% out5[3..0]: OUTPUT; %十位% out6[3..0]: OUTPUT; %个位% ) begin table

time_count[4..0] => out5[3..0], out6[3..0], time_control; h\h\h\h\h\h\h\h\h\h\

h\h\h\h\h\h\h\h\h\h\h\h\h\h\end table; end;

6、 数码管选择部分

该部分内容为基本功能,由于显示的时间包括主灯的秒数、副灯的秒数、小时数共6个,所以不能直接用一个方波信号确定显示哪一位,需要将4MHz晶振加在模为6的计数器,产生6个不同的状态,每种状态对应1个数码管的显示,由于频率极高,所以依次显示在人眼看来就是正常的一次显示6个数字。另外,由于黄灯时数码管不显示,所以也需要考虑这个输入。所以,输入有主副两个灯的亮灯信息、模为6的计数器,主副亮灯的个十位显示数字,以及小时数的个十位显示数字。

该模块的源文件:

SUBDESIGN digselector ( digselect1: INPUT; %确认第1个数字是否显示在数码管% digselect2: INPUT; %确认第2个数字是否显示在数码管% count_6[2..0]: INPUT; %模为6的4MHz计数器% digin1[3..0]: INPUT; %第1个数十位% digin2[3..0]: INPUT; %第1个数个位% digin3[3..0]: INPUT; %第2个数十位% digin4[3..0]: INPUT; %第2个数各位% digin5[3..0]: INPUT; %时间数字十位%

本文来源:https://www.bwwdw.com/article/i9h2.html

Top