使用8255A控制led.docVIP

  • 61
  • 0
  • 约2.02千字
  • 约 8页
  • 2017-08-18 发布于重庆
  • 举报
使用8255A控制led

单片机第五周任务 实验要求 8255A的A口作为输出功能,连接8盏LED灯。 8255A的B口作为输入功能,连接8个按钮。 当B口的某一按钮按下,对应的LED灯就点亮同时。同时,数码管上显示对应的按键号。如B口按钮1按下,1号LED灯就点亮,8段数码管显示1. 二.硬件分析 三.代码分析 #includereg52.h //单片机头文件 #includeabsacc.h //扩展地址解析头文件 #define PAC XBYTE[0x7FFF] //控制地址定义 #define PA XBYTE[0x7CFF] //A口地址定义 #define PB XBYTE[0x7DFF] //B口地址定义 #define PC XBYTE[0x7EFF] //C口地址定义 #define uint unsigned int #define uchar unsigned char sbit RST=P1^0; //复位引脚定义 sbit RD1=P3^7; //读引脚定义 sbit RW=P3^6; //写引脚定义 unsigned char code Tab[]={0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80}; //共阳数码管码表 void main(void) //主函数 { RST=1; //复位置1 RST=0; //复位置0 PAC=0x82; //设控制字 PB=0xff; PA=0xff; P1=0xff; while(1) { switch(PB) { case 0xfe: { P1=Tab[0]; PA=0xfe; break; } case 0xfd: { P1=Tab[1]; PA=0xfd; break; } case 0xfb: { P1=Tab[2]; PA=0xfb; break; } case 0xf7: { P1=Tab[3]; PA=0xf7; break; } case 0xef: { P1=Tab[4]; PA=0xef; break; } case 0xdf: { P1=Tab[5]; PA=0xdf; break; } case 0xbf: { P1=Tab[6]; PA=0xbf; break; } case 0x7f: { P1=Tab[7]; PA=0x7f; break; } case 0xff: { P1=0xff; PA=0xff; break; } } } } 四.我对8255A的理解 8255A是一种可编程的I/O接口芯片,可以与MCS-51系统单片机以及外设直接相连,广泛用作外部并行I/O扩展接口。 三个数据端口A,B,C 这三个端口均可看作是I/O口,但它们的结构和功能也稍有不同。 1.A口:是一个独立的8位I/O口,它的内部有对数据输入/输出的锁存功能。 2.B口:也是一个独立的8位I/O口,仅对输出数据的锁存功能。 3.C口:可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。也是仅对输出数据进行锁存。 面向CPU的引脚信号及功能 1.D0-D7:8位,双向,三态数据线,用来与系统数据总线相连; 2,RESET:复位信号,高电平有效,输入,用来清除8255A的内部寄存器,并置A口,B口,C口均为输入方式; 3.CS:片选,输入,用来决定芯片是否被选中; 4.RD:读信号,输入,控制8255A将数据或状态信息送给CPU; 5.WR:写信号,输入,控制CPU将数据或控制信息送到8255A; 6.A1,AO:内部口地址的选择,输入。这两个引脚上的信号组合决定对8255A内部的哪一个口或寄存器进行操作。 8255A有三种工作方式,用户可以通过编程来设置。 方式0 简单输入/――输出查询方式;A,B,C三个端口均可。 方式1 选通输入/――输出中断方式;A ,B,两个端口均可。 方式2 双向输入/――输出中断方式。只有A

文档评论(0)

1亿VIP精品文档

相关文档