数字电路与逻辑设计实验设计方案双色点阵显示控制器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路与逻辑设计

实验设计方案

题目:双色点阵显示控制器

一、设计思路

⏹基本要求:

1.固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn

按钮实现亮度调节,亮度变化视觉效果要尽量明显。

2.用从红到绿8级渐变色显示一个固定汉字或图形。

3.分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式

单色显示四个汉字或图形,显示过程中,显示方式用一个btn按键

进行切换。

4.显示的图形或汉字要尽量饱满美观。

⏹提高要求:

1.滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果

要尽量明显。

2.自拟其它功能。

二、系统设计

总体框图

方框图(模块划分)

ASM图

MDS图

三、仿真波形及仿真分析

1.时钟分频

分析:这个进程组用于产生不同频率的时钟用于不同用途的时钟信号,图中所表达的也是如此,不同频率的时钟信号。

对于lightness信号来说,它是一个低分频的,可控占空比的信号,图中所示为占空比为80%时的信号。

2.防抖

分析:Mode_in和intensity_in信号有短时间的抖动现象,在经过防抖之后,短时间的抖动并不会影响mode和intensity信号。

Mode_in和intensity_in信号有长时间的高电平,这会使控制电路既要检测上升沿又要检测下降沿。经过防抖程序之后,将控制信号mode和intensity处理成脉冲信号,这样控制电路只需检测是否有正脉冲就可以了。

3.状态控制与亮度调节

分析:每当mode信号有一个正脉冲时,state就变化一次。每当intensity信号有一个正脉冲时,lightness就改变一次占空比。

4.颜色改变

分析:当状态改变到S1的时候,占空比信号才会改变。从图中可以看出,可控占空比信号是每八个时间单位为一组,这八个时间单位分别代表着第一行被选中、第二行被选中、……第八行被选中。当第一行被选中时,可以清楚看到红色和绿色控制信号的占空比是不同的,这样就会导致点阵点的颜色中红色成分和绿色成分亮度不同,从而改变其颜色。

5.字符显示部分

分析:从图中可以看出,当模式切换后,列内容信号会被赋予不同的值,且随时间而改变。

6.显示部分

分析:从图中可以看出,各个信号之间的逻辑关系符合代码中的表达式。四、源程序(含注释)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY pointmatrix IS

PORT(

clk:IN STD_LOGIC;

mode_in:IN STD_LOGIC;

intensity_in:IN STD_LOGIC;

row:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

red_col:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

green_col:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END pointmatrix;

ARCHITECTURE a OF pointmatrix IS

TYPE all_state IS (S0,S1,S2,S3,S4);

SIGNAL state:all_state;

SIGNAL clk_move:STD_LOGIC;

SIGNAL clk_div:STD_LOGIC;

SIGNAL clk_occupy:STD_LOGIC;

SIGNAL clk_temp:STD_LOGIC;

SIGNAL clk_lightness:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL data0,data1,data2,data3,data4,data5,data6,data7:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL data_row:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL data_col:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL gr_occupy:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL re_occupy:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL mode:STD_LOGIC;

SIGNAL intensity:STD_LOGIC;

SIGNAL occupy_count:INTEGER RANGE 0 TO 100;

SIGNAL tmp1,tmp2,tmp3,tmp4:STD_LOGIC;

BEGIN

div_move:PROCESS(clk) --用于防抖的分频

V ARIABLE count:INTEGER RANGE 0 TO ;

BEGIN

IF clk'EVENT AND clk='1' THEN

IF count=9999999 THEN

count:=0;

ELSE

count:=count+1;

END IF;

IF count<5000000 THEN

clk_move<='1';

ELSE

clk_move<='0';

相关文档
最新文档