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

合集下载

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点阵LED电子显示屏设计报告.

16×16点阵LED电子显示屏设计报告.
2.2数据传输和显示方案
采用扫描方式进行显示时,每行一个行驱动器,各行的同名列共用一个列驱动器。显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上,这就存在着一个显示数据传输的问题。从控制电路到列驱动器的数据传输可以采用并行方式或串行方式。显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。当列数很多时,并行传输的方案不可取。
3.3列驱动电路
列驱动器由集成电路74HC595构成。它具有一个8位串入并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。
引脚SI为串行数据输入端,与单片机串口RXD(P3.0)相连,用来传送数据;引脚SCK为移位寄存器的移位时钟脉冲,与单片机串口TXD(P3.1)相连;引脚SCLR信号是移位寄存器的清0输入端,低电平有效,接与单片机P1.5口;RCLK是输出寄存器的打入信号,与单片机P1.6口相接;
静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。
如果用静态显示的方法,16×16的点阵共有256个发光二极管,单片机没有那么多的端口,如果用锁存器来扩展端口,按8位锁存器来计算,也需要32个锁存器。两位显示就需要64个锁存器。因此在实际应用中的显示屏几乎都不采用静态显示,而是采用动态扫描的显示方法。

1616点阵LED显示屏的原理与制作实验报告

1616点阵LED显示屏的原理与制作实验报告

16*16点阵LED显示屏的原理与制作实验报告一、实验目的1.学会LED点阵模块的引脚判别,学会多块LED点阵模块的拼接使用。

2.进一步了解LED点阵的显示原理。

3.了解用单片机控制LED点阵显示字符的基本原理。

4.学会根据电路图连接电路。

二、实验内容在4块8*8LED合并而成的16*16LED显示屏上显示名字。

三、实验过程1.显示屏驱动电路原理图2.程序编写#include<reg52.h>#define CCED2 0x0000 /*吴*/unsigned char code word_zai[16][2] = {/*吴CCED2 */0x00,0x84,0x00,0x84,0x80,0x44,0xBE,0x44,0xA2,0x24,0xA2,0x14,0xA2,0x0C,0xA 2,0x07,0xA2,0x0C,0xA2,0x14,0xA2,0x24,0xBE,0x64,0x80,0xC4,0x00,0x44,0x00,0x04,0x0 0,0x00};/*"吴",0*/void main(){ char scan,i,j;P0=0;P1=0;P2=0;while(1){ scan=0;for(i=0;i<16;i++){ P1=scan;for(j=0;j<50;j++) //显示五十次{ P2=word_zai[i][0] ;P0=word_zai[i][1] ;}P0=0;P2=0;scan++;}}}四、实验总结在本次的实验里,我感觉本次实验的任务对我的挑战蛮大,因为在实验中要编写一个C语言有点麻烦,需要算的数据比较多,一不小心的话可能就会导致最后的实验结果出现问题,所以要非常的仔细才行。

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”开始扫描。

注意扫描频率必须要足够快,才能保证显示一个数字或字母时所有灯在肉眼看来是同时在闪烁的。

微机接口实验-16x16点阵显示

微机接口实验-16x16点阵显示

实验04·LED显示器王梦硕0930*******实验目的:在理解LED点阵工作原理的基础上,实践使用点阵显示字符。

实验原理:1·点阵式显示器:发光二级管排列成矩阵,由亮与暗来产生字符或图形。

每一样的阳极连在一起,每一列的阴极连在一起,如右图所示。

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

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

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

2·74HC595实验中使用两片8位输出锁存移位寄存器74HC595(三态输出、串入并出),将单片机I/O口发出的串行数据转换为并行数据LD_QA~LD_QP,作为16x16 LED点阵显示器的行线,使用另外两片8位74HC595作为16x16 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点阵上分别用静态方式和滚屏方式显示自己的姓(行扫描)。

