16×16点阵显示综合实验

合集下载

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

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汉字动态显示

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点阵显示实验

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点阵_列选_显示

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电子显示屏的设计.

邮电与信息工程学院课程设计说明书课题名称: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点阵显示实验报告

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点阵。

16x16LED点阵实验

16x16LED点阵实验

16x16LED点阵实验实验名称:16x16 LED点阵实验实验⽬的:利⽤单⽚机I/O⼝实现LED点阵的⾏扫描动态显⽰。

实验原理:1、LED显⽰器的基本结构:七段显⽰器:将发光⼆极管封装成数码显⽰的形式。

共阳七段显⽰器:共阴七段显⽰器:点阵式显⽰器:发光⼆极管封装成点阵形式,构成不同的字符甚⾄汉字、图形。

发光⼆极管排列成矩阵,由亮与暗来产⽣字符或图形。

每⼀⾏的阳极连在⼀起,每⼀列的阴极连在⼀起。

2、点阵显⽰的原理:点阵显⽰器每⼀列的阴极连在⼀起,对每⼀列⽽⾔相当于⼀个共阴显⽰器。

同时每⼀⾏的阳极连在⼀起,相当于七段显⽰器的笔划。

这样,可以把5X7的发光⼆极管点阵看作⼀个五位显⽰器。

可采⽤动态显⽰电路,以笔划锁存器控制⾏信号,以位锁存器控制列信号。

3、实验原理图使⽤两⽚8位输出锁存移位寄存器74HC595(三态输出、串⼊并出),将单⽚机I/O⼝发出的串⾏数据转换为并⾏数据LD_QA~LD_QP,作为16×16 LED点阵显⽰器的⾏线,使⽤另外两⽚8位74HC595作为 16×16 LED点阵显⽰器的列线LD_1~LD_16。

当⾏输出⾼电平、列输出低电平时,可以点亮点阵。

74HC595:LD-QA~LD-QP:点阵⾏控制信号LD-1~LD-16:点阵列控制信号SER(14脚):串⾏数据输⼊端-SCLR(10脚):低电平时将移位寄存器的数据清零。

通常将它接Vcc。

SCK(11脚):上升沿时将串⾏数据移⼊移位寄存器。

RCK(12脚):上升沿时移位寄存器的数据锁存⼊数据寄存器。

-G(13脚): ⾼电平时禁⽌输出(⾼阻态)时序图:实验内容:在16×16LED点阵上分别⽤静态⽅式和滚屏⽅式显⽰⾃⼰的姓(⾏扫描)。

