EDA技术课程设计报告题目:LED点阵汉字显示姓名学号班级指导教师2012年1月12日要求:1.指导教师按照课程设计大纲要求完成学生课程设计指导工作。2.课程设计任务书由指导教师照大纲要求填写,内容要全面。3.课程设计报告由参加本学生填写。课程设计结束时交指导教师。4.指导教师要根据每一位学生课程设计任务完成情况,认真审核设计报告,并在课程设计结束时,给出客观、准确的评语和成绩。5.课程设计任务书和报告要语言流畅,图表正确规范。课程设计任务书班级姓名学号课程设计题目LED点阵汉字显示课程设计起止日期2011年12月26日至2012年1月13日实习地点实验楼308课程设计内容与要求设计内容:LED点阵汉字显示要求:1、及格:在实验箱上16×16点阵模块上显示汉字“电”。2、中:设置不同的清屏方式(上下左右)。3、良:滚动显示汉字“电”。4、优:滚动显示“电子信息工程”。指导教师2011年12月26日课程设计报告注:此表可加附页一、设计原理与技术方法:1.LED点阵显示原理16×16扫描LED点阵的工作原理同8位扫描数码管类似。它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位段地址(L0-L15)输入。通过时钟的每列扫描显示完整汉字。首先,SEL3-SEL0从状态“0000”按位加1一直到“1111”的过程中点阵从第1列一直扫描到第16列;L0到L15依次对应第1行到第16行的点阵。因为列点阵为共阴极,因此若SEL3-SEL0为“0000”,而L0接高电平,L1-L15均接低电平,则点阵屏幕上第一点亮。比如要实现第一列全亮的效果,则SEL给“0000”,L0-L15均接上高电平即可,而要实现第一行全亮,则就要用到动态扫描的概念:首先L0接“1”,L1-L15均接“0”,而SEL3-SEL0从“0000”按位加1一直到“1111”并循环变化,或者从“1111”按位减1一直到“0000”并循环变化,只要变化的足够快,由于视觉暂留则会看到第一行均亮。有了上面的说明,现在以汉字“电”的显示来说明点阵扫描显示的过程。首先将“电”字编码用软件获取,推荐一款小巧而功能强大的软件PCTOLED,此软件可以绘出M×N任意大小的文字,并且支持宋体、楷体等多种字体。图1是用此软件绘出的汉字“电”以及其生成的“电”字编码(具体用法见软件“设置”中的说明),即便不懂软件用法也可按汉字占的格数算出汉字的编码。现将SEL3-0接上一个16进制计数器,计数器输入为时钟信号,计数值随时钟变化,对应SEL3-SEL0从“0000”变化到“1111”时对应L0-L15的值见表1。只需时钟足够快,则可在点阵屏幕上看到“电”字。图1PCtoLCD生成汉字“字”及其编码表1SEL与L对应关系SEL3-SEL0L0-L15000000000000000000000001000000000000000000100001111111111000001100001000100010000100000010001000100001010000100010001000011000001000100010000111011111111111111110001000100010001000100110001000100010001010100010001000100010111000100010001000110010011111111110001101100000000000000011101111000000000000111100000000000000002.“电”字显示原理及各模块工作原理2.1“电”字显示原理图“电”字显示原理图如图2.1所示。图2.1“电”显示原理图其中CLK接时钟信号,LIE[15..0]接L15—L0,SEL[3..0]接sel3—sel0。根据前面提到的原理可知,要在点阵屏幕上显出“电”字,只需sel端接16进制计数器,因此需要计数器模块。当sel为不同值时对应不同的L值,因此还需有数据选择模块。2.2计数器模块工作原理(1)VHDL代码此模块VHDL代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCOUNT16IS--定义实体:16进制减法计数器PORT(CLK:INSTD_LOGIC;--定义端口:输入为CLK,输出为位矢量selsel:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYCOUNT16;ARCHITECTUREBEHVOFCOUNT16IS--定义结构体SIGNALCQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK)--定义进程,上升沿触发BEGINIF(CLK'EVENTANDCLK='1')THENCQI=CQI-1;--从右向左扫描ENDIF;sel=CQI;ENDPROCESS;ENDARCHITECTUREBEHV;其中输入为CLK,输出为位矢量SEL,CLK上升沿触发,SEL依次减1,从而实现从“1111”到“0000”的循环改变。(2)计数器模块仿真此模块的仿真图如图2.2所示。图2.216进制计数器仿真图从仿真图中可以看出此模块可以实现SEL从“1111”顺次降到“0000”的功能。2.3数据选择模块工作原理(1)此模块VHDL代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYjiandanyimaISPORT(sel:INSTD_LOGIC_VECTOR(3DOWNTO0);lie:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDENTITYjiandanyima;ARCHITECTUREBEHVOFjiandanyimaISBEGINPROCESS(sel)BEGINCASEselISWHEN0000=lie=x0000;WHEN0001=lie=x07fc;WHEN0010=lie=x0444;WHEN0011=lie=x0444;WHEN0100=lie=x0444;WHEN0101=lie=x0444;WHEN0110=lie=x0444;WHEN0111=lie=x7fff;WHEN1000=lie=x4444;WHEN1001=lie=x4444;WHEN1010=lie=x4444;WHEN1011=lie=x4444;WHEN1100=lie=x4444;WHEN1101=lie=x47fc;WHEN1110=lie=x7000;WHEN1111=lie=x0000;WHENOTHERS=lie=x0000;ENDCASE;ENDPROCESS;ENDARCHITECTUREBEHV;其中SEL为输入端,LIE为输出端,LIE随SEL的变化而变化,只需SEL变化足够快,便可实现动态扫描,从而实现“电”字显示。(2)模块仿真图此模块仿真截图如图2.3所示。图2.3数据选择模块仿真图从仿真结果可以看出此模块可以实现数据选择功能。2.4“电”字显示仿真及说明显示“电”字的仿真图如图2.4所示。图2.4显示“电”字仿真图从图中可以看出,当CLK上升沿到来时SEL随之改变,从而使输出改变,当CLK频率很快时,点阵屏幕上即出现“电”字。3.滚动显示汉字各模块工作原理及功能说明3.1滚动显示汉字原理图此功能原理图如图3.1所示。图3.1汉字滚动功能原理图FASTCLK端接高频率时钟信号,SLOWCLK端接低频率时钟信号,SEL[3..0]依次接到sel3—sel0上,VERTIC[15..0]接到L15—L0上。此功能由三个模块组成,其中用到16进制计数器,此模块已在上文提及,不再重复;数据选择模块GUND,当其输出不同值时便可实现汉字滚动效果;显示模块DISPLAY1,此模块用于输出滚动效果的汉字“电子信息工程”。FASTCLK端接高频率时钟信号,实现动态扫描,SLOWCLK端接低频率时钟信号,用于实现汉字滚动的效果。3.2数据选择模块原理及功能说明(1)此模块VHDL代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYgundISPORT(CLK:INSTD_LOGIC;QOUT:bufferSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYgund;ARCHITECTUREBEHVOFgundISBEGINPROCESS(CLK)BEGINIF(CLK'EVENTANDCLK='1')THENQOUT=QOUT+1;ENDIF;ENDPROCESS;ENDARCHITECTUREBEHV;此模块相当于一个数据选择端,当GUND随SLOWCLK时钟的改变而输出不同值时,屏幕上出现移动的汉字,此模块定义的汉字滚动次数为16次,6个汉字每个占用16列,因此只实现了滚动一次移动7列的效果。然而经实验证实,用此种芯片—EPF10K10LC84-4并且用此种方案最多实现滚动31次的效果。(2)模块仿真图此模块仿真效果图如图3.2所示。图3.2数据选择模块仿真图从仿真效果来看此模块可以达到计数作用,连接后续电路方可实现数据选择的功能从能实现汉字滚动效果。3.3汉字滚动显示模块原理及功能说明(1)此模块VHDL代码如下:libraryieee;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdisplay1IS--定义实体PORT(sel:INSTD_LOGIC_VECTOR(3downto0);--定义端口,sel为输入位矢量,gund控制滚动频率,vetic为列输出gund:INSTD_LOGIC_VECTOR(3downto0);vertic:OUTSTD_LOGIC_VECTOR(15downto0));ENDdisplay1;ARCHITECTUREXIANSHIOFdisplay1IS--定义结构体BEGINPROCESS(gund,sel)--定义过程,gund,sel为敏感量VARIABLEB:STD_LOGIC_VECTOR(15downto0);--定义变矢量BEGINCASEgundISWhen0000=caseseliswhen0000=b:=x0000;when0001=b:=x0000;when0010=b:=x0000;when0011=b:=x0000;when0100=b:=x0000;when0101=b:=x0000;when0110=b:=x0000;when0111=b:=x0000;when1000=b:=x0000;when1001=b:=x0000;when1010=b:=x07fc;when1011=b:=x0444;when1100=b:=x0444;when1101=b:=x0444;when1110=b:=x0444;when1111=b:=x0444;whenothers=null;endcase;When0001=caseseliswhen0000=b:=x0000;when0001=b:=x0000;when0010=b:=x0000;when0011=b:=x07fc;when0100=b:=x0444;when0101=b:=x0444;when0110=b:=x0444;when0111=b:=x0444;when1000=b:=x0444;when1001=b:=x7fff;when1010=b:=x4444;when1011=b:=x4444;when