北邮数字电路双色点阵实验报告.docx_第1页
北邮数字电路双色点阵实验报告.docx_第2页
北邮数字电路双色点阵实验报告.docx_第3页
北邮数字电路双色点阵实验报告.docx_第4页
北邮数字电路双色点阵实验报告.docx_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字电路与逻辑设计实验报告学院: 电子工程学院 班级: 2011211203 学号: 2011210971 班内序号: 22 姓名: 郭一鸣 指导老师: 陈凌霄 目录一、课题名称4二、摘要4三、设计任务要求4四、设计思路,总体结构框图41、基本框架42、在点阵上显示一个字或图案53、控制亮度53.1脉冲宽度调制(PWM)53.2 亮度54、控制颜色65、实现三种模式的滚动75.1状态75.2如何存储需要译码的字符75.3如何进行译码76、总体框图8五、控制器部分的状态转移图和流程图81、状态转移图92、流程图9六、总体电路和分块电路的设计111、总体电路112、分块电路11(1)pwm调制器11(2)数据选择器(mux)13(3)译码器(translate)14(4)其他模块20七、所实现的功能说明211、已完成的基本功能212、已完成的扩展功能213、器件资源占用情况214、关键波形仿真图21(1)pwm调制器21(2)数据选择器22(3)译码器22八、故障及问题分析28九、总结29十、所用元器件及测试仪表清单29十一、完整源程序291、总体原理图设计292、防抖模块293、一级分频器(pwm调制器)304、二级分频器325、三级分频器326、模2计数器337、模4计数器348、模8计数器349、滚动状态计数器(模4模32计数器组合)3510、数据选择器3611、译码器36十二、参考文献43欢迎学弟学妹下载!一、课题名称双色点阵显示控制器二、摘要本实验使用在QuartusII9.1的软件基础上,使用VHDL设计输入和原理图设计输入混合编程,设计了一个88双色点阵显示器,实现了控制固定图形的亮度和颜色以及多个字母不同模式的滚动且同时手动、自动变色的功能。关键词:数字电路,双色点阵,VHDL,滚动三、设计任务要求 设计实现一个 88 双色点阵显示控制器。基本要求:1、固定红色显示一个汉字或图形,显示亮度4 级可调,用一个btn 按钮实现亮度调节,亮度变化视觉效果要尽量明显。2、用从红到绿 8 级渐变色显示一个固定汉字或图形。3、分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式单色显示四个汉字或图形,显示过程中,显示方式用一个btn 按键进行切换。4、显示的图形或汉字要尽量饱满美观。提高要求:1、滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果要尽量明显。2、自拟其它功能。四、设计思路,总体结构框图1、基本框架时钟输入,分频至扫描频率,扫描频率控制扫描计数器,译码器将计数器状态译成对应输出输出clkCnt8译码器分频器2、在点阵上显示一个字或图案在任何一个时刻,点阵中同时只可能有一行亮,为了让人眼看到稳定的八行八列图形,必须利用人眼的视觉暂留,让八行循环点亮并且达到一定频率。因为人眼对于闪烁频率在50HZ以上的光源会看到是一直亮的,故对于八行的点阵,点亮频率至少需要508HZ才能保证人眼看到稳定的图案。因此,可以知道基本框架中,分频器要把实验板上的50MHZ的时钟分到400HZ以上,这里可选择1000HZ,控制模8计数器,译码器将模8计数器的计数值译成row、colr管脚上的高低电平信号。3、控制亮度3.1脉冲宽度调制(PWM)控制亮度需要有占空比不同的波,以这些信号去控制点亮的时间。 生成这种信号,我们必须考虑以下几个问题:频率是多少。在不进行亮度控制时,模8计数器的每一个值的持续时间对应某一行亮的时间,而我们现在要控制这个时间,那些占空比不同的波的周期就必须和模8计数器的周期一致,否则必然造成混乱。而模8计数器对应着扫描频率,也就是第一级分频器分出的频率,那些占空比不同的波也可以作为第一级分频器输出的时钟信号,故根据这里的分析我们可以将第一级分频器和脉冲宽度调制器合并成一个模块。占空比多大。我们第一个功能需要4级亮度,第二个功能需要8级渐变色,故可选择生成占空比14%、28%、42%、56%、70%、84%六种占空比的时钟信号,占空比为0%和100%可以直接在程序中对电平赋0或1不需要生成。3.2 亮度用占空比不同的时钟信号改变点亮时间以控制亮度。在译码部分增加一个判断条件,如果控制此时亮度的占空比的时钟信号电平为1,则正常译码;如果此时电平为0,那么对管脚colr或colg赋八位低电平向量“00000000”。Pwm当外部输入量不同时,是占空比不同的时钟信号。Shuzu2是88数组。4、控制颜色用不同占空比的时钟信号分别控制每一行colr、colg点亮的时间,使colr从第一行到第八行点亮时间依次减少(1000%),使colg从第一行到第八行点亮时间依次增加(0100%)。由此即可出现由红到绿的八级渐变色。Pwm16,是占空比1484%的时钟信号。5、实现三种模式的滚动5.1状态首先需要明确的是,每滚动一次,也即点阵图案每变化一次,就对应一个状态。我们要想知道某一时刻要显示出什么样的图案,就必须知道当前是第几个状态。所以我们需要一个状态计数器,以它的计数值去控制当前显示哪种图案。对于单字循环,每次显示一个字,MING四个字母对应4个状态,需要模4计数器。对于左右滚动和上下滚动,每次移动一行或者一列,对应32个状态,需要模32计数器。因为滚动的频率三者都相同,可以考虑将模4计数器和模32计数器合在一起以减少模块数目。5.2如何存储需要译码的字符点阵上的每一个图案对应8个行向量,单字循环4个状态对应32个行向量,左右滚动和上下滚动对应256个行向量。如果在程序中直接用每一个状态对应一个when、case语句去译码,工程量会非常大,而且不易修改,不易扩展。考虑把这4个字母存储在一个二维数组中,为了方便左右滚动和上下滚动的译码,将这四个字母存在839(最后7列是第一个字母M的前7列)和398数组中(最后7行是第一个字母M的前7行)。5.3如何进行译码当我们译码时,可以根据当前状态计数器的计数值动态引用数组中的行向量。这样译码部分只需要8行代码即可,而静态引用的话,左右和上下滚动每种就需要写256行。以下是程序左右滚动部分的截图,以此为例简要介绍动态引用数组中的行向量。839数组,存储,纵坐标从下至上07,横坐标从左至右380,即坐标横纵均最大的点在左上角。其中Move是状态计数器的值,031。对于cnt8=0,move=0点阵第一行显示的是数组的第一行的18(标号3831),而当cnt8=0不变,move=1时,点阵第一行29列(标号3730)。根据move值增大依次译码数组中后面的列。6、总体框图五、控制器部分的状态转移图和流程图本程序中,译码部分是主要的控制器,根据输入量的不同作出不同种类的译码。1、状态转移图Function twoFunction oneSwt=”01”Swt=”00”Swt=”01”Swt=”11”Swt=”10”Swt=”00”Swt=”10”Swt=”10”Swt=”01”Swt=”11”Swt=”10”Swt=”00”Function threeFunction fourSwt为两位拨码开关,根据swt值的不同可以从任意一个状态直接跳到其他任意状态Function one:显示固定图形或字,可四级亮度调节Function two:显示固定图形或字,由红至绿八级渐变色Function three:三种滚动模式Function four:三种滚动模式且滚动中自动变色2、流程图开始Swt的值变化Swt=”00”?Y功能一NSwt=”01”?Y功能二Swt的值变化NSwt=”10”?Y功能三Swt的值变化Swt的值变化N功能四六、总体电路和分块电路的设计1、总体电路2、分块电路上述总体电路中共使用10种模块,其中最关键的三种分别是:(1)pwm调制器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pwm is port( clk:IN STD_LOGIC; -实验板上50MHZ时钟输入 pwm1:out std_logic; -以下是六种频率为1000HZ,占空比从14%84%的波 pwm2:out std_logic; pwm3:out std_logic; pwm4:out std_logic; pwm5:out std_logic; pwm6:out std_logic );end pwm;architecture project of pwm isbegin process(clk)-pwm,divider variable count:integer range 0 to 49999; begin if clk event and clk=1 then -计数器,其模值决定分频比 if count=49999 then count:=0; else count:=count+1; end if; end if; if clk event and clk=1 then -pwm1 if count7000 thenpwm1=1;else pwm1=0; end if; end if; if clk event and clk=1 then -pwm2if count14000 thenpwm2=1;else pwm2=0; end if; end if;if clk event and clk=1 then -pwm3if count21000 thenpwm3=1;else pwm3=0; end if; end if;if clk event and clk=1 then -pwm4-50%if count28000 thenpwm4=1;else pwm4=0; end if; end if; if clk event and clk=1 then -pwm5if count35000 thenpwm5=1;else pwm5=0; end if; end if; if clk event and clk=1 then -pwm6if count42000 thenpwm6=1;else pwm6clkoutif cnt2=0 then clkout=clk1;else clkout clkout=0;end case;end process;end a;(3)译码器(translate)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity translate is port( pwm1:IN STD_LOGIC; pwm2:IN STD_LOGIC; pwm3:IN STD_LOGIC; pwm4:IN STD_LOGIC; pwm5:IN STD_LOGIC; pwm6:IN STD_LOGIC; cnt8:IN integer range 0 to 7; cnt4:IN integer range 0 to 3; swt:IN std_logic_vector(1 downto 0); move:IN integer range 0 to 31;-状态计数器值,模32 move1:IN integer range 0 to 3;-状态计数器值,模4 change:IN integer range 0 to 3;-变色状态计数器,模4 row:out std_logic_vector(7 downto 0); colr:out std_logic_vector(7 downto 0); colg:out std_logic_vector(7 downto 0) );end translate;architecture project of translate issignal tchange1:std_logic;signal tchange2:std_logic;signal pwm:std_logic;type r is array(7 downto 0) of std_logic_vector(38 downto 0);-定义839二维数组signal shuzu:r; -8*39 定义数组信号type r1 is array(38 downto 0) of std_logic_vector(7 downto 0);-定义398二维数组signal shuzu1:r1; -39*8 定义数组信号type r2 is array(7 downto 0) of std_logic_vector(7 downto 0);-定义88数组signal shuzu2:r2; -8*8 定义数组信号begin shuzu=( -8*39赋值100000010011110010000001011111101000000,110000110001100011000001100000011100001,101001010001100010100001100000001010010,100110010001100010010001100000001001100,100000010001100010001001100011111000000,100000010001100010000101100010011000000,100000010001100010000011100000011000000,100000010011110010000001011111101000000);shuzu1=( -39*8赋值10000001,11000011,10100101,10011001,10000001,10000001,10000001,10000001,00111100,00011000,00011000,00011000,00011000,00011000,00011000,00111100,10000001,11000001,10100001,10010001,10001001,10000101,10000011,10000001,01111110,10000001,10000000,10000000,10001111,10001001,10000001,01111110,10000001,11000011,10100101,10011001,10000001,10000001,10000001);shuzu2rowrowrowrowrowrowrowrowrowtchange1=1;tchange2tchange1=pwm5;tchange2tchange1=pwm2;tchange2tchange1=0;tchange2 tchange1=1;tchange2 pwm pwm pwm pwm pwm=1; end case; end process; process(cnt8,cnt4,swt,pwm,pwm1,pwm2,pwm3,pwm4,pwm5,pwm6,move,move1,tchange1,tchange2,shuzu,shuzu1,shuzu2)-function 1 begin if swt=00 then -function one 四级亮度 colg colr colr colr colr colr colr colr colr colr = 00000000; end case; else colrcolr=shuzu2(7); colg if pwm6=1 then colr=shuzu2(6);else colr=00000000;end if; if pwm1=1 then colg=shuzu2(6);else colg if pwm5=1 then colr=shuzu2(5);else colr=00000000;end if; if pwm2=1 then colg=shuzu2(5);else colg if pwm4=1 then colr=shuzu2(4);else colr=00000000;end if; if pwm3=1 then colg=shuzu2(4);else colg if pwm3=1 then colr=shuzu2(3);else colr=00000000;end if; if pwm4=1 then colg=shuzu2(3);else colg if pwm2=1 then colr=shuzu2(2);else colr=00000000;end if; if pwm5=1 then colg=shuzu2(2);else colg if pwm1=1 then colr=shuzu2(1);else colr=00000000;end if; if pwm6=1 then colg=shuzu2(1);else colgcolr=00000000; colgcolr=00000000;colg -three-one 单字循环 colg=00000000;colr colr colr colr colr colr colr colr colr colr colg colg colg colg colg colg colg colg colr -three-two 左右滚动 colg=00000000;colr colr colr colr colr colr colr colr colr colr colg colg colg colg colg colg colg colg colg -three-three 上下滚动 colg=00000000;colr colr colr colr colr colr colr colr colr colr colg colg colg colg colg colg colg colg colg colr = 00000000;colg = 00000000; end case;end if; end process ;(4)其他模块其他模块均由简单的防抖,计数器,分频器等组成,从实验教材上均可得到。详见源代码部分。七、所实现的功能说明1、已完成的基本功能(1)显示一个笑脸,四级亮度可通过一个btn切换(2)显示一个笑脸, 从红到绿八级渐变色显示(3)对于四个字母“MING”的单字循环、左右滚动、上下滚动显示,显示模式可通过一个btn切换2、已完成的扩展功能(1)在实现基本功能3时,可通过一个btn切换四种颜色(2)在实现基本功能3时,可自动变换四种颜色,且可通过一个btn调节两种变色频率(2HZ,0.5HZ)3、器件资源占用情况器件资源使用情况如下:Total logic elements:504/1270(40%)Total pins:29/116(25%)4、关键波形仿真图(1)pwm调制器产生六种占空比的时钟信号。仿真波形分析:pwm16是占空比1484%的时钟信号。(2)数据选择器根据输入和计数器当前值输出不同的时钟信号控制变色频率。仿真波形分析:当swt=”00”或”01”时数据选择器无输出,对应功能一和功能二时控制变色的计数器值不改变。当swt=”10”时,clkout=btn,即按键作为输出时钟,功能三中每按键一次,颜色变化一次。当swt=”11”时,当cnt2=0时,clkout=clk1;当cnt2=1时,clkout=clk2。即功能四中两级变色频率可调。(3)译码器功能一、显示一个笑脸四级亮度可调仿真波形分析:根据cnt4记录的按键次数不同,colr译码出来占空比不同,从而改变亮度。功能二、显示一个笑脸由红到绿八级渐变色仿真波形分析:Colr占空比从第一行到第八行依次减小,colg占空比从第一行到第八行依次增大。功能三、滚动1、单字循环仿真波形分析:仿真设置的状态改变的频率是扫描频率的16分之1,所以同一个字母显示两次后显示下一个字母。由可以看出显示了MING。2、左右滚动仿真波形分析:Inst|count是状态计数值,每一个值对应一个状态,从这些图可以看出实现了MING的左右滚动。3、上下滚动仿真波形分析:Inst|count是状态计数值,每一个值对应一个状态,从这些图可以看出实现的MING的上下滚动。功能四、滚动自动变色1、单字循环自动变色:仿真波形分析:Inst3|count是当前颜色状态的计数值,可以看出根据它的值改变,colr、colg的占空比循环变化,且对应MING单字循环。2、左右滚动自动变色(前5个状态):仿真波形分析:Inst3|count是当前颜色状态的计数值,可以看出根据它的值改变,colr、colg的占空比循环变化,且对应MING左右滚动。3、上下滚动自动变色(前5个状态)仿真波形分析:Inst3|count是当前颜色状态的计数值,可以看出根据它的值改变,colr、colg的占空比循环变化,且对应MING上下滚动。八、故障及问题分析故障:在自己电脑上和主楼601使用QuartusII9.1编译通过的程序在主楼615使用QuartusII7.2编译全部报错,错误是不允许在引用数组中的一部分使用变量。并且后来发现使用QuartusII9.0编译同样全部报错。问题分析:QuartusII9.1版本支持的功能更多,而QuartusII9.0及以下版本不支持动态引用数组这个功能九、总结经过三周的努力,顺利完成了点阵实验的基本功能和扩展功能,并自主添加了额外的两种功能。通过本次实验,对于数字电路的设计我有了更深的理解,提高了实际设计能力和动手能力,收益颇丰。十、所用元器件及测试仪表清单1、数字电路与逻辑设计实验板一个2、主楼601电脑一台3、下载线一条十一、完整源程序1、总体原理图设计2、防抖模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fangdou isport(clk:in std_logic; -输入时钟,时钟频率决定防抖效果,本程序接入的是1000HZ的时钟reset:in std_logic;resetn:out std_logic); -防抖后的BTN输出end fangdou;architecture a of fangdou issignal resetmp1,resetmp2:std_logic;beginprocess(clk)beginif(clkevent and clk=0) thenresetmp2=resetmp1;resetmp1=reset;end if;end process;resetn=clk and resetmp1 and (not resetmp2);end a;3、一级分频器(pwm调制器)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pwm is port( clk:IN STD_LOGIC; -实验板上50MHZ时钟输入 pwm1:out std_logic; -以下是六种频率为1000HZ,占空比从14%84%的波 pwm2:out std_logic; pwm3:out std_logic; pwm4:out std_logic; pwm5:out std_logic; pwm6:out std_logic );end pwm;architecture project of pwm isbegin process(clk)-pwm,divider variable count:integer range 0 to 49999; begin if clk event and clk=1 then -计数器,其模值决定分频比 if count=49999 then count:=0; else count:=count+1; end if; end if; if clk event and clk=1 then -

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论