13-io扩展技术与存储器映射扩展
1.01-LED指示灯的基本控制2.02-蜂鸣器与继电器的基本控制3.05-独立按键的基本操作与扩展应用4.04-共阳数码管的动态显示5.03-共阳极数码管的静态显示6.06-矩阵键盘的基本操作7.07-中断系统与外部中断应用8.08-定时器的基本原理与应用9.09-定时器的进阶综合案例10.10-PWM脉宽调制信号的发生与控制11.11-串口通信的基本原理与应用12.12-串行接口的进阶应用
13.13-io扩展技术与存储器映射扩展
14.14-基础技能综合实训案例15.15-DS18B20温度传感器的基本应用16.16-DS1302的基本应用17.17-基于NE555的信号发生与频率测量18.18-PCF8591模块的基本使用19.19-AT24C02的基本应用IO扩展技术与存储器映射扩展
io扩展方式代码如下:
copy#include <REGX52.H>
void Delay_ms(unsigned int xms) {
unsigned int i,j;
for(i = 0; i < xms;i++) {
for(j= 0; j< 299;j++);
}
}
void _74HC138(unsigned char n) {
switch(n) {
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 System_Init(void) {
_74HC138(5);
P0 = 0x00;
_74HC138(4);
P0 = 0xFF;
}
void LED_Running() {
_74HC138(4);
P0 = 0xF0;
Delay_ms(1000);
P0 = 0x0F;
Delay_ms(1000);
P0 = 0xFF;
Delay_ms(1000);
}
void SMG_Running(void) {
unsigned char i;
for(i = 0; i < 8;i++) {
_74HC138(6);
P0 = 0x01 << i;
_74HC138(7);
P0 = 0x00;
Delay_ms(1000);
}
P0 = 0xFF;
Delay_ms(1000);
}
void main(void) {
System_Init();
while(1) {
LED_Running();
SMG_Running();
}
}
存储器扩展方式代码如下:
copy#include <REGX52.H>
#include "absacc.h"
void Delay_ms(unsigned int xms) {
unsigned int i,j;
for(i= 0 ; i< xms;i++) {
for(j=0; j < 299; j++);
}
}
void System_Init(void) {
XBYTE[0X8000] = 0XFF;
XBYTE[0XA000] = 0X00;
}
void LED_Running(void) {
XBYTE[0X8000] = 0XF0;
Delay_ms(1000);
XBYTE[0X8000] = 0X0F;
Delay_ms(1000);
XBYTE[0X8000] = 0XFF;
Delay_ms(1000);
}
void SMG_Running(void) {
unsigned char i;
for(i=0;i<8;i++) {
XBYTE[0XC000] = 0X01 << i;
XBYTE[0XE000] = 0X00;
Delay_ms(1000);
}
XBYTE[0XE000] = 0XFF;
Delay_ms(1000);
}
void main(void) {
System_Init();
while(1) {
LED_Running();
SMG_Running();
}
}
注意事项:
- XBYTE后面是中括号[]
- 如果用到矩阵键盘,就不雅用寄存器扩展方式,因为与P3^6产生冲突
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步