16×16点阵显示综合实验
16×16点阵显示实验 实验报告

1.实验现象
当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1KHZ,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F”键值。
2.实验图片记录
2)新建VHDL File(程序)
3)编译仿真
4)管脚分配
5)下载调试
2)加强对总线产生地址定位的CPLD实现方法的理解
3)掌握在FPGA中调用ROM的方法
成绩: 教师:
实验报告
一、实验内容及步骤
1.实验内容
1)通过编程实现对16×16点阵的控制
2)在点阵循环中显示“欢迎使用嵌入式SDC开发系统”这几个汉字和字符
3)运用软件对程序进行编译和仿真
2.实验步骤:
1)新建工程
成绩: 教师: 批改日期:
பைடு நூலகம்湖南科技大学
物理与电子科学学院专业实验报告
实验课程:FPGA实验原理
实验项目:16×16点阵显示实验
专 业:物理与电子科学学院
班 级:电子信息科学与技术3班
***********
学 号:**********
实验日期: 年 月 日
实验预习报告
一、实验目的及要求
1)加强点阵字符产生的显示原理和系统的16×16点阵的工作原理
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显示灯。
16×16点阵LED汉字动态显示

a f g e d c h b
实验说明:
a a a a a a a a
a
h b
bitsel(0) bitsel(7)
segment[7..0]
bitout[7..0]
16×16点阵LED汉字动态显示
4学时 学时 实验内容: 实验内容: 点阵LED动态显示自己的名字 用16×16点阵 × 点阵 动态显示自己的名字
第1行,第1列 行 列
16×16点阵显示 × 点阵显示
第1行,第16列 行 列
r0-r3
第16行,第1列 行 列
第16行,第16列 行 列
点阵LED显示器的每一行发光管的阳极接在一起作为 显示器的每一行发光管的阳极接在一起作为 点阵 数据线D,每一列发光管的阴极接在一起作为列线B, 数据线 ,每一列发光管的阴极接在一起作为列线 , 因此,要使某一点亮, 因此,要使某一点亮,就必须让该点所在的行线为高 电平,同时让该点所在的列线为低电平。 电平,同时让该点所在的列线为低电平。 实验板上点阵的各行可分别控制, 实验板上点阵的各行可分别控制, 用16个行控制信号 个行控制信号 来控制16行,使用4个列控制信号来控制 列,实验 来控制 行 使用 个列控制信号来控制16列 个列控制信号来控制 板上已经提供了一个4- 译码器 因此只使用4 译码器, 板上已经提供了一个 -16译码器,因此只使用 个信号即可控制点阵的16列 个信号即可控制点阵的 列。由于不是一个控制信号 控制一个点阵点, 控制一个点阵点,因此需要将需将欲显示的字一列一 列的显示。 列的显示。 若列控制信号r0-r3等于 “0000”,则经过 -16 例:若列控制信号 等于 ,则经过4- 译 码器后,点阵的第一列会等于‘0’。此时若同时16 码器后,点阵的第一列会等于‘ 。此时若同时 行中的某些行为‘ ,则对应的点阵会亮。 行中的某些行为‘1’,则对应的点阵会亮。
16×16 LED点阵显示实验

16×16 LED点阵显示实验一、实验目的1、了解16×16矩阵LED显示的基本原理和功能2、掌握16×16矩阵LED和单片机的硬件接口和软件设计方法二、实验说明汉字显示屏广泛应用与汽车报站器,广告屏等。
实验介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,采用了16×16的点阵模块;汉字显示的原理我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。
即国标汉字库中的每一个字均由256点阵来表示。
我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。
所以在这个汉字屏上不仅可以显示汉字,也可以显示在256像素范围内的任何图形。
我们以显示汉字“大”为例,来说明其扫描原理:在UCDOS中文宋体字库中,每一个字由16行16列的点阵组成显示。
如果用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。
一般我们把它拆分为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。
在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p07口。
方向为p00到p07 ,显示汉字“大”时,p05点亮,由上往下排列,为p0.0 灭,p0.1 灭, p0.2 灭p0.3 灭, p0.4 灭, p0.5 亮,p0.6 灭,p0.7 灭。
即二进制00000100,转换为16进制为 04h.。
上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为00h。
然后单片机转向上半部第二列,仍为p05点亮,为00000100,即16进制04h。
这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h. 依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“大”。
vhdl实验报告_16乘16点阵_列选_显示

