51单片机16,16点阵led汉字显示

2016-08-17 各类报告 阅读:

51单片机16,16点阵led汉字显示(一)
16-16点阵LED显示汉字汇编语言

LED16X16点阵显示

课程设计报告

学 院

专 业 班 级

学生姓名

指导老师

二 0一0年十二月

一、设计目的

本次课程设计目的剖析试验箱,利用微机接口芯片8255,并行控制LED点阵显示;其次就是掌握8088微机系统与LED点阵显示模块之间接口电路设计及编程,了解LED点阵显示的基本原理和如何来实现汉字的的循环左移显示。

二、设计内容

利用598H试验系统扩展接口CZ7座,在控制板MC1上以并行通信的方式控制LED点阵显示。要求自建字库,编制程序实现点阵循环左移显示汉字,并要求通过protues仿真软件画出电路图,运行程序。

三、硬件电路设计

整个电路由8088CPU,两片8255,1个74ls373,1个74LS138,1个16×16的LED,5个7407。该电路可静态显示1个16*16位的汉字,也可循环显示。

1、8255

Intel8255A是一种通用的可编程序并行I/O接口芯片,又称“可编程外设接口芯片”,是为Intel8080/8085系列微处理据设计的,也可用于其它系列的微机系统。可由程序来改变其功能,通用性强、使用灵活。通过8255A,CPU可直接同外设相连接,是应用最广的并行I/O接口芯片。其中含3个独立的8位并行输入/输出端口,各端口均具有数据的控制和锁存能力。可通过编程设置各端口的工作方式和数据传送方向(入/出/双向)。

2、138译码器

译码器是组合逻辑电路的一个重要的器件,74LS138的输出是低电平有效,故实现逻辑功能时,输出端不可接或门及或非门,74LS138与前面不同,其有使能端,故使能端必须加以处理,否则无法实现需要的逻辑功能。发光二极管点亮只须使其正向导通即可,根据LED的公共极是阳极还是阴极分为两类译码器,即针对共阳极的低电平有效的译码器;针对共阴极LED的高电平输出有效的译码器。

3、373锁存器

74LS373是低功耗肖特基TTL8D锁存器,内有8个相同的D型(三态同相)锁存器,由两个控制端(11脚G或EN;1脚OUT、CONT、OE)控制。当OE接地时,若G为高电平,74LS373接收由PPU输出的地址信号;如果G为低电平,则将地址信号锁存。工作原理:74LS373的输出端O0—O7可直接与总线相连。当三态允许控制端OE为低电平时,O0—O7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,O0—O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端LE为高电平时,O随数据D而变。当LE为低电平时,O被锁存在已建立的数据电平。

4、LED 动态显示原理

LED点阵显示系统中各模块的显示方式: 有静态和动态显示两种。静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲电压驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的列数据信号,反复循环以上操作,就可显示各种图形或文字信息。

点阵式LED绝大部分是采用动态扫描显示方式,这种显示方式巧妙地利用了人眼的视觉暂留特性。将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。最典型的例子就是电影放映机。在电子领域中,因为这种动态扫描显示方式极大的缩减了发光单元的信号线数量,因此在LED显示技术中被广泛使用。

以8×8点阵模块为例,说明一下其使用方法及控制过程。图2.1中,红色水平线Y0、Y1……Y7叫做行线,接内部发光二极管的阳极,每一行8个LED的阳极都接在本行的行线上。相邻两行线间绝缘。同样,蓝色竖直线X0、X1……X7叫做列线,接内部每列8个LED的阴极,相邻两列线间绝缘。

在这种形式的LED点阵模块中,若在某行线上施加高电平(用“1”表示),在某列线上施加低电平(用“0”表示)。则行线和列线的交叉点处的LED就会有电流流过而发光。比如,Y7为1,X0为0,则右下角的LED点亮。再如Y0为1,X0到X7均为0,则最上面一行8个LED全点亮。

现描述一下用动态扫描显示的方式,显示字符“B”的过程。其过程如图3.1

图3.1 用动态扫描显示字符“B”的过程

Proteus中只有5×7和8×8等LED点阵,并没有16×16LED点阵,而在实际应用中,要良好地显示一个汉字,则至少需要16×16点阵。下面我们就首先介绍使用8×8点阵构建16×16点阵的方法,并构建一块16×16LED点阵,用于本次设计。