两个实验部分的电原理图是相同的,如下所示:1·静态方式:流程图:程序代码:L_DAT_H BIT P1.0L_DAT_L BIT P1.1L_STR BIT P1.2L_CLK BIT P1.3L_OE BIT P1.4ROWH EQU 40H ;字模信号(顺向取膜,高位在前)ROWL EQU 41HSELH EQU 42H ;行扫描信号SELL EQU 43HORG 0000HLJMP MAINORG 0100HMAIN:MOV R1, #01H ;配合字模信号MOV R2, #01H ;高字节在后,故从01开始MOV R3, #10H ;循环16次LOAD:MOV DPTR, #SEL_DATA ;存储行扫描信号MOV A, R1MOVC A, @A+DPTRMOV SELH, A ;存储高字节DEC R1 ;R1-1,指向低字节MOV A, R1MOVC A, @A+DPTRMOV SELL, A ;存储低字节INC R1INC R1INC R1 ;指向下一个高字节MOV DPTR, #ROW_DATA ;存储字模数据,过程同上MOV A, R2MOVC A, @A+DPTRMOV ROWH, ADEC R2MOV A, R2MOVC A, @A+DPTRMOV ROWL, AINC R2INC R2INC R2LCALL LATCH ;运行锁存自程序LCALL DELAY ;延时DJNZ R3, LOAD ;重复执行16次,显示所有行LJMP MAIN ;静态显示LATCH:CLR L_OE ;允许输出CLR L_STR ;为上升沿将移位寄存器数据锁存入数据寄存器MOV R4, SELH ; 做准备MOV R5, ROWH ;高位行扫描型号和字模信号MOV R6, #08H ;高低位分开读,每次读8位LATCH1:CLR L_CLK ;为上升沿读入移位寄存器做准备MOV A, R4RRC A ;移出最高位MOV R4, AMOV L_DAT_H, C ;由P1.0输出准备进入移位寄存器MOV A, R5RRC AMOV R5, AMOV L_DAT_L, C ;由P1.1输出准备进入移位寄存器SETB L_CLK ;CLK上升沿,P1.0和P1.1数据进入移位寄存器DJNZ R6, LATCH1;MOV R4, SELLMOV R5, ROWLMOV R6, #08HLATCH2: ;同上CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH2;SETB L_STR ;STR上升沿移位寄存器数据所存入数据寄存器; 显示RETDELAY: ;延迟程序MOV R6, #02HLOOP1:MOV R7, #0F8H ;估算:1us*2*(1+2*248+2) = 998us ≈1ms LOOP2:DJNZ R7, LOOP2DJNZ R6, LOOP1;RETSEL_DA TA: ;SELECT ROWDB 80H, 00HDB 40H, 00HDB 20H, 00HDB 10H, 00HDB 08H, 00HDB 04H, 00HDB 02H, 00HDB 01H, 00HDB 00H, 80HDB 00H, 40HDB 00H, 20HDB 00H, 10HDB 00H, 08HDB 00H, 04HDB 00H, 02HDB 00H, 01HROW_DA TA:DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0;END实验效果:字模效果:LED显示效果:2·滚屏方式:流程图:程序代码:L_DAT_H BIT P1.0L_DAT_L BIT P1.1L_STR BIT P1.2L_CLK BIT P1.3L_OE BIT P1.4ROWH EQU 40HROWL EQU 41HSELH EQU 42HSELL EQU 43HWAIT EQU 44H ;负责控制滚动速度ORG 0000HLJMP MAINORG 0100HMAIN:MOV R0, #01H ;每次重新滚动时初始化NEXT:MOV WAIT, #0AH ;滚动速度设置,数字越大滚动越慢ROLL:MOV A, R0 ;变换显示的第一行以完成滚动MOV R1, #01H ;行扫描信号不变MOV R2, AMOV R3, #10HLOAD:MOV DPTR, #SEL_DATA ;MOV A, R1MOVC A, @A+DPTRMOV SELH, A ;LOAD HIGH BYTEDEC R1 ;OF SELECT SIGNALMOV A, R1MOVC A, @A+DPTRMOV SELL, A ;LOAD LOW BYTEINC R1 ;OF SELECT SIGNALINC R1INC R1MOV DPTR, #ROW_DATAMOV A, R2MOVC A, @A+DPTRMOV ROWH, ADEC R2MOV A, R2MOVC A, @A+DPTRMOV ROWL, AINC R2INC R2INC R2LCALL LATCHLCALL DELAYDJNZ R3, LOAD; 以上与第一部分相同DJNZ WAIT, ROLL ;循环以延时INC R0INC R0 ;R0指向下一行,以实现滚动CJNE R0, #61H, NEXT ;所有字符显示完毕后开始新的一轮; 以下与第一部分相同LJMP MAINLATCH:CLR L_OECLR L_STRMOV R4, SELHMOV R5, ROWHMOV R6, #08HLATCH1:CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH1;MOV R4, SELLMOV R5, ROWLMOV R6, #08HLATCH2:CLR L_CLKMOV A, R4RRC AMOV R4, AMOV L_DAT_H, CMOV A, R5RRC AMOV R5, AMOV L_DAT_L, CSETB L_CLKDJNZ R6, LATCH2;SETB L_STR;RETDELAY:MOV R6, #02HLOOP1:MOV R7, #0F8HLOOP2:DJNZ R7, LOOP2DJNZ R6, LOOP1;RETSEL_DA TA: ;SELECT ROWDB 80H, 00HDB 40H, 00HDB 20H, 00HDB 10H, 00HDB 08H, 00HDB 04H, 00HDB 02H, 00HDB 01H, 00HDB 00H, 80HDB 00H, 40HDB 00H, 20HDB 00H, 10HDB 00H, 08HDB 00H, 04HDB 00H, 02HDB 00H, 01HROW_DA TA:DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0DB 0F7H, 0DFH, 0F7H, 0DFH, 81H, 03H, 0F7H, 0DFH, 0E3H, 8FH, 0D5H, 57H, 37H, 0D9H, 0FBH, 0FFH;DB 0F8H, 0FH, 0F7H, 0EFH, 0EBH, 0DFH, 0DDH, 0BFH, 0FEH, 7FH, 0FDH, 0FFH, 0F3H, 0FFH, 8FH, 0FFH;"梦",1DB 0FFH, 0FFH, 0FCH, 01H, 03H, 0DFH, 0EFH, 0BFH, 0EEH, 03H, 0DEH, 0FBH, 0C2H, 0FBH, 9AH, 0DBH;DB 9AH, 0DBH, 5AH, 0DBH, 0DAH, 0DBH, 0DAH, 0BBH, 0C3H, 0AFH, 0DBH, 77H, 0DEH,0FBH, 0FDH, 0FBH;"硕",2DB 0FFH, 0FFH, 80H, 03H, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0C0H, 07H;DB 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 0FEH, 0FFH, 00H, 01H, 0FFH, 0FFH;"王",0; 为了实现无间隙滚动,最后16行与最前十六行设置相同字模数据END实验效果:字模效果:LED点阵效果:实验现象与记录:1·静态显示:正确地显示了“王”字,但是很明显地:每一行的所有点亮的等亮度相同,并且对每一行而言,亮的灯越多,则每盏灯越暗。

