北邮数电实验报告_双色点阵

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

北京邮电大学

数电综合实验报告

实验名称:双色点阵显示控制器

学院:

姓名:

班级:

学号:

班内序号:

一.设计课题的任务要求

用8×8点阵设计双色点阵显示控制器 基本要求: 1、固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn 按钮实现亮度调节,亮度变化视觉效果要尽量明显。

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

3、分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式单色显示四个汉字或图形,显示过程中,显示方式用一个btn 按键进行切换。

4、显示的图形或汉字要尽量饱满美观。 提高要求:

滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果要尽量明显。 自拟其它功能。

二.

系统设计

1. 设计思路

考虑本程序设计要求模块明确单一但需要变化多种状态,因此采用单模块多状态多进程方式实现。

其中防抖进程用于检测输入,本程序使用BTN 按键进行输入控制,而按键的键入可能由于抖动产生多个上升沿,对程序的控制产生影响。防抖动采用了延时原理来对冒险或长时间按键电平进行处理。

分频使用了多个进程产生程序所需要的多个时钟频率。 包括:clk1(扫描时钟 大于480Hz 但不过高)

clk2(占空比调节1 clk1周期的整数倍,但不过高) clk3(占空比调节2 同clk2,但占空比不同) clk4(占空比调节3 同clk2,但占空比不同) clk5(按键时钟 约100Hz) clk6(滚动变化计时 约1Hz)

状态机变化进程用于管理状态变化,当遇到按键电平信号时根据规则改变对应状态。 显示进程包括主要显示进程和一些辅助进程,辅助进程完成了时钟对应计数器计数,主进程则根据状态变化显示不同显示模式下不同的图案。

2. 总体框图

(1) 总体结构框图:

(2) 逻辑划分框图

Mode

(3)MDS图

3.各进程介绍

⑴分频进程们

分频进程含一个从50M(也可能是25M)分出的扫描频率clk1,这个频率要大于60*8=480Hz(因为人眼分辨频率为60Hz左右,要保证每排扫描时达到60Hz 则需480Hz)。然后以clk1为基准频率,将clk2、clk3、clk4以clk1的8倍数作占空比调整。

具体是,clk2、clk3、clk4均记为clk1的48分频,然后占空比调为32:16,24:24,16:32

做8倍数的原因是为了保证至少每扫完一屏才有一次占空比调整,否则在主频率不足情况下可能有些排暗有些排亮(详见问题分析)

最后再将周期约为100ms的按键时钟clk5和周期为1s的滚动时钟clk6分出就可以了。

⑵状态机进程

没什么可说的,我写的是单进程状态机,防止了多进程状态机可能带来的冒险。敏感量直接写的是防抖动输出的信号,本以为没必要加同步时序,但事实证

明这是有问题的。(详见代码分析)

⑶防抖动进程

防抖动我用的是老师给的代码。先阐述一下原理:

按键输入电平做敏感量,将输入赋值给resetmp1。

resetmp1被赋值后,将这段值有时延的赋值给resetmp2,并利用这段时间去判断是否按键仍为1。则面对下面两种情况下防抖程序可以做出调整A.突然翘起的冒险:

此种情况下若r1得到赋值,则r2在下一个时钟沿得到赋值,但由于此时r1电平为低,不能判断成功

B. 长时间按下:

此种情况下r1得到赋值,在赋值给r2的间歇判断正确,而后r2得到赋值后不再有效,因此输出仅有一个按键时钟高电平

Clk

In_signal

Resetmp1

Resetmp2

Out_signal

但在使用该进程的过程中遇到了问题,具体见问题分析。

(4)显示进程

首先说一下点阵显示的原理:

如下图所示,列高电平有效,行低电平有效,当对应高电平和低电平时中间的灯就亮了。

而不同颜色则是由不同亮度的红色灯和绿色灯光混合而成。

由于都是整排显示,为了达到整屏显示效果,需要每排进行扫描,当扫描频率较高时人眼无法分辨则可达到整屏显示。

数码管原理类似,这里不再赘述。

接着说一下亮度调节:

前面已经说过时钟分频的问题,在显示每排前对占空比时钟进行判断,则有些情况会亮,有些情况会灭,这样就能很好的形成明暗效果。

最后说一下滚动:

滚动我是用最笨的方法实现的,即一屏一屏的画出每屏图案。当时我是觉得可能

循环之类的不太好实现,不过有同学使用了循环减少了代码量,我觉得以后很值得借鉴。

三.仿真波形及分析

1、防抖动波形的测试

这两张张图中,mode为输入,并设置了很多毛刺作为干扰电平,可以从图中看出多个干扰电平出现时仅输出一个周期的高电平。那为什么仅有毛刺时也会有输出呢?因为毛刺刚好位于clk5的下降沿,这样的话也会造成程序误判一次输出(这也是这个防抖动程序的不足之处)。而连续多次下降沿毛刺造成的结果却是r1连续两个周期(其实是一个半)的高电平,同步电路就是这样一个特点。

当仅有冒险且冒险未在clk5边沿时,则不会触发电平。如下图所示

关于同步电路问题的下一步讨论(包含同步时钟选用的问题)放在问题分析部分。

2、显示波形测试

从图中可以看出当Mode改变后red_out开始有波形出现,这说明模式已经从m0转变为m1_p1

改变p后,则有:

Clk2为0时则red输出为0,这时就有了亮度的变化。

其它亮度变化以此类推,这里不再赘述。

以上波形显示了最重要的状态变化过程,状态变化后按该状态显示内容显示,只要状态机能正常工作,仿真的任务就基本完成。

四、源代码解析

(由于源程序后半部分属于机械重复,因此省略)

(这里按50M时钟输入写)

Library IEEE;

USE IEEE.STD_LOGIC_1164.All;

ENTITY sc IS

PORT (

clk,mode,p,reset:IN STD_LOGIC; --reset用于复位到m0

red_out,green_out:OUT std_logic_vector(7 downto 0):= "00000000";

row_out:OUT std_logic_vector(7 downto 0):="11111111";

num_out:OUT std_logic_vector(7 downto 0):="00000000"; --用于数码管输出

num_choose:Out std_logic_vector(5 downto 0):="111110"); --用于选择数码管

END sc;

architecture a of sc is

TYPE state_type IS (m0,m1_p1,m1_p2,m1_p3,m1_p4,m2,m3_p1,m3_p2,m3_p3);

signal mode_mp1,mode_mp2,mode_out:STD_logic; --防抖动临时信号(下同)

相关文档
最新文档