数字电路与逻辑设计综合实验报告
- 格式:doc
- 大小:627.90 KB
- 文档页数:20
数字电路与逻辑设计综合实验报告
课题名称:点阵显示控制器
学院:电子工程学院
学号:072385
班内序号:30
姓名:杨杨
实验指导教师:张永梅
课程主讲教师: 刘丽华
报告提交日期: 2009年12月30日
北京邮电大学
一、课题名称
点阵显示控制器
二、摘要及关键词
本次综合性数字电路实验主要完成了点阵显示控制器的三种功能,分别是光电扫描,字符显示以及动态图像显示。本次实验所采用的软件是QuartersⅡ,硬件是EPM7128SLC84-15。实验通过对于8×8点阵来显示相应的图像,分别通过行和列控制显示,显示的频率通过分频来得到。本课题的目的是让我们初步了解点阵结构的显示器,为以后的更进一步学习打下基础。
关键词:扫描分频点阵显示
三、设计课题的任务要求
1.使用8×8点阵做一个基本矩阵,设计扫描控制电路,使光点从左上角像素点开始扫描,终止于右下角像素点,然后周而复始地重复下去,扫过一帧所需时间为16秒;
2.用8×8点阵显示字符,每次显示1个字符,至少显示4个字符,每秒切换一个字符;
3.用1个8×8点阵显示一幅活动图象或多个字符滚动显示;
4.以上三种功能可以手动或自动转换;
5.选做:自拟其它功能。
四、设计思路和总体结构框图
1.设计思路及分块电路设计
本次实验的总体设计思路是通过分频器产生的时钟信号进行不同频率的扫描,从而实现不同图像的扫描。
1.扫描(hehesm):
输入1MHz的时钟信号分频24位,周期为16s,使扫描8×8点阵的时间
为 固定的16s 。24位信号中的18,19,20控制列选通21,22,23控制行选通,从左往右扫描完一行后再转到下一行,依次从上向下逐行扫描信号。
2.显示(hehexianshi):
显示部分用计数器实现。输入1MHz 的时钟信号分频22位得到一个4s 的时间周期,每秒显示一个字符。定义20,21为gaowei ,0,1,2为diwei ,gaowei 用来控制四个字符之间的转换,diwei 用来控制二极管快速显示行和列的点,视觉上形成暂留现象出现连续的字符。
3.滚动(hehegd):
滚动部分由计数器和译码器实现。输入1MHz 的时钟信号分频22位得到一个4s 的时间周期,每秒显示一个字符。定义18,19,20,21为gaowei ,0,1,2为diwei ,gaowei 用来控制16种滚动图案的转换,diwei 用来控制二极管快速显示行和列的点,高频扫描每种图案,使视觉上形成自右向左滚动的效果。
4.动画(hehedh):
由于前面用计数器实现所剩空间较小,故动画部分用状态机实现。输入1MHz 的时钟信号分频19位得到一个0.5s 的时间周期,定义18,19为gaowei ,0为diwei ,gaowei 控制每一图形的转换,diwei 控制二极管快速显示同一图形中的不同状态,以使视觉上形成暂留现象出现连续变化的图案。
2.总体结构框图
3
五、 控制器部分的状态转移图和流程图
1.状态转移图
六、所实现功能说明
1.使用8×8点阵显示屏设计一个点扫描控制电路,循环一周期为16秒,从左上角开始从左往右从上往下扫描至右下角截止,回到起点继续循环扫描。
2.显示“2083”4个不同字符,循环周期为4秒,每秒显示一个字符。
3.滚动显示“JYDZ..”,循环周期为4秒,使视觉上形成自右向左滚动的效果。
4.显示动画方型扩散图案,由中间到四周扩散
5.每进行一次切换就从该状态初始状态开始
七、所用元器件清单
7.5伏稳压电源一块
EPM7128SLC84—15实验版一块
八、完整源程序
1.
library ieee; --扫描程序
use ieee.std_logic_1164.all;
use ieee.std_logic_signed.all;
entity saomiao is
port(
clk2,reset2:in std_logic;
hang2:out std_logic_vector(7 downto 0);
lie2:out std_logic_vector(7 downto 0));
end saomiao;
architecture m of saomiao is
signal chushi:std_logic_vector(23 downto 0):="000000000000000000000000"; signal gaowei:std_logic_vector(2 downto 0);
signal diwei:std_logic_vector(2 downto 0);
signal hang1:std_logic_vector(7 downto 0);
signal lie1:std_logic_vector(7 downto 0);
begin
process(clk2,reset2)
begin
if(reset2='1')then
chushi<="000000000000000000000000";
elsif(reset2='0')then
if(clk2'event and clk2='1')then
chushi<=chushi+1;
end if;
end if;
end process;
process(diwei,lie1,chushi)
begin
diwei(0)<=chushi(18);
diwei(1)<=chushi(19);
diwei(2)<=chushi(20);