实验14LED1616点阵显示电路

实验14LED1616点阵显示电路

实验十四16*16LED点阵显示电路一. 实验目的1. 了解16*16LED点阵显示硬件电路2. 掌握状态机设计3. 掌握串行数据传输的设计思路二. 实验原理我们在一些公共场所,经常看到一些点阵显示的屏幕,点阵显示屏由若干个半导体发光二极管像素点均匀排列组成。

点阵显示就是把待显示的字符或图像等面积地分成若干个点阵单元(像素),有图像的单元点亮相应的二极管,无图像区域对应的二极管处于灭状态,整体组合成一个完整的图像,对于字符也是按照图像进行处理的。

一个字符,例如一个汉字,把它分为多少个单元,决定了其显示时的平滑程度,一般来说,在16*16的LED点阵上可以比较清晰的显示一个不太复杂的汉字。

实验箱上的有一个16*16的LED点阵,其硬件内部电路如图14.1所示。

电路中采用SPI接口的方式对LED点阵进行操作,LATTICE_SI对应SPI的MOSI,LATTICE_STR对应SPI的nCS,LATTICE_SCK对应SPI的SCK。

四个74HC595构成一个32位的串入并出的移位寄存器。

当STR低电平时,32位的数据在32个SCK时钟下由SI串行输入,当STR 由低电平变为高电平时,32位的数据并行输出。

