蓝桥杯之单片机学习(十三)——IO扩展技术与存储器映射扩展

简介: 蓝桥杯之单片机学习(十三)——IO扩展技术与存储器映射扩展

零、概述


0a2653c851af460fa595bd959398a8f1.png2d65d23f6d4748949b924e4057485923.png


对内存地址进行操作

P0口,可数据传输,与地址低字节

P2口,可高8位地址


一、训练任务


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


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

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

3.循环执行上述功能。


二、训练准备


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


0x8000—指示灯

0xa000—蜂鸣器与继电器

0xc000—数码管位选

0xe000—数码管段码


2.2 提示


1.进行存储器映射扩展,CT107平台的J13要将1-2脚短接

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

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

4.

4cebaac233b3433da32a72337a77fc60.png


三、代码展示


3.1 IO扩展


#include 
typedef unsigned int uint;
typedef unsigned char uchar;
void Delay(uint t)
{
  while(t--);
  while(t--);
}
//配置HC138
void SelectHC138(uchar channel)
{
  switch(channel)
  {
  case 4:    //LED
    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;
  case 0:    //锁住所有寄存器
    P2 = (P2 & 0X1F) | 0X00;
  break;
  }
}
void LEDRuning()
{
  SelectHC138(4);  //打开LED的HC138
  P0 = 0XF0;
  Delay(60000);
  Delay(60000);
  P0 = 0X0F;
  Delay(60000);
  Delay(60000);
  P0 = 0XFF;
  Delay(60000);
  Delay(60000);
}
void SMGRuning()
{
  uchar i;
  for(i = 0; i < 8; i++)
  {
  SelectHC138(6);
  P0 = 0X01 << i;
  SelectHC138(7);
  P0 = 0X00;
  Delay(60000);
  Delay(60000);
  }
  P0 = 0XFF;
  Delay(60000);
  Delay(60000);
}
void Initsys()
{
  SelectHC138(5);
  P0 = 0X00;//关闭蜂鸣器和继电器
  SelectHC138(4);
  P0 = 0XFF;//关闭LED
}
void main()
{
  Initsys();
  while(1)
  {
  LEDRuning();
  SMGRuning();
  }
}


3.2 存储器扩展


#include 
#include "absacc.h"
typedef unsigned int uint;
typedef unsigned char uchar;
void Delay(uint t)
{
  while(t--);
  while(t--);
}
void LEDRuning()
{
  XBYTE[0X8000] = 0XF0;
  Delay(60000);
  Delay(60000);
  XBYTE[0X8000] = 0X0F;
  Delay(60000);
  Delay(60000);
  XBYTE[0X8000] = 0XFF;
  Delay(60000);
  Delay(60000);
}
void SMGRuning()
{
  uchar i;
  for(i = 0; i < 8; i++)
  {
  XBYTE[0XC000] = 0X01 << i;
  XBYTE[0XE000] = 0X00;
  Delay(60000);
  Delay(60000);
  }
  XBYTE[0XE000] = 0XFF;
  Delay(60000);
  Delay(60000);
}
void main()
{
  while(1)
  {
  LEDRuning();
  SMGRuning();
  }
}


四、注意事项


1.XBYTE后面是中括号[]

2.如果用到矩阵键盘,就不雅用寄存器扩展方式,因为与P3^6产生冲突


相关文章
|
4月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
|
4月前
stm32f407探索者开发板(十四)——IO引脚复用和映射
stm32f407探索者开发板(十四)——IO引脚复用和映射
340 0
|
5月前
|
物联网 Linux 芯片
学习嵌入式是选择单片机还是Linux?
单片机通常指的是一种集成了处理器、存储器和各种外设接口的微控制器芯片,常见的有STC、51系列、AVR、ARM Cortex-M等。单片机具有低成本、低功耗、实时性强等特点,适用于对资源要求较低、功耗要求较低、实时性要求较高的嵌入式系统。学习单片机开发可以让您深入了解嵌入式系统的底层原理和硬件编程,对于对嵌入式系统底层开发感兴趣的人来说,是一个很好的选择。
132 4
|
6月前
|
存储 Java API
【JAVA学习之路 | 进阶篇】IO流及流的分类
【JAVA学习之路 | 进阶篇】IO流及流的分类
|
6月前
|
存储 监控 芯片
单片机的扩展结构
单片机的扩展结构
169 2
|
6月前
|
存储 搜索推荐 IDE
新手如何快速上手学习单片机?
新手如何快速上手学习单片机?
120 0
|
6月前
|
存储 编译器 C语言
单片机学习之路一些常见的疑问也是我的个人学习总结
单片机学习之路一些常见的疑问也是我的个人学习总结
128 0
|
6月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
244 0
|
6月前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
55 1
|
6月前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
88 1