LED点阵设计报告Word下载.docx
- 文档编号:18622331
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:68
- 大小:321.02KB
LED点阵设计报告Word下载.docx
《LED点阵设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《LED点阵设计报告Word下载.docx(68页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED 点阵 设计 报告