实验步骤:使⽤导线将A2区的P10~P14与C3区的L_DAT_H 、L_DAT_L、L_CLK、L_OE 、 L_STR 实验设计:电路图:(修改后加上了74HC595输出端⼝与LED点阵相连的端⼝名称)流程图:代码及注释:HL EQU 70H ;⾏信号低位内存地址LL EQU 72H ;列信号低位内存地址HD EQU P1.0 ;p1.0⼝连⾏信号输⼊端LD EQU P1.1 ;P1.1⼝连列信号输⼊端SCK EQU P1.2 ;P1.2⼝连移位寄存器OE EQU P1.3 ;P1.3⼝连使能端RCK EQU P1.4 ;P1.4⼝连锁存器ORG 8000H ;硬件仿真程序LJMP MAINORG 8100H ;硬件仿真程序MAIN:MOV DPTR,#DISPLAY ;字模表地址MOV R1,#00H ;字模表起始地址偏移量MOV HL,#01H ;⾏扫描信号的初值0001HMOV HL+1,#00HLOOP:MOV A,R1MOVC A,@A+DPTRMOV LL,A ;找到列低位数据,存⼊内存地址中INC R1MOV A,R1MOVC A,@A+DPTRMOV LL+1,A ;找到列⾼位数据,存⼊内存地址中LCALL SENDD ;调⽤传输数据的程序LCALL DELAY ;调⽤延时程序CLR C ;位处理累加器清零MOV A,HLRLC A ;左移⾏扫描信号低8位MOV HL,AMOV A,HL+1RLC A ;左移⾏扫描信号⾼8位MOV HL+1,AINC R1CJNE R1,#20H,LOOP ;判断⼀轮扫描是否结束LJMP MAINSENDD:CLR OE ;使能信号低电平有效CLR RCK ;RCK信号置0MOV R2,#08HMOV R3,LL+1 ;列信号⾼⼋位地址MOV R4,HL+1 ;⾏信号⾼⼋位地址BACK:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;⾏信号逐位传输SETB SCK ;SCK信号上升沿到来,将串⾏数据移⼊移位寄存器DJNZ R2,BACK ;判断⾼8位信号是否传输完毕MOV R2,#08HMOV R3,LL ;列信号低8位地址MOV R4,HL ;⾏信号低8位地址BACK1:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;⾏信号逐位传输SETB SCK ;SCK信号上升沿到来,将串⾏数据移⼊移位寄存器DJNZ R2,BACK1 ;判断低8位信号是否传输完毕SETB RCK ;RCK信号上升沿到来,移位寄存器的数据锁存⼊数据寄存器RET DELAY: ;延时⼦程序MOV R7,#50DELAY1:MOV R6,#10DELAY2:DJNZ R6,$DJNZ R7,DELAY1RETDISPLAY:DB 0xFF,0xFE,0xE0,0xEE,0xEF,0xCE,0xEF,0xF6,0xE1,0xFA,0xFD,0xFC,0xFD,0xFE,0x3D,0x80;DB 0xE0,0xFA,0xED,0xFA,0xEF,0xF6,0xEF,0xF6,0xEF,0xEE,0xEF,0x9A,0x6B,0xDC,0xF7,0xFE;"张" END 2、滚屏⽅式流程图:代码及注释:HL EQU 70H ;⾏信号低位内存地址LL EQU 72H ;列信号低位内存地址HD EQU P1.0 ;p1.0⼝连⾏信号输⼊端LD EQU P1.1 ;P1.1⼝连列信号输⼊端SCK EQU P1.2 ;P1.2⼝连移位寄存器OE EQU P1.3 ;P1.3⼝连使能端RCK EQU P1.4 ;P1.4⼝连锁存器ORG 8000H ;硬件仿真程序LJMP MAINORG 8100H ;硬件仿真程序MAIN:MOV DPTR,#DISPLAY ;字模表地址MOV R1,#00HMOV R7,#00H ;R7⽤来表⽰字模表起始位置偏移量LOOP:MOV R5,#20 ;R5⽤来表⽰延时,改变R5的值可改变滚屏速度LOOP1: MOV R6,#10H ;R6⽤来判断是否扫描完⼀轮MOV A,R7 ;将R7的值赋值给R1MOV R1,AMOV HL,#01H ;⾏扫描信号的初值0001HMOV HL+1,#00HLOOP2:MOV A,R1MOVC A,@A+DPTRMOV LL,A ;找到列低位数据,存⼊内存地址中INC R1MOV A,R1MOVC A,@A+DPTRMOV LL+1,A ;找到列⾼位数据,存⼊内存地址中LCALL SENDD ;调⽤传输数据的程序LCALL DELAY ;调⽤延时程序CLR C ;位处理累加器清零MOV A,HLRLC A ;左移⾏扫描信号低⼋位MOV HL,AMOV A,HL+1RLC A ;左移⾏扫描信号⾼⼋位MOV HL+1,AINC R1DEC R6CJNE R6,#00H,LOOP2 ;通过R6判断是否扫描完⼀轮,R6减为0,⼀轮扫描结束DJNZ R5,LOOP1 ;通过R5判断⼀帧的延时是否达到INC R7 ;改变字模表的偏移量INC R7 ;R7连续加2,相当于换⾏CJNE R7,#40H,LOOP ;判断字模表是否结束LJMP MAINSENDD:CLR OE ;使能信号低电平有效CLR RCK ;RCK信号置0MOV R2,#08HMOV R3,LL+1 ;列信号⾼8位地址MOV R4,HL+1 ;⾏信号⾼8位地址BACK:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;⾏信号逐位传输SETB SCK ;SCK信号上升沿到来,将串⾏数据移⼊移位寄存器DJNZ R2,BACK ;判断⾼⼋位信号是否传输完毕MOV R2,#08HMOV R3,LL ;列信号低⼋位地址MOV R4,HL ;⾏信号低⼋位地址BACK1:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;⾏信号逐位传输SETB SCK ;SCK信号上升沿到来,将串⾏数据移⼊移位寄存器DJNZ R2,BACK1 ;判断低⼋位信号是否传输完毕SETB RCK ;RCK信号上升沿到来,移位寄存器的数据锁存⼊数据寄存器RETDELAY: ;延时⼦程序MOV R2,#50DELAY1:MOV R3,#10DELAY2:DJNZ R3,$DJNZ R2,DELAY1RETDISPLAY:DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFFDB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF;预留空⽩DB 0xFF,0xFE,0xE0,0xEE,0xEF,0xCE,0xEF,0xF6,0xE1,0xFA,0xFD,0xFC,0xFD,0xFE,0x3D,0x80;DB 0xE0,0xFA,0xED,0xFA,0xEF,0xF6,0xEF,0xF6,0xEF,0xEE,0xEF,0x9A,0x6B,0xDC,0xF7,0xFE;"张" END实验结果与分析:1、程序正确运⾏后,可看到16x16 LED点阵显⽰屏上显⽰“张”,LED灯的亮暗程度有些不均匀。

