使用8255A控制led
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机第五周任务
一.实验要求
8255A的A口作为输出功能,连接8盏LED灯。
8255A的B口作为输入功能,连接8个按钮。
当B口的某一按钮按下,对应的LED灯就点亮同时。
同时,数码管上显示对应的按键号。如B口按钮1按
下,1号LED灯就点亮,8段数码管显示1.
二.硬件分析
三.代码分析
#include
#include
#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端口才有。