16×16点阵LED显示屏整个过程及C语言程序

合集下载

16×16点阵LED显示屏整个过程及C语言程序

16×16点阵LED显示屏整个过程及C语言程序

16×16点阵L‎E D显示屏‎整个过程及‎C语言程序‎7.1功能要求‎设计一个室‎内用16×16点阵L‎E D图文显‎示屏,要求在目测‎条件下LE‎D显示屏各‎点亮度均匀‎、充足,可显示图形‎和文字,显示图形或‎文字应稳定‎、清晰无串扰‎。

图形或文字‎显示有静止‎、移入移出等‎显示方式。

7.2方案论证‎从理论上说‎,不论显示图‎形还是文字‎,只要控制与‎组成这些图‎形或文字的‎各个点所在‎位置相对应‎的LED器‎件发光,就可以得到‎我们想要的‎显示结果,这种同时控‎制各个发光‎点亮灭的方‎法称为静态‎驱动显示方‎式。

16×16的点阵‎共有256‎个发光二极‎管,显然单片机‎没有这么多‎端口,如果我们采‎用锁存器来‎扩展端口,按8位的锁‎存器来计算‎,16×16的点阵‎需要256‎/8=32个锁存‎器。

这个数字很‎庞大,因为我们仅‎仅是16×16的点阵‎,在实际应用‎中的显示屏‎往往要大的‎多,这样在锁存‎器上花的成‎本将是一个‎很庞大的数‎字。

因此在实际‎应用中的显‎示屏几乎都‎不采用这种‎设计,而采用另一‎种称为动态‎扫描的显示‎方法。

动态扫描的‎意思简单地‎说就是逐行‎轮流点亮,这样扫描驱‎动电路就可‎以实现多行‎(比如16行‎)的同名列共‎用一套列驱‎动器。

具体就16‎×16的点阵‎来说,我们把所有‎同一行的发‎光管的阳极‎连在一起,把所有同一‎列的发光管‎的阴极连在‎一起(共阳的接法‎),先送出对应‎第一行发光‎管亮灭的数‎据并锁存,然后选通第‎一行使其燃‎亮一定的时‎间,然后熄灭;再送出第二‎行的数据并‎锁存,然后选通第‎二行使其燃‎亮相同的时‎间,然后熄灭;……第十六行之‎后又重新燃‎亮第一行,这样反复轮‎回。

当这样轮回‎的速度足够‎快(每秒24次‎以上),由于人眼的‎视觉暂留现‎象,我们就能看‎到显示屏上‎稳定的图形‎了。

16×16点阵LED显示屏整个过程及C语言程序

16×16点阵LED显示屏整个过程及C语言程序

16×16点阵LED显示屏整个过程及C语言程序7.1功能要求设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。

图形或文字显示有静止、移入移出等显示方式。

7.2方案论证从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。

16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。

这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本将是一个很庞大的数字。

因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。

具体就16×16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;……第十六行之后又重新燃亮第一行,这样反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。

采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。

显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。

显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。

《嵌入式技术应用开发项目教程》项目10 16x16的LED点阵显示设计

《嵌入式技术应用开发项目教程》项目10 16x16的LED点阵显示设计
8×8 LED点阵汉字显示采用 8×8点阵、宋体、纵向取模、字节倒 序、十六进制数等方式,使用字模提 取V2.1 CopyLeft By Horse2000软 件来获取数字“0”的字模
任务25 8×8的LED点阵显示设计
3.8×8的LED点阵显示设计与实现
3) 移植任务9工程
移植工程模板
(1)复制“任务9 OLED显示设计”文件夹。 (2)修改文件夹名为“任务25 8×8的LED点阵显示设计。 (3)USER文件夹下的“M0_ OLED.uvprojx”工程名修改为 “8×8LED0.uvprojx。
2.移植任务25工程
(1)复制“任务25 8×8的LED点阵显示设计”文件夹。 (2)修改文件夹名为“【技能训练10-1】8×8LED点阵循环显示0~9”。 (3)USER文件夹下的“8×8LED0.uvprojx”工程名修改为“8×8LED.uvprojx”。
【技能训练10-1】8×8LED点阵循环显示0~9
4) 程序设计
字形库代码
任务26 16×16的LED点阵显示设计
3.16×16的LED点阵显示设计与实现
5) 硬件和软件联调
(1)编写好C语言程序后,我们就可以直接对工程进行编译了,生成相 应的hex文件,即目标代码文件。若编译发生错误,要进行分析检查,直到编 译正确。
1)静态显示方式
同时控制各个LED亮灭的方式称为静态显示方式。8×8LED点阵共有64个LED,这就需要64 个单片机I/O引脚。而实际应用中的显示屏往往要比8×8点阵大得多,如果采用静态显示方式,则 需要更多的单片机I/O引脚,这显然是不现实的,所以在实际中大多采用动态显示方式。
认识LED点阵显示模块
1.LED点阵显示模块结构

16×16LED点阵屏原理图及驱动程序

16×16LED点阵屏原理图及驱动程序

16×16LED点阵屏原理图及驱动程序这是我玩LED点阵屏的第一块电路板,也是学习单片机入门的第一个实验器材。

它由4片30mm×30mm的8×8红色高亮点阵模块与两片74HC595、两片74HC138、16只8550晶体管、一片74HC244集装在一块宽高65mm×210mm的双面PCB板上,它应该是一组级联安装的LED 屏的一个单元模块,拿到它时,我正在学习《无线电》杂志2007/11期刊上杜洋的一组文章,刚刚做好了ISP下载线,只做了“一个发光二极管的控制实验”,面对这个既好玩又陌生的玩意,真是无从下手,通过上网学习,解析研究,前后弄了两个多月,最后在《无线电》杂志2005/12期的配文程序的帮助下,终于踏进了点阵控制的门槛,两年过去了,我又玩了许多单片机控制器件,但这块屏却一直摆在我的桌案上,每当遇到难题时,看看它那稳定清晰的显示,我都能找到许多灵感;最近、在摆弄一块并行驱动的16×64点阵屏时(前几篇文章介绍了)时,因为用的还是这段程序,就又想起了它,虽然程序已经详解过了,但是,为了留记一段经历、一段回忆,决定还是“貂续狗尾”写在这里,留着自己欣赏吧。