综合实践总结报告综合实践名称: EDA技术与实践综合实践地点、时间一.题目功能分析和设计实验的要求有如下三点:1.用16*16点阵的发光二极管显示字符;2.可显示字符为0~9的数字字符与A~F英文字母的大写;3.输入为四位二进制矢量;按照要求可知,LED点阵模块,共由16×16=256个LED发光二极管组成,如何在该点阵模块上显示数字和字母是本实验的关键。
先将要显示的每一幅图像画在一个16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布以数字8为例,点阵分布为:0000000000000000000000000000000000011111111110000001111111111000000110000001100000011000000110000001100000011000000111111111100000011111111110000001100000011000000110000001100000011000000110000001111111111000000111111111100000000000000000000000000000000000考虑到实际物理实验平台上点阵发光二极管的原理,以下为16×16点阵LED外观图,只要其对应的X、Y轴顺向偏压,即可使LED 发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
所以我采用行列扫描的方法,用四位二进制数做列选信号(总共16列),如选中第一列,则扫描第一列之中哪些行是高电平(1),哪些行是低电平(0);为高电平的则点亮,为低电平的不亮。
(列信号都接地)。
如此,列选信号由“0000”变到“1111”时,16列扫描完毕,一个字也就出来了,列选信号重新由“0000”开始扫描。
注意扫描频率必须要足够快,才能保证显示一个数字或字母时所有灯在肉眼看来是同时在闪烁的。
16×16点阵LED电子显示屏的设计.