EDA实验 16×16点阵字符显示设计

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点阵显示

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点阵显示实验

实验报告实验名称: [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)输入。

单片机LED1616点阵显示实验

单片机LED1616点阵显示实验

LED16*16点阵显示实验目录1.概述 (2)1.1课题设计的背景 (2)1.2课程设计的要求 (3)2. 系统方案设定 (3)2.1系统总体设计 (3)2.2 AT89C51 单片机概述 (4)2.2.1 AT89C51单片机的结构 (4)2.2.2 管脚说明 (4)2.2.3 振荡器特性 (6)2.3 驱动显示方式的选择 (6)2.4 数据传输方式 (7)2.5显示屏控制部分 (8)3. 系统硬件的设计 (8)3.1系统硬件选择 (8)3.2 16*16点阵显示器的设计 (9)3.3 数据存储模块 (10)3.4数据存储电路设计 (10)4. 系统软件的设计 (11)4.1 系统主程序流程 (11)4.2数据移位传送模块 (13)4.3行扫描模块 (13)4.4串行通信模块 (13)4.5 软件的程序实现 (13)5 总结 (14)6.参考文献 (15)附录 (16)附录一LED16*16点阵控制程序清单 (17)附录二系统原理图 (22)LED16*16点阵显示实验1.概述1.1课题设计的背景单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。

单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。

正因为单片机有如此多的优点,因此其应用领域之广,几乎到了无孔不入的地步。

在我国,单片机已被广泛地应用在工业自动化控制、自动检测、智能仪表、智能化家用电器、航空航天系统和和国防军事、尖端武器等各个方面。

我们可以开发利用单片机系统以获得很高的经济效益。

更重要的意义是单片机的应用改变了控制系统传统的设计思想和方法。

以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。

这种以软件结合硬件或取代硬件并能提高系统性能的控制技术称为微控制技术。

例如,本文所要论述的通过单片机来控制LED点阵显示。

16x16 LED点阵实验

16x16 LED点阵实验

实验名称:16x16 LED点阵实验实验目的:利用单片机I/O口实现LED点阵的行扫描动态显示。

实验原理:1、LED显示器的基本结构:七段显示器:将发光二极管封装成数码显示的形式。

共阳七段显示器:共阴七段显示器:点阵式显示器:发光二极管封装成点阵形式,构成不同的字符甚至汉字、图形。

