收藏 分销(赏)

EDALED点阵显示屏控制系统设计.doc

上传人:精*** 文档编号:3372185 上传时间:2024-07-03 格式:DOC 页数:17 大小:16.72MB 下载积分:8 金币
下载 相关 举报
EDALED点阵显示屏控制系统设计.doc_第1页
第1页 / 共17页
EDALED点阵显示屏控制系统设计.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
《EDA技术与应用》 课程设计报告 题 目: LED点阵显示屏控制系统设计 院 (系): 机电与自动化学院 专业班级: 自动化 学生姓名: 学 号: 2014 指导教师: 2017年6月 19日至2017年 6 月23 日 ******* 《EDA技术及应用》课程设计任务书 一、设计题目 LED点阵显示屏控制系统设计 二、设计主要内容 (1) 控制要求 本课程设计要求根据输入指令要求对16*16点阵的LED显示屏进行显示控制,在控制过程中以EP3C10E144C8为主控芯片,利用译码芯片进行行扫描控制,同时输出字型码进行显示控制。 ① 根据控制要求,编写VHDL程序实现LED点阵屏控制功能; ② 使用字库转换软件实现汉字字型码的转换。 ③ 要求能够实现名字及学号的现示,要求能够实现字符不同的移动显示方向,能够实现不同的显示速度(时钟频率不变)。 (2) 设计要求 ① 设计FPGA的基础工作电路; ② 设计LED点阵屏,译码电路,驱动电路及FPGA芯片的硬件电路连接; ③ 程序设计及仿真调试; ④ 程序下载并进行硬件调试 (3)撰写说明书 ① 含系统硬件设计电路; ② 含软件设计(程序及必要的说明); ③ 含软件仿真及生成的顶层文件,含代码生成的硬件电路; ④ 调试及调试结果,以及在调试过程中出现的问题及解决办法。 三、原始资料 (1) 16*16点阵LED屏可显示数字及汉字,对于点阵,在给出字型码数据的同时给出行扫描信号,通过控制给出数据的速度,结合人体的视觉效应可以使点阵屏稳定显示字符; (2) 本系统控制的还有译码电路及驱动电路。通过输出译码数据,可以调整显示字符的移动方向。 (3) 在控制过程中,可以外接控制开关控制字符显示方式; (4) EP3C10E144C8芯片只能输出3.3V电压,对于16个LED液晶灯的驱动是不够的,因此必须有外接驱动电路提供足够的驱动能力。 驱动点阵屏显示 根据输入信号产生点阵屏的控制数 据 控制信号 驱 动 电 路 CLK 译 码 电 路 四、要求的设计成果 在QuartusII软件中新建原理图文件,编译,仿真,锁定管脚并下载到目标芯片。 (1) 根据设计要求, 设计系统的原理框图,说明系统中各主要组成部分的功能; (2) 在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过; (3) 根据软件编好用于系统仿真的测试文件; (4) 编好用于硬件验证的管脚锁定文件; (5) 记录系统各个模块仿真结果; (6) 记录调试过程中出现的问题及解决办法。 注意:基本要求学生必须完成,学有余力的学生可以在基本要求完成的前提下,选择其它方案完成设计。一般来说,生成的硬件电路越简单考查评价就越高。 五、进程安排 序号 课程设计内容 学时分配 备注 1 集中学生学习课程设计的关键理论知识、分配设计任务、明确设计要求、查找资料等。 0.5天 2 根据任务的要求进行方案构思,初选方案,绘制系统原理框图并与指导教师讨论,方案定稿。 0.5天 3 完成各模块的VHDL程序设计、编译和时序仿真 2天 4 编程、下载,结合硬件平台,进行调试。完成顶层文件图绘制,对编制好的文件交给老师检查,并按照老师要求修改。 1天 5 撰写课程设计说明书 0.5天 6 答辩及验收课程设计 0.5天 合计 5天 六、主要参考资料 [1] 侯伯享. VHDL硬件描述语言与数字逻辑电路设计. 西安:西安电子科技大学出版,2010 [2] 潘松. EDA技术实用教程. 成都:电子科技大学出版社,2010 [3] 李玉山. 电子系统集成设计技术. 北京:电子工业出版社,2010.6. [4] 李国丽.EDA与数字系统设计.北京:机械工业出版社,2009 [5] 周彩宝.VHDL语言及其应用. 上海:华东计算机技术研究所:2009 [6] 谭会生.EDA技术中和应用实例与分析.西安:西安电子科技大学出版社,2008 指导教师(签名): 20 年 月 日 摘 要:我国经济正处于发展的高峰期,也需要广大的公共场合信息公示平台,而利用LED点阵滚动显示正好符合情况,且这种方式已经成为信息传递的一种重要手段。因此,在日常生活中,点阵随处可见。通过多种控制手段,点阵还可以实现各种文字甚至图案的动态显示。在不同的应用场合,点阵的设计要求也是不同的。传统思路一般是应用单片机实现点阵控制,但该方法有一定的局限性。 该次课程设计主要研究利用VHDL语言编程来设计汉字的显示。首先描述相应的设计电路;然后叙述在16*16矩阵显示汉字的原理;最后给出描述功能的VHDL设计语言。并通过编程、调试、仿真、下载正确实现汉字滚动、扫描显示结果。 关键词: LED点阵;FPGA;VHDL语言;汉字滚动显示。 目录 1.实验要求及总体方案 1 1.1 实验要求 1 1.2 扫描显示 1 1.3 滚动显示 1 2.LED点阵显示原理 1 2.1 LED点阵原理 1 2.2汉字取模 2 3.扫描显示 3 3.1 设计基本原理 3 3.2计数器设计 3 3.3 列驱动设计 4 3.4 行驱动设计 4 4.仿真图原理图及实物图 4 4.1仿真图 4 4.2原理图 5 4.3实物图 6 5.程序 7 参考文献: 10 1.实验要求及总体方案 1.1 实验要求 本课程设计要求根据输入指令要求对16*16点阵的LED显示屏进行显示控制,在控制过程中以EP3C10E144C8为主控芯片,利用译码芯片进行行扫描控制,同时输出字型码进行显示控制。 1.2 扫描显示 采用从上往下依次点亮,扫描显示16列。每次显示一个汉字,显示完毕后扫描显示第二汉字,之后刷新显示第三汉字,依次刷新显示“高思禹20142101009”。循环显示以上汉字。 1.3 滚动显示 利用ROM库的方法,采用滚屏显示,使每一位都置‘1’这就实现了点亮;当第‘0’位也置‘1’后,给第0位也置‘0’,再采用上下的方法将每一位都置‘0’,这就实现了反相依次熄灭,等第15位为‘0’时,又重新开始,以此循环。 2.LED点阵显示原理 2.1 LED点阵原理 以下为16×16点阵LED外观及引脚图及其等效电路,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。 图2-1 16*16点阵LED等效电路 图2-1 16*16点阵LED等效电路 图2-1 点阵图 点阵LED一般采用扫描式显示,实际运用分为三种方式: 点扫面、行扫描、列扫描。 若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(16颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。 2.2汉字取模 图2-2 汉字取模 用取模软件依次取出相应字的代码,其中的16进制数可利用计算机中的计算器软件转换成二进制即可。 3.扫描显示 3.1 设计基本原理 16*16LED灯 JC2 74HC245 74 HC154 74HC245 图3-1 基本原理图 16×16扫描LED点阵只要其对应的X、Y轴顺向偏压,即可使LED发亮;计数器模块用来控制每个字显示的时间长短,当计数器计数到设定的值后,显示屏就换下一个字;本设计由32进制计数器(COUNT32),16进制计数器(COUNT16),行驱动(XIANSHI)和列驱动(ROWCON)组成。 3.2计数器设计 s1是计数器,其每计一次数,更换一个字显示。例如当计数为 “0010”时显示“*”,当计数为“0011”时显示“*”,按要求需显示“*********”,所以当计数为“1110”时又循环显示“*”,给其脉冲周期为1S,1S钟换一个字。 3.3 列驱动设计 b0控制所亮的行,当输出为0001时,给点阵的第一列高电平,输出为0010H时,给点阵的第二行列电平,依次类推,逐次给每列高电平。 3.4 行驱动设计 该模块控制的是所显示的字。例如当s1为0001时,表示显示第一个字;当s1为00010时,表示显示第二个字,依次类推。b0控制所显示的为字的第几行,例如当b0为0001时,表示输出字的第一行文字信息;b0为0010时,表示输出字的第二行文字信息,依次类推。 4.仿真图原理图及实物图 4.1仿真图 图4-1 时序仿真图 4.2原理图 图4-2 原理图(上下连接) 4.3实物图 图4-3滚动显示实物图 5.程序 Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity G is Port(clk:in std_logic; s0:out std_logic_vector(3 downto 0); Cout:out std_logic_vector(15 downto 0)); End G; ARCHITECTURE bhv of G is signal b0:std_logic_vector(3 downto 0); Signal s1:std_logic_vector(3 downto 0); Signal s2:std_logic_vector(15 downto 0); Begin a1:process(clk) begin If clk'event and clk='1' then b0<=b0+1; end if; s0<=b0; End process; a2:process(clk) begin If clk'event and clk='1' then Case s1 is When"0001"=>case b0 is--高 When"0001"=>s2<="0000000110000000"; When"0010"=>s2<="1111111111111111"; When"0011"=>s2<="0000000000000000"; When"0100"=>s2<="0001111111111000"; When"0101"=>s2<="0001100000011000"; When"0110"=>s2<="0001111111111000"; When"0111"=>s2<="0000110000110000"; When"1000"=>s2<="0111111111111110"; When"1001"=>s2<="0110100000000110"; When"1010"=>s2<="0110111111110110"; When"1011"=>s2<="0110110000110110"; When"1100"=>s2<="0110110000110110"; When"1101"=>s2<="0110111111110110"; When others=>s2<="0000000000000000"; End case; When"0010"=>case b0 is--* When"1111"=>s2<="0000000000000000"; When"0000"=>s2<="0111111111111110"; When"0001"=>s2<="0111000110001110"; When"0010"=>s2<="0111000110001110"; When"0011"=>s2<="0111111111111110"; When"0100"=>s2<="0111000110001110"; When"0101"=>s2<="0111000110001110"; When"0110"=>s2<="0111111111111100"; When"0111"=>s2<="0000000000000000"; When"1000"=>s2<="0111110110001100"; When"1001"=>s2<="0111110111001110"; When"1010"=>s2<="0110110011100110"; When"1011"=>s2<="1110110001111111"; When"1100"=>s2<="1100110000011011"; When"1101"=>s2<="1100111111111000"; When others=>s2<="0000000000000000"; End case; When"0011"=>case b0 is--* When"1111"=>s2<="0000000000000000"; When"0001"=>s2<="0111111111111110"; When"0010"=>s2<="0000000110000000"; When"0011"=>s2<="0011111111111100"; When"0100"=>s2<="0111000110000110"; When"0101"=>s2<="0111000110000110"; When"0110"=>s2<="0011111111111100"; When"0111"=>s2<="0000000110000000"; When"1000"=>s2<="0111111111111110"; When"1001"=>s2<="1110000110110111"; When"1010"=>s2<="1110000110111111"; When"1011"=>s2<="1110000011111111"; When"1100"=>s2<="1111111100011111"; When"1101"=>s2<="1110000000001111"; When"1110"=>s2<="1110000001111110"; When others=>s2<="0000000000000000"; End case; When others=>s2<="0000000000000000"; End case; End if; Cout<=s2; End process; a3: process(clk) Variable m:integer range 0 to 511; Variable int:std_logic; Begin If clk'event and clk='1' then m:=m+1; If m=511 then s1<=s1+1; End if; End if; End process; end ; ----程序只模拟扫描显示“高**”三个字。 参考文献: [1]郭照南,孙胜麟.电子技术与EDA技术实验及仿真.长沙:中南大学出版社,2012.4 [2]孟庆斌,司敏山.EDA实验教程.天津:南开大学出出版社,2011.8 [3]吴岩海.EDA技术及应用.西安:西安电子科技大学出版社,2012.1 [4]徐飞.EDA技术与实践.北京:清华大学出版社,2011.6 课程设计成绩评定表 成 绩 评 定 项 目 比例 得 分 平时成绩(百分制记分) 30% 业务考核成绩(百分制记分) 70% 总评成绩(百分制记分) 100% 评定等级 优 良 中 及格 不及格 指导教师(签名): 20 年 月 日
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服