《EDA技术与应用》课程设计报告题目: LED点阵显示屏控制系统设计院(系):机电与自动化学院专业班级:自动化学生姓名:学号: 2014指导教师:2017年6月 19日至2017年 6 月23 日*******《EDA技术及应用》课程设计任务书摘要:我国经济正处于发展的高峰期,也需要广大的公共场合信息公示平台,而利用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 设计基本原理图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 isPort(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 issignal b0:std_logic_vector(3 downto 0); Signal s1:std_logic_vector(3 downto 0); Signal s2:std_logic_vector(15 downto 0); Begina1:process(clk) beginIf clk'event and clk='1' thenb0<=b0+1;end if;s0<=b0;End process;a2:process(clk) beginIf clk'event and clk='1' thenCase s1 isWhen"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"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"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;BeginIf clk'event and clk='1' then m:=m+1;If m=511 thens1<=s1+1;End if;End if;End process;end ;----程序只模拟扫描显示“高**”三个字。