1、数电实验报告数字电路与逻辑设计综合设计实验报告 实验名称:8X8点阵显示装置一 摘要: 本实验主要在理论分析和具体的软硬件实现上,针对88矩阵的扫描显示、字符的单个显示,字符的循环显示,以及对各项显示功能的切换控制等内容进行了分析与探讨。 在理论分析的基础上,用VHDL语言编写源代码,再配合具体电路连接,实现点阵的扫描,字符的单个显示,字符的循环显示,以及对各项显示功能的切换控制等。关键字:扫描,切换二 设计任务要求:1 用88点阵做一个基本矩阵,设计扫描控制电路,使光点从左上角象素点开始扫描,终止于右下角象素点,然后周而复始地重复下去,扫过一帧所需时间为16秒;2 用88点阵显示4个字符,每
2、秒显示一个字符;3 显示一个活动的简单图像;4 以上三种功能可以手动或自动转换;三所用元器件: EPM7128 一块面包板 一块 88点阵模块 一块按键开关 一个导线 若干 四 设计思路和总体设计框图:1.逐点扫描的实现:实验要求扫描一帧是16秒,由于是88点阵,即每一点亮1/4秒,而我们的时钟信号是1MHz的信号。因此要对时钟信号进行分频以获得周期为1/4秒的信号,其频率是4Hz,而1M信号的224分频是4Hz,因此我在实验中选择m(21),m(22),m(23)三路信号来控制行选通,又因为每行有8个点,所以列选通只要比行选通快三位, m(18),m(19),m(20)就可以了。2.显示的实
3、现:字符的显示其实与逐点扫描一样,只不过要求扫描速率足够快,快到超人眼所能分辨的程度就行了。在实验中我选用的是m(20),m(21)两路信号来控制行选通,用m(10),m(11),m(12)三路信号来控制列选通。3.循环显示的实现:循环显示原理与字符显示一样,只是帧数较多,只要把两个字符显示状态的过渡状态也写成代码就行了,实验中,我选择每两个字符之间用三帧来过渡,并选用m(18),m(19),m(20),m(21)四路信号来控制行选通,用m(10),m(11),m(12)三路信号来控制列选通。4.总体结构框图:五 控制器部分的状态转移图和流程图: 1状态转移图:2流程图:六 分块电路的关键源程
4、序:1 分频部分的关键源程序: process(clk) beginif(clkevent and clk=1) then m=m+1; fangdou=m(15); f0r=m(23 downto 21); f0c=m(20 downto 18); f1c=m(12 downto 10); f1r=m(21 downto 20); f2c=m(12 downto 10); f2r=m(21 downto 18);end if;end process;2 防抖部分的关键源程序: process(fangdou) beginif fangdouevent and fangdou=1 then k
5、(2)=k(1); k(1)=k(0); k(0)=key;end if;g=k(2) and k(1) and k(0);end process;3 按键计数的关键源程序: process(g)beginif(gevent and g=1) thenif x=2 then x=0;else xcolumncolumncolumncolumncolumncolumncolumncolumncolumnrowrowrowrowrowrowrowrowrowc1c1c1c1c1c1c1c1c1 case f1c is end case; when 01= case f1c is end case;
6、 when 10= case f1c is end case; when others= case f1c is end case; end case;end process;6 动画显示模块实现的关键源程序: process(f2r,f2c) begincase f2c is when 000=c2c2c2c2c2c2c2c2c2 case f2c is end case; when 0001= case f2c is end case; when 0010= case f2c is end case; when 0011= case f2c is end case; when 0100=
7、case f2c is end case; when 0101= case f2c is end case; when 0110= case f2c is end case; when 0111= case f2c is end case; when 1000= case f2c is end case; when 1001= case f2c is end case; when 1010= case f2c is end case; when 1011= case f2c is end case; when 1100= case f2c is end case; when 1101= cas
8、e f2c is end case; when 1110= case f2c is end case; when others= case f2c is end case; end case;end process;七 所实现功能说明: 本实验主要完成以下几大功能:1 点阵的扫描显示:1) 功能实现描述: y(8),t(8) 分别控制点阵的行的8个输入端和列的8个输入端。当行为高电位,列为低电位时。二极管发光,否则不发光。由中间变量f0c,f0r充当判决依据,以此控制行列的输出信号。2) 仿真波形: 2 字符的单个显示:功能实现描述:采用列扫描的方法来实现点字符的显示。用计数信号m的20,21
9、位充当判决条件,控制行信号y和列信号t的输出,实现行和列的连续循环。用计数信号m 的10,11,12位充当判决条件,控制不同字符显示的循环。3 字符的循环显示: 循环显示跟字符显示的原理差不多的。只是其中每一个字符的完整显示需要4帧的时间。用计数信号m的18,19,20,21位充当判决条件,控制不同字符显示的循环。器件的资源占用情况:八故障及问题分析:实验中出现了不少问题,但其中有三个比较主要的问题,如下:1.逐点扫描时,不该亮的点会亮而显示字符时字符有明显的跳跃感 解决方法:提高扫描频率,利用人眼反应的迟滞性正常显示点和字符2.在显示字符时,行与列难以实现同步解决方法:选择同一个判决变量控制
10、行列的输出,即可实现行与列同步。 3.实验连线比较复杂,并有不断重复工作,很繁琐解决方法:利用Max Plus 中的手动分配管脚的功能,自己根据实验需要设置输出管脚,减少重复的连线工作.九实验心得:本次实验是自学习数字电路程序设计以来综合性最强的一次实验,使我对数电程序设计有了进一步的了解和掌握。通过这次实验,我对VHDL语言有了更深一步的了解,并学会了如何手动分配管脚,对点阵的具体用法也有了更深一步的认识。最终基本上实现了点阵扫描,单个字符的显示,字符的循环的显示等功能。总体来讲,这次实验锻炼了我的意志品质,培养了我独立思考解决问题的能力,使我受益匪浅。十完整源程序: library iee
11、e;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dianzhen isport(clk:in std_logic; -1M的系统时钟 key:in std_logic; -开关,控制点阵图案切换 y: buffer std_logic_vector(0 to 7); 行输出变量 t: buffer std_logic_vector(0 to 7); 列输出变量end dianzhen;architecture part of dianzhen issignal x:integer range 0 to 2
12、; signal row,column,r1,c1,r2,c2:std_logic_vector(0 to 7); signal m:std_logic_vector(23 downto 0):=000000000000000000000000;-总分频signal f1c,f0r,f0c,f2c,k:std_logic_vector(2 downto 0); -控制输出信号及中间变量signal f1r:std_logic_vector(1 downto 0); 字符显示的行控制变量signal f2r:std_logic_vector(3 downto 0); 字符循环显示的行控制变量si
13、gnal fangdou,g:std_logic;beginprocess(clk) -分频部分beginif(clkevent and clk=1) then m=m+1; fangdou=m(15); f0r=m(23 downto 21); f0c=m(20 downto 18); f1c=m(12 downto 10); f1r=m(21 downto 20); f2c=m(12 downto 10); f2r=m(21 downto 18);end if;end process;process(fangdou) - 防抖部分beginif fangdouevent and fangd
14、ou=1 then k(2)=k(1); k(1)=k(0); k(0)=key;end if;g=k(2) and k(1) and k(0);end process;process(g)beginif(gevent and g=1) thenif x=2 then x=0;else xcolumncolumncolumncolumncolumncolumncolumncolumncolumnrowrowrowrowrowrowrowrowrowc1c1c1c1c1c1c1c1c1 case f1c is 显示C when 000=r1r1r1r1r1r1r1r1r1 case f1c is 显示E when 000=r1r1r1r1r1r1r1r1r1 case f1c is 显示T when 000=r1r1r1r1r1r1r1r1r1 case f1c is 显示6 when 000=r1r1r1r1r1r1r1r1r1c2c2c2c2c2c2c2c2c2 case f2c is 显示C when 000=r2r2r2r2r2r2r2r2r2 case f2c is when 000=r2r2r2r2r2r2r2r2r2 case f2c is when 000=r2r2r2r2r2r2=1000000
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1