蓝桥杯单片机组-14 IO扩展与存储器的映射

本文介绍了在单片机中使用IO扩展和存储器映射方法控制LED灯低4位、高4位切换以及数码管显示的实验过程,涉及XBYTE关键字和特定引脚配置。
摘要由CSDN通过智能技术生成

要求

存储器映射扩展技术:

在单片机综合训练平台上,分别用IO扩展方式与存储器扩展方式对LED灯数码管进行基本的控制。

1.首先点亮指示灯低4位,关闭高4位,延时片刻,点亮指示灯的高4位,关闭低4位,延时片刻,关闭所有指示灯。

2.依次逐个点亮数码管的所有断码,每次只点亮一个数码管。

3.循环执行上述功能。

外部资源的地址映射关系:

0x8000:指示灯            0xa000:蜂鸣器与继电器

0xc000:数码管位选     0xe000:数码管段选

注意:

1.进行存储器的映射扩展,需要将J13的1、2引脚短接。

2.引入“absacc.h”,通过XBYTE关键字来直接扩展资源。

3.存储器映射扩展方式要占用单片机的P3.6引脚。

代码

IO扩展做法

#include"reg52.h"

void Delay(unsigned int t)
{
  while(t--);
	while(t--);
}


void SelectHC573(unsigned char channel)
{
	switch(channel)
	{
		case 4:
			P2 = (P2 & 0x1f) | 0x80;
		break;
		case 5:
			P2 = (P2 & 0x1f) | 0xa0;
		break;
		case 6:
			P2 = (P2 & 0x1f) | 0xc0;
		break;
		case 7:
			P2 = (P2 & 0x1f) | 0xe0;
		break;
	}
}

/*=======流水灯========*/
void LEDRunning()
{
  SelectHC573(4);
	P0 = 0xf0;        //低4位亮
	Delay(5000);
	Delay(5000);
	P0 = 0x0f;        //高4位亮
	Delay(5000);
	Delay(5000);
	P0 = 0xff;        
	Delay(5000);
	Delay(5000);
}
/*=======数码管流水灯=========*/
void SMGRunning()
{
  unsigned char i;
	for(i=0;i<8;i++)
	{
	  SelectHC573(6);
		P0 = 0x01 << i;
		SelectHC573(7);
		P0 = 0x00;
		Delay(5000);
	  Delay(5000);
	}
	P0 = 0xff;
	Delay(5000);
	Delay(5000);
}

void main()
{
	while(1)
	{
		LEDRunning();
		SMGRunning();
	}
}

注意:数码管流水灯的写法 

存储器扩展做法

不需要SelectHC573这个函数了,直接用XBYTE,如下所示:

	XBYTE[0x8000] = 0xf0;
//  SelectHC573(4);
//	P0 = 0xf0;             //流水灯低4位亮
//数码管流水灯	
	XBYTE[0xc000] = 0x01 << i;
//	  SelectHC573(6);
//		P0 = 0x01 << i;

完整代码如下: 

#include"reg52.h"
#include"absacc.h"

void Delay(unsigned int t)
{
  while(t--);
	while(t--);
}




/*=======流水灯========*/
void LEDRunning()
{
	XBYTE[0x8000] = 0xf0;
//  SelectHC573(4);
//	P0 = 0xf0;        //低4位亮
	Delay(5000);
	Delay(5000);
	XBYTE[0x8000] = 0x0f;
//	P0 = 0x0f;        //高4位亮
	Delay(5000);
	Delay(5000);
	XBYTE[0x8000] = 0xff;
//	P0 = 0xff;        
	Delay(5000);
	Delay(5000);
}
/*=======数码管流水灯=========*/
void SMGRunning()
{
  unsigned char i;
	for(i=0;i<8;i++)
	{
		XBYTE[0xc000] = 0x01 << i;
//	  SelectHC573(6);
//		P0 = 0x01 << i;
		XBYTE[0xe000] = 0x00;
//		SelectHC573(7);
//		P0 = 0x00;
		Delay(5000);
	  Delay(5000);
	}
	XBYTE[0xe000] = 0xff;
//	P0 = 0xff;
	Delay(5000);
	Delay(5000);
}

void main()
{
	while(1)
	{
		LEDRunning();
		SMGRunning();
	}
}

总结:

1.流水灯低4位、高4位的写法:0xf0?

2. 数码管流水灯的写法

3.存储器扩展使用要有:头文件

4.注意XBYTE代码写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值