北邮 数字电路与逻辑实验下 电子沙漏的设计与实现.docx
- 文档编号:30510045
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:71
- 大小:948.68KB
北邮 数字电路与逻辑实验下 电子沙漏的设计与实现.docx
《北邮 数字电路与逻辑实验下 电子沙漏的设计与实现.docx》由会员分享,可在线阅读,更多相关《北邮 数字电路与逻辑实验下 电子沙漏的设计与实现.docx(71页珍藏版)》请在冰豆网上搜索。
北邮数字电路与逻辑实验下电子沙漏的设计与实现
北京邮电大学
2014~2015学年第一学期
《数字电路与逻辑设计下》实验报告
学院:
信通院
班级:
2012211120
姓名:
***
学号:
**********
题目:
电子沙漏的设计与实现
一.设计课题的任务要求
基本要求:
1.
采用8*8双色点阵先是电子沙漏的开机界面,如图2所示。
其中红色LED代表沙漏的上半部分沙粒VD0~VD15,绿色LED代表沙漏的下半部分VD0’~VD15’。
2.用拨码开关SW1模拟重力感应器。
当SW1为低电平时,沙粒从VD0~VD15向VD0’~VD15’移动;当SW1为高电平时沙粒从VD0’~VD15’向VD0~VD15移动。
3.
按键BTN0作为计时启动停止按键,启动后沙粒即可按照SW1设定的方向移动,以SW1为低电平时为例,LED移动的顺序与对应关系如图3的1~16所示(若SW1为高电平,则点阵显示移动顺序为16~1)。
每颗沙粒的移动时间为1秒,当移动到图3的16时,若SW1仍为低电平,则保持沙粒不动,但计时继续,直到SW1的电平发生变化或者BTN0计时停止。
4.设计实现一个60秒计时器,但按键BTN0启动时开始工作,用于在沙粒移动过程中进行及时校准,并用数码管DISP0~DISP1显示计时结果。
提高要求:
1.可以调节控制电子沙漏的流动速度。
2.用多种方式呈现电子沙漏界面。
3.自行设定沙漏的移动路径,显示每颗沙粒的移动过程。
4.自接重力感应器,实现真实的电子沙漏功能。
5.自拟其他功能。
二.系统设计
1.设计思路
我的设计思路大致可以分为两部分,一部分是60s的计时部分,另一部分是沙漏的点阵显示部分,这两个部分看似独立,实际上密不可分,有许多共通之处。
60s计时部分:
我们使用上学期学到的知识基本上就可以解决所有问题。
依靠板子上原有的50MHZ的时钟,我们可以设计相应的分频器制作出时间周期为一秒的时钟,这个时钟是整个实验的基础。
利用这个时钟我们可以控制计时器的数字一秒一变,达到计数的效果。
在显示方面,由于我们使用的是八段数码管,其段码与位码在同一时刻只能输入一个,所以我们需要进行快速的扫描,利用人眼的视觉残留效应使我们实际看到的是两位不停跳变的计时器。
为了实现快速扫描,经实践证明,我们要设计一个分频比为2000的分频器。
通过上述方法,60s计时的问题就已经被解决了。
沙漏点阵显示部分:
点阵模块对于我们是全新的,但是稍加学习我们会发现他的显示原理与数码管其实大同小异——都是利用视觉残留效应。
点阵共有8行8列,当相应的行为低电平,列为高电平时,可以点亮发光二极管;同时列分为红和绿来控制亮灯的颜色。
对于行来说,我们也要通过快速扫描来实现视觉残留,所用分频器和数码管所用分频器相同。
对于列来说,我们需要将实验要求所给的17幅图统统输入到程序中,在不同的时间切换到不同的图片,以此来达到使沙漏流动显示的目的。
这样一看,这一部分也并不是非常困难。
2.
总体框图
为1
为0
为1
否
X=X-1
否
X=X+1
是
否
否
是
是
是
是
否
3.分块设计
60s计时模块:
分频比为25M
控制计时
分频比为2000
控制扫描显示
点阵显示模块:
分频比为25M
控制图像切换
控制行扫描
三.仿真波形及波形分析
波形如图所示:
波形分析:
从图中我们可以看出,我们可以操作5个按键,他们分别是:
CLEAR——清零键,START——开始键,START2——暂停键,G——重力控制键,V——速度控制键。
最开始时,START与START2均置零,计时器与点阵均不开始工作,当START与START2置一时,分频器开始工作,控制画面的BIG的数值开始增加。
当重力反转时,可以看到BIG的数值开始减小。
当START2置零时,BIG的数值保持不变,但是未清零,说明进入了程序暂停状态,START2重新置一,BIG重新开始增加;当START置零时,一切清零,再置一后,程序从头开始运行。
CLEAR置一以后也会让程序清零从头开始运行。
V置一后,程序的运行速度发生变化,BIG的改变速度明显变快,从而使图像的切换速度变快,实现了变速功能。
四.源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfirstIS
PORT(
ROW:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
RED:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
GRE:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
CLK,CLEAR:
INSTD_LOGIC;
G:
INSTD_LOGIC;
START:
INSTD_LOGIC;
START2:
INSTD_LOGIC;
S:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
SEG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
V:
INSTD_LOGIC);
ENDfirst;
ARCHITECTUREAOFfirstIS
SIGNALTMP:
INTEGERRANGE0TO24999999;
SIGNALTMP2:
INTEGERRANGE0TO12499999;
SIGNALTMP3:
INTEGERRANGE0TO1999;
SIGNALCOUNT2:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALBIG:
INTEGERRANGE0TO50;
SIGNALBIG1:
INTEGERRANGE0TO50;
SIGNALBIG2:
INTEGERRANGE0TO50;
SIGNALCLKTMP6:
STD_LOGIC;
SIGNALG1:
STD_LOGIC;
SIGNALCLKTMP:
STD_LOGIC;
SIGNALCLKTMP2:
STD_LOGIC;
SIGNALKAIGUAN:
STD_LOGIC;
SIGNALCLKTMP5:
STD_LOGIC;
SIGNALTMP5:
INTEGERRANGE0TO2999;
SIGNALCLKTMP3:
STD_LOGIC;
SIGNALROW1:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALQL:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALQH:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALJISHIH:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALJISHIL:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
P1:
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFSTART2='1'THEN
IFSTART='1'THEN
IFCLEAR='1'THEN
KAIGUAN<='0';
ENDIF;
IFCLEAR='0'THEN
KAIGUAN<='1';
ENDIF;
IFKAIGUAN='1'THEN
IFTMP=24999999THEN--分频器,时钟周期是1S,用来控制计时器
TMP<=0;
CLKTMP<=NOTCLKTMP;
ELSE
TMP<=TMP+1;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
IF(CLK'EVENTANDCLK='1')THEN
IFSTART2='1'THEN
IFSTART='1'THEN
IFCLEAR='1'THEN
KAIGUAN<='0';
ENDIF;
IFCLEAR='0'THEN
KAIGUAN<='1';
ENDIF;
IFKAIGUAN='1'THEN
IFTMP2=12499999THEN--分频器,时钟周期是0.5S,用来获得不同的沙子流动速度
TMP2<=0;
CLKTMP2<=NOTCLKTMP2;
ELSE
TMP2<=TMP2+1;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSP1;
P2:
PROCESS(CLKTMP)
BEGIN
IFSTART='1'THEN
IFKAIGUAN='1'THEN
IF(CLKTMP'EVENTANDCLKTMP='1')THEN
IFQH="0101"ANDQL="1001"THEN--计时器的设计,低位为九且高位为五则归零
QL<="0000";
QH<="0000";
ELSIFQL="1001"THEN--否则低位为九就低位归零高位加一
QL<="0000";
QH<=QH+1;
ELSE
QL<=QL+1;--低位不停的加一
ENDIF;
ENDIF;
ELSEQL<="0000";
QH<="0000";--与开关有关的一些清零
ENDIF;
ENDIF;
IFSTART='0'THEN
QL<="0000";
QH<="0000";
ENDIF;
ENDPROCESSP2;
P3:
PROCESS(QH,QL)--将高地位转化成对应数字
BEGIN
CASEQLIS
WHEN"0000"=>JISHIH<="1111110";
WHEN"0001"=>JISHIH<="0110000";
WHEN"0010"=>JISHIH<="1101101";
WHEN"0011"=>JISHIH<="1111001";
WHEN"0100"=>JISHIH<="0110011";
WHEN"0101"=>JISHIH<="1011011";
WHEN"0110"=>JISHIH<="1011111";
WHEN"0111"=>JISHIH<="1110000";
WHEN"1000"=>JISHIH<="1111111";
WHEN"1001"=>JISHIH<="1111011";
WHENOTHERS=>JISHIH<="0000000";
ENDCASE;
CASEQHIS
WHEN"0000"=>JISHIL<="1111110";
WHEN"0001"=>JISHIL<="0110000";
WHEN"0010"=>JISHIL<="1101101";
WHEN"0011"=>JISHIL<="1111001";
WHEN"0100"=>JISHIL<="0110011";
WHEN"0101"=>JISHIL<="1011011";
WHEN"0110"=>JISHIL<="1011111";
WHEN"0111"=>JISHIL<="1110000";
WHEN"1000"=>JISHIL<="1111111";
WHEN"1001"=>JISHIL<="1111011";
WHENOTHERS=>JISHIL<="0000000";
ENDCASE;
ENDPROCESSP3;
P6:
PROCESS(CLKTMP3)--控制数码管位码的扫描
BEGIN
IFSTART='1'THEN
IFKAIGUAN='0'THEN
S<="111111";
ENDIF;
IFKAIGUAN='1'THEN
IFCLKTMP3='1'THEN
S<="111110";
ELSES<="111101";
ENDIF;
ENDIF;
ENDIF;
IFSTART='0'THEN
S<="111111";
ENDIF;
ENDPROCESSP6;
P8:
PROCESS(CLKTMP3)--将计数器的高低位轮流赋值给数码管段码,
BEGIN
IFSTART='1'THEN
IFKAIGUAN='0'THEN
SEG<="0000000";
ENDIF;
IFKAIGUAN='1'THEN
IFCLKTMP3='1'THEN
SEG<=JISHIH;
ELSESEG<=JISHIL;
ENDIF;
ENDIF;
ENDIF;
IFSTART='0'THEN
SEG<="0000000";
ENDIF;
ENDPROCESSP8;
P9:
PROCESS(CLK)--分频比为2000的分频器,扫描都由这个分频器完成
BEGIN
IFKAIGUAN='1'THEN
IF(CLK'EVENTANDCLK='1')THEN
IFTMP3=1999THEN
TMP3<=0;
CLKTMP3<=NOTCLKTMP3;
ELSE
TMP3<=TMP3+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSP9;
P10:
PROCESS(CLKTMP5,KAIGUAN)--控制点阵的行扫描,从1到7循环
BEGIN
IFSTART='1'THEN
IFKAIGUAN='1'THEN
IF(CLKTMP5'EVENTANDCLKTMP5='1')THEN
IFCOUNT2="0111"THEN
COUNT2<="0000";
ELSECOUNT2<=COUNT2+1;
ENDIF;
ENDIF;
ENDIF;
IFSTART='0'THEN
COUNT2<="1111";
ENDIF;
ELSECOUNT2<="0000";
ENDIF;
ENDPROCESSP10;
P11:
PROCESS(CLKTMP)
BEGIN
IFSTART='1'THEN--用时钟周期为1S或者0.5S的分频器控制负责图像切换的BIG,因为加入了路径显示,所以BIG的值不再仅仅限于16
IFKAIGUAN='1'THEN
IF(CLKTMP'EVENTANDCLKTMP='1')THEN
IFG='0'THEN
IFBIG1=50THEN
IFG='0'THEN
BIG1<=50;
ELSEBIG1<=BIG1-1;
ENDIF;
ELSEBIG1<=BIG1+1;
ENDIF;
ENDIF;
IFG='1'THEN--BIG1对应1S的分频器,BIG2对应0.5S的分频器
IFBIG1=0THEN
IFG='1'THEN
BIG1<=0;
ELSEBIG1<=BIG1+1;
ENDIF;
ELSEBIG1<=BIG1-1;
ENDIF;
ENDIF;
ENDIF;
ELSEBIG1<=0;
ENDIF;
ENDIF;
IFSTART='0'THEN
BIG1<=0;
ENDIF;
IFV='1'THEN
BIG1<=BIG2;
ENDIF;
ENDPROCESSP11;
P12:
PROCESS(COUNT2)--点阵行扫描
BEGIN
CASECOUNT2IS
WHEN"0000"=>ROW1<="11111110";
WHEN"0001"=>ROW1<="11111101";
WHEN"0010"=>ROW1<="11111011";
WHEN"0011"=>ROW1<="11110111";
WHEN"0100"=>ROW1<="11101111";
WHEN"0101"=>ROW1<="11011111";
WHEN"0110"=>ROW1<="10111111";
WHEN"0111"=>ROW1<="01111111";
WHENOTHERS=>ROW1<="11111111";
ENDCASE;
IFKAIGUAN='0'THEN
ROW<="11111111";
ELSEROW<=ROW1;
ENDIF;
ENDPROCESSP12;
P13:
PROCESS(BIG)--列扫描,将沙漏需要显示全部情况都输入到里面,区分红绿
BEGIN
IFBIG=0THEN
CASEROW1IS
WHEN"11111110"=>RED<="00000000";
WHEN"11111101"=>RED<="00000000";
WHEN"11111011"=>RED<="00000000";
WHEN"11110111"=>RED<="00000000";
WHEN"11101111"=>RED<="00001000";
WHEN"11011111"=>RED<="00011100";
WHEN"10111111"=>RED<="00111110";
WHEN"01111111"=>RED<="01111111";
WHENOTHERS=>RED<="11111111";
ENDCASE;
IFKAIGUAN='0'THEN
RED<="00000000";
ENDIF;
CASEROW1IS
WHEN"11111110"=>GRE<="01111111";
WHEN"11111101"=>GRE<="00111110";
WHEN"11111011"=>GRE<="00011100";
WHEN"11110111"=>GRE<="00001000";
WHEN"11101111"=>GRE<="00000000";
WHEN"11011111"=>GRE<="00000000";
WHEN"10111111"=>GRE<="00000000";
WHEN"01111111"=>GRE<="00000000";
WHENOTHERS=>GRE<="11111111";
ENDCASE;
IFKAIGUAN='0'THEN
GRE<="00000000";
ENDIF;
ENDIF;
IFBIG=1THEN
CASEROW1IS
WHEN"11111110"=>RED<="00000000";
WHEN"11111101"=>RED<="00000000";
WHEN"11111011"=>RED<="00000000";
WHEN"11110111"=>RED<="00001000";
WHEN"11101111"=>RED<="00001000";
WHEN"11011111"=>RED<="00011100";
WHEN"10111111"=>RED<="00111110";
WHEN"01111111"=>RED<="01110111";
WHENOTHERS=>RED<="11111111";
ENDCASE;
CASEROW1IS
WHEN"11111110"=>GRE<="01111111";
WHEN"11111101"=>GRE<="00111110";
WHEN"11111011"=>GRE<="00011100";
WHEN"11110111"=>GRE<="00000000";
WHEN"11101111"=>GRE<="00000000";
WHEN"11011111"=>GRE<="00000000";
WHEN"10111111"=>GRE<="00000000";
WHEN"01111111"=>GRE<="00001000";
WHENOTHERS=>GRE<="11111111";
ENDCASE;
ENDIF;
IFBIG=2THEN
CASEROW1IS
WHEN"11111110"=>RED<="00000000";
WHEN"11111101"=>RED<="00000000";
WHEN"11111011"=>RED<="00001000";
WHEN"11110111"=>RED<="00000000";
WHEN"11101111"=>RED<="00001000";
WHEN"11011111"=>RED<="00011100";
WHEN"10111111"=>RED<="00111110";
WHEN"01111111"=>RED<="01110111";
WHENOTHERS=>RED<="11111111";
ENDCASE;
CASEROW1IS
WHEN"11111110"=>GRE<="01111111";
WHEN"11111101"=>GRE<="00111110";
WHEN"11111011"=>GRE<="00010100";
WHEN"11110111"=>GRE<="00001000";
WHEN"11101111"=>GRE<="00000000";
WHEN"11011111"=>GRE<="00000000";
WHEN"10111111"=>GRE<="00000000";
WHEN"01111111"=>GRE<="00001000";
WHENOTHERS=>GRE<="11111111";
ENDCASE;
ENDIF;
IFBIG=3THEN
CASEROW1IS
WHEN"11111110"=>RED<="00000000";
WHEN"11111101"=>RED<="00001000";
WHEN"11111011"=>RED<="00000000";
WHEN"11110111"=>RED<="00000000";
WHEN"11101111"=>RED<="00001000";
WHEN"11011111"=>RED<="00011100";
WHEN"10111111"=>R
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮 数字电路与逻辑实验下 电子沙漏的设计与实现 数字电路 逻辑 实验 电子 沙漏 设计 实现