EDA 16x16点阵显示.
16X16点阵显示综合实验new
EDA 综合课程设计(四)——16X16点阵显示综合实验16X16点阵控制接口一、 实验要求设计一个共阴16X16点阵控制接口,要求:在时钟信号的控制下,使点阵动态点亮,点亮方式自行设计,其中列选信号为16-4编码器编码输出。
控制器的引脚功能图如上图所示,其中:DIN[3..0]为显示花样模式选择,高电平有效;CLK 为时钟输入端;DOTOUT[15..0]为行驱动信号输出;SELOUT[3..0]为列选信号输出,为16-4编码信号。
图案1实现16X16点阵的16列同时从上往下依次点亮,全亮后16列又同时从下往上依次熄灭。
列选信号:采用与7段数码管的位选信号一样的处理方法,即列扫描信号频率大于24HZ 。
行驱动信号:可以采用移位的方法,可先定义一个16位的信号,若最高位置为‘1’,我们采用右移的方法,使每一位都置‘1’,这就实现依次点亮;当第0位也置‘1’后,给第0位置‘0’,二、实验内容16X16点阵控制接口引脚功能再采用左移的方法将每一位又重新置‘0’,这样就实现了反相依次熄灭,等第15位为‘0’时,又重新开始,以此循环。
对于其他的显示花样,请自行设计。
三、实验连线将CP端接时钟输出,并使输入频率约为1MHZ,DIN[3..0]分别接4位拨码开关,DOTOUT[15..0]分别接显示模块的L15~L0,SELOUT[3..0]分别接显示模块的SEL3~SEL0。
16X16点阵字符发生器一、实验目的:1、了解点阵字符的产生和显示原理。
2、了解E2PROM和16×16点阵LED的工作机理。
3、加强对于总线产生,地址定位的CPLD实现的理解。
二、硬件要求:1.主芯片EPF10K10LC84-4。
2.可变时钟源。
3.带有事先编程好字库/字符的E2PROM 2864。
4.16×16扫描LED点阵。
三、实验原理:16×16扫描LED点阵的工作原理同8位扫描数码管类似。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。
单片机课程设计--+16x16点阵LED电子显示屏的设计
单片机课程设计-- 16x16点阵LED电子显示屏的设计第一章系统总体方案设计LED驱动显示采用动态扫描方法, 动态扫描方式是逐行轮流点亮, 这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。
以16×16点阵为例, 把所有同一行的发光管的阳极连在一起, 把所有同一列的发光管的阴极连在一起(共阳的接法), 先送出对应第1行发光管亮灭的数据并锁存, 然后选通第1行使其燃亮一定的时间, 然后熄灭;再送出第2行的数据并锁存, 然后选通第2行使其燃亮相同的时间, 然后熄灭;…第16行之后, 又重新燃亮第1行, 反复轮回。
当这样轮回的速度足够快(每秒24次以上), 由于人眼的视觉暂留现象, 就能看到显示屏上稳定的图形。
该方法能驱动较多的LED, 控制方式较灵活, 而且节省单片机的资源。
显示数据传输采用串行传输的方法, 控制电路可以只用一根信号线, 将列数据一位一位传往列驱动器, 在硬件方面无疑是十分经济的。
但串行传输过程较长, 数据按顺序一位一位地输出给列驱动器, 只有当一行的各列数据都已传输到位之后, 这一行的各列才能并行地进行显示。
对于串行传输方式来说, 列数据准备时间可能相当长, 在行扫描周期确定的情况下, 留给行显示的时间就太少了, 以致影响到LED的亮度。
采用串行传输中列数据准备和列数据显示的时间矛盾, 可以采用重叠处理的方法。
即在显示本行各列数据的同时, 传送下一行的列数据。
为了达到重叠处理的目的, 列数据的显示就需要有锁存功能。
对于列数据准备来说, 它应能实现串入并出的移位功能。
这样, 本行已准备好的数据打入并行锁存器进行显示时, 串行移位寄存器就可以准备下一行的列数据, 而不会影响本行的显示。
系统框图如图一图一点阵显示器硬件系统框图第二章系统硬件电路的设计硬件电路大致上可以分为单片机系统及外围电路、列驱动电路和行驱动电路三部分。
一. 单片机系统及外围电路单片机采用89C51或更高频率的晶振, 以获得较高的刷新频率, 使得显示更稳定。
16x16点阵显示汉字
LOOP:MOV R7,#00
;初始化列显示数据
MOV R6,20H
MOV R1,#16H
;是否显示完成一个汉字
MAIN:MOV A,R6
;主程序入口
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
INC R6
MOV A,R6
MOVC A,@A+DPTR
MOV P2,AINC R616*16 Nhomakorabea阵显示汉字
1
判断点阵是共 8*8点阵连接 阴还是共阳级 为16*16点阵
端口连接方法 和显示原理
测试哪个方向 是行,哪个方 向是列
是否可完成一 个汉字显示及 字模软件应用
动态显示汉字 原理
2
8*8点阵连接为16*16点阵
3
4
端口连接方法和显示原理
因为单片机的I/O口是有限的,所以LED汉字的显示 使用到了动态扫描,一般行数据用到了P0,P2口,列 数据用到了P1口并且用了一个4-16线译码器。因为 我们每次只需要点亮一列并延时一段时间,就可以使 我们认为汉字是一直在显示的。
DJNZ 22H,LOOP2
AJMP START
DELAY:MOV R4,#01
;延时程序
D1:MOV R3,#20
DJNZ R3,$
DJNZ R4,D1
RET
TAB: XXXXXXXXXXXXXXXXXXXXXXXXXXX
13
14
制作:W.K.
15
DELAY:MOV R1,#2 D1: MOV R2,#10
DJNZ R2,$ DJNZ R1,D1 RET TAB: DB 0x10,0x80,0x10,0x80,0x50,0x80,0x50, 0xFC,0x7D,0x54,0x52,0x54,0x90,0x54, 0x10,0x94 DB 0x1C,0x94,0xF1,0x24,0x52,0x24,0x10, 0x44,0x10,0x44,0x10,0x84,0x11,0x28, 0x10,0x10 END
16乘16点阵显示实验报告
实验报告实验名称: [16×16点阵显示实验] 姓名: []学号: [2011]指导教师: []实验时间: [2013年4月25日]信息与通信工程学院16×16点阵显示实验1实验要求任务1:将所给程序改正使结果为正显示;任务2:使显示四个字、八个字。
2实验原理2.1 LED显示器结构和原理1>8*8LED点阵的结构图1 8*8LED点阵结构图从图1中可以看出,8*8LED点阵共由64个发光二极管组成,每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1高电平,且某一列置0低电平,则相应的发光二极管就亮;因此要用8*8LED点阵来显示一个字符或汉字,只需要根据字符或汉字图形中的线条或笔画,通过点亮多个发光二极管来勾勒出字符或汉字的线条或笔画就行了。
当要比较完美的显示一般的汉字,单个8*8LED点阵模块很难做到,因为LED的点数(也称为像素点)不够多,因此要显示汉字的话,需要多个8*8LED点阵拼合成一个显示屏。
假如用4个8*8LED点阵模块拼成16*16的点阵,即能满足一般汉字的显示。
但要显示信息量大的图形,则需要n个多个8*8LED点阵,拼装成一个大屏幕才行。
LED点阵显示器最大的特点是亮度高、功耗较低、寿命长、容易控制等,因此它的应用很广,常用在广场、车站、商业广告等室外的显示。
2>8*8LED点阵的封装和引脚规律64个发光二极管按照行共阳、列共阴4个一组的方式封装成一个模块,这样8*8LED 点阵模块就有8行、8列共16个引脚。
其实物图如图2,电路模块符号图如图3。
图2 8*8LED点阵实物图图3 8*8LED点阵符号图但8*8LED点阵的16个引脚并不是很有规律,千万不要想象成1~8个引脚是行,9~16个引脚是列。
而且不同产品的点阵外部引脚排列规律还可能不一样。
以下是NLB1388SRA 和LDM1388SRA两个型号点阵引脚对应行、列的关系表:行号H0 H1 H2 H3 H4 H5 H6 H7引脚号9 14 8 12 1 7 2 5列号L0 L1 L2 L3 L4 L5 L6 L7引脚号13 3 4 10 6 11 15 16 假如你买到一块新的8*8LED点阵,又没有关于它的相关资料,那你只有自己用万用表或通过VCC电源串接一个510欧姆的电阻来检测了。
16乘16点阵LED电子显示屏的设计
16乘16点阵LED电子显示屏的设计概述本文将讨论16乘16点阵LED电子显示屏的设计。
这是一个可以显示图形和文字的电子屏幕,使用16列和16行LED灯来组成一个点阵,可以显示256个像素。
这样的屏幕可以广泛应用于科技展示、娱乐游戏和家庭电子设备等领域。
设计硬件LED灯基本的LED操作和驱动电路在这里不再赘述。
需要注意的是,对于16行LED 灯和16列LED灯,需要使用合适的电流控制电路并且保证它们可以受到足够的电流。
此外,将需要16个NPN晶体管来控制16列LED灯,和16个PNP晶体管来控制16行LED灯。
控制器在控制器的选择上推荐使用ATmega328p微控制器。
这个控制器也是Arduino Uno的基础。
软件代码结构代码文件应当按照以下结构进行组织:Libraries/SevSeg/SevSeg.hLedControl/LedControl.hLedControl.cppMAX7219.hMAX7219.cppSPI.hSPI.cpp16x16LEDMatrix/16x16LEDMatrix.inoREADME.md这里我们使用SevSeg和LedControl库。
打包由于ATmega328p微控制器的内存限制,将需要对代码进行压缩,以减小程序的尺寸,使它适合在所预算的存储设备中运行。
可以通过使用压缩工具完成这个任务。
推荐使用zip或tar。
结论在这篇文档中,我们讨论了16乘16点阵LED电子显示屏的设计。
我们详细介绍了硬件和软件方面的设计需求以及代码结构的组织。
通过对这些内容的了解,你可以开始创建你自己的16乘16点阵LED电子显示屏!。
EDA技术综合设计课程设计-基于VHDL的16×16汉字 点阵动态显示系统的设计
《EDA技术综合设计》课程设计报告报告题目:基于VHDL的16×16汉字点阵动态显示系统的设计作者所在系部:电子工程系作者所在专业:电子信息工程摘要随着电子技术的不断革新,以二极管为基础的LED点阵随之获得了广泛的应用。
在日常生活中,点阵随处可见。
通过多种控制手段,点阵还可以实现各种文字和图案的动态显示。
而在不同的应用场合,点阵的设计要求是不同的。
传统的思路一般是应用单片机实现点阵控制,但这种方法会受到一定的硬件资源限制。
随着电子设计自动化技术的进展,基于可编程逻辑器件进行系统芯片集成的点阵控制不失为一种新的设计思路。
本设计以电子设计自动化(EDA)技术为核心,运用硬件描述语言(VHDL),在MAX+plus Ⅱ环境下进行编程并下载到可编程逻辑器件中实现LED点阵的控制电路。
主要程序除了常用的译码器、计数器之外,还包括了自定义功能的控制模块。
通过编程、调试、仿真、下载完成了汉字的动态显示。
彰显了EDA技术在当今电子领域中的重要地位。
关键词:EDA、可编程逻辑器件、计数器、点阵、动态目录一、概述 (5)二、方案设计与论证 (5)1、点亮点阵中一个点的原理 (5)2、点亮一个字的原理 (5)3、动态显示不同汉字的原理 (5)三、底层文件与程序设计 (6)1.十六进制计数器 (6)2.八进制计数器 (7)3.字显示控制模块 (8)四、系统调试与仿真 (12)1、开发环境介绍 (12)2、新建项目 (12)3、输入程序 (12)4、编译 (13)5、时序仿真 (13)6、设计顶层文件 (14)7、选择器件 (14)8、设置管脚 (14)9、下载 (14)五、硬件调试 (15)六、心得体会 (15)七、参考文献 (15)八、指导教师及评语 (16)课程设计任务书课题名称基于VHDL的16×16点阵汉字动态显示系统的设计完成时间指导教师职称学生姓名班级总体设计要求和技术要点1.在时钟信号的控制下,使点阵动态点亮,点亮方式自行设计,其中位选信号为16-4编码器编码输出。
SOPCEDA综合课程设计---1616的点阵显示设计
SOPC/EDA综合课程设计报告设计题目:16*16的点阵显示设计设计者:学号:班级:指导老师:完成时间:目录绪论 (1)第一章设计项目与分析 (2)1.1设计要求: (2)1.2设计原理 (2)1.3设计框图 (3)1.4顶层文件设计 (3)第二章一屏一屏亮灯显示 (5)2.1时序控制模块设计 (5)2.2扫描控制模块设计 (6)2.3显示控制模块设计 (7)2.4显示控制模块仿真 (15)第三章暗灯显示 (16)3.1暗灯控制模块设计 (16)3.2扫描控制模块设计 (17)3.3暗灯显示控制模块设计 (18)第四章心得体会 (27)参考文献 (28)绪论1 在信息产业中EDA产生的影响随着大规模集成电路技术和计算机技术的不断发展,在设计通信,国防,航天医学工业自动化计算机应用仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升;电子类的高新技术项目的开发也逾益依赖于EDA技术的应用,即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使得产品的开发周期大为缩短,性能价格大幅度提高。
不言而喻。
EDA技术将迅速成为电子设计领域中的极其重要的组成部分。
2 中国国内EDZ发展情况从目前的EDA技术来看,其发展趋势是政府重视使用普及应用广泛工具多样软件功能强大。
中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板的小型ASIC领域,仅有小部分的设计人工发复杂片上系统器件,为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。
在信息通信领域,优先发展高速宽带信息网,深亚微米集成电路,新型元器件,计算机及软件技术,第三代移动通信技术。
信息管理,信息安全技术,积极开拓以数字技术,网络技术为基础的新一代产品,发展新兴产业,培育新的经济增长点。
要大力推进制造业信息化,积极开展计算机辅助设计(CAD),计算机辅助工程(CAE),计算机辅助工艺(CAPP),j计算机辅助制造(CAM),产品数据管理(PDM),制造资源计划(MRPII),以及企业管理资源(ERP)等。
EDA实验 16×16点阵字符显示设计
三、实验效果分析(包过仪器设备等使用效果)三、实验效果分析:静态点阵RTL图形:动态RTL仿真图形:实验中程序一点阵里显示静态的师字,程序二中点阵显示的师字自右往左移动,说明实验程序正确。
字符显示的内容改变通过将要显示的数据取模,定制在ROM上,便可实验内容的改变,移动方向的改变将Q1<=Q1+1;改成Q1<=Q1-1;也就是将当前对应地址发生器的地址改为前一地址便可右移,改为后一地址便是左移,不变则静止。
教师评语指导教师年月日江西师范大学物理与通信电子学院教学实验报告专业:电子信息工程2011年5月11日实验名称16×16点阵字符显示设计指导老师姓名年级学号成绩一、预习部分1、实验目的2、实验基本原理3、主要仪器设备(包含必要的元器件、工具)一、实验目的:1.进一步熟悉QUARTUS‖及其LPM_ROM与FPGA硬件资源的使用方法。
2.学习和掌握16*16点阵字符显示设计方法。
二、实验基本原理:利用不同的行抄描和列扫描,加上字取模软件对字取模,利用动态扫描便在点阵上看到了字。
二、主要仪器设备电脑、实验箱二、实验操作步骤1.实验数据、表格及数据处理2.实验操作过程(可以用图表示)3.结论1.实验数据、表格及数据处理如下:library ieee; if rst='1'thenuse ieee.std_logic_1164.all; qa<=(others=>'0');use ieee.std_logic_unsigned.all; elsif clk'event and clk='1' thenentity sy12 is qa<=qa+1;port(clk,rst:in std_logic; end if;sel:out std_logic_vector(3 downto 0); end process;dout:out std_logic_vector(15 downto 0)); process(qa,rst)end ; beginarchitecture one of sy12 is if rst='1' thencomponent data_rom q1<=(others=>'0');port (address:in std_logic_vector(4 downto 0); elsif qa(10)'event and qa(10)='1' then inclock:in std_logic; q1<=q1+1; --当前所有地址改为对应的下一q:out std_logic_vector(15 downto 0)); end if; 地址,即整体左移end component; end process;signal qa:std_logic_vector(10 downto 0); sel<=not(q0-2);signal q0:std_logic_vector(3 downto 0); qq<=q1+q0;signal qq:std_logic_vector(4 dow u1: data_rom port map(address=>qq,q=>dout,inclock=>clk); signal q1:std_logic_vector(4 downto 0); end;beginprocess(clk,rst)beginif rst='1' thenq0<=(others=>'0');elsif clk'event and clk='1' thenq0<=q0+1;end if ;end process;process(clk,rst)begin 2、实验操作过程如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sy11 isport(clk,rst:in std_logic;sel:out std_logic_vector(3 downto 0);dout:out std_logic_vector(15 downto 0));end ;architecture one of sy11 iscomponent data_romport (address:in std_logic_vector(4 downto 0);inclock:in std_logic;q:out std_logic_vector(15 downto 0));end component;signal qq:std_logic_vector(4 downto 0);signal q1:std_logic_vector(4 downto 0);beginprocess(clk,rst)beginif rst='1' thenq1<=(others=>'0');elsif clk'event and clk='1' thenq1<=q1+1; end if ;end process;qq<=q1-1;sel<=not qq(3 downto 0);u1:data_rom port map(address=>q1,q=>dout,inclock=>clk); end;。
16×16点阵显示
目录第一章系统设计总述 (1)1.1 设计要求 (1)1.2 要求分析 (1)第二章系统设计原理 (2)第三章系统子程序设计 (3)3.1 32进制计数器设计 (3)3.2 16进制计数器设计 (4)3.3 列驱动设计 (5)3.4 行驱动设计 (6)第四章原理图仿真波形 (25)第五章设计小结 (26)参考文献 (27)SOPC/EDA综合课程设计报告―16×16点阵显示控制第一章系统设计总述1.1 设计要求使用FPGA设计一个16×16的点阵显示的控制器,使点阵显示器以两种花样显示“江西理工大学应用科学学院欢迎您!”1.2 要求分析根据设计要求可以分析出:点阵显示的花样有静态显示一个汉字,一屏一屏的显示汉字还有滚动显示汉字,还可以用亮着的灯显示汉字或者用暗着的灯显示汉字。
根据以上的分析,本实验采用如下两种花样显示:第一种花样是用亮着的灯组合所要显示的字,第二种方案是用暗着的灯组成所需要的字。
两种花样都是用一屏一屏的显示方法。
图1-1 方案一示例图1-2 方案二示例第二章系统设计原理16×16扫描LED点阵只要其对应的X、Y轴顺向偏压,即可使LED发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
应用时限流电阻可以放在X轴或Y轴。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。
本实验就是要通过CPLD 芯片产生读时序,将字形从寄存器中读出,然后产生写时序,写入16×16的点阵,使其扫描显示输出。
为了显示整个汉字,首先分布好汉字的排列,以行给汉字信息;然后以128HZ 的时序逐个点亮每一行,即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。
LED点阵每个点都有一个红色的发光二极管。
点阵内的二极管间的连接都是行共阳,列共阴。
本实验采用共阴,当二极管的共阳极为高电平,共阴极为低电平时,所接点发光;反之处于截止状态,不放光。
16X16点阵显示实验
实验报告实验名称: [16X16点阵显示实验]姓名:学号:指导教师:实验时间: [2013年6月15日]信息与通信工程学院16X16点阵显示实验1、实验要求:理解并掌握点阵显示符号的原理,理解原有程序,会使用动态扫描的方式使点阵显示汉字,明白点阵滚动显示的原理。
根据原有程序,掌握LPM_ROM的应用,会应用LPM_ROM存储需要显示的内容。
参照液晶显示程序,编写16*16点阵显示程序。
任务一:实现点阵列扫描。
点亮点阵的一列,并让其不断的向右移动。
任务二:在点阵上循环滚动显示“嵌入式系统设计”。
2、实验原理:2.1点阵基本原理本实验对点阵的扫描使用列扫描的方式。
就是将要显示的数据分成16列,在某一时刻只选中一列,并向点阵传送该列需要显示的数据,那么如果从左往右依次循环选中所有列,并且循环的速度足够快,因为视觉停留效应,我们就能看到完整的显示了。
如果要显示大于16列的信息,比如要显示多个汉字,由于只能同时显示16列,那么就需要在一个比较慢的时钟的指挥下,不断更新要显示的连续的16列数据,使用这样的方法就能实现滚动显示。
2.2任务原理8*8LED点阵共由64个发光二极管组成,每个发光二极管放置在行线和列线的交叉点上,当对应的某一行高电平(置1),且某一列低电平(置0),则相应的发光二极管就亮;因此要用8*8LED点阵来显示一个字符或汉字,只需要根据字符或汉字图形中的线条或笔画,通过点亮多个发光二极管来勾勒出字符或汉字的线条或笔画就行了。
当要比较完美的显示一般的汉字,单个8*8LED点阵模块很难做到,因为LED的点数(也称为像素点)不够多,因此要显示汉字的话,需要多个8*8LED点阵拼合成一个显示屏。
假如用4个8*8LED点阵模块拼成16*16的点阵,即能满足一般汉字的显示。
16×16扫描LED点阵的工作原理同8位扫描数码管类似。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位段地址(0-15)输入。
16X16点阵显示
si
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY XUANZ IS PORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END ENTITY XUANZ; ARCHITECTURE XZ OF XUANZ IS BEGIN PROCESS(CLK) VARIABLE COUNT:INTEGER RANGE 1600 DOWNTO 0; VARIABLE ZI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK='1' THEN IF COUNT=1600 THEN IF zi="1111" THEN zi:="0000"; ELSE zi:=zi-1; END IF; COUNT:=0; ELSE COUNT:=COUNT+1; END IF; END IF; Q<=zi; END PROCESS; END ARCHITECTURE XZ;
mi
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY XUAN IS PORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END ENTITY XUAN; ARCHITECTURE XZ OF XUAN IS BEGIN PROCESS(CLK) VARIABLE COUNT:INTEGER RANGE 1600 DOWNTO 0; VARIABLE ZI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK='1' THEN IF COUNT=1600 THEN IF zi="1111" THEN zi:="0000"; ELSE zi:=zi+2; END IF; COUNT:=0; ELSE COUNT:=COUNT+1; END IF; END IF; Q<=zi; END PROCESS; END ARCHITECTURE XZ;
16X16点阵汉字显示
end yz_ok;
architecture count of yz_ok is
signal lie:std_logic_vector(3 downto 0);
signal next1:std_logic_vector(1 downto 0);
思想都是相同的,只是根据不同的硬件,具体的方法有所区
别。目前这种简单的显示方法已经很成熟了,很多地方会用
到它。例如在火车站、机场、银行、证券公司等公共场所的
信息显示都是用的点阵显示。有些场所使用了一些更为复杂
的点阵。随着硬件水平的提高,显示的效果会更加美观。现
设计一个16X16点阵,使用逐行扫描的方式来不间断地显示
when "1100"=>h0<="11111100";h8<="00111111";
when others=>h0<="00000000";h8<="00000000";
end case;
when "01"=>
case lie is
when "0011"=>h0<="00100000";h8<="00100000";
when "1000"=>h0<="11100100";h8<="00011111";
when "1001"=>h0<="00010100";h8<="00100001";
EDA课程设计16X16点阵程序
《EDA技术与应用》课程设计报告题目:LED点阵显示屏控制系统设计院(系):专业班级:学生姓名:学号:指导教师:2017年6月 19日至2017年 6 月23 日《EDA技术及应用》课程设计任务书摘要主要研究基于VHDL的LED点阵汉字滚动显示。
首先描述了基于现场可编程门阵(FPGA)的硬件电路,以及点阵显示汉字的原理;然后在单个16x16LED发光二极管点阵上滚动显示汉字的原理;最后给出了描述其功能的VHDL语言程序设计方法。
通过编程、调试、仿真、下载正确的实现了汉字的滚动显示扫描结果,其硬件系统的实验验证也获得了与软件仿真结论吻合的结果。
关键词:LED点阵;FPGA;VHDL语言;汉字滚动显示。
目录1.实验要求及总体方案............................................................ 错误!未定义书签。
1.1 实验要求....................................................................... 错误!未定义书签。
1.2 扫描显示....................................................................... 错误!未定义书签。
1.3 滚动显示....................................................................... 错误!未定义书签。
2.LED点阵显示原理............................................................... 错误!未定义书签。
2.1 LED点阵原理............................................................... 错误!未定义书签。
16×16点阵显示综合实验
《EDA技术综合设计》课程设计报告报告题目: 16×16点阵显示综合实验作者所在系部:电子工程系作者所在专业:作者所在班级:作者姓名:指导教师:完成时间:容摘要编写16×16点阵字符发生器的程序,通过CLK信号控制它的行驱动信号和列选信号让其依次输出‘中’,‘国’,‘人’三个字,通过硬件实验观察其结果,对于其他的显示花样以及点亮方式,可以根据实际需要自行设计。
关键字:16×16点阵,CLK,显示花样目录一概述 (5)二方案设计与论证 (5)三程序清单 (5)四器件编程与下载 (9)五性能测试与分析 (10)六实验设备 (10)七心得体会 (10)八参考文献 (11)课程设计任务书一、概述在时钟信号的控制下,使16×16点阵管花样点亮,在EDA试验仪中,16×16点阵显示列的驱动已经做好,其列选信号为SELOUT[3..0],送到4线-16线译码电路,译码电路的输出通过8只75451(双2输入与门,OC门)驱动器驱动16×16点阵管的16条共阴极列线;所以在设计点阵控制接口时,其列选信号必须由SELOUT[3..0]输出去控制译码电路。
对于信号的频率,采用与七段数码管的位选信号一样的处理方法,即扫描频率大于24Hz;通过CLK信号控制行驱动与列选信号使其动态依次显示”中国人“三个字。
其中CLK为时钟输入端,DIN[3..0]为花样显示模式选择,doout[15..0]为行驱动信号输出;SELOUT[3..0]为列选信号输出,去驱动4-16译码电路产生16×16点阵管的列选信号。
二、方案设计与论证该程序由三个进程信号组成,进程K1通过CLK信号控制扫描频率s以及计数信号q,进而由q的记述周期控制cp信号。
进程k2由cp信号控制汉字的扫描周期s0,实现汉字的依次显示,进程k3由扫描信号s控制点阵的行驱动和列选信号,使其准确显示’中国人’三个字。
16×16点阵显示设计
课程设计课程名称嵌入式系统课程设计课题名称16X16的点阵显示设计专业班级学号姓名指导老师2016年12月20日电气信息学院课程设计任务书课题名称16×16的点阵显示设计姓名专业班级学号指导老师课程设计时间2016年12月18日-2016年12月30日〔17、18周〕教研室意见意见:同意审核人:X望军一、任务与要求CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能.并最终完成电路的编程调试.具体要求如下:用一个16×16的点阵使用逐列循环扫描的方式不间断的显示你##的全部大写拼音字母.二、进度安排第一周:周一:集中布置课程设计相关事宜.周二~周三:子模块程序设计,顶层电路程序设计.周四~周日:子模块,顶层电路仿真.第二周:周一~周三:编程下载,系统调试.周四~周五:设计报告撰写.周五进行答辩和设计结果检查.三、参考资料1. X 原编著,可编程逻辑器件设计与应用,机械工业.2.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业.3. X洪喜,陆颖编著. VHDL电路设计实用教程清华大学.目录1.总体设计思路与功能设计11.1.基本原理11.2.总体设计框图21.3.顶层文件设计22.单元电路设计32.1列循环扫描模块3.2.2字符样式设计模块32.3循环扫描与延时模块42.4整个程序53.系统调试与仿真93.1 开发环境介绍93.2.1 创建工程93.2.2 编译前设计93.2.3 全程编译113.2.4时序仿真124.下载调试135.心得体会146.参考文献14一、总体设计思路1.1基本原理LED 就是Light Emitting Diode〔发光二极管〕的缩写.在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能.PN结加反向电压,少数载流子难以注入,故不发光.这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED.LED显示屏是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕.16×16扫描LED点阵的工作原理同8位扫描数码管类似.它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线〔SEL0-SEL3〕,其汉字扫描码由16位段地址〔0-15〕输入. 通过时钟的每列扫描显示完整汉字.点阵LED一般采用扫描式显示,实际运用分为三种方式:〔1〕点扫描〔2〕行扫描〔3〕列扫描若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可.若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求.此外一次驱动一列或一行〔8颗LED〕时需外加驱动电路提高电流,否则LED亮度会不足.实验箱上为我们提供了16*16的点阵显示模块.通过观察,我们可以看到,此点阵显示屏即为16行、16列的LED显示灯.那么控制这些灯的亮暗分布,就能达到字符显示的目的.首先输出预定义"吕、苏、田、口〞四个汉字,显示屏上的灯的亮暗情况具体应如何.如第一个汉字吕:00000000000000000000000000000000000000000111110000000000010001000000000001111100000000000000000000000000000000000000000000000000如果高电平‘1’时表示灯是亮的,低电平‘0’时灯是暗的,这样上面的灯呈现在我们眼前的就是吕字了.依次类推,我们就可以设计出所有要显示的汉字了.这样这些汉字就好象是被我们当作了固定模型了.但如何点亮这些灯呢,这就要求有一个脉冲循环扫描的电路,我们采用列扫描,当扫描的和我们先设计好的汉字模型的高电平相匹配时,灯就相应的点亮.由于扫描的速度很快,我们人的眼睛并不会感到灯的闪烁,所以每扫描完16列就会显示在我们眼中一个汉字了.但要所有的汉字就可以依次的显示出来并不停的循环显示,就还要再有一个时序控制电路来控制.此时序控制电路象一个计数器,有自动清零的功能,这样就可以实现循环的效果了.1.2设计框图图1.2 总体设计框图1.3顶层文件设计图1.3顶层文件设计 时序控制 扫描控制显示控制 译码输出二、单元电路设计2.1列循环扫描通过对每一列的扫描来完成对字母的现实,只要扫描的频率足够快,就能给人以连续的感觉.因此要控制扫描的频率,不能太低,否则,就会造成视觉上的不连续,输入一个时钟信号,输出为4位二进制〔用sel表示〕列选信号,用来选中列,进行扫描,扫描程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;Entity dz_xs isPort<enable,clk:in std_logic; --端口定义输入信号Sel:out std_logic_vector<3 downto 0>>; --端口定义输出信号End dz_xs;Architecture count of dz_xs isSignal lie:std_logic_vector<3 downto 0>;BeginProcess<clk,enable> --脉冲、使能信号beginIf clk'event and clk='1'thenIf enable='1' thenIf lie>"0000" thenLie<=lie-"0001";ElseLie<="1111";End if;End if;End if;Sel<=lie;End process;2.2字符样式设计本环节是建立一个数据库,使之能在扫描的同时读取所需要的信息,从而完成汉字的显示.本次设计"吕、苏、田、口〞汉字样式设计程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;Entity dz_xs isPort<enable,clk:in std_logic; --端口定义输入信号h0,h8:out std_logic_vector<7 downto 0>>; --端口定义输出信号〔h0-列数据输出,h8-代表行数据输出〕End dz_xs;Architecture count of dz_xs isSignal lie:std_logic_vector<3 downto 0>; --信号标志Signal past1:std_logic_vector<1 downto 0>;BeginProcess<enable,clk> --脉冲、使能信号BeginIf clk'event and clk='1'thenIf enable='1' thenCase lie isWhen "00"=>Case lie is --"吕〞字设计When "0011"=>h0<="00000000";h8<="01111110";When "0101"=>h0<="01000010";h8<="01000010"; When "0110"=>h0<="01000010";h8<="01000010"; When "0111"=>h0<="01000010";h8<="01000010"; When "1000"=>h0<="01000010";h8<="01000010"; When "1001"=>h0<="01000010";h8<="01000010"; When "1010"=>h0<="01000010";h8<="01000010"; When "1011"=>h0<="01000010";h8<="01000010"; When "1100"=>h0<="01111110";h8<="01000010"; When "1101"=>h0<="00000000";h8<="01111110"; When others=>h0<="00000000";h8<="00000000"; End case;When "01"=>Case lie is --"苏〞字设计When "0011"=>h0<="00100000";h8<="00000000"; When "0100"=>h0<="00100000";h8<="00000000"; When "0101"=>h0<="00100000";h8<="10001100"; When "0110"=>h0<="01110000";h8<="10000000"; When "0111"=>h0<="00101000";h8<="10000000"; When "1000"=>h0<="00100011";h8<="11111100"; When "1001"=>h0<="00100000";h8<="10000000"; When "1010"=>h0<="00101000";h8<="10001100"; When "1011"=>h0<="01110000";h8<="10000110"; When "1100"=>h0<="00100000";h8<="11111110"; When "1101"=>h0<="00100000";h8<="00001100";End case;When "10"=>Case lie is --"田〞字设计When"0100"=>h0<="00011111";h8<="11110000"; When"0101"=>h0<="00010001";h8<="00010000"; When"0110"=>h0<="00010001";h8<="00010000"; When"0111"=>h0<="00010001";h8<="00010000"; When"1000"=>h0<="00011111";h8<="11110000"; When"1001"=>h0<="00010001";h8<="00010000"; When"1010"=>h0<="00010001";h8<="00010000"; When"1011"=>h0<="00010001";h8<="00010000"; When"1100"=>h0<="00011111";h8<="11110000"; When others=>h0<="00000000";h8<="00000000"; End case;When "11"=>Case lie is --"口〞字设计When"0101"=>h0<="00011111";h8<="11100000"; When"0110"=>h0<="00010000";h8<="00100000"; When"0111"=>h0<="00010000";h8<="00100000"; When"1000"=>h0<="00010000";h8<="00100000"; When"1001"=>h0<="00010000";h8<="00100000"; When"1010"=>h0<="00010000";h8<="00100000"; When"1011"=>h0<="00011111";h8<="11100000"; When others=>h0<="00000000";h8<="00000000";End case;End if;End if;End process;2.3循环扫描与期间的延时环节为使汉字不断地循环显示,并且使每个汉字之间有停顿,就需要在中间加一定的延时和循环环节.在这一环节中,可以通过修改其数值来控制每个字母的显示时间,其程序如下:process<clk>variable int: integer range 0 to 10000;beginif clk’event and clk=’1’thenif int<10000 thenint:=int+1;elseint:=0;if next1=〞11〞thennext1<=〞00〞;elsenext1<= next1+’1’;end if;end if;end if;end process;2.4总程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yz_ok isport<enable,clk:in std_logic;sel:out std_logic_vector<3 downto 0>; h0,h8:out std_logic_vector<7 downto 0>>;end yz_ok;architecture count of yz_ok issignal lie:std_logic_vector<3 downto 0>;signal next1: std_logic_vector<1 downto 0>;begina1:process<clk,enable>beginIf clk'event and clk='1'thenIf enable='1' thenIf lie>"0000" thenLie<=lie-"0001";ElseLie<="1111";End if;End if;End if;Sel<=lie;End process;a2:process<enable,clk>beginIf clk'event and clk='1'thenIf enable='1' thenCase next1 isWhen "00"=>Case lie isWhen "0011"=>h0<="00000000";h8<="01111110"; When "0100"=>h0<="01111110";h8<="01000010"; When "0101"=>h0<="01000010";h8<="01000010"; When "0110"=>h0<="01000010";h8<="01000010"; When "0111"=>h0<="01000010";h8<="01000010"; When "1000"=>h0<="01000010";h8<="01000010"; When "1001"=>h0<="01000010";h8<="01000010"; When "1010"=>h0<="01000010";h8<="01000010"; When "1011"=>h0<="01000010";h8<="01000010"; When "1100"=>h0<="01111110";h8<="01000010"; When "1101"=>h0<="00000000";h8<="01111110"; When others=>h0<="00000000";h8<="00000000"; End case;When "01"=>Case lie isWhen "0011"=>h0<="00100000";h8<="00000000"; When "0100"=>h0<="00100000";h8<="00000000"; When "0101"=>h0<="00100000";h8<="10001100";When "0111"=>h0<="00101000";h8<="10000000"; When "1000"=>h0<="00100011";h8<="11111100"; When "1001"=>h0<="00100000";h8<="10000000"; When "1010"=>h0<="00101000";h8<="10001100"; When "1011"=>h0<="01110000";h8<="10000110"; When "1100"=>h0<="00100000";h8<="11111110"; When "1101"=>h0<="00100000";h8<="00001100"; When others=>h0<="00000000";h8<="00000000"; End case;When "10"=>Case lie isWhen"0100"=>h0<="00011111";h8<="11110000"; When"0101"=>h0<="00010001";h8<="00010000"; When"0110"=>h0<="00010001";h8<="00010000"; When"0111"=>h0<="00010001";h8<="00010000"; When"1000"=>h0<="00011111";h8<="11110000"; When"1001"=>h0<="00010001";h8<="00010000"; When"1010"=>h0<="00010001";h8<="00010000"; When"1011"=>h0<="00010001";h8<="00010000"; When"1100"=>h0<="00011111";h8<="11110000"; When others=>h0<="00000000";h8<="00000000";End case;When "11"=>Case lie isWhen"0110"=>h0<="00010000";h8<="00100000"; When"0111"=>h0<="00010000";h8<="00100000"; When"1000"=>h0<="00010000";h8<="00100000"; When"1001"=>h0<="00010000";h8<="00100000"; When"1010"=>h0<="00010000";h8<="00100000"; When"1011"=>h0<="00011111";h8<="11100000"; When others=>h0<="00000000";h8<="00000000";End case;When others=>h0<="00000000";h8<="00000000";End case;End if;End if;End process;a3:process<clk>variable int: integer range 0 to 10000;beginif clk'event and clk='1'thenif int<10000 thenint:=int+1;elseint:=0;if next1="11"thennext1<="00";elsenext1<= next1+'1';end if;end if;end if;end process;end count;第三章系统调试与仿真3.1开发环境介绍Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、Veril-ogHDL 以与AHDL〔Altera Hardware Description Language〕等多种设计输入形式,内嵌自有的综合器以与仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程.Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度.对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA 工具.此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统〔SOPC〕开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台.3.2调试与仿真3.2.1 创建工程在Quartus II 中新建一个VHDL File文件,将VHDL代码输入这个文件,并保存到工作目录,名为yz_ok.vhd.利用new preject wizard 工具创建一个工程,工程名为yz_ok,顶层文件实体名为yz_ok,并将上面创建的yz_ok.vhd文件加入到工程中.3.2.2 编译前设置〔1〕选择目标芯片.用assignmemts- settings命令,弹出settings对话框,选择目标芯片为EP1C3T144C8.图3-1 选择目标器件〔2〕选择工作方式,编程方式,与闲置引脚状态单击上图中的device&pin options按钮,弹出device&pin options窗口. 在General项中选中auto-restart configuration after error,使对FPGA的配置失败后能自动重新配置,并加入JTAG用户编码.图3-2 选择配置器件工作方式在configuration项中,其下方的Generate compressed bitstreams处打勾,这样就能产生用于EPCS的POF压缩配置文件.在Configuration 选项页,选择配置器件为EPCS1,其配置模式选择为active serial.图3-3选择编程方式在Unused pins项,将目标器件闲置引脚状态设置高阻态,即选择As input,tri-stated.图3-4 设置闲置引脚状态3.2.3 全程编译设置好前面的内容之后,就可以进行编译了.选择Processing菜单中start compilation,在窗口的下方processing栏中显示编译信息.图3-5 全程编译成功完成完成后在工程管理窗口左是角显示了工程yz_ok 的层次结构和其中结构模块耗用的逻辑宏单元数.此栏的右边是编译处理流程,包括数据网表建立、逻辑综合、适配、配置文件装配和时序分析等.3.2.4时序仿真〔1〕新建一个矢量波形文件,同时打开波形编辑器.设置仿真时间为50us,保存波形文件为yz_ok.vwf.〔2〕将工程yz_ok的端口信号名选入波形编辑器中,所选的端口有clk,enable 与总线h0和h8.设置clk的时钟周期为2us,占空比为50%.图3-6 选择仿真控制仿真器参数设置.选择菜单Assignment中的Settings,在Settings窗口下选择Simulator,在右侧的simulation mode项下选择timing,即选择时序仿真,并选择仿真激励文件名yz_ok.vwf.选择simulation options栏,确认选定simulation coverage reporting; 毛刺检测Glitch detection 为1ns 宽度;选中Run simulation until all vector stimuli 全程仿真.现在所有设置进行完毕,在菜单processing项下选择start simulation,直到出现simulation was successful,仿真结束 .仿真文件simulation report 通常会自动弹出,否则选择processing simulation report .图3-7 仿真波形输出四、下载调试选择tools菜单中programmer,点击左上角的Hardware Setup,选择USB,点击start即可连接硬件,进行调试 .连接成功后,即可在实验箱中LED屏循环显示字母.如下图汉字的显示:图4-1调试结果图图4-2调试结果图五、心得体会为期两周的嵌入式课程设计完成了.整过设计过程虽然不是很顺利.不过我认真对待老师给我们的课题,中间虽然也有不少挫折,但不经历挫折怎么见风雨,在我四处查看资料,请教同学下终于完成.经过这两周的课程设计,我加深了对PLD的认识,学到了很多以前不知道的东西,也明白也PLD在现实生活中的重要应用和它的发展趋势.以前在书本上学到的东西总是不能够很好地运用到现实当中去,现在终于得到了改善,这让我感到非常的高兴.从这次实习中,我体会到,如果将我们在大学里所学的知识与更多的实践结合在一起,用实践来检验真理,使一个本科生具备较强的处理基本实务的能力与比较系统的专业知识,这才是我们学习与实习的真正目的.让我们不再是一个沉睡的孩子,让我们的无知渐渐远去,把我们所学的知识运用到实际中去,为社会出上我们的一份力.感谢老师给的这次让我们自行设计的机会,通过这次设计通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力.在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固.总的来说,这次设计的16×16点阵显示控制还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心.最后,对给过我帮助的所有同学和指导老师再次表示忠心的感谢.六、参考文献1. X原编著,可编程逻辑器件设计与应用,机械工业.2.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业.3. X洪喜,陆颖编著. VHDL电路设计实用教程,清华大学.电气信息学院课程设计评分标准。
微机原理与接口技术:16x16点阵显示
13
void delay(uchar t) {
uchar i,j; for(i= t; i>0; i--){
for(j=0; j<10; j++) ; } } void main() { uchar i,j; uchar count; uint bitmask; OUT(ColLow , 0xff); OUT(ColHigh, 0xff); OUT(RowLow , 0x00); OUT(RowHigh, 0x00);
知识点6.3.3
16×16 LED点阵显示接口
1
16×16点阵显示器由256个发光二极管组成,共16行每行16个发光二极 管。同一行发光二极管的阳极连在一起,同一列发光二极管的阴极连在 一起。LED点阵的显示方式采用动态扫描法,即一行一行地显示,每一 行的显示时间大约为1ms。由于人类的视觉暂留现象,将感觉到16行 LED是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间 太长,将会感觉到闪烁。
#define uchar unsigned char #define uint unsigned int #define RowLow 0xb002 #define RowHigh 0xb003 #define ColLow 0xb000 #define ColHigh 0xb001 const uchar Font[32] = {0x04,0x14,0xFC,0x17,0x44,0x14,0x44,0x14,0xFC,0x17,0x44,0x14,0x 44,0x94,0xFE,0x57,
16X16点阵显示设计
实验报告课程名称EDA技术使用教程实验名称16*16点阵显示综合实验实验类型验证(验证、综合、设计、创新)学院名称专业年级班级开出学期实验四、16*16点阵显示综合实验一、实验要求设计一个共阴16X16点阵控制接口,要求:在时钟信号的控制下,使点阵动态点亮,点亮方式为使点阵显示器显示自己的名字,其中列选信号为16-4编码器编码输出。
二、实验目的1、了解点阵字符的产生和显示原理。
2、了解E2PROM和16×16点阵LED的工作机理。
3、加强对于总线产生,地址定位的CPLD实现的理解。
三、硬件要求1.主芯片。
2.可变时钟源。
3.带有事先编程好字库/字符的E2PROM 2864。
4.16×16扫描LED点阵。
四、实验原理16×16扫描LED点阵的工作原理同8位扫描数码管类似。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。
所以其扫描译码地址需4位信号线。
要使16点阵上某个点亮,如第10行第4列的LED点亮,只要让列选信号为“0100”,从而选中第4列,再给第10行一个高电平,即可点亮该LED。
本实验通过FPGA芯片写入字形,产生扫描信号。
为了显示整个汉字,首先分布好汉字的排列,以行给汉字信息;然后以大于24HZ的频率扫描列,即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。
五、VHDL语言程序代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dots_test isport ( clk:in std_logic;dotout:out std_logic_vector(15 downto 0);selout:out std_logic_vector(3 downto 0);M :out std_logic_vector(3 downto 0));end dots_test;architecture a of dots_test issignal sel_tmp:std_logic_vector(3 downto 0);signal dot_tmp:std_logic_vector(15 downto 0);type dot_type is array (0 to 15) of std_logic_vector(15 downto 0);--定义16个长度为16位的数组,用来存放每一行的显示值signal dotout_tmp:dot_type;constant dotout_tmp1:dot_type:= --陶(x"0100",x"7904",x"49FE",x"5204",x"5524",x"61F4",x"5524",x"4854",x"4FFC",x"4844",x"6954",x"5154",x"41F4",x"4004",x"4014",x"4008");constant dotout_tmp2:dot_type:= --军(x"0000",x"7FFE",x"4202",x"8214",x"3FF8",x"0400",x"0900",x"1110",x"3FF8",x"0100",x"0104",x"FFFE",x"0100",x"0100",x"0100",x"0100");constant dotout_tmp3:dot_type:= --喜(x"0108",x"7FFC",x"0100",x"3FF8",x"0000",x"1FF0",x"1010",x"1FF0",x"0444",x"FFFE",x"0010",x"1FF8",x"1010",x"1010",x"1FF0",x"1010");signal scan_sel:std_logic_vector(3 downto 0);signal clk_value:std_logic_vector(2 downto 0):=(others => '1');constant clk_value_store:std_logic_vector(2 downto 0):=(others => '1');signal key_tmp:std_logic_vector(3 downto 0);beginM <= "0110"; --功能选择位选择16x16点阵功能connection:blockbegindotout <= dotout_tmp(conv_integer(scan_sel));selout <= scan_sel;end block connection;scan_display:block --扫描显示及时钟分频beginclock_divisor:process(clk)beginif rising_edge(clk) thenif (clk_value = clk_value_store) thenscan_sel <= scan_sel + 1;end if;clk_value <= clk_value + 1;end if;end process clock_divisor;end block scan_display;Free_Counter : Block -- 计数器-- 产生扫描信号Signal Q : STD_LOGIC_VECTOR(40 DOWNTO 0);Signal S : STD_LOGIC_VECTOR(2 DOWNTO 0); Begint1: PROCESS (clk) -- 计数器计数BeginIF clk'Event AND clk='1' thenQ <= Q+1;END IF;S <= Q(28 DOWNTO 26);if ( s=0) thenfor i in 0 to 15 loopdotout_tmp(i) <= dotout_tmp1(i);end loop;elsif ( s=1) thenfor i in 0 to 15 loopdotout_tmp(i) <= dotout_tmp2(i);end loop;elsif ( s=2) thenfor i in 0 to 15 loopdotout_tmp(i) <= dotout_tmp3(i);end loop;end if;END PROCESS t1;End Block Free_Counter;end a;六、实验结果七、结论和总结通过这次对16*16点阵字符发生器的设计与实践,让我加深了对VHDL语言的了解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程名称数字系统与逻辑设计课题名称16*16点阵显示专业通信工程班级学号姓名指导教师乔汇东胡瑛2012年7月2日湖南工程学院课程设计任务书课程名称数字系统与逻辑设计课题16*16点阵显示专业班级通信工程1001班学生姓名学号指导老师乔汇东胡瑛审批乔汇东任务书下达日期2012 年6月23日任务完成日期2012 年7月2日《数字系统与逻辑设计》课程设计任务书一、设计目的全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
二、设计要求1、设计正确,方案合理。
2、程序精炼,结构清晰。
3、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
4、上机演示。
5、有详细的文档。
文档中包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。
三、进度安排第二十周星期一:课题讲解,查阅资料星期二:总体设计,详细设计星期三:编程,上机调试、修改程序星期四:上机调试、完善程序星期五:答辩星期六-星期天:撰写课程设计报告附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现;四、系统调试与仿真;五、总结与体会;六、附件(所有程序的原代码,要求对程序写出必要的注释);七、评分表。
目录一. 16*16点阵显示的总体设计 (1)1.116*16点阵显示 (1)1.2基本设计思想 (1)二. 16*16点阵显示的功能实现 (3)2.1系统的总体框图 (3)2.2系统的流程图 (3)2.3系统各功能模块实现 (4)三.系统的调试与仿真 (8)四.总体与体会 (9)五附件 (10)六评分表 (16)一. 16*16点阵显示的总体设计1.1 16*16点阵显示本实验主要完成汉字字符在LED 上的显示,16*16 扫描LED 点阵的工作原理与8 位扫描数码管类似,只是显示的方式与结果不一样而已。
下面就本实验系统的16*16 点阵的工件原理做一些简单的说明。
16*16 点阵由此256 个LED 通过排列组合而形成16 行*16 列的一个矩阵式的LED 阵列,俗称16*16 点阵。
本实验的示例程序依次显示的是“湖南工程学院”,要求每隔一秒换下一个字显示。
1.2 基本设计思想单个的LED 的电路如下图11-1 所示:图11-1 单个LED 电路图由上图可知,点阵内的二极管间的连接都是行共阳,列共阴。
本实验采用共阴,当二极管的共阳极为高电平,共阴极为低电平时,所接点发光;反之处于截止状态,不放光。
本实验采取行扫描方式,用列给文字信息,利用周期为1s的脉冲来控制所显示的字。
即对于单个LED 的电路图当Rn 输入一个高电平,同时Cn 输入一个低电平时,电路形成一个回路,LED 发光。
也就是LED 点阵对应的这个点被点亮。
16*16 点阵也就是由16 行和16 列的LED 组成,其中每一行的所有16 个LED的Rn 端并联在一起,每一列的所有16 个LED 的Cn 端并联在一起。
通过给Rn 输入一个高电平,也就相当于给这一列所有LED 输入了一个高电平,这时只要某个LED 的Cn 端输入一个低电平时,对应的LED 就会被点亮。
具体的电路如下图11-2所示:图11-2 16*16 点阵电路原理图在点阵上显示一字符是根据其字符在点阵上的显示的点的亮灭来表示的,如下图11-3 所示:图11-3 字符在点阵上的显示在上图中,显示的是一个“汉”字,只要将被“汉”字所覆盖的区域的点点亮,则在点阵中就会显示一个“汉”字。
根据前面我们所介绍的点阵显示的原理,当我们选中第一列后,根据要显示汉字的第一列中所需要被点亮的点对应的Rn 置为高电平,则在第一列中需要被点亮的点就会被点亮。
依此类推,显示第二列、第三列……第N 列中需要被点亮的点。
然后根据人眼的视觉原理,将每一列显示的点的间隔时间设为一定的值,那么我们就会感觉显示一个完整的不闪烁的汉字。
同时也可以按照这个原理来显示其它的汉字。
下图11-4 是一个汉字显示所需要的时序图:图11-4 显示时序图二. 16*16点阵显示的功能实现2.1 系统的总体框图2.2 系统的流程图2.3 系统各功能模块实现1.六进制计数器当每一个时钟上升沿到来时,计数器就记一次数。
其程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jy isport(clk,rst:in std_logic;din:buffer std_logic_vector(3 downto 0));end jy;architecture b of jy isbeginprocess(clk,rst)beginif rst='1' then din<="0000";elsif clk'event and clk='1' thenif din=7 then din<="0000" ;else din<=din+1;end if;end if;end process;end b;其仿真波形:2.A为列驱动控制器,该模块控制所亮的行,当输出为1000000000000000时,给点阵的第一行高电平,输出为0100000000000000时,给点阵的第二行高电平,依次类推,逐次给每行高电平。
其程序:A:process(hl)begincase hl iswhen "0000"=> row<="1000000000000000";when "0001"=> row<="0100000000000000";when "0010"=> row<="0010000000000000";when "0011"=> row<="0001000000000000";when "0100"=> row<="0000100000000000";when "0101"=> row<="0000010000000000";when "0110"=> row<="0000001000000000";when "0111"=> row<="0000000100000000";when "1000"=> row<="0000000010000000";when "1001"=> row<="0000000001000000";when "1010"=> row<="0000000000100000";when "1011"=> row<="0000000000010000";when "1100"=> row<="0000000000001000";when "1101"=> row<="0000000000000100";when "1110"=> row<="0000000000000010";when "1111"=> row<="0000000000000001";when others=> row<="0000000000000000";END case;end process A ;其仿真波形:3.B为行驱动控制器din控制的是所显示的字。
例如当din为000时,表示显示第一个字;当为001时,表示显示第二个字,依次类推。
hl控制所显示的为字的第几行,例如当hl为全是0时,表示输出字的第一行文字信息,依次类推。
其中包括两种花样的显示方式,其描述如下:B:process(clk,rst,din)beginif rst='1' then dout<="0000000000000000";hl<="0000" ;din<="000";elsif clk'event and clk='1' thenif din>6 then din<="000";else din<=din +1;if hl>15 then hl<="0000" ;else hl<=hl+1;end if;case din iswhen "000"=>case hl iswhen "0000" =>dout<="1000000000011111";when "0001" =>dout<="0100001000010001";when "0010" =>dout<="0010111110010001";when "0011" =>dout<="0010001000010001";when "0100" =>dout<="0001001000011111";when "0101" =>dout<="1000001000010001";when "0110" =>dout<="0100111111010001";when "0111" =>dout<="0010100001010001";when "1000" =>dout<="0001100001011111";when "1001" =>dout<="0000100001010001";when "1010" =>dout<="0001100001010001";when "1011" =>dout<="0001111111010001";when "1100" =>dout<="0010000000010001";when "1101" =>dout<="0100000000100001";when "1110" =>dout<="0100000001000111";when "1111" =>dout<="0000000010000001";when others=>dout<=null;end case;when "001"=>case hl iswhen "0000" =>dout<="0000000000000000";when "0001" =>dout<="0000000100000000";when "0010" =>dout<="0001111111111000";when "0011" =>dout<="0000000100000000";when "0100" =>dout<="0000000100000000";when "0101" =>dout<="0000000100000000";when "0110" =>dout<="0111111111111110";when "0111" =>dout<="0100010010000010";when "1000" =>dout<="0100001100000010";when "1001" =>dout<="0100111111000010";when "1010" =>dout<="0100000100000010";when "1011" =>dout<="0100000100000010";when "1100" =>dout<="0101111111111010";when "1101" =>dout<="0100000100000010";when "1110" =>dout<="0100000100000110";when "1111" =>dout<="0000000000000011";when others=>dout<=null;end case;when "010"=>************其仿真波形:三.系统的调试与仿真整个系统的调试与仿真如下图:调试成功:仿真波形成功:部分生成的电路图如下:四.总体与体会这次EDA课程设计历时三晚上。