发光二极管排列成矩阵,由亮与暗来产生字符或图形。

每一行的阳极连在一起,每一列的阴极连在一起。

2、点阵显示的原理:点阵显示器每一列的阴极连在一起,对每一列而言相当于一个共阴显示器。

同时每一行的阳极连在一起,相当于七段显示器的笔划。

这样,可以把5X7的发光二极管点阵看作一个五位显示器。

可采用动态显示电路,以笔划锁存器控制行信号,以位锁存器控制列信号。

3、实验原理图使用两片8位输出锁存移位寄存器74HC595(三态输出、串入并出),将单片机I/O口发出的串行数据转换为并行数据LD_QA~LD_QP,作为16×16 LED点阵显示器的行线,使用另外两片8位74HC595作为 16×16 LED点阵显示器的列线LD_1~LD_16。

当行输出高电平、列输出低电平时,可以点亮点阵。

74HC595:LD-QA~LD-QP:点阵行控制信号LD-1~LD-16:点阵列控制信号SER(14脚):串行数据输入端-SCLR(10脚):低电平时将移位寄存器的数据清零。

通常将它接Vcc。

SCK(11脚):上升沿时将串行数据移入移位寄存器。

RCK(12脚):上升沿时移位寄存器的数据锁存入数据寄存器。

-G(13脚): 高电平时禁止输出(高阻态)时序图:实验内容:在16×16LED点阵上分别用静态方式和滚屏方式显示自己的姓(行扫描)。

