LED点阵设计报告Word下载.docx

上传人:b****6 文档编号:18622331 上传时间:2022-12-29 格式:DOCX 页数:68 大小:321.02KB
下载 相关 举报
LED点阵设计报告Word下载.docx_第1页
第1页 / 共68页
LED点阵设计报告Word下载.docx_第2页
第2页 / 共68页
LED点阵设计报告Word下载.docx_第3页
第3页 / 共68页
LED点阵设计报告Word下载.docx_第4页
第4页 / 共68页
LED点阵设计报告Word下载.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

LED点阵设计报告Word下载.docx

《LED点阵设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《LED点阵设计报告Word下载.docx(68页珍藏版)》请在冰豆网上搜索。

LED点阵设计报告Word下载.docx

WR

A1

A0

操作

1

写端口A

写端口B

写端口C

写控制寄存器

读端口A

读端口B

读端口C

无操作

个独立的数据端口以及一个公共的控制端口。

在实际使用中,A1、A0端接到系统地址总线的A1、A0。

 

CS#:

片选信号,由系统地址译码器产生,低电平有效。

读写控制信号RD#和WR#:

低电平有效,用于决定CPU和8255A之间信息传送的方向:

当RD#=0时,从8255A读至CPU;

当WR#=0时,由CPU写入8255A。

CPU对8255各端口进行读写操作时的信号关系如表1所示。

RESRT:

复位信号,高电平有效。

8255A复位后,A、B、C三个端口都置为输入方式。

5.1. 

2.8255A的内部结构

如图2所示,8255A的内部由以下四部分组成:

(1)端口A、端口B和端口C

端口A、端口B和端口C都是8位端口,可以选择作为输入或输出。

还可以将端口C的高4位和低4位分开使用,分别作为输入或输出。

当端口A和端口B作为选通输入或输出的数据端口时,端口C的指定位与端口A和端口B配合使用,用作控制信号或状态信号。

(2)A组和B组控制电路

这是两组根据CPU送来的工作方式控制字控制8255工作方式的电路。

它们的控制寄存器接收CPU输出的方式控制字,由该控制字决定端口的工作方式,还可根据CPU的命令对端口C实现位置位或复位操作。

(3)数据总线缓冲器 

这是一个8位三态数据缓冲器,8255A正是通过它与系统数据总线相连,实现8255A与CPU之间的数据传送。

输入数据、输出数据、CPU发给8255A的控制字等都是通过该部件传递的。

(4)读/写控制逻辑 

读/写控制逻辑电路的功能是负责管理8255A与CPU之间的数据传送过程。

它接收CS及地址总线的信号A1、A0和控制总线的控制信号RESET、WR、RD,将它们组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令送给这两个部件,再由它们控制完成对数据、状态信息和控制信息的传送。

各端口读写操作与对应的控制信号之间的关系见表1所示。

图28255A内部结构框图

5.1.8255A的各种工作方式 

及控制字

1.8255A的工作方式

8255A在使用前要先写入一个工作方式控制字,以指定A、B、C三个端口各自的工作方式。

8255A共有三种工作方式:

方式0——基本输入输出方式,即无须联络就可以直接进行8255A与外设之间的数据输入或输出操作。

A口、B口、C口的高四位和低四位均可设置为方式0。

方式1——选通输入输出方式,此时8255A的A口和B口与外设之间进行输入或输出操作时,需要C口的部分I/O线提供联络信号。

只有A口和B口可工作于方式1。

方式2——选通双向输入输出方式,即同一端口的I/O线既可以输入也可以输出,只有A口可工作于方式2。

此种方式下需要C口的部分I/O线提供联络信号。

2.8255A的控制字

(1)工作方式选择控制字

8255A的工作方式可由CPU写一个工作方式选择控制字到8255A的控制寄存器来选择。

控制字可以分别选择端口A、端口B和端口C上下两部分的工作方式。

端口A有方式0、方式1和方式2共三种工作方式,端口B只能工作于方式0和方式1,而端口C仅工作于方式0。

注意:

在端口A工作于方式1或方式2,端口B工作于方式1时,C口部分I/O线被定义为8255A与外设之间进行数据传送的联络信号线,此时,C口剩下的I/O线仍工作于方式0,是输入还是输出则由工作方式控制字的D0和D3位决定。

(2)C口按位置位/复位控制字

8255A的C口具有位控功能,即端口C的8位中的任一位都可通过CPU向8255A的控制寄存器写入一个按位置位/复位控制字来置1或清0,而C口中其他位的状态不变。

例如,要使端口C的PC4置位的控制字为00001001B(09H),使该位复位的控制字为00001000B(08H)。

应注意的是,C口的按位置位/复位控制字必须跟在方式选择控制字之后写入控制字寄存器,即使仅使用该功能,也应先选送一个方式控制字。

方式选择控制字只需写入一次,之后就可多次使用C口按位置位/复位控制字对C口的某些位进行置1或清0操作。

5.28X8点阵式LED

5.2.1其内部结构如下:

图3X8点阵式结构图

5.2.28x8点阵式LED的工作原理

