EDA技术课程设计报告-LED点阵汉字显示.doc_第1页
EDA技术课程设计报告-LED点阵汉字显示.doc_第2页
EDA技术课程设计报告-LED点阵汉字显示.doc_第3页
EDA技术课程设计报告-LED点阵汉字显示.doc_第4页
EDA技术课程设计报告-LED点阵汉字显示.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

eda技术课程设计报告题目: led点阵汉字显示 姓 名 学 号 班 级 指导教师 2012年 1 月 12 日要求:1指导教师按照课程设计大纲要求完成学生课程设计指导工作。2课程设计任务书由指导教师照大纲要求填写,内容要全面。3课程设计报告由参加本学生填写。课程设计结束时交指导教师。4指导教师要根据每一位学生课程设计任务完成情况,认真审核设计报告,并在课程设计结束时,给出客观、准确的评语和成绩。5课程设计任务书和报告要语言流畅,图表正确规范。课程设计任务书班级 姓名 学号 课程设计题目 led点 阵 汉 字 显 示 课程设计起止日期 2011年12月26日 至 2012年1月13日 实习地点 实 验 楼308 课程设计内容与要求 设计内容:led点阵汉字显示要求:1、及格:在实验箱上1616点阵模块上显示汉字“电”。2、中:设置不同的清屏方式(上下左右)。3、良:滚动显示汉字“电”。4、优:滚动显示“电子信息工程”。 指导教师 2011 年12月26日一、设计原理与技术方法:1.led点阵显示原理1616扫描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,此软件可以绘出mn任意大小的文字,并且支持宋体、楷体等多种字体。图1是用此软件绘出的汉字“电”以及其生成的“电”字编码(具体用法见软件“设置”中的说明),即便不懂软件用法也可按汉字占的格数算出汉字的编码。现将sel3-0接上一个16进制计数器,计数器输入为时钟信号,计数值随时钟变化,对应sel3-sel0从“0000”变化到“1111”时对应l0-l15的值见表1。只需时钟足够快,则可在点阵屏幕上看到“电”字。课程设计报告注:此表可加附页图1 pctolcd生成汉字“字”及其编码表1 sel与l对应关系sel3-sel0l0-l15000000000000000000000001000000000000000000100001111111111000001100001000100010000100000010001000100001010000100010001000011000001000100010000111011111111111111110001000100010001000100110001000100010001010100010001000100010111000100010001000110010011111111110001101100000000000000011101111000000000000111100000000000000002.“电”字显示原理及各模块工作原理2.1“电”字显示原理图“电”字显示原理图如图2.1所示。图2.1 “电”显示原理图其中clk接时钟信号,lie15.0接l15l0,sel3.0接sel3sel0。根据前面提到的原理可知,要在点阵屏幕上显出“电”字,只需sel端接16进制计数器,因此需要计数器模块。当sel为不同值时对应不同的l值,因此还需有数据选择模块。2.2计数器模块工作原理(1)vhdl代码此模块vhdl代码如下:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count16 is -定义实体:16进制减法计数器port( clk : in std_logic; -定义端口:输入为clk,输出为位矢量selsel : out std_logic_vector(3 downto 0); end entity count16;architecture behv of count16 is -定义结构体signal cqi : std_logic_vector(3 downto 0);beginprocess(clk) -定义进程,上升沿触发begin if (clkevent and clk=1) thencqi=cqi-1; -从右向左扫描end if;sel lie lie lie lie lie lie lie lie lie lie lie lie lie lie lie lie lie=x0000; end case;end process;end architecture behv;其中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端接低频率时钟信号,sel3.0依次接到sel3sel0上,vertic15.0接到l15l0上。此功能由三个模块组成,其中用到16进制计数器,此模块已在上文提及,不再重复;数据选择模块gund,当其输出不同值时便可实现汉字滚动效果;显示模块display1,此模块用于输出滚动效果的汉字“电子信息工程”。fastclk端接高频率时钟信号,实现动态扫描,slowclk端接低频率时钟信号,用于实现汉字滚动的效果。3.2 数据选择模块原理及功能说明(1)此模块vhdl代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity gund isport( clk : in std_logic;qout : buffer std_logic_vector(3 downto 0);end entity gund;architecture behv of gund isbeginprocess(clk)beginif (clkevent and clk=1) thenqoutcase sel is when 0000 =b:=x0000; when 0001 =b:=x0000; when 0010 =b:=x0000; when 0011 =b:=x0000; when 0100 =b:=x0000; when 0101 =b:=x0000; when 0110 =b:=x0000; when 0111 =b:=x0000; when 1000 =b:=x0000; when 1001 =b:=x0000; when 1010 =b:=x07fc; when 1011 =b:=x0444; when 1100 =b:=x0444; when 1101 =b:=x0444; when 1110 =b:=x0444; when 1111 =b:=x0444; when others=null; end case;when 0001=case sel is when 0000 =b:=x0000; when 0001 =b:=x0000; when 0010 =b:=x0000; when 0011 =b:=x07fc; when 0100 =b:=x0444; when 0101 =b:=x0444; when 0110 =b:=x0444; when 0111 =b:=x0444; when 1000 =b:=x0444; when 1001 =b:=x7fff; when 1010 =b:=x4444; when 1011 =b:=x4444; when 1100 =b:=x4444; when 1101 =b:=x4444; when 1110 =b:=x4444; when 1111 =b:=x47fc; when others=null; end case;when 0010=case sel is when 0000 =b:=x0444; when 0001 =b:=x0444; when 0010 =b:=x7fff; when 0011 =b:=x4444; when 0100 =b:=x4444; when 0101 =b:=x4444; when 0110 =b:=x4444; when 0111 =b:=x4444; when 1000 =b:=x47fc; when 1001 =b:=x7000; when 1010 =b:=x0000; when 1011 =b:=x0000; when 1100 =b:=x0080; when 1101 =b:=x0082; when 1110 =b:=x2082; when 1111 =b:=x2082; when others=null; end case;when 0011=case sel is when 0000 =b:=x4444; when 0001 =b:=x47fc; when 0010 =b:=x7000; when 0011 =b:=x0000; when 0100 =b:=x0000; when 0101 =b:=x0080; when 0110 =b:=x0082; when 0111 =b:=x2082; when 1000 =b:=x2082; when 1001 =b:=x4082; when 1010 =b:=x4082; when 1011 =b:=x40a2; when 1100 =b:=x40d2; when 1101 =b:=x238a; when 1110 =b:=x1c8a; when 1111 =b:=x0086; when others=null; end case;when 0100=case sel is when 0000 =b:=x2082; when 0001 =b:=x2082; when 0010 =b:=x4082; when 0011 =b:=x4082; when 0100 =b:=x40a2; when 0101 =b:=x40d2; when 0110 =b:=x238a; when 0111 =b:=x1c8a; when 1000 =b:=x0086; when 1001 =b:=x0082; when 1010 =b:=x0080; when 1011 =b:=x0080; when 1100 =b:=x0000; when 1101 =b:=x0000; when 1110 =b:=x00c0; when 1111 =b:=x7ff8; when others=null; end case;when 0101=case sel is when 0000 =b:=x1c8a; when 0001 =b:=x0086; when 0010 =b:=x0082; when 0011 =b:=x0080; when 0100 =b:=x0080; when 0101 =b:=x0000; when 0110 =b:=x0000; when 0111 =b:=x00c0; when 1000 =b:=x7ff8; when 1001 =b:=x0007; when 1010 =b:=x0004; when 1011 =b:=x7ca4; when 1100 =b:=x44a4; when 1101 =b:=x44a4; when 1110 =b:=x44a4; when 1111 =b:=x44a6; when others=null; end case;when 0110=case sel is when 0000 =b:=x00c0; when 0001 =b:=x7ff8; when 0010 =b:=x0007; when 0011 =b:=x0004; when 0100 =b:=x7ca4; when 0101 =b:=x44a4; when 0110 =b:=x44a4; when 0111 =b:=x44a4; when 1000 =b:=x44a6; when 1001 =b:=x44a4; when 1010 =b:=x44a4; when 1011 =b:=x44a4; when 1100 =b:=x7ca4; when 1101 =b:=x0004; when 1110 =b:=x0000; when 1111 =b:=x0000; when others=null; end case;when 0111=case sel is when 0000 =b:=x44a4; when 0001 =b:=x44a6; when 0010 =b:=x44a4; when 0011 =b:=x44a4; when 0100 =b:=x44a4; when 0101 =b:=x7ca4; when 0110 =b:=x0004; when 0111 =b:=x0000; when 1000 =b:=x0000; when 1001 =b:=x4000; when 1010 =b:=x19fc; when 1011 =b:=x0154; when 1100 =b:=x3954; when 1101 =b:=x4154; when 1110 =b:=x4154; when 1111 =b:=x4157; when others=null; end case; when 1000=case sel is when 0000 =b:=x0000; when 0001 =b:=x0000; when 0010 =b:=x4000; when 0011 =b:=x19fc; when 0100 =b:=x0154; when 0101 =b:=x3954; when 0110 =b:=x4154; when 0111 =b:=x4154; when 1000 =b:=x4157; when 1001 =b:=x5d54; when 1010 =b:=x4154; when 1011 =b:=x4154; when 1100 =b:=x7954; when 1101 =b:=x0554; when 1110 =b:=x09fc; when 1111 =b:=x3000; when others=null; end case; when1001=case sel is when 0000 =b:=x4154; when 0001 =b:=x4157; when 0010 =b:=x5d54; when 0011 =b:=x4154; when 0100 =b:=x4154; when 0101 =b:=x7954; when 0110 =b:=x0554; when 0111 =b:=x09fc; when 1000 =b:=x3000; when 1001 =b:=x0000; when 1010 =b:=x0000; when 1011 =b:=x4002; when 1100 =b:=x4002; when 1101 =b:=x4002; when 1110 =b:=x4002; when 1111 =b:=x4002; when others=null; end case; when 1010=case sel is when 0000 =b:=x09fc; when 0001 =b:=x3000; when 0010 =b:=x0000; when 0011 =b:=x0000; when 0100 =b:=x4002; when 0101 =b:=x4002; when 0110 =b:=x4002; when 0111 =b:=x4002; when 1000 =b:=x4002; when 1001 =b:=x4002; when 1010 =b:=x7ffe; when 1011 =b:=x4002; when 1100 =b:=x4002; when 1101 =b:=x4002; when 1110 =b:=x4002; when 1111 =b:=x4002; when others=null; end case;when 1011=case sel is when 0000 =b:=x4002; when 0001 =b:=x4002; when 0010 =b:=x4002; when 0011 =b:=x7ffe; when 0100 =b:=x4002; when 0101 =b:=x4002; when 0110 =b:=x4002; when 0111 =b:=x4002; when 1000 =b:=x4002; when 1001 =b:=x4002; when 1010 =b:=x4000; when 1011 =b:=x0000; when 1100 =b:=x0000; when 1101 =b:=x0624; when 1110 =b:=x0124; when 1111 =b:=x7ffe; when others=null; end case; when1100=case sel is when 0000 =b:=x4002; when 0001 =b:=x4002; when 0010 =b:=x4002; when 0011 =b:=x4000; when 0100 =b:=x0000; when 0101 =b:=x0000; when 0110 =b:=x0624; when 0111 =b:=x0124; when 1000 =b:=x7ffe; when 1001 =b:=x00e2; when 1010 =b:=x0120; when 1011 =b:=x449c; when 1100 =b:=x44a2; when 1101 =b:=x44a2; when 1110 =b:=x44a2; when 1111 =b:=x7fa2; when others=null; end case; when1101=case sel is when 0000 =b:=x0124; when 0001 =b:=x7ffe; when 0010 =b:=x00e2; when 0011 =b:=x0120; when 0100 =b:=x449c; when 0101 =b:=x44a2; when 0110 =b:=x44a2; when 0111 =b:=x44a2; when 1000 =b:=x7fa2; when 1001 =b:=x44a2; when 1010 =b:=x44a2; when 1011 =b:=x44a2; when 1100 =b:=x449e; when 1101 =b:=x0000; when 1110 =b:=x0000; when 1111 =b:=x0000; when others=null; end case; when 1110=case sel is when 0000 =b:=x44a2; when 0001 =b:=x7fa2; when 0010 =b:=x44a2; when 0011 =b:=x44a2; when 0100 =b:=x44a2; when 0101 =b:=x449e; when 0110 =b:=x0000; when 0111 =b:=x0000; when 1000 =b:=x0000; when 1001 =b:=x0000; when 1010 =b:=x0000; when 1011 =b:=x0000; when 1100 =b:=x0000; when 1101 =b:=x0000; when 1110 =b:=x0000; when 1111 =b:=x0000; when others=null; end case; when 1111=case sel is when 0000 =b:=x0000; when 0001 =b:=x0000; when 0010 =b:=x0000; when 0011 =b:=x0000; when 0100 =b:=x0000; when 0101 =b:=x0000; when 0110 =b:=x0000; when 0111 =b:=x0000; when 1000 =b:=x0000; when 1001 =b:=x0000; when 1010 =b:=x0000; when 1011 =b:=x0000; when 1100 =b:=x0000; when 1101 =b:=x0000; when 1110 =b:=x0000; when 1111 =b:=x0000; when others=null; end case; when others=null;end case;vertic=b;end process;end architecture xianshi;此模块定义输入为sel、gund,对于与前面计数器模块输出、数据选择模块输出相连,sel的变化出现汉字,而gund的变化出现不同时刻滚动出现的汉字。(2)模块仿真图此模块仿真效果图如图3.3所示。图3.3 汉字显示模块仿真效果图从仿真结果来看,此模块完全可以实现汉字的滚动效果。3.4 汉字滚动功能仿真效果图此模块仿真效果图如图3.4所示。图3.4 汉字滚动功能仿真图4.滚动显示汉字与各种清屏效果及各模块工作原理4.1 总电路原理图总模块原理图如图4.1所示图4.1 总模块原理图其中fastclk接高频时钟信号,slowclk接低频时钟信号,upclr,downclr,leftclr,rightclr分别为上下左右清屏输入端,分别接4个开关,以控制清屏。sel3.0接sel3sel0,vertic15.0接到l15l0。由于用此种方案可实现汉字滚动及滚动过程中随时对任意字进行清屏,因此没有再单独编写“电”字清屏及“电”字滚动模块。另外用此种方案可实现滚动一次移动一列的效果,较前一种滚动显示汉字的方案更优越。此原理图由两个模块组成,分别为16进制计数器模块count16和滚动、清屏模块perf组成,计数模块前面有介绍不再重复陈述。只介绍perf模块的工作过程。4.2汉字滚动、清屏模块原理及功能介绍(1)模块vhdl代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity perf is port(sel:in integer range 0 to 15; upclr,downclr,leftclr,rightclr,slowclk:in std_logic; vertic : out std_logic_vector(15 downto 0) ); end perf;architecture xianshi of perf is type shuzu is array(0 to 127)of std_logic_vector(0 to 15); signal d:shuzu; signal clr:std_logic_vector(3 downto 0);-清屏时用于计数,到“1111”后停止计数,从而实现一直黑屏 signal buf:integer range 0 to 127; -中间变量,作为数组行号 signal gund : integer range 0 to 112;-113种状态用于滚动113次,从而实现“电子信息工程”滚动一次只移动一行 signal weisel:std_logic_vector(3 downto 0);-用于保存sel转换成位矢量的值 signal notsel:std_logic_vector(3 downto 0);-保存weisel的补码 signal en:std_logic;-clr的使能信号,为1时clr才计数,有清屏信号时才为1,否则为0 beginweisel= conv_std_logic_vector(sel,4);-将sel转换为位矢量,保存在weisel中notsel=not weisel;-保存weisel补码d(0)=x0000;-黑屏d(1)=x0000;d(2)=x0000;d(3)=x0000;d(4)=x0000;d(5)=x0000;d(6)=x0000;d(7)=x0000;d(8)=x0000;d(9)=x0000;d(10)=x0000;d(11)=x0000;d(12)=x0000;d(13)=x0000;d(14)=x0000;d(15)=x0000; d(16)=0000000000000000; d(17)=0000000000000000; d(18)=0001111111111000; d(19)=0000100010001000; d(20)=0000100010001000; d(21)=0000100010001000; d(22)=0000100010001000; d(23)=0111111111111111; d(24)=1000100010001000; d(25)=1000100010001000; d(26)=1000100010001000; d

温馨提示

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

评论

0/150

提交评论