首先,从Proteus7.5的元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面8个引脚是其行线,右边8个引脚是其列线(当然,如果你是将右转,则右边8个引脚是行线)。然后我们将四个元器件对应的行线和列线分别进行连接,使每一条行线引脚接一行16个LED,列线也相同。并注意要将行线和列线引出一定长度的引脚,以便下面我们使用。连接好的16×16点阵如图

3.2所示。

成如上图的16×16点阵只是第一步,这样分开的数块并不能达到好的显示效果,下面我们要将其进一步组合。组合实际上很简单,首先选中如上图中右侧的两块8×8点阵,然后拖动并使其与左侧的两块相并拢,如图3.3所示。

图3.2 点阵模块组合

图3.3

可以看到原来的连线已经自动隐藏了,至于线上的交点,我们不要去动。然后,我们再来最后一步,选中下侧的两块点阵,并拖动使其与上侧的两块并拢,最后的效果如图3.4所示。看到,原来杂乱的连线现在已经几乎全部隐藏了,一块16×16的LED点阵做成了。需要注意,做成的LED点阵的行线为左侧的16个引脚,下侧的16个引脚为其列线,而且其行线为高电平有效,列线为低电平有效。然后,我们将其保存,以便以后使用。

图3.4

5、整个系统的仿真电路图

【51单片机16,16点阵led汉字显示】

四、 字模生成