由LED的结构图可知道,8x8点阵式LED是由64个发光二极管构成,每行8个二极管的阳极串接在一起,每列8个二极管的负端串接在一起。

当要选中某个点时就得把该点的行接高电平,列接低电平。

如:

要选中第二行第三个点,即要求DC7接5伏,DR3接地。

通过不同的接线可以用点构成所需要的图形。

5.3基本输入输出端口

如图4所示,CPU可以通过基本输入输出端口与外设进行信息交换。

其中IA0~IA7与IB0~IB7为两个输入端口,CPU可通过这两个端口从外设获得信息;

OA0~OA7与OB0~OB7是两个输出端口,CPU可通过其将信息输出给外设。

图4

5.4键盘与数码管

5.4.1.矩阵式键盘的结构及原理

矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,其结构如图5所示。

由图可知,一个4×

4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。

矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。

当无键按下时,行线处于高电平状态;

当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。

这是识别按键是否按下的关键。

然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。

5.4.2数码管

八段数码管如图6所示。

当数码管被选中后,对其相应的代码段施加高电平,数码管便产生相应的图形。

例如在数码管被选中后,对端A、B、C、D、E、F、G、DP分别置1(高电平)、1、1、1、1、1、0(低电平)、0,则数码管就会显示0的字形,因此0的数码管代码为11111100B。

相应地可以求出其他数字的数码管代码。

图6

5.4.3数码管与小键盘

如图7,数码管的选通受小键盘的控制,当小键盘的列选通时,即施加低电平,则该列所对应的数码管也被选通。

5.516550串行控制器

5.5.1串行通信方式

异步方式串行异步接口通用异步收发器

同步方式串行同步接口通用同步收发器

5.5.2串行接口的基本结构

5.5.31655内部结构图

六、设计过程

6.1设计思路

电路设计及元器件选择时,为了结果实现的方便,所以没有选择中断芯片。

设计中,用基本输入输出的两个端口作为8X8点阵LED的控制端,8255_A的A口味输出,控制小键盘的列,即选通,同时选通相应列所对应的数码管;

C口低四位为输入,读入小键盘的行状态;

B口为输出,输出数码管的代码,控制数码管。

6.2电路接线图

图8电路接线图

6.3程序流程图

图9程序流程图

6.4源程序

6.4.1C语言

#include<

stdio.h>

stdlib.h>

bios.h>

ctype.h>

process.h>

conio.h>

#defineIOY00xC400

#defineIOY10xC440

#defineIOY20xC480

#defineMYIO_AIOY0

#defineMYIO_BIOY1

#defineMY8255_AIOY2

#defineMY8255_CIOY2+0x02*4

#defineMY8255_MODEIOY2+0x03*4

unsignedchardesign[56]={0xff,0xef,0x08,0x5a,0xdd,0xaa,0x7f,0xff,

0xff,0xef,0x15,0x50,0x53,0xd3,0xd9,0x03,

0xff,0xf5,0x05,0x58,0xdd,0x95,0x59,0xcd,

0xff,0xaf,0x05,0xa8,0x03,0xab,0xa9,0x03,

0xff,0xfb,0xf7,0xe7,0xdb,0xbd,0x7e,0xff,

0xff,0xc1,0xf7,0xe3,0xb7,0x43,0xab,0x6d,

0xff,0xcb,0x05,0xa8,0x0a,0xa8,0xab,0x34};

unsignedcharzaijian[16]={0x1,0xef,0x83,0x83,0xab,0x1,0xbb,0xbb,

0x83,0xbb,0xab,0xab,0x8b,0xd7,0xd3,0x1d};

unsignedchara,c,d,e,f,g;

intn,b;

intcc=0;

inttt=0;

voidccscan(void)//小键盘扫描子程序

{outp(MY8255_A,0x00);

cc=inp(MY8255_C);

cc=(~cc)&

0x0F;

}

//上移显示

voidroll(void)