实验步骤:使用导线将A2区的P10~P14与C3区的L_DAT_H 、L_DAT_L、L_CLK、L_OE 、 L_STR实验设计:电路图:(修改后加上了74HC595输出端口与LED点阵相连的端口名称)1、静态方式:流程图:代码及注释:HL EQU 70H ;行信号低位内存地址LL EQU 72H ;列信号低位内存地址HD EQU P1.0 ;p1.0口连行信号输入端LD EQU P1.1 ;P1.1口连列信号输入端SCK EQU P1.2 ;P1.2口连移位寄存器OE EQU P1.3 ;P1.3口连使能端RCK EQU P1.4 ;P1.4口连锁存器ORG 8000H ;硬件仿真程序LJMP MAINORG 8100H ;硬件仿真程序MAIN:MOV DPTR,#DISPLAY ;字模表地址MOV R1,#00H ;字模表起始地址偏移量MOV HL,#01H ;行扫描信号的初值0001HMOV HL+1,#00HLOOP:MOV A,R1MOVC A,@A+DPTRMOV LL,A ;找到列低位数据,存入内存地址中INC R1MOV A,R1MOVC A,@A+DPTRMOV LL+1,A ;找到列高位数据,存入内存地址中LCALL SENDD ;调用传输数据的程序LCALL DELAY ;调用延时程序CLR C ;位处理累加器清零MOV A,HLRLC A ;左移行扫描信号低8位MOV HL,AMOV A,HL+1RLC A ;左移行扫描信号高8位MOV HL+1,AINC R1CJNE R1,#20H,LOOP ;判断一轮扫描是否结束LJMP MAINSENDD:CLR OE ;使能信号低电平有效CLR RCK ;RCK信号置0MOV R2,#08HMOV R3,LL+1 ;列信号高八位地址MOV R4,HL+1 ;行信号高八位地址BACK:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK ;判断高8位信号是否传输完毕MOV R2,#08HMOV R3,LL ;列信号低8位地址MOV R4,HL ;行信号低8位地址BACK1:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK1 ;判断低8位信号是否传输完毕SETB RCK ;RCK信号上升沿到来,移位寄存器的数据锁存入数据寄存器RETDELAY: ;延时子程序MOV R7,#50DELAY1:MOV R6,#10DELAY2:DJNZ R6,$DJNZ R7,DELAY1RETDISPLAY:DB 0xFF,0xFE,0xE0,0xEE,0xEF,0xCE,0xEF,0xF6,0xE1,0xFA,0xFD,0xFC,0xFD,0xFE,0x3D,0x80;DB 0xE0,0xFA,0xED,0xFA,0xEF,0xF6,0xEF,0xF6,0xEF,0xEE,0xEF,0x9A,0x6B,0xDC,0xF7,0xFE;"张" END2、滚屏方式流程图:代码及注释:HL EQU 70H ;行信号低位内存地址LL EQU 72H ;列信号低位内存地址HD EQU P1.0 ;p1.0口连行信号输入端LD EQU P1.1 ;P1.1口连列信号输入端SCK EQU P1.2 ;P1.2口连移位寄存器OE EQU P1.3 ;P1.3口连使能端RCK EQU P1.4 ;P1.4口连锁存器ORG 8000H ;硬件仿真程序LJMP MAINORG 8100H ;硬件仿真程序MAIN:MOV DPTR,#DISPLAY ;字模表地址MOV R1,#00HMOV R7,#00H ;R7用来表示字模表起始位置偏移量LOOP:MOV R5,#20 ;R5用来表示延时,改变R5的值可改变滚屏速度LOOP1:MOV R6,#10H ;R6用来判断是否扫描完一轮MOV A,R7 ;将R7的值赋值给R1MOV R1,AMOV HL,#01H ;行扫描信号的初值0001HMOV HL+1,#00HLOOP2:MOV A,R1MOVC A,@A+DPTRMOV LL,A ;找到列低位数据,存入内存地址中INC R1MOV A,R1MOVC A,@A+DPTRMOV LL+1,A ;找到列高位数据,存入内存地址中LCALL SENDD ;调用传输数据的程序LCALL DELAY ;调用延时程序CLR C ;位处理累加器清零MOV A,HLRLC A ;左移行扫描信号低八位MOV HL,AMOV A,HL+1RLC A ;左移行扫描信号高八位MOV HL+1,AINC R1DEC R6CJNE R6,#00H,LOOP2 ;通过R6判断是否扫描完一轮,R6减为0,一轮扫描结束DJNZ R5,LOOP1 ;通过R5判断一帧的延时是否达到INC R7 ;改变字模表的偏移量INC R7 ;R7连续加2,相当于换行CJNE R7,#40H,LOOP ;判断字模表是否结束LJMP MAINSENDD:CLR OE ;使能信号低电平有效CLR RCK ;RCK信号置0MOV R2,#08HMOV R3,LL+1 ;列信号高8位地址MOV R4,HL+1 ;行信号高8位地址BACK:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK ;判断高八位信号是否传输完毕MOV R2,#08HMOV R3,LL ;列信号低八位地址MOV R4,HL ;行信号低八位地址BACK1:CLR SCK ;SCK信号置0MOV A,R3RLC AMOV R3,AMOV LD,C ;列信号逐位传输MOV A,R4RLC AMOV R4,AMOV HD,C ;行信号逐位传输SETB SCK ;SCK信号上升沿到来,将串行数据移入移位寄存器DJNZ R2,BACK1 ;判断低八位信号是否传输完毕SETB RCK ;RCK信号上升沿到来,移位寄存器的数据锁存入数据寄存器RETDELAY: ;延时子程序MOV R2,#50DELAY1:MOV R3,#10DELAY2:DJNZ R3,$DJNZ R2,DELAY1RETDISPLAY:DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFFDB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF;预留空白DB 0xFF,0xFE,0xE0,0xEE,0xEF,0xCE,0xEF,0xF6,0xE1,0xFA,0xFD,0xFC,0xFD,0xFE,0x3D,0x80;DB 0xE0,0xFA,0xED,0xFA,0xEF,0xF6,0xEF,0xF6,0xEF,0xEE,0xEF,0x9A,0x6B,0xDC,0xF7,0xFE;"张" END实验结果与分析:1、程序正确运行后,可看到16x16 LED点阵显示屏上显示“张”,LED灯的亮暗程度有些不均匀。

16x16点阵显示

16x16点阵显示

