实验六 点阵LED的图形显示
- 格式:docx
- 大小:365.39 KB
- 文档页数:9
目录1.引言11.1.设计意义11.2.系统功能要求11.3.本组成员所做的工作12.方案设计13.硬件设计14.软件设计15.系统调试26.设计总结27.附录A;源程序28.附录B;作品实物图片29.参考文献216×16点阵LED室内电子显示屏的设计摘要:LED显示屏作为一种新型的显示器件,是由多个发光二极管按矩阵形式排列封装而成,通常用来显示时间、图文等信息。
本设计是基于ATS52单片机的16x16显示屏,其中包含了硬件、软件、调试等方案的设计。
此外、该设计只需简单的级联就能实现显示屏的拓展,但级联时要注意不要超过驱动负载范围。
关键词:Ats52;LED;单片机1引言1.1. 设计意义LED显示屏是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。
图文显示屏可与计算机同步显示汉字、英文文本和图形;视频显示屏采用微型计算机进行控制,图文、图像并茂,以实时、同步、清晰的信息传播方式播放各种信息,还可显示二维、三维动画、录像、电视、VCD节目以及现场实况。
LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。
它的优点:亮度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳定。
1.2. 系统功能要求设计一个能显示16X16点阵图文LED显示屏,要求能显示图文或文字,显示图文或文字应稳定、清晰,图文或文字显示,以卷帘形式向上滚动显示。
1.3. 本组成员所做的工作方案原理论证:汪航,李如发,杜绍飞焊接:汪航调试:李如发设计报告:杜绍飞2方案设计2.1 总体设计2.2图文显示一般有静态和动态显示两种方案,静态方案虽然设计简单,但其使用的管脚太多,如本设计中16x16的点阵共有256个发光二极管,显然单片机没有这么多的端口,如果我采用锁存器来扩展端口,按8位的锁存器来计算,16x16的点阵需要256/8=32个锁存器。
点阵LED显示设计实验报告
姓名:刘根生1153530 贺晨曦
一:实验目的
1:了解实验器材以及学会连接实验电路和操作相关软件。
2:了解LED点阵显示的基本原理与方法。
3:掌握用CPU控制扫描的方式实现点阵LED显示器的字符,图形的显示。
4:掌握用单片机进行显式系统开发的方法。
5:掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法。
二:实验内容与原理
三:实验结果
1:通过对取模字体的设置,确定点阵的大小为16*16;
2:通过对取模方式的设置,确定取点方式以及字节排序问题,使得汉字可以在显示屏上正常显示和阅读;
3:在软件的程序设计中,可以通过输出格式选出两种方式,可以为汇编格式或者C语言格式;
4:最终结果是在16*16点阵上显示我所在的学院,专业以及姓名,并且一一按顺序排布,字的长度覆盖16*16点阵,为“数学系统计专业刘根生贺晨曦”
四:实验体会
虽然本设计只使用16*16LED点阵,电路简单,但是已经包含了LED显示屏电路的基本原理和基本程序。
在设计过程中应该使
图形文字稳定,清晰无串扰。
图形或文字显示有静止或移入移出等显示方式,本系统具有硬件少,结构简单,容易操作,性能稳定可靠,成本低等特点,故具有非常大的科技以商业价值。
实验六LED16×16 汉字图形点阵显示电路一、实验目的1、掌握计数器设计。
2、掌握点阵LED显示模块的工作原理。
3、掌握VHDL基本逻辑电路的综合设计应用。
二、实验原理LED 点阵的行为扫描选通信号、列为数据输入。
显示采用逐行扫描方式,数据端不断输入数据,行扫描按一定顺序逐行选通,扫描一个周期(16次)产生一帧画面。
图1以4×4 共阴LED 阵列为例,给出了LED 阵列的组合方式,行选通低有效,数据高有效;数据端输入数据,选通行根据相应数据亮灯,接着送入第二行数据,选通第二行,依次完成一屏的扫描。
图1 LED阵列结构所要显示的点阵数据可存储在可编程芯片中的存储器中,电路结构框图如下所示:点阵显示驱动电路CLK_ROW为点阵扫描时钟;DIR[1..0]为点阵显示方式控制信号,00时左滚动显示,01时右滚动显示,10时闪烁显示。
DZ[15..0]为16位点阵数据输出,ADD_SCAN[3..0]为点阵扫描地址输出。
ROM用于存储点阵数据。
三、实验设备计算机软件:Quartus IIEDA实验箱。
主芯片:EPM7128SLC84-15或EP1K100QC208-3。
下载电缆,导线等。
四、实验内容及步骤1、制作ROM初始化文件,即mif文件。
方法如下:首先使用字模软件提取要显示的点阵信息。
然后在quartusII中新建一个256×16的mif文件,并输入上面提取的点阵数据,如下图2、使用宏功能向导定制一个LPM_ROM,元件名为ROM_DOT,用于存储点阵数据. ROM 位宽16位,深度8位。
3、输入以下参考代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY test_wait ISPORT (CLK_ROW: IN STD_LOGIC;DIR : IN STD_LOGIC_VECTOR(1 DOWNTO 0 );DZ: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);ADD_SCAN: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY test_wait;ARCHITECTURE ART OF test_wait ISCOMPONENT ROM_DOT ISPORT(ADDRESS : IN STD_LOGIC_VECTOR (7 DOWNTO 0);Q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0));END COMPONENT ROM_DOT;SIGNAL ADD_ROM: STD_LOGIC_VECTOR(7 DOWNTO 0);ATTRIBUTE KEEP : BOOLEAN;ATTRIBUTE KEEP OF ADD_ROM:SIGNAL IS TRUE;SIGNAL CNT0 : STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINPROCESS(CLK_ROW)BEGINIF CLK_ROW'EVENT AND CLK_ROW='1' THENCNT0<=CNT0+1;END IF;END PROCESS;ADD_SCAN<=CNT0(3 DOWNTO 0);PROCESS(CNT0,DIR) ISBEGINCASE DIR ISWHEN "00" => --左滚动ADD_ROM <= ("0000" & CNT0(3 DOWNTO 0)) + CNT0(15 DOWNTO 8); WHEN "01" => --右滚动ADD_ROM(3 DOWNTO 0) <=CNT0(3 DOWNTO 0)-CNT0(11 DOWNTO 8);IF CNT0(3 DOWNTO 0) < CNT0(11 DOWNTO 8) THENADD_ROM(7 DOWNTO 4) <= CNT0(15 DOWNTO 12) + 1;ELSEADD_ROM(7 DOWNTO 4) <= CNT0(15 DOWNTO 12) ;END IF;WHEN OTHERS => --闪烁显示ADD_ROM(3 DOWNTO 0) <= CNT0(3 DOWNTO 0);ADD_ROM(7 DOWNTO 4) <= CNT0(14 DOWNTO 11);END CASE;END PROCESS;U1: ROM_DOT PORT MAP(ADDRESS=>ADD_ROM,Q=>DZ);END ARCHITECTURE ART;4、选择恰当的CPLD/FPGA芯片,并按如下要求进行引脚锁定。
点阵L ED 显示设计实验4.13.1 实验目的1. 了解L E D点阵的基本结构。
2. 学习L E D点阵扫描显示程序的设计方法。
4.13.2 实验设备PC机一台,TD-PIT或TD-PIT++实验装置一套。
4.13.3 实验内容及原理(1)在T D-P I T上使用基本输入输出单元中的两路输出O A[7:0]、O B[7:0]分别控制点阵LED的行控制R[7:0]和列控制L[7:0]。
编写程序,使点阵LED的每一行和每一列依次循环显示。
(2)在T D-P I T上使用32 位I/O接口单元的 32 位输出O0~O31控制点阵LED单元R0~R15和L0~L15。
编写程序,在16×16 点阵上循环显示汉字。
8×8 点阵L ED相当于8×8 个发光管组成的阵列,对于共阳极L ED来说,其中每一行共用一个阳极(行控制),每一列共用一个阴极(列控制)。
行控制和列控制满足正确的电平就可使相应行列的发光管点亮。
实验平台上点阵L ED的管脚及相应的行、列控制位如图4-13-1 所示。
图4-13-1 点阵L ED管脚图共阳极和共阴极L ED的内部结构分别如图4-13-2 和4-13-3 所示。
I/O 接口单元............. ... ..............系 统 总 线图 4-13-2 共阳极 L ED 内部结构图图 4-13-3 共阴极 L ED 内部结构图TD-PIT 实验系统上的L E D 点阵单元使用了一片Φ 的共阳极L E D 点阵,利用基本输入 输出单元的两路输出分别控制点阵LED 的行和列,编写一个简单的程序,使每一行和每一列依 次循环显示。
实验参考接线如图 4-13-4 所示。
8×8 点阵显示实验参考接线图(Pit+)在TD-PIT 实验系统上的LED 点阵单元采用了4 片Φ 的共阴极LED 点阵组成 16×16 的点阵。
利用取字模软件得到汉字字符数组,设计 程序,在点阵上滚动显示“西安唐都科教仪器公司”。
点阵实验报告 LED点阵字符驱动显示实验报告_图文LED点阵字符驱动显示实验郑家贵110800533陈鹤110800524一实验目的1、掌握用CPU控制扫描的方法实现点阵LED显示器的字符、图形的显示。
2、掌握用单片机进行显示系统开发的方法。
3、了解大容量显示器点阵图形显示驱动扩展的一般方法。
二实验仪器单片机最小系统,电源模块,8*8点阵LED显示器四块,AT89C51单片机,74HC154N两片,HD74LSO4P一片,100?排阻等。
三设计思想用单片机的P1.0-P1.4和P2.0-P2.7共13个输出口来传递数据码,其中P1.0-P1.3分别接4线-16线译码器的四个数据输入端(A、B、C、D),P1.4作为片选输出信号,当P1.4为高电平时,U2工作,U3不工作;当P1.4为低电平输出,U2不工作,U3工作。
信号经过74HC154N译码后输出,再接至4片点阵LED的行信号输入端,而列信号由单片机的P2口直接控制。
1、系统框图:图1:16X16点阵硬件电路图2、单片机最小系统:上图是51单片机的最小系统。
将程序烧写进单片机后,便可以实现对硬件系统的控制。
3、LED点阵显示屏:上图即显示屏,是由4块8*8LED点阵级联,成为16*16 LED 点阵。
由单片机控制,按照程序中的控制命令和字模数据表输出相应汉字,同时按一定速率流动,显示多个汉字。
4、74HC154N工作原理:74HC154N为4线—16线译码器,可以实现地址的扩展。
引脚说明:1-11,3-17 :输出端(outputs)12:Gnd电源地(ground)18-19:使能输入端、低电平有效(enable inputs)20-23地址输入端(address inputs)24:VCC电源正(positive supply voltage)四设计的电路样品的照片如图下图所示五实验结论及心得:通过和同伴的一致努力,最终完成了整个电路的设计。
点阵led设计实验实验报告一、实验目的本实验旨在通过设计和搭建一个点阵LED 系统,掌握点阵LED 的基本工作原理和电路设计方法,并了解如何通过编程控制点阵LED 实现各种图案显示。
二、实验材料和器件实验所用材料和器件包括:- 点阵LED 模块:用于显示图案和文字。
- Arduino 控制板:用于控制点阵LED 模块。
- 杜邦线:用于连接点阵LED 模块和Arduino 控制板。
三、实验步骤1. 硬件搭建首先,将点阵LED 模块连接到Arduino 控制板上。
具体的连接方式可以参考Arduino 官方文档或点阵LED 模块的说明书。
2. 软件设置接下来,需要在计算机上安装并配置Arduino 开发环境。
之后,通过Arduino 开发环境中的代码编辑器编写控制点阵LED 的代码。
3. 编写程序编写程序的主要步骤如下:- 导入所需的库文件:根据点阵LED 模块的型号和控制方式,导入相应的库文件。
- 设置引脚模式:设置Arduino 控制板的引脚模式,以便与点阵LED 模块进行通信。
- 定义图案:根据需要显示的图案或文字,定义相应的数组或变量。
- 初始化点阵LED 模块:根据模块的特性和控制方式,初始化点阵LED 模块。
- 显示图案:根据定义的图案,通过控制点阵LED 模块的引脚,实现图案的显示。
4. 上传程序编写完程序后,将Arduino 控制板通过USB 连接到计算机,并通过Arduino 开发环境将程序上传到控制板中。
5. 测试和调试上传完程序后,点阵LED 模块将开始显示所定义的图案。
可以通过修改程序中的图案定义部分来实现不同的显示效果,并进行测试和调试。
四、实验结果和分析经过编程和调试,我们成功实现了点阵LED 模块的图案显示功能。
通过修改程序中的图案定义,我们可以显示不同的图案、文字甚至动画效果。
点阵LED 的显示效果清晰且亮度可调,能够满足我们的需求。
在实验过程中,我们也遇到了一些问题。
LED点阵显示屏实验报告一、实验目的通过实验了解LED点阵显示屏的结构和工作原理,掌握其使用方法和调试技巧,并能够设计简单的图案和文字在屏幕上显示。
二、实验器材和原理1.实验器材:(1)LED点阵显示屏;(2)电子元器件:电阻、导线、开关等;(3)单片机模块和调试工具。
2.原理说明:LED点阵显示屏是由许多个LED灯组成的,可以按照不同的点亮组合来显示各种图案、文字。
点阵显示屏上通常有行和列两个方向的引脚。
每一行的LED灯引脚连接到同一个引脚上,每一列的引脚也连接到同一个引脚上。
通过控制每一行和每一列引脚的电平状态,来点亮指定的LED灯,以显示特定的图案。
三、实验步骤1.连接电路:(1)将LED点阵显示屏的引脚与单片机模块相连接,根据引脚对应关系连接相应的引脚。
(2)接入适当的电阻和开关,用于控制点阵显示屏的亮度和开关状态。
2.编程调试:(1)在单片机模块中编写相应的程序,控制LED点阵显示屏的点亮和熄灭。
(2)调试程序,检查点阵显示屏的点亮情况和亮度效果。
3.设计图案和文字:(1)根据需要,设计出要在点阵显示屏上显示的图案和文字。
(2)根据设计的图案和文字,编写程序实现点阵显示屏的显示效果。
四、实验结果和分析经过调试,LED点阵显示屏能够按照设计要求显示出特定的图案和文字。
通过改变程序中的参数,可以实现不同图案和文字的显示效果。
在实验过程中,我们发现LED点阵显示屏的亮度和显示效果受到电阻和电平控制的影响较大。
适当选择合适的电阻值可以调节点阵显示屏的亮度,使得显示效果更加清晰明亮。
五、实验心得体会通过这次实验,我们对LED点阵显示屏有了更深入的了解。
通过编程控制,我们可以通过点阵显示屏来显示各种图案和文字,具有一定的实用性和娱乐性。
在实验过程中,我们遇到了一些问题,例如点阵显示屏的亮度不够明亮、图案显示效果不够清晰等。
通过针对性的调试和调整,我们解决了这些问题,并取得了满意的实验结果。
总之,LED点阵显示屏实验能够帮助我们更好地理解和掌握其工作原理和使用方法,并且拓宽了我们的实验技能。
实验六点阵LED的图形显示一、实验目的1.了解点阵的显示原理,掌握数模软件的使用方法。
2.进一步巩固单片机定时和中断原理在C51程序设计中的运用。
二、实验内容通过对单片机编程来实现LED点阵的图形显示。
三、实验参考原理3.1 点阵LED的初步认识点阵LED显示屏作为一种现代电子媒体,具有灵活的显示面积(可分割、任意拼装)、高亮度、长寿命、数字化、实时性等特点,应用非常广泛。
一个数码管是8个LED组成,同理,一个8*8的点阵是由64个LED小灯组成。
图3-1就是一个点阵LED最小单元,一个8*8的点阵LED,图3-2是它的内部结构图。
图3-1 8*8点阵LED3-2 8*8点阵LED结构原理图点阵LED内部原理图如图3-2所示,图上蓝色方框外侧的就是点阵LED的引脚号,左侧的8个引脚是接的内部LED的阳极,上侧的8个引脚接的是内部LED的阴极。
如果9脚是高电平,13脚是低电平的话,最左上角的那个LED小灯就会亮,用程序来实现一下,特别注意,我们现在用的74HC138是原理图上的U4。
#include <reg52.h> //包含寄存器的库文件sbit LED = P0^0;sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;void main(){ENLED = 0;ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;ADDR3 = 0; //74HC138开启三极管LED = 0; //点亮点阵的一个点while(1); //程序停止在这里}同样的方法,可以点亮点阵的任意一行,74HC 138的导通点阵所用的三极管的方法和数码管很类似,那我们现在来点亮第二行整行的LED。
#include <reg52.h> //包含寄存器的库文件sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;void main(){ENLED = 0;ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;ADDR3 = 0; //74HC138开启三极管P0 = 0x00; //向P0写入0来点亮一行while(1); //程序停止在这里}从这里可以发现,讲一个数码管就是8个LED小灯,一个点阵是64个LED小灯。
同样的道理,还可以把一个点阵理解成8个数码管。
上节课掌握了6个数码管的同时显示方法,那8个数码管,也就是点阵的8行也应该轻轻松松了,先把这个点阵全部点亮。
#include <reg52.h> //包含寄存器的库文件sbit LED = P0^0;sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;void main(){ENLED = 0;ADDR3 = 0;TMOD = 0x01; //设置定时器0为模式1TH0 = 0xFC;TL0 = 0x67; //定时值初值,定时1msTR0 = 1; //打开定时器0EA = 1; //打开中中断ET0 = 1; //打开定时器0中断while(1); //程序停止在这里,定时器运行,等待定时器中断}void InterruptTimer0() interrupt 1 //中断函数{static unsigned char j = 0;TH0 = 0xFC; //溢出后进入中断重新赋值TL0 = 0x67;P0 = 0xFF; //消隐switch(j){case 0: ADDR0=0; ADDR1=0; ADDR2=0; j++; P0=0x00;break;case 1: ADDR0=1; ADDR1=0; ADDR2=0; j++; P0=0x00;break;case 2: ADDR0=0; ADDR1=1; ADDR2=0; j++; P0=0x00; break;case 3: ADDR0=1; ADDR1=1; ADDR2=0; j++; P0=0x00;break;case 4: ADDR0=0; ADDR1=0; ADDR2=1; j++; P0=0x00;break;case 5: ADDR0=1; ADDR1=0; ADDR2=1; j++; P0=0x00;break;case 6: ADDR0=0; ADDR1=1; ADDR2=1; j++; P0=0x00;break;case 7: ADDR0=1; ADDR1=1; ADDR2=1; j=0; P0=0x00;break;default: break;} //动态刷新}3.2 点阵LED图形显示LED小灯可以实现流水灯,数码管可以显示数字,那点阵LED就得来显示点花样了。
要显示花样的时候,往往要做出来一些小图形,这些小图形的数据要转换到我们的程序当中去,这个时候就需要取模软件。
来给大家介绍一款简单的取模软件,这种取模软件在网上都可以下载到,大家来了解一下如何用,先看一下操作界面,如图3-3所示。
图3-3 字模提取软件界面鼠标点一下“新建图形”,根据我们板子上的点阵,把宽度和高度分别改成8,然后点确定,如图3-4所示。
图3-4 新建图像我们点左侧的“模拟动画”菜单,点击“放大格点”选项,一直放大到最大,就可以在8*8的点阵图形中用鼠标填充黑点,就可以来画图形,如图3-5所示。
图3-5 字模提取软件画图经过我们一番设计,画出来一个心形图形,并且填充满,最终出现我们想要的效果图,如图3-6所示。
图3-6 字模软件心形显示由于取模软件是把黑色取为1,白色取为0,但我们点阵是1对应LED熄灭,0对应LED 点亮,而我们需要的是一颗点亮的“心”,所以我们要选“修改图像”菜单里的“黑白反显图像”这个选项,并且点击“基本操作”菜单里边的“保存图像”可以把我们设计好的图片进行保存,如图3-7所示。
图3-7 保存图像保存图像只是为了你下次使用打开方便,你也可以不保存。
操作完了这一步后,点一下“参数设置”菜单里的“其他选项”,如图3-8所示。
图3-8 选项设置这个选项设置,要根据我们的图3-2对照来看,大家可以看到单片机的P0总线,控制的是一行,所以我们用的是“横向取模”,如果控制的是一列,就要选“纵向取模”。
“字节倒序”这个选项,我们选上是因为图3-2中,我们左边是低位DB0,右边是高位DB7,所以必须选上字节倒序,其他两个选项大家自己了解,点确定后,选择“取模方式”这个菜单,点一下“C51格式”后,在“点阵生成区”自动产生了8个字节的数据,这8个字节的数据就是对应取出来的“模”。
图3-9 取模结果用软件取模,在这个图片里,黑色的一个格子表示一个二进制的1,白色的一个格子表示一个二进制的0。
第一个字节是0xFF,其实就是这个8*8图形的第一行,全黑就是0xFF;第二个字节是0x99,低位在左边,高位在右边,大家注意看,黑色的表示1,白色的表示0,就组成了0x99这个数字。
同理其他的数据大家也就知道怎么来的了。
我们把这个数据送到我们的点阵上去,大家看看什么效果。
对于8*8的点阵来说,我们可以显示一些简单的图形,字符等。
一个汉字正常占的点数是16*16的,8*8的点阵只能显示一些简单笔画的汉字,大家可以自己取模做出来试试。
四、实验参考源程序#include <reg52.h> //包含寄存器的库文件sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;unsigned char code image[] = {0xFF,0x99,0x00,0x00,0x00,0x81,0xc3,0xE7}; //心形图案的取模数据void main() //主函数{ENLED = 0;ADDR3 = 0;TMOD = 0x01; //设置定时器0为模式1TH0 = 0xFC;TL0 = 0x67; //定时值初值,定时1msTR0 = 1; //打开定时器0EA = 1; //打开总中断ET0 = 1; //打开定时器0中断while(1); //程序停止在这里,定时器运行,等待定时器中断}void InterruptTimer0() interrupt 1 //中断函数,T0一旦定时溢出,自动进入中断函数内执行{static unsigned char i = 0;TH0 = 0xFC; //溢出后进入中断重新赋值TL0 = 0x67;P0 = 0xFF; //消隐switch(i){case 0: ADDR0=0; ADDR1=0; ADDR2=0;i++; P0=image[0];break;case 1: ADDR0=1; ADDR1=0; ADDR2=0; i++; P0=image[1];break;case 2: ADDR0=0; ADDR1=1; ADDR2=0;i++;P0=image[2];break;case 3: ADDR0=1; ADDR1=1; ADDR2=0;i++; P0=image[3];break; //动态刷新case 4: ADDR0=0; ADDR1=0; ADDR2=1;i++; P0=image[4];break;case 5: ADDR0=1; ADDR1=0; ADDR2=1;i++;P0=image[5];break;case 6: ADDR0=0; ADDR1=1; ADDR2=1;i++; P0=image[6];break;case 7: ADDR0=1; ADDR1=1; ADDR2=1;i=0;P0=image[7];break;default: break;}}。