{for(a=0;

a<

50;

{for(b=0;

b<

b++)

{c=0x01;

for(d=0;

d<

8;

d++)

{for(e=0;

e<

250;

e++)

{for(n=0;

n<

1000;

n++);

}

outp(MYIO_A,c);

outp(MYIO_B,design[a+d]);

c=c<

<

1;

a=a+1;

//单字显示

voidsingle(void)

56;

{

for(b=0;

60;

{c=0x01;

a=a+8;

voidmain()//主函数

{

outp(MY8255_MODE,0x81);

//初始化8255

printf("

[1]:

Single\n[2]:

Roll\n[4]:

Quit\n"

);

for(;

;

{cc=0;

ccscan();

tt=cc;

for(;

;

if(cc==0)break;

if(tt!

=0)break;

while

(1)

if(tt==1)//单字显示

{single();

printf("

\n\n[1]:

if(tt==2)//上移显示

{roll();

if(tt==4)

for(a=0;

16;

40;

outp(MYIO_B,zaijian[a+d]);

exit(0);

//退出

2)远程控制代码

发送端:

***************根据CHECK配置信息修改下列符号值*******************

IOY0EQU0C400H;

片选IOY0对应的端口始地址

IOY1EQU0C440H;

片选IOY1对应的端口始地址

IOY2EQU0C480H;

片选IOY2对应的端口始地址

*****************************************************************

MY16550_0EQUIOY0+00H*4;

16550数据缓冲寄存器端口地址

MY16550_1EQUIOY0+01H*4;

16550中断允许寄存器端口地址

MY16550_3EQUIOY0+03H*4;

16550线路控制寄存器端口地址

MY16550_4EQUIOY0+04H*4;

16550MODEM控制寄存器端口地址

MY16550_5EQUIOY0+05H*4;

16550线路状态寄存器端口地址

MY8255_AEQUIOY1+00H*4;

8255的A口地址

MY8255_BEQUIOY1+01H*4;

8255的B口地址

MY8255_CEQUIOY1+02H*4;

8255的C口地址

MY8255_MODEEQUIOY1+03H*4;

8255的控制寄存器地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

DATAENDS;

键值表,0~F对应的7段数码管的段位值

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVSI,3000H;

建立缓冲区,存放要显示的键值

MOVAL,00H;

先初始化键值为0

MOV[SI],AL

MOVDX,MY8255_MODE;

初始化8255工作方式

MOVAL,81H;

方式0,A口、B口输出,C口低4位输入

OUTDX,AL

MOVDX,MY16550_3;

设置16550线路控制寄存器

MOVAL,80H;

准备设置波特率除数寄存器

CALLDALLY5

MOVDX,MY16550_0;

设置除数寄存器低字节0CH

MOVAL,0CH;

000C对应9600bit/s

OUTDX,AL

MOVDX,MY16550_1;

设置除数寄存器高字节00H

MOVAL,00H

MOVDX,MY16550_3;

设置线路控制寄存器,初始化数据格式

MOVAL,1BH;

偶校验,1位停止位,字符宽度为8

MOVDX,MY16550_4;

设置MODEM控制寄存器

MOVAL,03H

设置中断允许寄存器

中断不打开

BEGIN:

CALLDIS;

显示刷新

CALLCLEAR;

清屏

CALLCCSCAN;

扫描按键

JNZGETKEY1;

有键按下则跳置GETKEY1

MOVAH,1;

判断PC键盘是否有按键按下

INT16H

JZBEGIN;

无按键则跳回继续循环,有则退出

QUIT:

MOVAX,4C00H;

返回到DOS

INT21H

GETKEY1:

CALLDIS;

显示刷新

CALLDALLY

CALLDALLY

再次扫描按键

JNZGETKEY2;

有键按下则跳置GETKEY2

JMPBEGIN;

否则跳回开始继续循环

GETKEY2:

MOVCH,0FEH

MOVCL,00H;

设置当前检测的是第几列

COLUM:

MOVAL,CH;

选取一列,将X1~X4中一个置0

MOVDX,MY8255_A

MOVDX,MY8255_C;

读Y1~Y4,用于判断是哪一行按键闭合

INAL,DX

L1:

TESTAL,01H;

是否为第1行

JNZL2;

不是则继续判断

设置第1行第1列的对应的键值

JMPKCODE

L2:

TESTAL,02H;

是否为第2行

JNZL3;

不是则继续判断

MOVAL,04H;

设置第2行第1列的对应的键值

L3:

TESTAL,04H;

是否为第3行

JNZL4;

MOVAL,08H;

设置第3行第1列的对应的键值

L4:

TESTAL,08H;

是否为第4行

JNZNEXT;

设置第4行第1列的对应的键值

KCODE:

ADDAL,CL;

将第1列的值加上当前列数,确定按键值

CALLPUTBUF;

保存按键值

PUSHAX

KON:

扫描按键,判断按键是否弹起

JNZKON;

未弹起则继续循环等待弹起

POPAX

NEXT:

INCCL;

当前检测的列数递增

MOVAL,CH

检测是否扫描到第4列

JZKERR;

是则跳回到开始处

ROLAL,1;

没检测到第4列则准备检测下一列

MOVCH,AL

JMPCOLUM

KERR:

JMPBEGIN

CCSCANPROCNEAR;

扫描是否有按键闭合子程序

MOVAL,00H

MOVDX,MY8255_A;

将4列全选通,X1~X4置0

MOVDX,MY8255_C

INAL,DX;

读Y1~Y4

NOTAL

ANDAL,0FH;

取出Y1~Y4的反值

RET

CCSCANENDP

CLEARPROCNEAR;

清除数码管显示子程序

MOVDX,MY8255_B;

段位置0即可清除数码管显示

CLEARENDP

DISPROCNEAR;

显示键值子程序

PUSHAX;

以缓冲区存放的键值为键值表偏移找到键值并显示

MOVSI,3000H

MOVDL,0F7H

MOVAL,DL

AGAIN:

PUSHDX

OUTDX,AL;

设置X1~X4,选通一个数码管

MOVAL,[SI];

取出缓冲区中存放键值

MOVBX,OFFSETDTABLE

ANDAX,00FFH

ADDBX,AX

MOVAL,[BX];

将键值作为偏移和键值基地址相加得到相应的键值

MOVDX,MY8255_B

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1