LED点阵汉字显示.doc_第1页
LED点阵汉字显示.doc_第2页
LED点阵汉字显示.doc_第3页
LED点阵汉字显示.doc_第4页
LED点阵汉字显示.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

EDA技术课程设计报告题目: LED点阵汉字显示 姓 名 学 号 班 级 指导教师 2012年 1 月 12 日要求:1指导教师按照课程设计大纲要求完成学生课程设计指导工作。2课程设计任务书由指导教师照大纲要求填写,内容要全面。3课程设计报告由参加本学生填写。课程设计结束时交指导教师。4指导教师要根据每一位学生课程设计任务完成情况,认真审核设计报告,并在课程设计结束时,给出客观、准确的评语和成绩。5课程设计任务书和报告要语言流畅,图表正确规范。课程设计任务书课程设计内容与要求 要求:1 及格:在实验箱上16*16点阵模块上显示汉字“电”; 2 中:设置不同的清屏方式; 3 良:滚动显示汉字“电”; 4 优:滚动显示“电子信息工程”; 2011 年12月26日一、设计原理与技术方法:1.电路工作原理分析与原理图1.1.LED点阵屏原理实验室用的是一个16*16的点阵,是用四个8*8点阵组合而成,点阵内部结构及外形如图1,点阵共由256个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮。图1 内部连接后效果图 图2 内部连接图 图3 实物图如要将第一个点点亮,则行的1脚接高电平,列的1脚接低电平,则第一个点就亮了;如果要将第一行点亮,则行的1脚要接高电平,而16列引脚全接低电平,那么第一行就会点亮;如要将第一列点亮,则列的1脚接低电平,行全接高电平,那么第一列就会点亮.。实验箱的接法是:通过一个四十六译码电路(译码器)选中列,再给行赋值十六个位数据,所以如要将第一列点亮,只需译码电路的输入是“0000”选中第一列,送数据“0000000000000000”,通过对软件设置,取阴码后,送数据“1111111111111111”效果一样。(软件的使用在下面说明)1.2.点阵LED扫描法介绍:点阵LED一般采用扫描式显示,实际运用分为三种方式: (1)点扫描(2)行扫描(3)列扫描若使用第一种方式,其扫描频率必须大于1664=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于168=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。1.3 汉字的显示一般我们使用点阵显示汉字是用的16*16的点阵宋体字库,所谓16*16,是每一个汉字在纵、横各16点的区域内显示的。如图四所示,要显示“电”则相应的点就要点亮, 所以要显示“电”字的话, 第一时刻选中第一列, 列送数据“0000000000000000” x0000(十六进制表示)第二时刻选中第一列, 列送数据“0000000000000000” x0000第三时刻选中第一列, 列送数据“00001111111111000” x0FF8;第四时刻选中第一列, 列送数据“0000010001001000” x0448第五时刻选中第一列, 列送数据“0000010001001000” x0448第六时刻选中第一列, 列送数据“0000010001001000” x0448第七时刻选中第一列, 列送数据“0000010001001000” x0448第八时刻选中第一列, 列送数据“00111111111111111” x3FFF第九时刻选中第一列, 列送数据“0100010001001000” x4448第十时刻选中第一列, 列送数据“0100010001001000” x4448第十一时刻选中第一列,列送数据“0100010001001000” x4448第十二时刻选中第一列,列送数据“0100010001001000” x4448第十三时刻选中第一列,列送数据“01001111111111000” x4FF8第十四时刻选中第一列,列送数据“0100000000000000” x4000第十五时刻选中第一列,列送数据“0111000000000000” x7000第十六时刻选中第一列,列送数据“0000000000000000” x0000单独显示:当送数据的频率够大时(每秒大于二十四次),肉眼看到的效果就是一个静态显示的“电”字;左右清屏:在第一个16个时钟送电的十六列代码,下一个16个时钟送电的后十五列代码,在下一个16个时钟送电的后14列代码,第十五个16个时钟只送电的最后一列代码,就是电的左清屏显示。上下清屏:在第一个16个时钟送电的十六列代码,下一个16个时钟送抹掉第一行的电的后十六列代码,在下一个16个时钟送抹掉前两行的电的十六列代码,第十五个16个时钟只送抹掉前十五行的电的十六列代码,就是电的上清屏显示。左右滚动:下一个十六个时钟,每列数据前移一次,后一列补零即是滚动显示滚动六个字:同单个字的滚动显示,只不过是每列数据前移一次,后一列补下一个字的第一列,以此类推,即是六个字的滚动显示。推荐一款汉字取模的软件:图4 取模软件界面图1.4.程序源代码(1)电单独显示编程思路:每一个时钟沿,列计数器加一,选中下一列,通过CASE语句,送入相应的列数据。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dian isport(clk0,clr:in std_logic; sel:out std_logic_vector(3 downto 0); -列选信号 line:out std_logic_vector(15 downto 0); - 行选信号end dian;architecture rtl of dian issignal q: std_logic_vector(3 downto 0); -内部计数器(16进制) beginp1:process(clk0,clr) beginif(clr=1)then q1111)then q=0000;else qlinelinelinelinelinelinelinelinelinelinelinelinelinelinelinelinenull;end case;end process p2;sel=q;end rtl;(2)电左右清屏编程思路:每一个时钟沿,列计数器加一,选中下一列,列计数器加16次时,状态计数器加一,切换到下一个状态,当状态值大于列值时,不送数据(或送零),小于等于时,正常送数据,达到右清屏的效果2-1左清屏:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity zuoqing is port( clk:in std_logic; sel:out std_logic_vector(3 downto 0); line:out std_logic_vector(15 downto 0) );end zuoqing;architecture behavior of zuoqing issignal counter:integer range 0 to 15; signal q:std_logic_vector(3 downto 0); beginprocess(clk,q) begin if(clkevent and clk=1) then if q=1111 then q=0000; if counter=15 then counter=0; else counter=counter+1; end if; else q if counter=0 then line=0000000000000000; else line if counter=1 then line=0000000000000000; - 判断状态值是否大于列值 else line if counter=2 then line=0000000000000000; else line if counter=3 then line=0000000000000000; else line if counter=4 then line=0000000000000000; else line if counter=5 then line=0000000000000000; else line if counter=6 then line=0000000000000000; else line if counter=7 then line=0000000000000000; else line if counter=8 then line=0000000000000000; else line if counter=9 then line=0000000000000000; else line if counter=10 then line=0000000000000000; else line if counter=11 then line=0000000000000000; else line if counter=12 then line=0000000000000000; else line if counter=13 then line=0000000000000000; else line if counter=14 then line=0000000000000000; else line if counter=15 then line=0000000000000000; else line null; end case; end if;end process;sel=q; -列扫描值输出end behavior;2-2右清屏:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity youqing is port( clk:in std_logic; sel:out std_logic_vector(3 downto 0); line:out std_logic_vector(15 downto 0) );end youqing;architecture behavior of youqing issignal counter:integer range 0 to 15; signal q:std_logic_vector(3 downto 0); beginprocess(clk,q) begin if(clkevent and clk=1) then if q=1111 then q=0000; if counter=15 then counter=0; else counter=counter+1; end if; else q if counter=0 then line=0000000000000000; else line if counter=1 then line=0000000000000000; - 判断状态值是否大于列值 else line if counter=2 then line=0000000000000000; else line if counter=3 then line=0000000000000000; else line if counter=4 then line=0000000000000000; else line if counter=5 then line=0000000000000000; else line if counter=6 then line=0000000000000000; else line if counter=7 then line=0000000000000000; else line if counter=8 then line=0000000000000000; else line if counter=9 then line=0000000000000000; else line if counter=10 then line=0000000000000000; else line if counter=11 then line=0000000000000000; else line if counter=12 then line=0000000000000000; else line if counter=13 then line=0000000000000000; else line if counter=14 then line=0000000000000000; else line if counter=15 then line=0000000000000000; else line null; end case; end if;end process;sel=q; -列扫描值输出end behavior;2-3 电字滚动 两个时钟控制,clk0用于点阵的动态扫描,clk1用于移位的时钟信号,每个clk1上升沿一到扫描的16列就左移一位,只需送出16列相应的代码即可。每个Case语句中都向左移一位。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dongdian isport(clk0,clk1,clr:in std_logic; sel:out std_logic_vector(3 downto 0); line:out std_logic_vector(15 downto 0);end dongdian;architecture rtl of dongdian issignal q: std_logic_vector(3 downto 0);signal choose:std_logic_vector(3 downto 0);beginsel=q;p0:process(clk1)beginif(clk1event and clk1=1) then if(choose=1111)then choose=0000;else choose=choose+1;end if;end if;end process p0;p1:process(clk0,clr) beginif(clr=1)then q1111)then q=0000;else q -case语句 case q is -嵌套的case语句 when 0000=linelinelinelinelinelinelinelinelinelinelinelinelinelinelinelinenull; end case; when 0001= case q is -向下移一位 when 0000=linelinelinelinelinelinelinelinelinelinelinelinelinelinelinelinenull; end case; when 0010= case q is when 0000=linelinelinelinelinelinelinelinelinelinelinelinelinelinelinelinenull; end case; when 0011= case q is when 0000=linelinelinelinelinelineli

温馨提示

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

评论

0/150

提交评论