收藏 分销(赏)

LED点阵设计方案报告.doc

上传人:快乐****生活 文档编号:2422729 上传时间:2024-05-30 格式:DOC 页数:80 大小:4.30MB 下载积分:16 金币
下载 相关 举报
LED点阵设计方案报告.doc_第1页
第1页 / 共80页
LED点阵设计方案报告.doc_第2页
第2页 / 共80页


点击查看更多>>
资源描述
微机接口课程设计 目 录 一、 设计题目…………………………………………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.1 8255A引脚 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三 图1 8255A引脚及功效示意图 1 40 2 39 3 38 4 37 5 36 6 35 7 34 8 33 9 32 10 8255A 31 11 30 12 29 13 28 14 27 15 26 16 25 17 24 18 23 19 22 20 21 PA3 PA2 PA1 PA0 RD CS GND A1 A0 PC7 PC6 PC5 PC4 PC0 PC1 PC2 PC3 PB0 PB1 PB2 PA4 PA5 PA6 PA7 WR RESET D0 D1 D2 D3 D4 D5 D6 D7 VCC PB7 PB6 PB5 PB4 PB3 B组 (b) 功效示意图 (a)引脚 A口 C口 8255A C口 B口 CS D0~D7 WR RD A0 A1 RESET PA0~PA7 8 PC4~PC7 4 PC0~PC3 4 PB0~PB7 8 A组 表1 8255A各端口读写操作时信号关系 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所表示。 B组 控制部件 内部DB(8) PA7~ PA0 D0~D7 数据总线 缓冲器 读/写 控制逻辑 RESET A1 A0 WR RD CS A组 端口A (8) A组 端口C (高4位) B组 端口C (低4位) B组 端口B (8) A组 控制部件 PC7~ PC4 PC3~ PC0 PB7~ PB0 图2 8255A内部结构框图 5.1.8255A多种工作方法 及控制字  1. 8255A工作方法      8255A在使用前要先写入一个工作方法控制字,以指定A、B、C三个端口各自工作方法。8255A共有三种工作方法:   方法0——基础输入输出方法,即无须联络就能够直接进行8255A和外设之间数据输入或输出操作。A口、B口、C口高四位和低四位均可设置为方法0。 方法1——选通输入输出方法,此时8255AA口和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口按位置位/复位控制字     8255AC口含有位控功效,即端口C8位中任一位全部可经过CPU向8255A控制寄存器写入一个按位置位/复位控制字来置1或清0,而C口中其它位状态不变。     比如,要使端口CPC4置位控制字为00001001B(09H),使该位复位控制字为00001000B(08H)。     应注意是,C口按位置位/复位控制字必需跟在方法选择控制字以后写入控制字寄存器,即使仅使用该功效,也应先选送一个方法控制字。方法选择控制字只需写入一次,以后就可数次使用C口按位置位/复位控制字对C口一些位进行置1或清0操作。 5.2 8X8点阵式LED 5.2.1其内部结构以下: 图3 X8点阵式结构图 5.2.2 8x8点阵式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口。 图5 矩阵式键盘中,行、列线分别连接到按键开关两端,行线经过上拉电阻接到+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 数码管和小键盘显示单元结构图 图7,数码管选通受小键盘控制,当小键盘列选通时,即施加低电平,则该列所对应数码管也被选通。 5.5 16550串行控制器 5.5.1 串行通信方法 异步方法 串行异步接口 通用异步收发器 同时方法 串行同时接口 通用同时收发器 5.5.2 串行接口基础结构 5.5.3 1655内部结构图 六、设计过程 6.1 设计思绪 电路设计及元器件选择时,为了结果实现方便,所以没有选择中止芯片。设计中,用基础输入输出两个端口作为8X8点阵LED控制端,8255_AA口味输出,控制小键盘列,即选通,同时选通对应列所对应数码管;C口低四位为输入,读入小键盘行状态;B口为输出,输出数码管代码,控制数码管。 6.2 电路接线图 图8 电路接线图 6.3 程序步骤图 图9 程序步骤图 6.4 源程序 6.4.1 C语言 #include <stdio.h> #include <stdlib.h> #include <bios.h> #include <ctype.h> #include <process.h> #include <conio.h> #define IOY0 0xC400 #define IOY1 0xC440 #define IOY2 0xC480 #define MYIO_A IOY0 #define MYIO_B IOY1 #define MY8255_A IOY2 #define MY8255_C IOY2+0x02*4 #define MY8255_MODE IOY2+0x03*4 unsigned char design[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}; unsigned char zaijian[16]={0x1,0xef,0x83,0x83,0xab,0x1,0xbb,0xbb, 0x83,0xbb,0xab,0xab,0x8b,0xd7,0xd3,0x1d}; unsigned char a,c,d,e,f,g; int n,b; int cc=0; int tt=0; void ccscan(void) //小键盘扫描子程序 { outp(MY8255_A, 0x00); cc = inp(MY8255_C); cc = (~cc) & 0x0F; } //上移显示 void roll(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; } } //单字显示 void single(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; } } void main () //主函数 { 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配置信息修改下列符号值******************* IOY0 EQU 0C400H ;片选IOY0对应端口始地址 IOY1 EQU 0C440H ;片选IOY1对应端口始地址 IOY2 EQU 0C480H ;片选IOY2对应端口始地址 ;***************************************************************** MY16550_0 EQU IOY0+00H*4 ;16550数据缓冲寄存器端口地址 MY16550_1 EQU IOY0+01H*4 ;16550中止许可寄存器端口地址 MY16550_3 EQU IOY0+03H*4 ;16550线路控制寄存器端口地址 MY16550_4 EQU IOY0+04H*4 ;16550 MODEM控制寄存器端口地址 MY16550_5 EQU IOY0+05H*4 ;16550线路状态寄存器端口地址 MY8255_A EQU IOY1+00H*4 ;8255A口地址 MY8255_B EQU IOY1+01H*4 ;8255B口地址 MY8255_C EQU IOY1+02H*4 ;8255C口地址 MY8255_MODE EQU IOY1+03H*4 ;8255控制寄存器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DATA ENDS ;键值表,0~F对应7段数码管段位值 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,3000H ;建立缓冲区,存放要显示键值 MOV AL,00H ;先初始化键值为0 MOV [SI],AL MOV DX,MY8255_MODE ;初始化8255工作方法 MOV AL,81H ;方法0,A口、B口输出,C口低4位输入 OUT DX,AL MOV DX,MY16550_3 ;设置16550线路控制寄存器 MOV AL,80H ;准备设置波特率除数寄存器 OUT DX,AL CALL DALLY5 MOV DX,MY16550_0 ;设置除数寄存器低字节0CH MOV AL,0CH ;000C对应9600 bit/s OUT DX,AL CALL DALLY5 MOV DX,MY16550_1 ;设置除数寄存器高字节00H MOV AL,00H OUT DX,AL CALL DALLY5 MOV DX,MY16550_3 ;设置线路控制寄存器,初始化数据格式 MOV AL,1BH ;偶校验,1位停止位,字符宽度为8 OUT DX,AL CALL DALLY5 MOV DX,MY16550_4 ;设置MODEM控制寄存器 MOV AL,03H OUT DX,AL CALL DALLY5 MOV DX,MY16550_1 ;设置中止许可寄存器 MOV AL,00H ;中止不打开 OUT DX,AL CALL DALLY5 BEGIN: CALL DIS ;显示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;扫描按键 JNZ GETKEY1 ;有键按下则跳置GETKEY1 MOV AH,1 ;判定PC键盘是否有按键按下 INT 16H JZ BEGIN ;无按键则跳回继续循环,有则退出 QUIT: MOV AX,4C00H ;返回到DOS INT 21H GETKEY1:CALL DIS ;显示刷新 CALL DALLY CALL DALLY CALL CLEAR ;清屏 CALL CCSCAN ;再次扫描按键 JNZ GETKEY2 ;有键按下则跳置GETKEY2 JMP BEGIN ;不然跳回开始继续循环 GETKEY2:MOV CH,0FEH MOV CL,00H ;设置目前检测是第几列 COLUM: MOV AL,CH ;选择一列,将X1~X4中一个置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;读Y1~Y4,用于判定是哪一行按键闭合 IN AL,DX L1: TEST AL,01H ;是否为第1行 JNZ L2 ;不是则继续判定 MOV AL,00H ;设置第1行第1列对应键值 JMP KCODE L2: TEST AL,02H ;是否为第2行 JNZ L3 ;不是则继续判定 MOV AL,04H ;设置第2行第1列对应键值 JMP KCODE L3: TEST AL,04H ;是否为第3行 JNZ L4 ;不是则继续判定 MOV AL,08H ;设置第3行第1列对应键值 JMP KCODE L4: TEST AL,08H ;是否为第4行 JNZ NEXT ;不是则继续判定 MOV AL,0CH ;设置第4行第1列对应键值 KCODE: ADD AL,CL ;将第1列值加上目前列数,确定按键值 CALL PUTBUF ;保留按键值 PUSH AX KON: CALL DIS ;显示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;扫描按键,判定按键是否弹起 JNZ KON ;未弹起则继续循环等候弹起 POP AX NEXT: INC CL ;目前检测列数递增 MOV AL,CH TEST AL,08H ;检测是否扫描到第4列 JZ KERR ;是则跳回到开始处 ROL AL,1 ;没检测到第4列则准备检测下一列 MOV CH,AL JMP COLUM KERR: JMP BEGIN CCSCAN PROC NEAR ;扫描是否有按键闭合子程序 MOV AL,00H MOV DX,MY8255_A ;将4列全选通,X1~X4置0 OUT DX,AL MOV DX,MY8255_C IN AL,DX ;读Y1~Y4 NOT AL AND AL,0FH ;取出Y1~Y4反值 RET CCSCAN ENDP CLEAR PROC NEAR ;清除数码管显示子程序 MOV DX,MY8255_B ;段位置0即可清除数码管显示 MOV AL,00H OUT DX,AL RET CLEAR ENDP DIS PROC NEAR ;显示键值子程序 PUSH AX ;以缓冲区存放键值为键值表偏移找到键值并显示 MOV SI,3000H MOV DL,0F7H MOV AL,DL AGAIN: PUSH DX MOV DX,MY8255_A OUT DX,AL ;设置X1~X4,选通一个数码管 MOV AL,[SI] ;取出缓冲区中存放键值 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,[BX] ;将键值作为偏移和键值基地址相加得到对应键值 MOV DX,MY8255_B OUT DX,AL ;写入数码管A~Dp CMP AL,06H ;判定按键是否为按键1 JZ XIANSHI1 CMP AL,5BH ;判定按键是否为按键2 JZ XIANSHI2 CMP AL,4FH ;判定按键是否为按键3 JZ XIANSHI3 ; CMP AL,66H ;判定按键是否为按键4 JZ XIANSHI4 JMP OUT1 XIANSHI1: CALL fasong1 ;调用发送1系统子程序 JMP OUT1 XIANSHI2: CALL fasong2 ;调用发送1系统子程序 JMP OUT1 XIANSHI3: CALL fasong3 ;调用发送1系统子程序 JMP OUT1 XIANSHI4: CALL fasong4 ;调用发送1系统子程序 JMP OUT1 OUT1:POP DX POP AX RET DIS ENDP PUTBUF PROC NEAR ;保留键值子程序 MOV SI,3000H MOV [SI],AL DEC SI CMP SI,2FFFH JNZ GOBACK MOV SI,3000H GOBACK: RET PUTBUF ENDP fasong1 PROC NEAR MOV SI,3000H
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服