邮电与信息工程学院课程设计说明书课题名称:16×16点阵LED电子显示屏的设计学生学号:1002030205专业班级:计科02班学生姓名:龚建新学生成绩:指导教师:王会清课题工作时间:2013年5月6日至5月20日课程设计评审标准(指导教师用)附代码:***************************************; * *; * 单个16x16的点阵电子屏字符显示器 *; * ATA89C52 12MHz晶振 *; * 2013.5.19 *; ***************************************;显示字用查表法,不占用内存,字符用16x16共阳LED点阵,;效果:向上滚动显示5个字,再重复循环。
;R1:查表偏址寄存器,B:查表首址,R2:扫描地址(从00~0FH)。
;R3:滚动显示时控制移动速度,单字显示可控制静止显示的时间。
;*************;;中断入口程序;;*************;;ORG 0000HLJMP STARTORG 0003HRETIORG 000BHLJMP INTTOORG 0013HERTIORG 001BHERTIORG 0023HRETIORG 002BHRETI;;***********;;初始化程序;;***********;;;;***********;;主程序;;***********;;START: MOV 20H,#00H ;清零标志,00H为第16行开始扫描标志,01为1帧;扫描结束标志MOV A,#0FFH ;端口初始化MOV P1,AMOV P1,AMOV P3,AMOV P0,ACLR P1.6 ;串行寄存器输入打入输出控制位MOV TMOD,#01H ;使用T0做16位定时器,行扫描用。
MOV TH0,#0FCH ;1ms初值(12MHz)MOV TL0,#18HMOV SCON,#00H ;串口0方式传送显示字节MOV IE,#82H ;T0中断允许,总中断允许MOV SP,#70HMAIN: LCALL DISI ;显示准备,黑屏,1.5sMOV DPTR,#TABLCALL MOVDISP ;向上滚动显示一页(8个字)INC DPHLCALL MOVDISP ;向上滚动显示一页(8个字)INC DPHLACLL MOVDISP ;向上滚动显示一页(8个字)AJMP MAIN;;;***********************;;多字滚动显示程序;;***********************;;每次8个字,入口时定义好DPTR值;MOVDISP: MOV B,#00H ;向上移动显示,查表偏值暂存(从00开始)DISLOOP: MOV R3,#07H ;移动速度DISMOV: MOV R2,00H ;第0行开始MOV R1,BSETB TR0 ;开扫描(每次一帧)WAITMOV: JBC 01H,DISMOV1 ;标志为1扫描一帧结束(16ms为1帧,每行1ms) AJMP WAITMOVDISMOV1: DJNZ R3,DISMOV ;1帧重复显示(控制移动速度)INC B ;显示字的下一行(每行2字节)INC BMOV A,R1 ;R1为0,8个字显示完JZ MOVOUTAJMP DISLOOPMOVOUT: RET ;移动先是结束;;;****************;;单字显示程序;;****************;;显示表中某个字;;****************;DIS1: MOV R3,#5AH ;静止显示时间控制(16ms*#=1.6s)DIS11: MOV R2,#00H ;一帧扫描初始值(行地址从00~0FH)MOV DPTR,#TAB ;取表首址MOV R1,#00H ;查表偏址(显示第一个字)SETB TR0 ;开扫描(每次一帧)WAIT11: JBC 01H,DIS111 ;为1,扫描一帧结束AJMP WAIT11DIS111: DJNZ R3,DIS11RET;;;************;;扫描程序;;************;;1ms刷新一次,每行显示1sINTT0: PUSH ACCMOV TH0,#0FCH ;1ms初值重装MOV TL0,#18HJBC 00H,GOEND ;16行扫描标志为1,结束INC R1 ;取行右边字节偏址MOV A,R1MOVC A,@A+DPTR ;查表MOV SBUF,A ;串口0方式发送WAIT: JBC TI,GO ;等待发送完毕AJMP WAIT1GO: DEC R1 ;取行左边字节偏址MOV A,R1MOVC A,@A+DPTRMOV SBUF,AWAIT1: JBC T1,GO1AJMP WAIT1GO1: SETB P1.7 ;关行显示,准备刷新NOP ;串口寄存器数据稳定SETB P1.6 ;产生上升沿,行数据打入输出端NOPNOPCLR P1.6 ;恢复低电平MOV A,R2 ;修改显示行地址ORL A,#0F0H ;修改显示行地址MOV R2,A ;修改显示行地址MOV A,P1 ;修改显示行地址ORL A,#0FH ;修改显示行地址ANL A,R2 ;修改显示行地址MOV P1,A ;修改完成CLR P1.7 ;开行显示INC R2 ;下一行扫描地址值INC R1INC R1 ;下一行数据地址MOV A,R2ANL A,#0FHJNZ GO2SETB 00H ;R2为01H,现为末行扫描,置标志GO2: POP ACCRETIGOEND: CLR TR0 ;一帧扫描完毕,关扫描SETB 01H ;一帧扫描完毕,置结束标志POP ACCRETI ;退出;;;***************;;扫描文字表;;***************;;TAB:DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,00FFH,0FFH,0FFH ;黑屏DB0F9H,0BFH,0C7H,0AFH,0F7H,0B7H,0F7H,0B7H,0F7H,0BFH,000H,001H,0F7H,0BFH,0F7H, 0B7H ;我DB0F1H,0D7H,0C7H,0CFH,037H,0DFH,0F7H,0AFH,0F6H,06DH,0F7H,0F5H,0D7H,0F9H,0EFH, 0FDH ;DB0FFH,007H,0C0H,06FH,0EDH,0EFH,0F6H,0DFH,0C0H,001H,0DDH,0FDH,0BDH,0FFH,0C0H, 003H ;爱DB0FBH,0FFH,0F8H,00FH,0F3H,0DFH,0F4H,0BFH,0EFH,03FH,09CH,0CFH,073H,0F1H,0CFH, 0FBH ;DB0F7H,0DFH,0F9H,0CFH,0FBH,0BFH,0C0H,007H,0DEH,0F7H,0C0H,007H,0DEH,0F7H,0DEH, 0F7H ;单DB0C0H,007H,0DEH,0F7H,0FEH,0FFH,000H,001H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH, 0FFHDB0FFH,0BFH,0EFH,0BFH,0EFH,0BFH,0EFH,0BBH,0E0H,001H,0EFH,0FFH,0EFH,0FFH,0EFH, 0FFH ;片DB0E0H,00FH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0DFH,0EFH,0DFH,0EFH,0BFH,0EFH,07FH, 0FFHDB0EFH,0FFH,0EFH,007H,0EFH,077H,001H,077H,0EFH,077H,0EFH,077H,0C7H,077H,0CBH, 077H ;机DB0ABH,077H,0AFH,077H,06EH,0F7H,0EEH,0F5H,0EDH,0F5H,0EDH,0F5H,0EBH,0F9H,0EFH, 0FFH ;DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH ;黑屏DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH ;END。
16x16点阵显示实验报告