一.原理图:二.汉字左右移动驱动程序/****************************************************************************** ********16×16LED点阵屏原理图及C源汉字左右移动显示驱动程序————wannenggong单片机:AT89S52引脚说明:P0.0/P0.1/P0.2/P0.3控制由两片74HC138组成的行驱动控制4-16译码器的A/B/C/D端P1.0/P1.1控制列驱动控制74HC595的OE/ST端,595的14脚(DS)经244连接RXD,595的12脚(SH)经244连接TXD。

单片机课程设计16×16led点阵显示

单片机课程设计16×16led点阵显示

16×16LED点阵显示摘要单片微型计算机(single chip microcomputer)简称单片机,它是为各类专用控制器而设计的通用或专用微型计算机系统,高密度集成了普通计算机微处理器,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的。

单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。

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

在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字,汉字显示屏也广泛应用到汽车报站器,广告屏等。

所以研究LED显示有实用的意义。

LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。

本设计是4个16×16点阵LED电子显示屏的设计。

整机以美国ATMEL公司生产的40脚单片机AT89C51为核心,介绍了以它为控制系统的LED点阵电子显示屏的动态设计和开发过程。

通过该芯片控制一个行驱动器74LS154和八个列驱动器74HC595来驱动显示屏显示。

该电子显示屏可以显示各种文字或单色图像,全屏能显示4个汉字,采用16块8 x 8点阵LED显示模块来组成4个16x16点阵显示模式。

显示采用动态显示,使得图形或文字能够实现静止、移入移出等多种显示方式。

文中详细介绍了LED点阵显示的硬件设计思路、硬件电路各个部分的功能及原理、相应软件的程序设计,以及使用说明等。

关键词:AT89C51单片机 LED 16*16点阵显示动态显示目录第一章绪论 (1)1.1 设计课题背景知识 (1)1.2 问题提出 (3)1.3 LED显示屏的发展 (4)第二章功能要求及方案论证 (6)2.1 功能要求 (6)2.1 功能要求 (6)第三章系统电路的设计 (9)3.1 设计框图及介绍 (9)3.2 51系列单片机简介 (9)3.3 单片机最小应用系统电路设计 (13)3.4 LED点阵介绍 (14)3.5 LED显示方式 (14)3.6 点阵的移动 (17)3.7 点阵的颜色 (21)3.8 LED阵列驱动电路 (21)3.9 单片机延时子程序 (22)第四章系统程序的设计 (24)4.1 显示驱动程序 (24)4.2 系统主程序 (25)第五章调试及性能分析 (32)5.1 开发环境介绍 (32)5.2 理论性能分析 (32)5.3 系统调试 (33)第六章总结 (34)致谢 (35)附录 (36)一. 程序代码 (36)系统主程序 (37)二.主要芯片介绍 (42)三.点阵左移显示的流程图 (46)四.元件清单 (47)五.参考文献 (47)六.仿真电路图 (48)第一章绪论1.1 设计课题背景知识单片微型计算机(single chip microcomputer)简称单片机,它是为各类专用控制器而设计的通用或专用微型计算机系统,高密度集成了普通计算机微处理器,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的。

16×16点阵显示汇编程序

16×16点阵显示汇编程序

ORG 0000HAJMP READYORG 000BHAJMP INT_0;只需更改点阵数据和要显示的总字数READY:MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV SP,#70HMOV 36H,#2DMOV 37H,#00H;************************************************ MOV 3AH,#17D ;设置要显示的总字数;************************************************ LCALL DATA_CHUSHISETB EASETB ET0MOV TMOD,#01HMOV TH0,#0A6HMOV TL0,#00HSETB TR0;主程序MAIN:ACALL DISP_READYACALL KEYAJMP MAIN;*********************************************** DA TA_CHUSHI:MOV 35H,#00HMOV 38H,#00HMOV 39H,#01H ;初始化时已显示第一个字MOV 3BH,#0A0H ;暂存r0指向地址MOV DPTR,#DATA1MOV R0,#0A0H ;点阵数据存放地址MOV 30H,#32D ;数据字节数SEND_DATA0:MOV A,#00HMOVC A,@A+DPTRMOV @R0,AINC R0INC DPTRDJNZ 30H,SEND_DA TA0;*********************************************** MOV R0,#0C0H ;点阵数据存放地址MOV 30H,#32D ;数据字节数SEND_DATA1:MOV A,#00HMOVC A,@A+DPTRMOV @R0,AINC R0INC DPTRDJNZ 30H,SEND_DA TA1;*********************************************** MOV DPTR,#DATA1+32MOV R0,#80H ;点阵数据存放地址MOV 30H,#32D ;数据字节数SEND_DATA2:MOV A,#00HMOVC A,@A+DPTRMOV @R0,AINC R0INC DPTRDJNZ 30H,SEND_DA TA2RET;*********************************************** KEY:MOV P3,#0FFHMOV A,P3ANL A,#00000011BCJNE A,#00000011B,KEY_PANDUANRETKEY_PANDUAN:MOV 34H,AACALL KEY_DELAYMOV A,P3ANL A,#00000011BCJNE A,34H,KEY_EXITACALL KEY_CHULIKEY_EXIT: RET;***************************KEY_CHULI:JB ACC.0,KEY_2MOV A,37HADD A,#40HMOV 37H,ALCALL DATA_CHUSHIRETKEY_2: JB ACC.1,KEY_CHULI_EXITINC 36HINC 36HMOV A,36HCJNE A,#14D,CHANGE_36HMOV A,#2DCHANGE_36H:MOV 36H,AMOV 35H,#00HRETKEY_CHULI_EXIT:RET;*************************** KEY_DELAY:DL Y_LP1: MOV R1,#20MOV R6,#50DL Y_LP2:NOPNOPNOPDJNZ R6,DL Y_LP2DJNZ R7,DL Y_LP1END_DL YMS:RET;***************************;显示程序DISP_READY:MOV R0,3BHMOV 30H,#16DMOV 31H,#00HDISP:MOV A,@R0MOV P0,AINC R0MOV A,@R0MOV P2,AMOV P1,31HACALL DISP_DELAYMOV P0,#00HMOV P1,#0FFHMOV P2,#00HINC 31HINC R0DJNZ 30H,DISPDISP_EXIT:RET;显示延时DISP_DELAY:MOV 32H,#2D1:MOV 33H,#150DJNZ 33H,$DJNZ 32H,D1RET;中断处理程序INT_0:PUSH ACCMOV TH0,#0A6HMOV TL0,#00HINC 35HMOV A,35HCJNE A,36H,INT0_EXITMOV 35H,#00HACALL WHICH_WAYINT0_EXIT:POP ACCRETI;********************************************* WHICH_W AY:MOV A,37HCJNE A,#00H,WAY2ACALL YIDONG1RETWAY2: CJNE A,#40H,WAY3ACALL YIDONG2RETWAY3: CJNE A,#80H,WAY4ACALL YIDONG3RETWAY4: ACALL YIDONG4RET;********************************************* YIDONG1: MOV 50H,#0A1HMOV 51H,#0C1HMOV 3CH,#16DINC 38HMOV A,38HCJNE A,#16D,YIDONG1_THEN1MOV 38H,#00HINC 39HMOV A,39HCJNE A,3AH,YIDONG1_THENMOV 39H,#00HMOV DPTR,#DATA1YIDONG1_THEN:MOV 3CH,#32DMOV R1,#0C0HYIDONG1_SEND_DA TA:MOV A,#00HMOVC A,@A+DPTRMOV @R1,AINC R1INC DPTRDJNZ 3CH,YIDONG1_SEND_DA TAMOV 3CH,#16DYIDONG1_THEN1:MOV R1,51HMOV A,@R1RLC AMOV @R1,ADEC R1MOV A,@R1RLC AMOV @R1,AMOV R1,50HMOV A,@R1RLC AMOV @R1,ADEC R1MOV A,@R1RLC AMOV @R1,AINC 50HINC 50HINC 51HINC 51HDJNZ 3CH,YIDONG1_THEN1RET;********************************************* YIDONG2:MOV 50H,#0A0HMOV 51H,#80HMOV 3CH,#16DINC 38HMOV A,38HCJNE A,#16D,YIDONG2_THEN1MOV 38H,#00HINC 39HMOV A,39HCJNE A,3AH,YIDONG2_THENMOV 39H,#00HMOV DPTR,#DA TA1YIDONG2_THEN:MOV 3CH,#32DMOV R1,#80HYIDONG2_SEND_DA TA:MOV A,#00HMOVC A,@A+DPTRMOV @R1,AINC R1INC DPTRDJNZ 3CH,YIDONG2_SEND_DATAMOV 3CH,#16DYIDONG2_THEN1:MOV R1,51HMOV A,@R1RRC AMOV @R1,AINC R1MOV A,@R1RRC AMOV @R1,AMOV R1,50HMOV A,@R1RRC AMOV @R1,AINC R1MOV A,@R1RRC AMOV @R1,AINC 50HINC 50HINC 51HINC 51HDJNZ 3CH,YIDONG2_THEN1RET;********************************************* YIDONG3:INC 3BHINC 3BHMOV 30H,#01HINC 38HMOV A,38HCJNE A,#16D,YIDONG3_EXITMOV 3BH,#0A0HMOV 38H,#00HMOV 3CH,#32DMOV 50H,#0A0HMOV 51H,#0C0HYIDONG3_LOOP:MOV R1,51HMOV A,@R1MOV R1,50HMOV @R1,AINC 50HINC 51HDJNZ 3CH,YIDONG3_LOOPINC 39HMOV A,39HCJNE A,3AH,YIDONG3_THENMOV 39H,#00HMOV DPTR,#DATA1YIDONG3_THEN:MOV R1,#0C0HMOV 3CH,#32DYIDONG3_THEN2:MOV A,#00HMOVC A,@A+DPTRMOV @R1,AINC R1INC DPTRDJNZ 3CH,YIDONG3_THEN2 YIDONG3_EXIT:RET;********************************************* YIDONG4:DEC 3BHDEC 3BHMOV 30H,#01HINC 38HMOV A,38HCJNE A,#16D,YIDONG4_EXITMOV 3BH,#0A0HMOV 38H,#00HMOV 3CH,#32DMOV 50H,#0A0HMOV 51H,#80HYIDONG4_LOOP:MOV R1,51HMOV A,@R1MOV R1,50HMOV @R1,AINC 50HINC 51HDJNZ 3CH,YIDONG4_LOOPINC 39HMOV A,39HCJNE A,3AH,YIDONG4_THENMOV 39H,#00HMOV DPTR,#DATA1YIDONG4_THEN:MOV R1,#80HMOV 3CH,#32DYIDONG4_THEN2:MOV A,#00HMOVC A,@A+DPTRMOV @R1,AINC R1INC DPTRDJNZ 3CH,YIDONG4_THEN2YIDONG4_EXIT:RET;*********************************************DA TA1:DB00H,00H,03H,00H,73H,7EH,13H,66H,0FH,0E6H,4FH,0E6H,73H,7EH,17H,66H,07H,0E6H,37H ,0FEH,3FH,66H,2BH,66H,23H,66H,63H,7EH,63H,66H,00H,00HDB00H,00H,0FH,0FEH,7FH,0FEH,30H,0B0H,07H,0FEH,44H,0B6H,67H,0FEH,33H,0FCH,07H,0F CH,17H,0FCH,16H,04H,37H,0FCH,36H,62H,6FH,0FFH,20H,60H,00H,60HDB00H,00H,7EH,00H,7FH,0FCH,24H,84H,3CH,84H,3CH,84H,24H,84H,24H,84H,3CH,0FCH,24H ,00H,27H,48H,7FH,6CH,74H,0C6H,05H,86H,05H,02H,00H,00HDB00H,00H,06H,60H,06H,60H,06H,60H,66H,64H,26H,6CH,36H,6CH,36H,6CH,16H,68H,1EH,78 H,16H,60H,06H,60H,06H,60H,7FH,0FEH,7FH,0FEH,00H,00HDB00H,00H,18H,60H,18H,60H,1BH,0FEH,7DH,0FEH,7CH,60H,19H,60H,1BH,0FCH,3CH,8CH,7 8H,0C8H,18H,0D8H,18H,70H,18H,70H,3BH,0DEH,33H,06H,00H,00HDB00H,00H,01H,90H,01H,98H,01H,88H,7FH,0FEH,7FH,0FEH,03H,0C0H,07H,0C0H,05H,0E0H,0 DH,0B0H,19H,98H,31H,9CH,61H,8EH,01H,80H,01H,80H,00H,00HDB00H,00H,19H,98H,19H,98H,08H,30H,7FH,0FEH,60H,06H,60H,06H,1FH,0F8H,00H,0F0H,00H, 80H,7FH,0FEH,40H,80H,00H,80H,00H,80H,03H,80H,00H,00HDB00H,00H,00H,60H,7CH,20H,6BH,0FEH,6BH,02H,79H,04H,79H,0FCH,68H,00H,6FH,0FEH,64 H,0D0H,7CH,0D0H,78H,0D0H,60H,92H,63H,13H,66H,1EH,00H,00HDB00H,00H,18H,60H,18H,60H,17H,0FEH,30H,00H,33H,0FEH,70H,00H,53H,0FEH,12H,00H,10H,00H,13H,0FCH,13H,04H,13H,04H,13H,0FCH,13H,04H,00H,00HDB02H,00H,03H,00H,1FH,0F8H,10H,08H,1FH,0F8H,10H,08H,1FH,0F8H,10H,08H,1FH,0F8H,00 H,00H,0DH,88H,2CH,0CCH,6CH,16H,64H,30H,07H,0E0H,00H,00HDB00H,00H,00H,00H,3FH,0FCH,21H,84H,01H,80H,01H,80H,01H,80H,01H,80H,01H,80H,01H,80 H,01H,80H,01H,80H,41H,82H,7FH,0FEH,00H,00H,00H,00HDB00H,00H,0CH,00H,7DH,0FCH,19H,84H,19H,84H,7FH,0FCH,7CH,00H,19H,0FCH,3DH,0FEH, 3EH,20H,79H,0FCH,59H,0FCH,18H,20H,19H,0FEH,1BH,0FEH,00H,00HDB00H,00H,00H,7CH,3FH,0F0H,03H,80H,06H,38H,1FH,0E0H,1FH,90H,07H,18H,3DH,0FCH,1F H,0FEH,00H,90H,1CH,98H,30H,8CH,63H,86H,03H,80H,00H,00HDB00H,00H,00H,0C0H,00H,0C0H,7EH,0FEH,06H,0FEH,25H,84H,35H,2CH,1CH,20H,18H,60H,1 CH,70H,16H,70H,36H,0D8H,60H,0CCH,63H,86H,03H,02H,00H,00HDB00H,00H,20H,80H,33H,0BEH,32H,26H,12H,26H,02H,26H,72H,26H,12H,26H,12H,26H,13H,0A 6H,17H,0ACH,12H,20H,10H,20H,3FH,0FEH,41H,0FEH,00H,00HDB00H,00H,08H,0C0H,19H,0FCH,3BH,0FCH,3EH,6CH,58H,60H,19H,68H,1BH,64H,1EH,0E2H,1 8H,0C0H,04H,88H,34H,0CCH,34H,16H,27H,0F0H,27H,0F0H,00H,00HDB00H,00H,00H,00H,04H,00H,0EH,00H,0EH,00H,0EH,00H,0EH,00H,0EH,00H,0EH,00H,04H,00 H,00H,00H,0EH,00H,0EH,00H,00H,00H,00H,00H,00H,00HEND。

16灯彩色旋转LED文字显示程序

16灯彩色旋转LED文字显示程序

16灯彩色旋转LED文字显示程序背景介绍随着科技的发展,LED(Light Emitting Diode)已经成为了现代照明领域中的主流技术之一。

LED显示屏的出现更是推动了LED应用的发展。

而LED旋转屏则是LED显示屏中的一种,其特点是能够旋转,从而实现更加生动、多彩的展示效果。

本文将介绍使用C语言编写的16灯彩色旋转LED文字显示程序。

技术实现硬件设备•环型LED灯带•单片机开发板•驱动模块•电源软件实现1. 环形缓存数组旋转屏最重要的组成部分就是屏幕显示区域,这是由16个灯组成的环形区域。

在编写程序之前,我们需要创建一个用于缓存屏幕数据的数组。

在本程序中,我们创建了一个包含16个元素的环形缓存数组。

#define LED_NUM 16uint8_t led_buf[LED_NUM] = {0}; // 环形缓存数组2. 输入字符串解析用户需要输入要显示的字符串,这个字符串可能是为了展示效果而包含彩色字体和特殊字符。

在编写程序前,需要对用户输入的字符串进行解析。

在本程序中,我们创建了一个函数parse_string()来完成字符串解析的任务。

void parse_string(char* str, uint8_t* buf, uint8_t* len){// 解析字符串并将解析后的结果存储到缓存数组中}3. 显示效果实现我们实现了两种显示效果:左向推入效果和旋转效果。

左向推入效果的实现代码如下:// 左向推入void push_in(uint8_t* buf, uint8_t len){for(int i=0;i<LED_NUM;i++){for(int j=0;j<len;j++){led_buf[i] = buf[j];delay_ms(50);}}}旋转效果的实现代码如下:// 环形旋转void led_rotate(void){uint8_t tmp_buf[LED_NUM] = {0};for(int i=0; i<LED_NUM; i++){delay_ms(20);for(int j=0; j<LED_NUM; j++){tmp_buf[(j+1)%LED_NUM] = led_buf[j];}for(int j=0; j<LED_NUM; j++){led_buf[j] = tmp_buf[j];}}}4. 常用函数在本程序中,我们还实现了一些常用的函数,用于辅助实现程序功能。

实验四 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显示屏上滚动显示“单片机实验室欢迎您”。

16×16LED点阵汉字分批显示器的Proteus软件仿真

16×16LED点阵汉字分批显示器的Proteus软件仿真

O引言Proteus是目前最先进、最完整的多种型号微处理器系统的仿真设计平台,由ISIS和ARES两个构成,其中ISIS是一款智能电路原理图输入系统软件,可作为电子系统仿真平台,ARES是一款高级布线编辑软件,用于制作PCB印制电路板。

开发者可以在无硬件条件下直接使用Pro-teus进行电路设计和仿真调试,真正实现了在计算机中完成电路原理图设计、电路分析与仿真、系统测试到形成印制电路板的完整电子设计、研发过程。

因此,本课题利用AT89C5l单片机作为主控制器,采用Proteus软件实现对16×16LED点阵汉字的分批显示.仿真运行通过后再进行点阵显示电路制作,大大缩减实际开发周期,节约了开发成本。

1硬件电路设计在很多LED显示的场合,需要实现一系列LED点阵汉字的分批显示,为简化设计,每批只显示2个汉字,分若干次完成全部显示。

利用ProteusISIS平台画出的硬件电路如图l所示。

该硬件电路的核心是利用单片机读取显示字型码,通过驱动电路对16×16共阴极LED点阵进行动态列扫描,以实现点阵汉字的分批显示。

设计选用的单片机为Atrnel公司的AT89C51,它是一种低功耗,高性能CMOS8位单片机,片内含4KB可反复擦写的FLASHROM,采用Atmel公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及8051引脚结构,内置看门狗电路。

功能强大的AT89C5l可为许多嵌入式控制应用系统提供高性价比的解决方案。

时钟电路用于产生单片机工作时所必需的时钟信号,其中晶振频率为12MHz。

上电复位电路可保证单片机的在程序运行出错或操作错误使系统处于死锁状态时,重启运行。

显示单元是LED汉字显示屏,由2片16×16LED点阵模块组成。

但由于Proteus软件目前版本中还没有16×16点阵模块,设计中采用Pro-teus软件中的4个8×8点阵模块组合成1个16×16点阵模块。

基于单片机16-16点阵led程序

基于单片机16-16点阵led程序

/*16*16点阵屏的显示*/#include <reg51.h>#include <intrins.h>#define DA TAOUT P2 //指定P2口做为输出sbit DA TA=DA TAOUT^0; //列数据输出位sbit SCL=DA TAOUT^1;//列扫描时钟位sbit SCLT=DA TAOUT^2; //列数据锁存位sbit AB=DA TAOUT^4; //行数据输出位sbit SCK=DA TAOUT^5; //行扫描时钟位unsigned char lhj[32];//32字节RAM做为16*16点阵屏显示缓存void display();//做为点阵扫描函数,将显示缓存的数据输出到点阵屏void displayS(unsigned int timer);//指定时间扫描显示code unsigned char hua[32]={//华0x04,0x40,0x04,0x48,0x08,0x58,0x08,0x60,0x18,0x0C0,0x29,0x40,0x4A,0x44,0x08,0x44,0x09,0x3C,0x01,0x00,0x0FF,0x0FE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00};code unsigned char bei[32]={//北0x04,0x80,0x04,0x80,0x04,0x88,0x04,0x98,0x04,0x0A0,0x7C,0x0C0,0x04,0x80,0x04,0x80,0x04,0x80,0x04,0x80,0x04,0x80,0x04,0x80,0x1C,0x82,0x0E4,0x82,0x44,0x7E,0x00,0x00,};code unsigned char shui[32]={//水0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x08,0x01,0x18,0x7D,0x20,0x05,0x0C0,0x05,0x80,0x09,0x40,0x09,0x20,0x11,0x10,0x21,0x0E,0x41,0x04,0x81,0x00,0x05,0x00,0x02,0x00,};code unsigned char li[32]={//利0x01,0x04,0x07,0x84,0x7C,0x04,0x04,0x24,0x04,0x24,0x05,0x24,0x0FF,0x0A4,0x0C,0x24,0x0E,0x24,0x15,0x0A4,0x14,0x0A4,0x24,0x24,0x44,0x04,0x04,0x04,0x04,0x14,0x04,0x08,};code unsigned char dian[32]={//电0x42,0x10,0x42,0x10,0x7F,0x0F0,0x42,0x10,0x42,0x10,0x7F,0x0F0,0x42,0x10,0x02,0x00,0x02,0x04,0x02,0x04,0x01,0x0FC,0x00,0x00,};code unsigned char xue[32]={//学0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0x0FE,0x40,0x02,0x80,0x04,0x1F,0x0E0,0x00,0x40,0x01,0x84,0x0FF,0x0FE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,};code unsigned char yuan[32]={//院0x00,0x80,0x78,0x40,0x4F,0x0FE,0x54,0x02,0x58,0x14,0x63,0x0F8,0x50,0x00,0x48,0x08,0x4F,0x0FC,0x48,0x0A0,0x68,0x0A0,0x50,0x0A0, 0x41,0x22,0x41,0x22,0x42,0x1E,0x4C,0x00,};code unsigned char er[32]={//二0x00,0x00,0x00,0x00,0x00,0x10,0x3F,0x0F8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0FF,0x0FE,0x00,0x00,0x00,0x00,0x00,0x00,};code unsigned char ling[32]={//零0x1F,0x0F0,0x01,0x00,0x7F,0x0FE,0x41,0x02,0x9D,0x74,0x01,0x00,0x1D,0x70,0x02,0x80,0x0C,0x60,0x32,0x18,0x0C1,0x06,0x0F,0x0E0,0x00,0x40,0x02,0x80,0x01,0x00,0x00,0x80,};code unsigned char ba[32]={//八0x00,0x00,0x00,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0x10,0x08,0x20,0x0E,0x40,0x04,0x00,0x00,};code unsigned char ji[32]={//级0x10,0x08,0x17,0x0FC,0x21,0x08,0x21,0x08,0x49,0x10,0x0F9,0x10,0x11,0x3C,0x21,0x84,0x41,0x88,0x0F9,0x48,0x02,0x50,0x02,0x20,0x1A,0x50,0x0E4,0x88,0x49,0x0E,0x02,0x04,};code unsigned char yi[32]={//一0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};code unsigned char ban[32]={//班0x01,0x00,0x09,0x04,0x0FD,0x7E,0x21,0x10,0x25,0x10,0x25,0x10,0x25,0x10,0x0F5,0x7C,0x25,0x10,0x29,0x10,0x21,0x10,0x22,0x10,0x3A,0x10,0x0E2,0x14,0x44,0x0FE,0x08,0x00,};code unsigned char hou[32]={//侯0x08,0x10,0x0B,0x0F8,0x08,0x10,0x10,0x10,0x17,0x0FC,0x32,0x00,0x52,0x08,0x93,0x0FC, 0x14,0x40,0x10,0x44,0x1F,0x0FE,0x10,0x40,0x10,0x0A0,0x10,0x90,0x11,0x0E,0x16,0x04,};code unsigned char yu[32]={//玉0x00,0x08,0x7F,0x0FC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x10,0x3F,0x0F8,0x01,0x00,0x01,0x00,0x01,0x40,0x01,0x30,0x01,0x10,0x01,0x04,0x0FF,0x0FE,0x00,0x00,};code unsigned char lon[32]={//龙0x02,0x00,0x02,0x40,0x02,0x20,0x02,0x04,0x0FF,0x0FE,0x02,0x80,0x02,0x88,0x04,0x88, 0x04,0x90,0x04,0x0A0,0x08,0x0C0,0x08,0x82, 0x11,0x82,0x16,0x82,0x20,0x7E,0x40,0x00,};code unsigned char LY[32]={//图案数据0x00,0x00,0x30,0x00,0x30,0x20,0x30,0x30,0x30,0x18,0x30,0x0C,0x30,0x06,0x3F,0x7F,0x3F,0x7F,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x20,0x00,0x00,0x00,0x00};code unsigned char kong[32]={//清零0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};void main(void) //主入口函数{unsigned char i=0,j=0;while(1){for(i=0;i<32;i++)lhj[i]=LY[i];//将图案数据复制到显示缓存displayS(2); //显示图案约2秒for(i=0;i<32;i++)lhj[i]=hua[i];//将"华"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=bei[i];//将"北"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=shui[i];//将"水"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=li[i];//将"利"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=shui[i];//将"水"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=dian[i];//将"电"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=xue[i];//将"学"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=yuan[i];//将"院"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=er[i];//将"二"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=ling[i];//将"零"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=kong[i];//将清零数据复制到显示缓存displayS(1); //显示约1秒for(i=0;i<32;i++)lhj[i]=ling[i];//将"零"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=ba[i];//将"八"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=ji[i];//将"级"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=yi[i];//将"一"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=kong[i];//将清零数据复制到显示缓存displayS(1); //显示约1秒for(i=0;i<32;i++)lhj[i]=yi[i];//将"一"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=kong[i];//将清零数据复制到显示缓存displayS(1); //显示约1秒for(i=0;i<32;i++)lhj[i]=yi[i];//将"一"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=ban[i];//将"班"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=hou[i];//将"侯"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=yu[i];//将"玉"字数据复制到显示缓存displayS(2); //显示约2秒for(i=0;i<32;i++)lhj[i]=lon[i];//将"龙"字数据复制到显示缓存displayS(2); //显示约2秒}}void displayS(unsigned int timer) //指定时间扫描显示{unsigned char i;while(timer--){ //当timer=1时,大约1秒时间i=130;while(i--)display();}}void display()//显示{unsigned char i,ia,j,tmp; //定义变量DA TAOUT=0XFF; //置位高电平做准备AB=0; //将行数据位清0,准备移位for(i=0;i<16;i++){ //循环输出16行数据SCK=0; //为行移位做准备SCLT=0; //为列锁存做准备for(ia=2;ia>0;){ //每行16个点,循环位移两个字节ia--; //循环两次tmp=~lhj[i*2+ia]; //读取点阵数据做输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成,//电路中的移位寄存器最后一位对应最后一列,所以要先输出一行中的第二个字节数据for(j=0;j<8;j++){ //循环两次,每次移一个字节,SCL=0; //为列移位做准备DA TA=tmp&0x01; //将数据低位做输出,由电路图可知,移位寄存器的最后一位对应最后一列,因此先移最后一位tmp>>=1; //将数据缓冲右移一位,为下次输出做准备SCL=1; //将DA TA上的数据移入寄存器} //移入单字节结束} //移入两个字节结束DA TAOUT|=0X24; //此句可以用以下两句来理解,如果不将两句合为一句,将出现拖影现像//SCK=1; //SCK拉高,行数据移位,相应行拉低,三极管导通输出电量到相应行点阵管阳极(共阳)//SCLT=1; //SCLT拉高,将数据锁存输出到相应列的点阵发光管显示,显示一行后将保持到下一行显示开始AB=1; //行数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从第一位开始一直移位最后一位,//移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱}j=64;while(j--); //每一行的显示,保持两个字节的移位时间,因此,最后一行的显示,也要加入保持时间,补尝显示的亮度SCK=0; //SCK=1; //将最后一行数据移出}。