在主板上数据输出LDA~LDP对应16行,而LED1~LED16对应列,最后移入的数据被当做16列(LED16),最先移入的数据被当做第1行(LDA)。

在这里我们需要明确的是:1.一屏图像可以逐行扫描显示,也可以逐列扫描显示,本实验采取逐列扫描显示,即把显示整屏的时间分为16个时间段,第n个时间段显示第n列,点亮该列相应的LED单元。

2.若扫描显示某列,需要片选该列的列单元(低电平),例如显示第1列,需要把列1置为低电平,其它列为高电平。

如果该列的某一行对应的单元亮,则该行对应的电平为高电平,不亮的单元对应的行为低电平。

3.不论显示那一列,对于16*16 的点阵来说,都要在STR低电平时通过SI线串行送出32位的数据,先送某一列上的由上至下的16个点的数据,然后再送由左至右的该列对应的片选数据。

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

实验四   16X16点阵LED实验

实验四 16X16点阵LED实验一.实验目的1.了解点阵显示的原理及控制方法;2.学会使用16X16点阵LED,通过编程显示不同的字符。

二.实验原理及相关电路16X16点阵了的由16X16列共256个发光二极管紧密排在一起构成,程序控制每个像素点(发光二极管)的亮灭,就能用来显示汉字或者图形。

LED的每一行的16列发光二极管都由一个4位的16进制数来控制,从左往右由低位到高位。

将每一个字的显示都用16个16位进制数表示,称为字模。

本实验,分别控制LED灯行的动态扫描,高电平为灭低电平为点亮;用16进制数控制LED灯每一列的亮灭,高电平为亮,低电平为灭。

为了实现显示屏上字的滚动显示,则需要将所显示的字向右移,并取下一个字的最右边一位补充到显示屏的最左边,形成动态滚动的效果。

三.实验内容及程序1.用单片机的端口控制16*16点阵的行与列,在点阵LED显示屏上显示“单”。

#include <p24FJ64GA006.h>void Delayms(unsigned int del){unsigned int j;while(del--)for(j=0;j<1000;j++); } //定义Delaym函数void IOInit() //初始化端口{AD1PCFG= 0xFFFF; //全部设置为数字TRISD=TRISB= 0x0000; //D和B端口全部设为输出TRISE=TRISF= 0x0000; //E和F端口全部设为输出}int main(void){unsigned int state_E,state_F,temp_E,temp_F; IOInit();state_F = 0xFFFE; //初始化F端口状态unsigned int i=0;unsigned int dan[]={0x0410,0x0C60,0x0220,0x1FFC,0x1084,0x1FFC,0x1084,0x1084,0x1FFC,0x1084,0x0080,0x7FFF,0x0080,0x0080,0x0080,0x0080}; //单while(1){PORTD = dan[i];PORTB = dan[i]; //将字模同时赋给B和D端口PORTF = state_F; //将行状态的低8位赋给F端口低8位state_E=temp_E=temp_F=state_F;state_E <<= 8;state_E = (state_F&0xFF00)|((temp_E>>8)&0x00FF); //行状态左移8位PORTE = state_E; //将行状态高8位赋给E端口低8位Delayms( 1 );state_F <<= 1;state_F = (state_F&0xFFFE)|((temp_F>>15)&0x0001);//将行状态左移一位,动态扫描i++;if(i==16)i=0;}}显示结果:注:中间空出一行是因为PORTF的第8位为空,不影响显示效果2.在点阵LED显示屏上滚动显示“单片机实验室欢迎您”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、实验原始数据记录
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点阵的工作原理
相关文档
最新文档