小蜜蜂51单片机之IO扩展技术和存储器映射扩展

关键词:IO扩展技术;存储器映射扩展;基础;小蜜蜂

一、知识点

1.IO扩展和存储器映射扩展

2.WR-单片机写引脚,WR=0,Y4C输出0/1由Y4是0/1控制,

3.IO扩展方式用J13的2、3引脚;存储器映射方式用J13的1、2引脚(1引脚连接单片机的P3^6)(执行MOVX写外部存储器,执行MOV写内部存储器,当执行MOVX时,1引脚WR会有信号输出,输出低电平)

4.在4*4矩阵键盘中,用不了存储器映射扩展

二、实验

实验目的:

实验1:IO扩展模式

所需部件:

1.HC573锁存器选择信道

2.Delay函数

3.LEDRunning()先只点亮低四位,后只点亮高四位

4.SMGRunning()数码管逐个闪烁

代码:

#include <REGX52.H>

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

void SelectHC573(unsigned char channel)
{
	switch(channel)
	{
		case 4:P2=(P2&0x1f)|0x80;break;//0x80控制LED的地址
		case 5:P2=(P2&0x1f)|0xA0;break;//0xA0控制蜂鸣器和继电器的地址
		case 6:P2=(P2&0x1f)|0xC0;break;//0xC0控制数码管段选的地址
		case 7:P2=(P2&0x1f)|0xE0;break;//0xE0控制控制数码管位选的地址
	}
}

void LEDRunning()
{
	SelectHC573(4);
	P0=0xf0;//让低四位亮
	Delay(60000);
	Delay(60000);
	P0=0x0f;//让指示灯的高四位亮
	Delay(60000);
	Delay(60000);
	P0=0xff;//指示灯全灭
	Delay(60000);
	Delay(60000);
}

void SMGRunning()
{
	unsigned char i=0;
	for(i=0;i<8;i++)
	{
		SelectHC573(6);//数码管位选
		P0=0x01<<i;
		SelectHC573(7);//数码管段选
		P0=0x00;//灯全部打开
		Delay(60000);
	  Delay(60000);
	}
	P0=0xff;//关闭所有的灯
	Delay(60000);
  Delay(60000);
}

void main()
{
	while(1)
	{
		LEDRunning();
		SMGRunning();//LED先亮,再数码管逐个点亮
	}
}

 实验2:存储器映射扩展

大体与实验1相同,区别:

1.多了头文件(XBYTE关键字才能起作用)——#include "absacc.h"

2.去掉H7573锁存器部分,直接用XBYTE[0x8000]=0xf0;——XBYTE[地址]=数据/指令,取代先选信道再操作的步骤

3.IO扩展方式用J13的2、3引脚;存储器映射方式用J13的1、2引脚

代码:

#include <REGX52.H>
#include "absacc.h"
void Delay(unsigned int t)
{
	while(t--);
	while(t--);
}

void LEDRunning()
{
	XBYTE[0x8000]=0xf0;
	Delay(60000);
	Delay(60000);
	XBYTE[0x8000]=0x0f;
	Delay(60000);
	Delay(60000);
	XBYTE[0x8000]=0xff;
	Delay(60000);
	Delay(60000);
}

void SMGRunning()
{
	unsigned char i=0;
	for(i=0;i<8;i++)
	{
		XBYTE[0xc000]=0x01<<i;
		XBYTE[0xe000]=0xff;
		Delay(60000);
	  Delay(60000);
	}
	XBYTE[0xe000]=0xff;
	Delay(60000);
  Delay(60000);
}

void main()
{
	while(1)
	{
		LEDRunning();
		SMGRunning();//LED先亮,再数码管逐个点亮
	}
}

感谢B站小蜜蜂老师的教程,本笔记资料及代码均来自教程,仅作为个人复习、整理和学习交流用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值