LED点阵设计报告.docx
- 文档编号:5635233
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:68
- 大小:321.02KB
LED点阵设计报告.docx
《LED点阵设计报告.docx》由会员分享,可在线阅读,更多相关《LED点阵设计报告.docx(68页珍藏版)》请在冰豆网上搜索。
LED点阵设计报告
微机接口课程设计
一、设计题目…………………………………………2
二、设计内容与要求…………………………………2
三、设计目的意义……………………………………2
四、系统硬件…………………………………………3
五、元器件介绍………………………………………3
六、设计过程…………………………………………13
七、心得体会…………………………………………54
八、参考文献…………………………………………54
一、设计题目
点阵LED显示功能设计
二、设计内容与要求
(1)、编程语言为汇编语言和C语言;
(2)、硬件电路基于80x86微机接口电路;
(3)、程序功能要求:
小键盘给定、数码管显示、控制并显示“待机”,“欢迎你进入系统!
”,“再见”(延时10秒);
(4)、具备本地及远程(串行方式)功能。
三、设计目的的意义
在大型商场、车站、码头、地铁站以及各类办事窗口等以及越来越多的公共场所需要用LED点阵显示图形和汉字。
LED行业已成为一个快速发展的新兴产业,市场空间巨大,前景广阔。
随着信息产业的高速发展,LED显示作为信息传播的一种重要手段,已广泛应用于室内外需要进行服务内容和服务宗旨宣传的公众场所,例如户内外公共场所广告宣传、机场车站旅客引导信息、公交车辆报站系统、证券与银行信息显示、餐馆报价信息豆示、高速公路可变情报板、体育场馆比赛转播、楼宇灯饰、交通信号灯、景观照明等。
显然,LED显示已成为城市亮化、现代化和信息化社会的一个重要标志。
在设计过程中,自己亲自或参考资料完成系统电路的接线,然后利用汇编语言和C语言编写程序,从而更加熟悉自己所学过的东西,为以后的学习与工作打下基础。
四、系统硬件
可编程外围接口芯片8255A、基本输入输出端口、八段数码管、小键盘、16550远程控制器
五、元器件介绍
5.1可编程外围接口芯片8255A
5.1.18255A的引脚
8255A是可编程的三端口并行输入输出接口芯片,具有40个引脚,双列直插式封装,由+5V供电,其引脚与功能如示意图所示:
A、B、C三个端口各有8条端口I/O线:
PA7?
PA0,PB7?
PB0,PC7?
PC0,共32个引脚,用于8255A与外设之间的数据(或控制、状态信号)的传送。
D0~D7:
8位三态数据线,接至系统数据总线。
CPU通过它实现与8255之间数据的读出与写入,以及控制字和状态字的写入与读出等。
A0~A1:
地址信号。
A0和A1经片内译码产生四个有效地址分别对应A、B、C三
表18255A各端口读写操作时的信号关系
CS
RD
WR
A1
A0
操作
0
1
0
0
0
写端口A
0
1
0
0
1
写端口B
0
1
0
1
0
写端口C
0
1
0
1
1
写控制寄存器
0
0
1
0
0
读端口A
0
0
1
0
1
读端口B
0
0
1
1
0
读端口C
0
0
1
1
1
无操作
个独立的数据端口以及一个公共的控制端口。
在实际使用中,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
#include
#include
#include
#include
#include
#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<50;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)
{for(a=0;a<56;)
{
for(b=0;b<60;b++)
{c=0x01;
for(d=0;d<8;d++)
{for(e=0;e<250;e++)
{for(n=0;n<250;n++);
}
outp(MYIO_A,c);
outp(MYIO_B,design[a+d]);
c=c<<1;
}
}
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(;;)
{cc=0;
ccscan();
if(cc==0)break;
}
if(tt!
=0)break;
}
while
(1)
{
if(tt==1)//单字显示
{single();
printf("\n\n[1]:
Single\n[2]:
Roll\n[4]:
Quit\n");
for(;;)
{cc=0;
ccscan();
tt=cc;
for(;;)
{cc=0;
ccscan();
if(cc==0)break;
}
if(tt!
=0)break;
}
}
if(tt==2)//上移显示
{roll();
printf("\n\n[1]:
Single\n[2]:
Roll\n[4]:
Quit\n");
for(;;)
{cc=0;
ccscan();
tt=cc;
for(;;)
{cc=0;
ccscan();
if(cc==0)break;
}
if(tt!
=0)break;
}
}
if(tt==4)
for(a=0;a<16;)
{
for(b=0;b<40;b++)
{c=0x01;
for(d=0;d<8;d++)
{for(e=0;e<250;e++)
{for(n=0;n<250;n++);
}
outp(MYIO_A,c);
outp(MYIO_B,zaijian[a+d]);
c=c<<1;
}
}
a=a+8;
}
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;准备设置波特率除数寄存器
OUTDX,AL
CALLDALLY5
MOVDX,MY16550_0;设置除数寄存器低字节0CH
MOVAL,0CH;000C对应9600bit/s
OUTDX,AL
CALLDALLY5
MOVDX,MY16550_1;设置除数寄存器高字节00H
MOVAL,00H
OUTDX,AL
CALLDALLY5
MOVDX,MY16550_3;设置线路控制寄存器,初始化数据格式
MOVAL,1BH;偶校验,1位停止位,字符宽度为8
OUTDX,AL
CALLDALLY5
MOVDX,MY16550_4;设置MODEM控制寄存器
MOVAL,03H
OUTDX,AL
CALLDALLY5
MOVDX,MY16550_1;设置中断允许寄存器
MOVAL,00H;中断不打开
OUTDX,AL
CALLDALLY5
BEGIN:
CALLDIS;显示刷新
CALLCLEAR;清屏
CALLCCSCAN;扫描按键
JNZGETKEY1;有键按下则跳置GETKEY1
MOVAH,1;判断PC键盘是否有按键按下
INT16H
JZBEGIN;无按键则跳回继续循环,有则退出
QUIT:
MOVAX,4C00H;返回到DOS
INT21H
GETKEY1:
CALLDIS;显示刷新
CALLDALLY
CALLDALLY
CALLCLEAR;清屏
CALLCCSCAN;再次扫描按键
JNZGETKEY2;有键按下则跳置GETKEY2
JMPBEGIN;否则跳回开始继续循环
GETKEY2:
MOVCH,0FEH
MOVCL,00H;设置当前检测的是第几列
COLUM:
MOVAL,CH;选取一列,将X1~X4中一个置0
MOVDX,MY8255_A
OUTDX,AL
MOVDX,MY8255_C;读Y1~Y4,用于判断是哪一行按键闭合
INAL,DX
L1:
TESTAL,01H;是否为第1行
JNZL2;不是则继续判断
MOVAL,00H;设置第1行第1列的对应的键值
JMPKCODE
L2:
TESTAL,02H;是否为第2行
JNZL3;不是则继续判断
MOVAL,04H;设置第2行第1列的对应的键值
JMPKCODE
L3:
TESTAL,04H;是否为第3行
JNZL4;不是则继续判断
MOVAL,08H;设置第3行第1列的对应的键值
JMPKCODE
L4:
TESTAL,08H;是否为第4行
JNZNEXT;不是则继续判断
MOVAL,0CH;设置第4行第1列的对应的键值
KCODE:
ADDAL,CL;将第1列的值加上当前列数,确定按键值
CALLPUTBUF;保存按键值
PUSHAX
KON:
CALLDIS;显示刷新
CALLCLEAR;清屏
CALLCCSCAN;扫描按键,判断按键是否弹起
JNZKON;未弹起则继续循环等待弹起
POPAX
NEXT:
INCCL;当前检测的列数递增
MOVAL,CH
TESTAL,08H;检测是否扫描到第4列
JZKERR;是则跳回到开始处
ROLAL,1;没检测到第4列则准备检测下一列
MOVCH,AL
JMPCOLUM
KERR:
JMPBEGIN
CCSCANPROCNEAR;扫描是否有按键闭合子程序
MOVAL,00H
MOVDX,MY8255_A;将4列全选通,X1~X4置0
OUTDX,AL
MOVDX,MY8255_C
INAL,DX;读Y1~Y4
NOTAL
ANDAL,0FH;取出Y1~Y4的反值
RET
CCSCANENDP
CLEARPROCNEAR;清除数码管显示子程序
MOVDX,MY8255_B;段位置0即可清除数码管显示
MOVAL,00H
OUTDX,AL
RET
CLEARENDP
DISPROCNEAR;显示键值子程序
PUSHAX;以缓冲区存放的键值为键值表偏移找到键值并显示
MOVSI,3000H
MOVDL,0F7H
MOVAL,DL
AGAIN:
PUSHDX
MOVDX,MY8255_A
OUTDX,AL;设置X1~X4,选通一个数码管
MOVAL,[SI];取出缓冲区中存放键值
MOVBX,OFFSETDTABLE
ANDAX,00FFH
ADDBX,AX
MOVAL,[BX];将键值作为偏移和键值基地址相加得到相应的键值
MOVDX,MY8255_B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED 点阵 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)