- 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)