要求
存储器映射扩展技术:
在单片机综合训练平台上,分别用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代码写法