文字的字模是一组数字,但它的意义却与数字的意义有着根本的变化,它是用数字的各位信息来记载英文或汉字的形状[1。

在电脑硬件中,根本没有汉字这个概念,也没有英文的概念,其认识的概念只有——内码(将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码)。如果你用启动盘启动系统后用DIR命令可能得到一串串莫名其妙的字符,但那确确实实是汉字,如果你启动UCDOS或其他的汉字系统后,就会看到那是一个个熟悉的汉字。在硬件系统内,英文的字模信息一般固化在ROM里,即使在没有进入系统的CMOS里,也可以让你看到英文字符。而在DOS下,中文的字模信息一般记录在汉字库文件里(将制作好的字模放到一个个标准的库中,这就是点阵字库文件)。

在通过软件实现的技术中,目前有许多字模生成软件,软件打开后输入汉字,点“检取”,十六进制数据的汉字代码即可自动生成,把我们所需要的竖排数据复制到我们的程序中即可。在通过硬件实现字模提取的技术中,有在系统中增加硬汉字库的方法,主控器发送的汉字是其机内码,用两个字节来表示一个汉字。根据机内码,显示单元控制模块从汉字库中查取显示字模,实现汉字显示。由于带有硬汉字库,进行动态文字显示时,通用智能显示单元仅接受汉字的机内码即可,这样数据通讯量大大减少。因此,“动态文字显示速度快”。

五、程序设计

51单片机16,16点阵led汉字显示(二)
16乘16LED点阵汉字显示程序

efan 23:04:26

有对汉字LED点阵显示熟悉的朋友吗?

要下雨了 23:04:51

什么问题

typhoon 23:04:54

efan 23:05:11

有段程序看不太懂

efan 23:05:26

#include <reg52.h>

#define int8 unsigned char

#define int16 unsigned int

#define int32 unsigned long

int8 flag;

int8 n;

int8 code table[][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},/*

" " */

{0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C, 0x14,0x06,0x18,0x04,0x10,0x00,0x00},/*"欢",0*/【51单片机16,16点阵led汉字显示】

{0x02,0x02,0x04,0x82,0xF8,0x73,0x04,0x20,0x02,0x00,0xE2,0x3F,0x42,0x20,0x82,0x40,0x02,0x40,0xFA,

0x3F,0x02,0x20,0x42,0x20,0x22,0x20,0xC2,0x3F,0x02,0x00,0x00,0x00},/*"迎",1*/

{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 delay(void);

int16 offset;

void main(void)

{

int8 i;

int8 *p;

flag=0x10;

n=0;

TMOD=0x01;

TH0=0xb1;

TL0=0xe0;

ET0=1;

EA=1;

TR0=1;

p=&table[0][0];

while (1)

{

for (i=0;i<8;i++) //显示左半边屏幕

{

P0=*(p+offset+2*i);

P2=i|0x08; //P2.4=0,P2.3=1 选中U2, 输出扫描码给U6

delay();

P0=*(p+offset+2*i+1);

P2=i|0x10; //P2.4=1,P2.3=0 选中U3, 输出扫描码给U7 delay();

}

for (i=8;i<16;i++) //显示右半边屏幕

{

P0=*(p+offset+2*i);

P2=(i-8)|0x20; //P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8【51单片机16,16点阵led汉字显示】

delay();

P0=*(p+offset+2*i+1);

P2=(i-8)|0x40; //P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9

delay();

}

【51单片机16,16点阵led汉字显示】

}

}

void delay(void)

{

int16 i;

for (i=0;i<50;i++)

;

}

void timer0() interrupt 1 using 3 {

TF0=0;

TH0=0xb1;

TL0=0xe0;

if (n<10)

{

n++;

}

else

{

offset+=2;

if (offset>1100)

offset=0;

51单片机16,16点阵led汉字显示(三)
51单片机驱动16×16LED点阵显示动画汉字汇编程序

51单片机驱动16×16LED点阵显示动画汉字汇编程序

这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子. ORG 0000H

ST: MOV A,#0FFH ;初始化

MOV P1,A

MOV P2,A

MOV P3,A

MOV P0,A

CLR A

MOV R0,#50H ;显示缓存清0

MOV R1,#20H ;控制清0的次数

ST0: MOV @R0,A

INC R0

DJNZ R1,ST0

;正文显示

CHINESE: MOV DPTR,#TAB1 ;查表指针指向TAB1

LCALL HZ

;结束动画

SCREE:

MOV DPTR,#TAB2;查表指针指向TAB2

ACALL DD

MOV DPTR,#TAB3;查表指针指向TAB3

ACALL DD

MOV DPTR,#TAB4;查表指针指向TAB4

ACALL DD

LJMP CHINESE

;显示8幅画面子程序,SCREE专用,用字模软件字要倒置(表必须深256字节)

DD: MOV B,#00H

MOV R0,#08H ;显示8幅画面

AJMP CC

CC0: MOV A,B

ADD A,#20H ;指向下一幅画面

MOV B,A

CC: MOV R7,#08H ;画面停留时间

MOV R3,B

MOV 37H,R0

LCALL ENTER

DIS00: LCALL DISPLAY

DJNZ R7,DIS00

MOV R0,37H

DJNZ R0,CC0

RET

;汉字上移子程序,可显示8个汉字,(表必须深256字节)

HZ: MOV R3,#00H ;查表偏移量

MOV R5,#81H ;查表128次

MOVBACK: MOV R4,#10H ;使显示完一个汉字

MOVBACK0: MOV R7,#02H ;一桢画面显示时间

MOV R0,#6DH ;低8位R0指向显示缓存倒数第3个字节,以备与最后1个字节交换 MOV R1,#6CH ;高8位R1指向显示缓存倒数第4个字节,以备与倒数第2个字节交换 MOV R2,#10H ;内存后移的次数

DJNZ R5,MOVBACK1

RET ;显示完该表,返回

MOVBACK1: MOV A,@R0 ;低8位被后移的内存单元数据暂存入A

INC R0 ;后移两字节

INC R0

MOV @R0,A ;放入要移的低8位数据

MOV A,R0 ;R0指向下一个要后移的内存单元

SUBB A,#04H

MOV A,@R1 ;高8位被后移的内存单元数据暂存入A

【51单片机16,16点阵led汉字显示】

INC R1 ;后移两字节

INC R1

MOV @R1,A ;放入要移高8位的数据

MOV A,R1 ;R1指向下一个要后移的内存单元

SUBB A,#04H

MOV R1,A ;R1指向下一个要后移的内存单元

DJNZ R2,MOVBACK1 ;显示缓存数据依次后移

MOV A,R3 ;从表TAB1读入要移进50H,51H的数据

MOVC A,@A+DPTR;先给50H读数据

MOV 50H,A

MOV A,R3 ;指向下一字节

INC A

MOV R3,A

MOVC A,@A+DPTR;再给51H读数据

MOV 51H,A

MOV A,R3 ;指向下一字节

INC A

MOV R3,A

MOV 30H,R3 ;保护数据

MOV 31H,R4

51单片机16,16点阵led汉字显示

http://m.zhuodaoren.com/fanwen334542/

推荐访问:51单片机led点阵程序

各类报告推荐文章

推荐内容

上一篇:埃塞的公路 下一篇:贵州茅台财务报表分析