基于51单片机的16乘16点阵汉字显示设计

基于51单片机的16乘16点阵汉字显示设计

SendLeft(chinese[i+k]);
SendRight(chinese[num*16+i+k+15]);
ChooseColumn(i+1);
//
ChooseColumn(16-i);
DelayMs_12M(1); } } } }
//不需修改代码 只需前后加空格代码 //流动显示 需补充代码 //speed200 大概是 4 秒 一般取 4 //num<2000 void FlowDisplayBetter(uchar chinese[],uchar num,uchar speed) {
sbit upa=P2^1; sbit upb=P2^2; sbit upc=P2^3; sbit upg=P2^0;
sbit downa=P0^6; sbit downb=P0^7; sbit downc=P2^7; sbit downg=P1^0;
uchar code chinese1[]; uchar code chinese2[]; uchar code chinese3[]; uchar code title[]; uchar code collectiveShow1[]; uchar code testCode[];
main() {
Init(); while(1) {
//
SendLed(0x00);
DisplayChinese(chinese2,3,60);
FlowDisplay(title,14,3);
FlowDisplayBetter(testCode,3,3);
DelayMs_12M(10);
//
SendLed(0xff);

16乘16点阵LED电子显示屏的设计

16乘16点阵LED电子显示屏的设计

邢台职业技术学校Xingtai Polytechnic Institute 毕业设计(论文)题目16×16点阵LED电子显示屏的设计班级应电081姓名杨艳德指导教师唐俊英16×16点阵LED电子显示屏的设计目录摘要 (3)关键词 (3)前言 (4)1.背景介绍 (5)1.1 LED及LED显示屏 (5)1.2 MCS-51系列单片机简介 (6)1.2.1 MCS-51系列单片机及其特点 (6)1.2.2 单片机的发展历史简介 (6)3.功能要求 (7)4.方案实现 (7)4.1 系统硬件电路的设计 (8)4.1.1单片机系统及外围电路 (9)4.1.2列驱动电路 (9)4.2.系统程序的设计 (11)4.2.1显示驱动程序 (11)4.2.2系统主程序 (12)5性能分析 (19)5.1 性能分析 (19)总结 (20)摘要LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。

文章给出了一种基于MCS-51单片机的16×16 点阵LED显示屏的设计方案。

包括系统具体的硬件设计方案,软件流程图和部分汇编语言程序等方面。

在负载范围内, 只需通过简单的级联就可以对显示屏进行扩展,是一种成本低廉的图文显示方案。

关键词:MCS-51;LED;单片机前言LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。

在实际应用中的显示屏由于成本和可靠性的因素常采用一种称为动态扫描的显示方法。

本文设计的是一个室内用16x16的点阵LED图文显示屏,图形或文字显示有静止、移入移出等显示方式。

LED显示屏分为数码显示屏、图文显示屏和视频显示屏,均由LED矩阵块组成。

LED数码显示屏的显示器件为7段码数码管,适于制作时钟屏、利率屏等,显示数字的电子显示屏。

16215;16点阵led显示屏整个过程及c语言程序 (1)

16215;16点阵led显示屏整个过程及c语言程序 (1)

16×16点阵LED显示屏整个过程及C语言程序7.1功能要求设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。

图形或文字显示有静止、移入移出等显示方式。

7.2方案论证从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。

16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。

这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本将是一个很庞大的数字。

因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。

具体就16×16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;……第十六行之后又重新燃亮第一行,这样反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。

采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。

显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。

显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。

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)输入。

16×16点阵LED电子显示屏的设计

16×16点阵LED电子显示屏的设计

16×16点阵LED电子显示屏的设计The 16×16 lattice LED electron displaymonitor design摘要本设计是一16×16点阵LED电子显示屏的设计。

整机以美国ATMEL 公司生产的40脚单片机AT89C51为核心,介绍了以它为控制系统的LED点阵电子显示屏的动态设计和开发过程。

通过该芯片控制一个行驱动器74HC154和两个列驱动器74HC595来驱动显示屏显示。

该电子显示屏可以显示各种文字或单色图像,全屏能显示1个汉字,采用16*16点阵LED显示模块来组成16×16点阵显示模式。

显示采用动态显示,使得图形或文字能够实现静止、移入移出等多种显示方式。

文中详细介绍了LED点阵显示的硬件设计思路、硬件电路各个部分的功能及原理、相应软件的程序设计,以及使用说明等。

单片机控制系统程序采用单片机汇编语言进行编辑,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。

所显示字符的点阵数据可以自行编写(即直接点阵画图),也可从标准字库中提取。

LED显示以其组构方式灵活、显示稳定、功耗低、寿命长、技术成熟、成本低廉等特点在车站、证券所、运动场馆、交通干道及各种室内/外显示场合的信息发布,公益宣传,环境参数实时,重大活动倒计时等等得到广泛的应用。

经实践证明,该系统显示误差小,性能稳定,结构合理,扩展能力强。

关键词:AT89C51单片机;LED;点阵显示;动态显示;汇编语言。

AbstractThis design is a 16 ×16 lattice LED electron display monitor design.The whole equipment is with the 40-pin AT89C51 MCU (Micro Controller Unit) produced by the American ATMEL company at the core, introduced take it as the control system LED lattice electron display monitor dynamic design and the development process. Controls good driver 74HC154 and two row driver 74HC595 through this chip actuates the display monitor demonstration. The electronic screen can show all kinds of written or monochrome images, one full screen display Chinese characters, four pieces of 8×8 dot-matrix LED display modules to form the 16×16 dot matrix display mode. Show dynamic show that makes static graphic or text can be achieved, shifted out of various formats. This paper describes the hardware design of the LED dot matrix display, and the principle function of the various parts of the circuit, the corresponding software program design and the use of some such.SCM process control system used for editing MCU assembly language, Programming control points indicated by the corresponding LED anode and overcast extreme level. We can effectively control the defense showed bright spots. The lattice data shows characters can prepare themselves (that is, direct lattice Painting), which can also be extracted from the standard font.LED display with fabric means flexibility, stability, low power consumption, long life, mature technology, low-cost features at the station, securities, sports venues, transportation corridors and various indoor / dissemination of information on foreign shows occasions, good publicity, real-time environmental parameters, etc. countdown major activities are widely used.As the practice proves, the system possesses advantages in low shows errors, stable, rational structure and strong extensible abilities.Key words: AT89C51 Micro Controller Unit;LED;Lattice display;Dynamic display;Assembly language.目录摘要................................................................................................................................. 一ABSTRACT.................................................................................................................. 三第一章前言................................................................................................................. 六第二章系统整体设计方案 ......................................................................................... 七2.1需要实现的功能............................................................................................... 七2.2LED显示特点 .................................................................................................. 七2.3设计方案论证................................................................................................... 八2.3.1 显示模式方案....................................................................................... 八2.3.2 数据传输方案....................................................................................... 九第三章系统硬件部分设计 ......................................................................................... 十3.1电源设计........................................................................................................... 十3.2单片机系统及外围电路 ............................................................................... 十一3.2.1 单片机的选择................................................................................... 十一3.2.2 AT89C51芯片介绍........................................................................... 十一3.2.3 单片机系统外围电路 ....................................................................... 十四3.3列驱动电路................................................................................................... 十五3.4行驱动电路................................................................................................... 十七3.4.1 行驱动芯片74HC154 介绍............................................................. 十七3.4.2 行驱动电路....................................................................................... 十八3.5LED显示屏电路 .......................................................................................... 二十第四章系统软件部分设计 ................................................................................. 二十二4.1系统主程序............................................................................................... 二十二4.2显示驱动程序........................................................................................... 二十三第五章调试及性能分析 ..................................................................................... 二十五5.1软件调试................................................................................................... 二十五5.2硬件调试................................................................................................... 二十五5.3性能分析................................................................................................... 二十六结束语..................................................................................................................... 二十七致谢......................................................................................................................... 二十八附录一系统综合电路原理图 . (24)附录二系统程序清单 ............................................................................................. 三十主要参考文献......................................................................................................... 四十七第一章前言单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。

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。

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

16×16点阵LED显示屏整个过程及C语言程序7.1功能要求设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。

图形或文字显示有静止、移入移出等显示方式。

7.2方案论证从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。

16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。

这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本将是一个很庞大的数字。

因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。

具体就16×16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;……第十六行之后又重新燃亮第一行,这样反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。

采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。

显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。

显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。

从控制电路到列驱动器的数据传输可以采用并行方式或串行方式。

显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。

当列数很多时,并行传输的方案是不可取的。

采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。

但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。

这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两个部分。

对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以至影响到LED的亮度。

解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。

即在显示本行各列数据的同时,传送下一行的列数据。

为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。

经过上述分析,可以归纳出列驱动器电路应具备的主要功能。

对于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。

这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。

图7.1为显示屏电路实现的结构框图。

图7.1 显示屏电路框图7.3系统硬件电路的设计硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。

7.3.1单片机系统及外围电路单片机采用89C51或其兼容系列的芯片,采用24M或更高频率的晶振,以获得较高的刷新频率,使显示更稳定。

单片机的串口与列驱动器相连,用来送显示数据。

P1口低4位列驱动电路由集成电路74HC595构成,它具有一个8位串入并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。

74HC595的外形及内部结构如图7.3所示。

它的输入侧有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。

引脚SI是串行数据的输入端。

引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位。

移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。

RCK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入到输出锁存器。

引脚G是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高阻态。

SCLR信号是移位寄存器的清零输入端,当其为低时移位寄存器的输出全部为零。

由于SCK和RCK两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。

芯片的输出端为QA~QH,最高位QH可作为多片74HC595级联应用时,向上一级的级联输出。

但因QH受输出锁存器打入控制,所以还从输出锁存器前引出了QH’,作为与移位寄存器完全同步的级联输出。

图7.3 74HC595外形及内部逻辑结构图7.3.3行驱动电路单片机P1口低4位输出的行号经4/16线译码器74LS154译码后生成16条行选通信号线,再经过驱动器驱动对应的行线。

一条行线上要带动16列的LED进行显示,按每一LED 器件20mA电流计算,16个LED同时发光时,需要320mA电流,选用三极管8550作为驱动管可满足要求。

7.4系统程序的设计显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。

根据软件分层次设计的原理,我们可把显示屏的软件系统分成两大层:第一层是底层的显示驱动程序,第二层是上层的系统应用程序。

显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。

显示驱动程序由定时器T0中断程序实现。

系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。

从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,显示屏程序适宜采用C语言编写。

7.4.1显示驱动程序显示驱动程序在进入中断后首先要对定时器T0重新赋初值以保证显示屏刷新率的稳定,1/16扫描的显示屏的刷新率(帧频)的计算公式如下:)65536(1216116100t f T osc -⨯=⨯=溢出率刷新率(帧频) 式7-1 其中f osc 为晶振频率,t 0为定时器T0初值(工作在16位定时器模式)。

然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。

为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。

图7.4为显示驱动程序(显示屏扫描函数)流程图。

7.4.2系统主程序系统主程序开始以后首先是对系统环境初始化,包括设置串口、定时器、中断和端口。

然后以“卷帘出”效果显示一个图形(☺),停留约3秒,接着向上滚动显示“我爱单片机☺”五个汉字及一个图形,停留约3秒,再向左跑马显示“我爱单片机☺”这五个汉字及一个图形,然后以“卷帘入”效果隐去图形(☺)。

由于单片机没有停机指令,所以我们可以设置系统程序不断地循环执行上述显示效果。

图7.5是系统主程序的流程图。

7.5调试及性能分析LED 显示屏硬件电路只要器件质量可靠,管脚焊接正确,一般无需调试即可正常工作。

软件部分需要调试的主要有显示屏刷新频率及显示效果两部分。

显示屏刷新率由定时器T0的溢出率和单片机的晶振频率决定,表7.1给出了实验调试时采用的频率及其对应的定时器T0初值。

图7.4显示驱动程序流程图图7.5系统主程序流程图表7.1显示屏刷新率(帧频)与T0初值关系表(24M晶振)从理论上来说,24Hz以上的刷新率就能看到连续稳定的显示,刷新率越高,显示越稳定,同时刷新率越高,显示驱动程序占用的CPU时间也越多。

实验证明,在目测条件下刷新率40Hz以下的画面看起来闪烁较严重,刷新率50Hz以上的已基本觉察不出画面闪烁,刷新率达到85Hz以上时再增加画面闪烁将没有明显改善。

显示效果处理程序的内容及方法非常广泛,其调试过程在此不作具体讨论,读者可对照源程序自行分析。

这个方案设计的16×16点阵LED图文显示屏,电路简单,成本较低,且较容易扩展成更大的显示屏;显示屏各点亮度均匀、充足;显示图形或文字稳定、清晰无串扰;可用静止、移入移出等多种显示方式显示图形或文字。

7.6控制源程序清单以下是16×16点阵LED电子显示屏的源程序,分别采用C及汇编编写,C程序在Keil uVision2 V2.30(C51.exe V7.0)环境下调试通过。

/*--------------------------------------16×16点阵LED显示屏程序MCU A T89C51 XAL 24MHzBuilde by Gavin Hu, 2003.8.15--------------------------------------*/#include <reg51.h>#define BLKN 2 //列锁存器数sbit G = 0x97; //P1.7为显示允许控制信号端口sbit RCLK = 0x96; //P1.6为输出锁存器时钟信号端sbit SCLR = 0x95; //P1.5为移位寄存器清○端void delay(unsigned int); //延时函数unsigned char data dispram[32]; //显示缓存/*--------------------------------------主函数void main(void)--------------------------------------*/void main(void){unsigned char code Bmp[][32]={//字模表{0xF9,0xBF,0xC7,0xAF,0xF7,0xB7,0xF7,0xB7,0xF7,0xBF,0x00,0x01,0xF7,0xBF,0xF7,0xB7,0xF1,0xD7,0xC7,0xCF,0x37,0xDF,0xF7,0xAF,0xF6,0x6D,0xF7,0xF5,0xD7,0xF9,0xEF,0xFD}/*我*/,{0xFF,0x07,0xC0,0x6F,0xED,0xEF,0xF6,0xDF,0xC0,0x01,0xDD,0xFD,0xBD,0xFF,0xC0,0x03,0xFB,0xFF,0xF8,0x0F,0xF3,0xDF,0xF4,0xBF,0xEF,0x3F,0x9C,0xCF,0x73,0xF1,0xCF,0xFB}/*爱*/,{0xF7,0xDF,0xF9,0xCF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF }/*单*/,{0xFF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBB,0xE0,0x01,0xEF,0xFF,0xEF,0xFF,0xEF,0xFF, 0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xEF,0xDF,0xEF,0xBF,0xEF,0x7F,0xEF }/*片*/,{0xEF,0xFF,0xEF,0x07,0xEF,0x77,0x01,0x77,0xEF,0x77,0xEF,0x77,0xC7,0x77,0xCB,0x77,0xAB,0x77,0xAF,0x77,0x6E,0xF7,0xEE,0xF5,0xED,0xF5,0xED,0xF5,0xEB,0xF9,0xEF,0xFF }/*机*/,{0xF8,0x3F,0xE7,0xCF,0xDF,0xF7,0xBF,0xFB,0xB3,0x9B,0x73,0x9D,0x7F,0xFD,0x7F,0xFD, 0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,0xFF,0xFF }/*☺*/};register unsigned char i,j,k,l;SCON = 0x00; //串口工作模式0:移位寄存器方式TMOD = 0x01; //定时器T0工作方式1:16位方式TR0 = 1; //启动定时器T0P1 = 0x3f; //P1端口初值:允许接收、锁存、显示IE = 0x82; //允许定时器T0中断while (1){delay(2000); //延时2秒for (i=0;i<32;i++) //显示效果:卷帘出┓{dispram[i] = Bmp[5][i];if (i%2) delay(100);} //━━━━━━━━┛delay(3000);for (i=0; i<6; i++) //显示效果:上滚屏┓{for (j=0; j<16; j++){for (k=0; k<15; k++){dispram[k*BLKN] = dispram[(k+1)*BLKN];dispram[k*BLKN+1] = dispram[(k+1)*BLKN+1];}dispram[30] = Bmp[i][j*BLKN];dispram[31] = Bmp[i][j*BLKN+1];delay(100);}} //━━━━━━━━┛delay(3000);for (i=0; i<6; i++) //显示效果:左跑马┓{for (j=0; j<2; j++)for (k=1; k<9; k++){for (l=0; l<16; l++){dispram[l*BLKN] = dispram[l*BLKN]<<1 | dispram[l*BLKN+1]>>7;dispram[l*BLKN+1] = dispram[l*BLKN+1]<<1 | Bmp[i][l*BLKN+j]>>(8-k);}delay(100);}//end (k=0; k<16; k++)}//end for (i=0; i<; i++)//━━━━━━━┛delay(3000);for (i=0;i<32;i++) //显示效果:卷帘入┓{dispram[i] = 0x00;if (i%2) delay(100);} //━━━━━━━━┛}//end while (1)}/*延时函数*/void delay(unsigned int dt){register unsigned char bt;for (; dt; dt--)for (bt=0; bt<255; bt++);}/*显示屏扫描(定时器T0中断)函数*/void leddisplay(void) interrupt 1 using 1{register unsigned char i, j=BLKN;TH0 = 0xF8; //设定显示屏刷新率每秒62.5帧TL0 = 0x30;i = P1; //读取当前显示的行号i = ++i & 0x0f; //行号加1,屏蔽高4位do {j--;SBUF = dispram[i*BLKN + j]; //送显示数据while (!TI); TI = 0;}while (j); //完成一行数据的发送G = 1; //消隐(关闭显示)P1 &= 0xf0; //行号端口清○RCLK = 1; //显示数据打入输出锁存器P1 |= i; //写入行号RCLK = 0; //锁存显示数据G = 0; //打开显示}以下为用汇编编写的字符显示控制程序:; ************************************ ; * * ; * 单个16*16点阵电子屏字符显示器 * ; * AT89C52 12MHZ晶振 * ; * 2004.2.11 LRM * ; ************************************ ;显示字用查表法,不占内存,字符用16*16共阳LED点阵,;效果:向上滚动显示19个字,再重复循环。

相关文档
最新文档