16*16点阵显示实验报告一、实验目的(1)学习点阵显示字符的基本原理。
(2)掌握用数控分频控制速度,实现点阵扫描的基本方式。
(3)会使用Quartus II软件中的Verilog HDL语言实现点真的行列循环显示。
二、实验设备与器件Quartus II 软件、EP2C8Q208C8实验箱三、实验方案设计1.实验可实现的功能可通过编写Verilog HDL语言,实现点阵的行列交替扫描。
先是行扫描,扫描间隔为1s,16行都扫描完之后开始列扫描,扫描间隔仍然为1s,16列扫描完之后,行继续扫描,依次循环。
2.点阵基本知识16*16扫描LED点阵只要其对应的X、Y轴顺向偏压,即可使LED发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
应用时限流电阻可以放在X轴或Y轴。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。
LED点阵每个点都有一个红色的发光二极管。
点阵内的二极管间的连接都是行共阳,列共阴。
本实验采用共阴,当二极管的共阳极为高电平,共阴极为低电平时,所接点发光;反之处于截止状态,不放光。
3.系统工作原理本系统用了两个模块,其中dianzhen.v是顶层文件,而hangsaomiao.v和liesaomiao.v是两个子模块,总体的系统功能框图如图3.3.1所示。
图3.3.1 系统功能图示通过流程图可以看到,体统是先将试验箱的50MHz时钟信号分频为1s,因为要实现16*16的点阵扫描,所以用一个16s的计时器计时,每经过16s行扫描与列扫描的状态转换一次,通过点阵显示出来。
4.模块化程序设计(1)点阵显示顶层程序设计module dianzhen (clk50mhz,row,sel0,sel1,sel2,sel3,line);input clk50mhz; //实验箱提供50MHz时钟信号output sel0,sel1,sel2,sel3; //设置引脚选通点阵output reg [15:0] row; //行output reg [3:0] line; //列wire [15:0] row1,row2;wire [3:0] line1,line2;reg [24:0] cnt=0; //1Hz计数子reg [4:0] cnt1=0; //16s计数子assign sel0=1'b0;assign sel1=1'b1;assign sel2=1'b0;assign sel3=1'b0;always@(posedge clk50mhz)beginif(cnt>=25'd5*******)begincnt<=25'b0; //1Hz计时器cnt1<=cnt1+1; //16s计时器endelsecnt<=cnt+1;endhangsaomiao u1(.clk50mhz(clk50mhz),.row(row1),.line(line1)); liesaomiao u2(.clk50mhz(clk50mhz),.row(row2),.line(line2));always@(*)if(cnt1<=5'd15)beginrow<=row1; //行扫描line<=line1;endelsebeginrow<=row2; //列扫描line<=line2;endendmodule(2)行扫描模块hangsaomiao.v程序设计module hangsaomiao(clk50mhz,line,row);input clk50mhz; //实验箱输入50MHz时钟信号output reg [15:0] row; //列output reg [3:0] line; //行reg [24:0] cnt1,cnt2; //计数子reg clkrow,clkline; //行脉冲、列脉冲always@(posedge clk50mhz)beginif(cnt1>=25'd5*******)begincnt1<=25'b0;clkrow=~clkrow; //1s列脉冲endelsecnt1<=cnt1+1;endalways@(posedge clk50mhz)beginif(cnt2>=25'd500)begincnt2<=25'b0;clkline=~clkline; //50KHz行脉冲endelsecnt2<=cnt2+1;endalways@(posedge clkline)begincase(line)4'd0:line<=4'd1; //高速行扫描4'd1:line<=4'd2;4'd2:line<=4'd3;4'd3:line<=4'd4;4'd4:line<=4'd5;4'd5:line<=4'd6;4'd6:line<=4'd7;4'd7:line<=4'd8;4'd8:line<=4'd9;4'd9:line<=4'd10;4'd10:line<=4'd11;4'd11:line<=4'd12;4'd12:line<=4'd13;4'd13:line<=4'd14;4'd14:line<=4'd15;4'd15:line<=4'd0;default:line<=4'd0;endcaseendalways@(posedge clkrow) //时间间隔为1s的列扫描begincase(row)16'b0000000000000001: row<=16'b0000000000000010;16'b0000000000000010: row<=16'b0000000000000100;16'b0000000000000100: row<=16'b0000000000001000;16'b0000000000001000: row<=16'b0000000000010000;16'b0000000000010000: row<=16'b0000000000100000;16'b0000000000100000: row<=16'b0000000001000000;16'b0000000001000000: row<=16'b0000000010000000;16'b0000000010000000: row<=16'b0000000100000000;16'b0000000100000000: row<=16'b0000001000000000;16'b0000001000000000: row<=16'b0000010000000000;16'b0000010000000000: row<=16'b0000100000000000;16'b0000100000000000: row<=16'b0001000000000000;16'b0001000000000000: row<=16'b0010000000000000;16'b0010000000000000: row<=16'b0100000000000000;16'b0100000000000000: row<=16'b1000000000000000;16'b1000000000000000: row<=16'b0000000000000001;default : row<=16'b0000000000000001;endcaseendendmodule(3)列扫描模块liesaomiao.v程序设计module liesaomiao(clk50mhz,row,line);input clk50mhz; //实验箱输入50MHz 时钟信号output reg [15:0] row; //行output reg [3:0] line; //列reg [24:0] cnt; //计数子reg clk;always@(posedge clk50mhz)beginif(cnt>=25'd5*******)begincnt<=25'b0;clk=~clk; //1sendelsecnt<=cnt+1;endalways @ (posedge clk) //列扫描begincase(line)4'h0:begin row=16'b1111111111111111;line<=4'h1; end4'h1:begin row=16'b1111111111111111;line<=4'h2; end4'h2:begin row=16'b1111111111111111;line<=4'h3; end4'h3:begin row=16'b1111111111111111;line<=4'h4; end4'h4:begin row=16'b1111111111111111;line<=4'h5; end4'h5:begin row=16'b1111111111111111;line<=4'h6; end4'h6:begin row=16'b1111111111111111;line<=4'h7; end4'h7:begin row=16'b1111111111111111;line<=4'h8; end4'h8:begin row=16'b1111111111111111;line<=4'h9; end4'h9:begin row=16'b1111111111111111;line<=4'ha; end4'ha:begin row=16'b1111111111111111;line<=4'hb; end4'hb:begin row=16'b1111111111111111;line<=4'hc; end4'hc:begin row=16'b1111111111111111;line<=4'hd; end4'hd:begin row=16'b1111111111111111;line<=4'he; end4'he:begin row=16'b1111111111111111;line<=4'hf; end4'hf:begin row=16'b1111111111111111;line<=4'h0; enddefault:line<=4'h0;endcaseendendmodule5.下载电路及引脚分配设计设计中用实验箱自带的50MHz时钟信号作为输入端,用sel0、sel1、sel2、sel3四个使能端选通点阵,EP2C8Q208C8就会工作在给点阵下命令的状态,并用line和row分别作为点阵的行、列选通端,最终使得点阵正常工作,如图3.5.1所示。
点阵显示实验