1实验目的•使用户学会利用单片机的I/O口进行LED点阵的行扫描显示。

2实验内容a.编写程序,用P1口控制C3区4片74HC164进行行扫描,在16×16LED点阵上用静态方式显示自己的姓。

(孙)b.编写程序,用P1口控制C3区4片74HC164进行行扫描,在16×16LED点阵上用滚屏方式显示自己的姓。

(孙)3实验原理3.1点阵式LED显示器的基本结构发光二极管排列成矩阵,由亮与暗来产生字符或图形。

每一行的阳极连在一起,每一列的阴极连在一起:1⃝点阵显示器每一列的阴极连在一起,对每一列而言相当于一个共阴显示器2⃝同时每一行的阳极连在一起,相当于七段显示器的笔划。

这样,可以把5X7的发光二极管点阵看作一个五位显示器3⃝可采用动态显示电路,以笔划锁存器控制行信号,以位锁存器控制列信号利用点阵显示字符和图形时,需用较多的编码。

以5X7点阵为例,每列需要一个编码,如显示字母B,当第1列有效时,其行编码信号为7FH;当第2、3、4列有效时,其行编码信号为49H;当第5列有效时,其行编码信号为36H。

3.274HC595表1:74HC595真值表RCK SCK SCLR G FunctionX X X H Q A thru Q H=T RI−ST AT EX X L L Shift Register cleared Q′H=0X↑H L Shift Register clocked Q N=Q n−1,Q0=SER↑X H L Contents of Shift Register transferred to output latches 3.3实验箱点阵连接方式使用两片8位输出锁存移位寄存器74HC595(三态输出、串入并出),将单片机I/O 口发出的串行数据转换为并行数据LD_QA∼LD_QP,作为16×16LED点阵显示器的行线,使用另外两片8位74HC595作为16×16LED点阵显示器的列线LD_1∼LD_16。

16×16点阵显示设计

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点阵显示设计

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语言的了解。

16×16点阵显示实训

16×16点阵显示实训

信息工程学院实训报告题目:16×16点阵显示实训步进电机控制实训学生姓名:范怀福学号: 1067106225专业:自动化班级: 10-2指导教师:贾玉瑛、李爱莲、梁丽、陈波、李琦实训任务书摘要1、LED点阵显示是是我们常用的的显示器件,它不仅可以实现数字、汉字的显示,同时也可以实现简单图像的显示,在我们日常生活中得到了广泛的应用,例如:广告牌,跑马灯等.2、关键词:16x16点阵显示正文一16×16点阵显示1、实训目的(1)利用单片机I/O口或以扩展锁存器的方式控制点阵显示。

(2)掌握单片机与16×16点阵块之间接口电路设计及编程。

2、实验内容利用单片机实验仿真系统,用试验箱上的的16x16点阵显示器实现所要求的的字形显示。

I/OI/O口分别提供字形代码(列码)、扫描信号(行码),凡字形代码位为“1”、行扫描信号为“1”点亮该点,否则熄灭;通过逐行扫描循环点亮字形或曲线。

3、74LS273、74LS138芯片简介3、1 74LS273芯片74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作数据锁存器,地址锁存器。

D0~D7:出入;Q0~Q7:输出第一脚WR:主清除端,低电平触发,即当为低电平时,芯片被清除,输出全为0(低电平);CP(CLK):触发端,上升沿触发,即当CP从低到高电平时,D0~D7的数据通过芯片,为0时将数据锁存,D0~D7的数据不变。

3、2 74LS138芯片74LS138 为3 线-8 线译码器,其工作原理如下:①当一个选通端(E1)为高电平,另两个选通端((/E2))和/(E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。

比如:A2A1A0=110时,则Y6输出端输出低电平信号。

②利用E1、E2和E3可级联扩展成24 线译码器;若外接一个反相器还可级联扩展成32 线译码器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;四、器件编程与下载通过了编译,接下来我们开始对器件进行引脚的锁定,引脚的锁定办法如下图所示。

相关文档
最新文档