1、微机接口课程设计目 录一、 设计题目2二、 设计内容和要求2三、 设计目标意义2四、 系统硬件3五、 元器件介绍3六、 设计过程13七、 心得体会54八、 参考文件54一、设计题目 点阵LED显示功效设计二、设计内容和要求(1)、编程语言为汇编语言和C语言;(2)、硬件电路基于80x86微机接口电路;(3)、程序功效要求:小键盘给定、数码管显示、控制并显示“待机”,“欢迎你进入系统!”,“再见”(延时10秒);(4)、含有当地及远程(串行方法)功效。三、设计目标意义在大型商场、车站、码头、地铁站和各类办事窗口等和越来越多公共场所需要用LED点阵显示图形和汉字。LED行业已成为一个快速发展新兴产
2、业,市场空间巨大,前景宽广。伴随信息产业高速发展,LED显示作为信息传输一个关键手段,已广泛应用于室内外需要进行服务内容和服务宗旨宣传公众场所,比如户内外公共场所广告宣传、机场车站旅客引导信息、公交车辆报站系统、证券和银行信息显示、餐馆报价信息豆示、高速公路可变情报板、体育场馆比赛转播、楼宇灯饰、交通信号灯、景观照明等。显然,LED显示已成为城市亮化、现代化和信息化社会一个关键标志。在设计过程中,自己亲自或参考资料完成系统电路接线,然后利用汇编语言和C语言编写程序,从而愈加熟悉自己所学过东西,为以后学习和工作打下基础。四、系统硬件可编程外围接口芯片8255A、基础输入输出端口、八段数码管、小键
3、盘、16550远程控制器五、元器件介绍 5.1 可编程外围接口芯片8255A5.1.1 8255A引脚 8255A是可编程三端口并行输入输出接口芯片,含有40个引脚,双列直插式封装,由+5V供电,其引脚和功效如示意图所表示:A、B、C三个端口各有8条端口I/O线:PA7?PA0,PB7?PB0,PC7?PC0,共32个引脚,用于8255A和外设之间数据(或控制、状态信号)传送。D0D7:8位三态数据线,接至系统数据总线。CPU经过它实现和8255之间数据读出和写入,和控制字和状态字写入和读出等。A0A1:地址信号。A0和A1经片内译码产生四个有效地址分别对应A、B、C三图1 8255A引脚及功
4、效示意图1 402 393 384 375 366 357 348 339 3210 8255A 3111 3012 2913 2814 2715 2616 2517 2418 2319 2220 21PA3 PA2PA1 PA0 RD CS GND A1A0 PC7 PC6 PC5 PC4PC0 PC1 PC2 PC3 PB0 PB1 PB2 PA4 PA5PA6 PA7 WR RESET D0 D1D2 D3 D4 D5 D6D7 VCC PB7 PB6 PB5 PB4 PB3 B组(b) 功效示意图(a)引脚 A口 C口8255A C口 B口CSD0D7WRRDA0A1RESETPA0P
5、A78PC4PC74PC0PC34PB0PB78A组表1 8255A各端口读写操作时信号关系CSRDWRA1A0操作01000写端口A01001写端口B01010写端口C01011写控制寄存器00100读端口A00101读端口B00110读端口C00111无操作个独立数据端口和一个公共控制端口。在实际使用中,A1、A0端接到系统地址总线A1、A0。 CS#:片选信号,由系统地址译码器产生,低电平有效。 读写控制信号RD#和WR#:低电平有效,用于决定CPU和8255A之间信息传送方向:当RD#=0时,从8255A读至CPU;当WR#=0时,由CPU写入8255A。CPU对8255各端口进行读写
6、操作时信号关系如表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输出方法控制字,由该控制字决定端口工
7、作方法,还可依据CPU命令对端口C实现位置位或复位操作。(3)数据总线缓冲器 这是一个8位三态数据缓冲器,8255A正是经过它和系统数据总线相连,实现8255A和CPU之间数据传送。输入数据、输出数据、CPU发给8255A控制字等全部是经过该部件传输。 (4)读/写控制逻辑 读/写控制逻辑电路功效是负责管理8255A和CPU之间数据传送过程。它接收CS及地址总线信号A1、A0和控制总线控制信号RESET、WR、RD,将它们组合后,得到对A组控制部件和B组控制部件控制命令,并将命令送给这两个部件,再由它们控制完成对数据、状态信息和控制信息传送。各端口读写操作和对应控制信号之间关系见 表1所表示。
8、B组控制部件内部DB(8)PA7 PA0D0D7数据总线缓冲器读/写控制逻辑RESETA1A0WRRDCSA组端口A(8)A组端口C(高4位)B组端口C(低4位)B组端口B(8)A组控制部件PC7 PC4PC3 PC0PB7 PB0图2 8255A内部结构框图5.1.8255A多种工作方法及控制字1 8255A工作方法 8255A在使用前要先写入一个工作方法控制字,以指定A、B、C三个端口各自工作方法。8255A共有三种工作方法:方法0基础输入输出方法,即无须联络就能够直接进行8255A和外设之间数据输入或输出操作。A口、B口、C口高四位和低四位均可设置为方法0。 方法1选通输入输出方法,此时
9、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工作于方
10、法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口按位置位/复位控制字必需跟在方法选择控制字以后写入控制字寄存器,即使仅使用该功效,也应先选送一个方法控制字。方法选择控制字
11、只需写入一次,以后就可数次使用C口按位置位/复位控制字对C口一些位进行置1或清0操作。5.2 8X8点阵式LED5.2.1其内部结构以下:图3 X8点阵式结构图5.2.2 8x8点阵式LED工作原理由LED结构图可知道,8x8点阵式LED是由64个发光二极管组成,每行8个二极管阳极串接在一起,每列8个二极管负端串接在一起。当要选中某个点时就得把该点行接高电平,列接低电平。如:要选中第二行第三个点,即要求DC7接5伏,DR3接地。经过不一样接线能够用点组成所需要图形。5.3 基础输入输出端口 图4所表示,CPU能够经过基础输入输出端口和外设进行信息交换。其中IA0IA7和IB0IB7为两个输入端
12、口,CPU可经过这两个端口从外设取得信息;OA0OA7和OB0OB7是两个输出端口,CPU可经过其将信息输出给外设。图45.4 键盘和数码管5.4.1矩阵式键盘结构及原理矩阵式键盘由行线和列线组成,按键在行、列线交叉点上,其结构图5所表示。 由图可知,一个44行、列结构能够组成一个含有16个按键键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。图5矩阵式键盘中,行、列线分别连接到按键开关两端,行线经过上拉电阻接到5V上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由和此行线相连列线电平决定。这是识别按键是否按下关键。然而,矩阵键盘
13、中行线、列线和多个键相连,各按键按下是否均影响该键所在行线和列线电平,各按键间将相互影响,所以,必需将行线、列线信号配合起来作合适处理,才能确定闭合键位置。5.4.2 数码管八段数码管图6所表示。当数码管被选中后,对其对应代码段施加高电平,数码管便产生对应图形。比如在数码管被选中后,对端A、B、C、D、E、F、G、DP分别置1(高电平)、1、1、1、1、1、0(低电平)、0,则数码管就会显示0字形,所以0数码管代码为11111100B。对应地能够求出其它数字数码管代码。图65.4.3 数码管和小键盘图7 数码管和小键盘显示单元结构图 图7,数码管选通受小键盘控制,当小键盘列选通时,即施加低电平
14、,则该列所对应数码管也被选通。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 源程
15、序6.4.1 C语言#include #include #include #include #include #include #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*4unsigned char design56= 0xff,0xef,0x08,0x5a,0xdd,0xaa,0x7f,0
16、xff, 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 zaijian16=0x1,0xef,0x83,0x83,0xab,0x
17、1,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;a50;) for(b=0;b50;b+) c=0x01; for(d=0;d8;d+) for(e=0;e250;e+) for(n=0;n1000;n+);
18、outp(MYIO_A,c); outp(MYIO_B,designa+d); c=c1; a=a+1; /单字显示void single(void)for(a=0;a56;) for(b=0;b60;b+) c=0x01; for(d=0;d8;d+) for(e=0;e250;e+) for(n=0;n250;n+); outp(MYIO_A,c); outp(MYIO_B,designa+d); c=c1; a=a+8; void main () /主函数outp(MY8255_MODE,0x81); /初始化8255 printf(1:Singlen2:Rolln4:Quitn); f
19、or(;) cc=0; ccscan(); tt=cc; for(; ;) cc=0; ccscan(); if(cc=0)break; if(tt!=0)break; while(1) if(tt=1) /单字显示 single(); printf(nn1:Singlen2:Rolln4:Quitn); for(; ;) cc=0; ccscan(); tt=cc; for(; ;) cc=0; ccscan(); if(cc=0)break; if(tt!=0)break; if(tt=2) /上移显示 roll(); printf(nn1:Singlen2:Rolln4:Quitn);
20、for(; ;) cc=0; ccscan(); tt=cc; for(; ;) cc=0; ccscan(); if(cc=0)break; if(tt!=0)break; if(tt=4) for(a=0;a16;) for(b=0;b40;b+) c=0x01; for(d=0;d8;d+) for(e=0;e250;e+) for(n=0;n250;n+); outp(MYIO_A,c); outp(MYIO_B,zaijiana+d); c=c1; a=a+8; exit(0); /退出 2) 远程控制代码发送端:;*依据CHECK配置信息修改下列符号值* IOY0 EQU 0C40
21、0H ;片选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线路状态寄存器端口地址 MY8
22、255_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 ENDSDATA SEGMENTDTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDS ;键值表,0F对应7段数码管段位值CODE
23、 SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX MOV SI,3000H ;建立缓冲区,存放要显示键值MOV AL,00H ;先初始化键值为0MOV SI,AL MOV DX,MY8255_MODE ;初始化8255工作方法 MOV AL,81H ;方法0,A口、B口输出,C口低4位输入 OUT DX,ALMOV DX,MY16550_3 ;设置16550线路控制寄存器 MOV AL,80H ;准备设置波特率除数寄存器 OUT DX,AL CALL DALLY5 MOV DX,MY16550_0 ;设置除数寄存器低字节0CH
24、 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
25、AL,00H ;中止不打开 OUT DX,AL CALL DALLY5BEGIN: CALL DIS ;显示刷新 CALL CLEAR ;清屏CALL CCSCAN ;扫描按键JNZ GETKEY1 ;有键按下则跳置GETKEY1 MOV AH,1 ;判定PC键盘是否有按键按下 INT 16H JZ BEGIN ;无按键则跳回继续循环,有则退出QUIT: MOV AX,4C00H ;返回到DOS INT 21HGETKEY1:CALL DIS ;显示刷新 CALL DALLY CALL DALLY CALL CLEAR ;清屏CALL CCSCAN ;再次扫描按键JNZ GETKEY2 ;有键
26、按下则跳置GETKEY2JMP BEGIN ;不然跳回开始继续循环GETKEY2:MOV CH,0FEHMOV CL,00H ;设置目前检测是第几列COLUM: MOV AL,CH ;选择一列,将X1X4中一个置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;读Y1Y4,用于判定是哪一行按键闭合 IN AL,DXL1: TEST AL,01H ;是否为第1行 JNZ L2 ;不是则继续判定 MOV AL,00H ;设置第1行第1列对应键值JMP KCODEL2: TEST AL,02H ;是否为第2行 JNZ L3 ;不是则继续判定 MOV AL,04
27、H ;设置第2行第1列对应键值 JMP KCODEL3: TEST AL,04H ;是否为第3行 JNZ L4 ;不是则继续判定 MOV AL,08H ;设置第3行第1列对应键值JMP KCODEL4: TEST AL,08H ;是否为第4行 JNZ NEXT ;不是则继续判定 MOV AL,0CH ;设置第4行第1列对应键值KCODE: ADD AL,CL ;将第1列值加上目前列数,确定按键值CALL PUTBUF ;保留按键值PUSH AXKON: CALL DIS ;显示刷新CALL CLEAR ;清屏CALL CCSCAN ;扫描按键,判定按键是否弹起JNZ KON ;未弹起则继续循环
28、等候弹起POP AXNEXT: INC CL ;目前检测列数递增 MOV AL,CHTEST AL,08H ;检测是否扫描到第4列JZ KERR ;是则跳回到开始处 ROL AL,1 ;没检测到第4列则准备检测下一列MOV CH,ALJMP COLUMKERR: JMP BEGINCCSCAN PROC NEAR ;扫描是否有按键闭合子程序 MOV AL,00H MOV DX,MY8255_A ;将4列全选通,X1X4置0OUT DX,AL MOV DX,MY8255_C IN AL,DX ;读Y1Y4NOT AL AND AL,0FH ;取出Y1Y4反值RETCCSCAN ENDPCLEAR
29、 PROC NEAR ;清除数码管显示子程序 MOV DX,MY8255_B ;段位置0即可清除数码管显示 MOV AL,00H OUT DX,ALRETCLEAR ENDPDIS PROC NEAR ;显示键值子程序 PUSH AX ;以缓冲区存放键值为键值表偏移找到键值并显示 MOV SI,3000H MOV DL,0F7HMOV AL,DLAGAIN: PUSH DX MOV DX,MY8255_A OUT DX,AL ;设置X1X4,选通一个数码管 MOV AL,SI ;取出缓冲区中存放键值 MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AX MOV A
30、L,BX ;将键值作为偏移和键值基地址相加得到对应键值 MOV DX,MY8255_B OUT DX,AL ;写入数码管ADp 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 RETDIS ENDPPUTBUF 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