点阵显示实验16*16点阵显示实验引言当今,数字系统的设计可以直接面向用户的需求,根据系统功能的要求,从上到下逐层完成相应的描述、综合、优化、仿真与验证,直到生成器件。
而FPGA(Field Programmable Gate Array,现场可编程门镇列)以设计灵活及速度快的特点,在数字专用集成电路的设计中得到了广泛应用。
本文介绍的汉字显示系统,将16*16点阵与FPGA巧妙结合,采用VHDL(VHSIC Hardware Description Language,硬件描述语言)进行功能描述一、点阵显示原理1点阵模块说明此设计采用4块8*8的点阵块组成16*16的点阵显示模块1.18*8点阵块工作原理如图1所示。
8*8点阵块工作方式:Q端加正电压,COM端接地时发光二管点亮。
例如,当COM8接地且Q1~Q8分别接高电平时,第一行亮。
同理,当COM7接地,Q1~Q8分别接高电平时,第二行亮。
依此类推。
当Q5端加高电平时,分别让COM1~COM8接地,第一12列亮。
其它列依此类推。
1.2 16*16点阵模块用4块8*8的点阵块组成16*16的点阵模块显示汉字,连接关系如图2所示。
Q0~Q15成为点阵块的行线,COM0~COM15形成点阵块的列线。
1.3 行列驱动由循环计数器输出经放大后的驱动点阵,形成动态扫描,分别控制一列中的每个灯,当列线发出信号后,行线同时发出数据,这样就将一个汉字由左到右分成16列。
在完成各列的同时,行线发出行数据,一个循环就可以将一个汉字完整的重现在16*16的点阵模块上。
本实验主要完成汉字字符在LED 上的显示,16*16扫描LED 点阵的工作原理与8位扫描数码管类似,只是显示的方式与结果不一样而已。
下面就本实验系统的16*16点阵的工件原理做一些简单的说明。
16*16点阵由此256个LED通过排列组合而形成16行*16列的一个矩阵式的LED 阵列,俗称16*16点阵。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《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控制点阵的行驱动和列选信号,使其准确显示’中国人’三个字。
用VHDL语言编写程序,经过上级调试与编译,并下载到硬件观察实验结果。
三、程序清单library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity A1 isport(clk,rst:in std_logic;din :in std_logic_vector(3 downto 0); dotout :out std_logic_vector(15 downto 0); selout:OUT std_logic_vector(3 downto 0));end A1;architecture a of A1 issignal q:std_logic_vector(7 downto 0);signal so:std_logic_vector(1 downto 0);signal cp:std_logic;signal s:std_logic_vector(3 downto 0);beginK1:processbeginif rising_edge(clk) thenif s="1111" thens<="0000";if q="11111111"thenq<="00000000";cp<='1';else q<=q+1;cp<='0';end if;else s<=s+1;end if;end if;end process K1;K2:processbeginif rising_edge(cp) thenif so="11"thenso<="00";else so<=so+1;end if;end if;end process K2;K3:processbeginif so="00"thencase s iswhen"0000"=>selout<="0000";dotout<="0000000000000000"; when"0001"=>selout<="0001";dotout<="0000000000000000"; when"0010"=>selout<="0010";dotout<="0000000000001000"; when"0011"=>selout<="0011";dotout<="0000011111111100"; when"0100"=>selout<="0100";dotout<="0000001000001000"; when"0101"=>selout<="0101";dotout<="0000001000001000"; when"0110"=>selout<="0110";dotout<="0000001000001000"; when"0111"=>selout<="0111";dotout<="1111111111111111"; when"1000"=>selout<="1000";dotout<="0000001000001000"; when"1001"=>selout<="1001";dotout<="0000001000001000"; when"1010"=>selout<="1010";dotout<="0000001000001000"; when"1011"=>selout<="1011";dotout<="0000001000001000"; when"1100"=>selout<="1100";dotout<="0000001000001000"; when"1101"=>selout<="1101";dotout<="0000011111111100"; when"1110"=>selout<="1110";dotout<="0000000000000000"; when"1111"=>selout<="1111";dotout<="0000000000000000"; when others =>null;end case;elsif so="01"thencase s iswhen"0000"=>selout<="0000";dotout<="0000000000000000";when"0001"=>selout<="0001";dotout<="0000000000000000"; when"0010"=>selout<="0010";dotout<="1111111111111110"; when"0011"=>selout<="0011";dotout<="0100000000000010"; when"0100"=>selout<="0100";dotout<="0100100000001010"; when"0101"=>selout<="0101";dotout<="0100100000001010"; when"0110"=>selout<="0110";dotout<="0100111010001010"; when"0111"=>selout<="0111";dotout<="0100100110001010"; when"1000"=>selout<="1000";dotout<="0100100010001010"; when"1001"=>selout<="1001";dotout<="0100111111111010"; when"1010"=>selout<="1010";dotout<="0100100010001010"; when"1011"=>selout<="1011";dotout<="0100100010001010"; when"1100"=>selout<="1100";dotout<="0100100010001010"; when"1101"=>selout<="1101";dotout<="0100100000001010"; when"1110"=>selout<="1110";dotout<="1111111111111110"; when"1111"=>selout<="1111";dotout<="0000000000000000"; when others =>null;end case;elsif so="10"thencase s iswhen"0000"=>selout<="0000";dotout<="0100000000000000"; when"0001"=>selout<="0001";dotout<="0010000000000000"; when"0010"=>selout<="0010";dotout<="0001000000000000"; when"0011"=>selout<="0011";dotout<="0000100000000000"; when"0100"=>selout<="0100";dotout<="0000010000000000"; when"0101"=>selout<="0101";dotout<="0000001000000000"; when"0110"=>selout<="0110";dotout<="0000000100000000"; when"0111"=>selout<="0111";dotout<="0000000011111111"; when"1000"=>selout<="1000";dotout<="0000000100000000"; when"1001"=>selout<="1001";dotout<="0000001000000000"; when"1010"=>selout<="1010";dotout<="0000010000000000"; when"1011"=>selout<="1011";dotout<="0000100000000000";when"1100"=>selout<="1100";dotout<="0001000000000000";when"1101"=>selout<="1101";dotout<="0010000000000000";when"1110"=>selout<="1110";dotout<="0100000000000000";when"1111"=>selout<="1111";dotout<="0100000000000000";when others =>null;end case;else selout<="ZZZZ";dotout<="ZZZZZZZZZZZZZZZZ";end if;end process K3;end a;四、器件编程与下载通过了编译,接下来我们开始对器件进行引脚的锁定,引脚的锁定办法如下图所示。