目录
1、IO扩展代码:
2、存储器扩展代码
IO扩展:J13? ? 2、3引脚短接
存储器扩展:J13? ? ?1、2引脚短接
分别用I/O扩展方式与存储器扩展方式对LED灯和数码管进行基本的控制。
①首先点亮指示灯低4位,关闭高4位,延时片刻;点亮指示灯的高4位,关闭低4位,延时片刻,关闭所有指示灯。
②然后依次逐个点亮数码管的所有段码,每次只点亮一个数码管。
③循环执行上述功能。?
?WR:写引脚(Y4C要为1(或非),则Y4、WR都为0。WR要为0,J13的2(WR)、3(GND)引脚接一起)
Y4 :P2 = 100X XXXX? ? ? ? ?(&与;|或)
? ? ? ?0x1f = 0001 1111? ? ? ? ? ?(P2 & 0x1f) = 0000 0000
? ? ? 0x80 = 1000 0000? ? ? ? ? (P2 & 0x1f) | 0x80 = 100 0?0000? //LED
Y5 :? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0xa0 = 101 0 0000? //蜂鸣器与继电器
Y6 :? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0xc0 = 110?0 0000? //数码管位置
Y7 :? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0xe0 = 111?0 0000? //数码管段码
1、IO扩展代码:
#include "reg52.h"
void InitHC138(unsigned char n)//选Y(IO扩展)
{
switch (n)
{
case 4://LED 842 1
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 Delay(unsigned int t)
{
while(t--);
while(t--);
}
void LEDRuning()
{
InitHC138(4);
P0 = 0xf0;
Delay(60000);
Delay(60000);
P0 = 0x0f;
Delay(60000);
Delay(60000);
P0 = 0xff;
Delay(60000);
Delay(60000);
}
void SMGRuning()
{
unsigned char i;
for (i = 0; i < 8; i++)
{
InitHC138(6);
P0 = 0x01 << i;
InitHC138(7);
P0 = 0x00;
Delay(60000);
Delay(60000);
}
P0 = 0xff;//关闭数码管
Delay(60000);
Delay(60000);
}
void main()
{
while(1)
{
LEDRuning();
SMGRuning();
}
}
2、存储器扩展代码
#include "reg52.h"
#include "absacc.h"
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
void LEDRuning()
{
// InitHC138(4);
// P0 = 0xf0; 点亮指示灯低4位,关闭高4位
XBYTE[0x8000] = 0xf0;
Delay(60000);
Delay(60000);//延时片刻
// P0 = 0x0f; 点亮指示灯高4位,关闭低4位
XBYTE[0x8000] = 0x0f;
Delay(60000);
Delay(60000);//延时片刻
// P0 = 0xff; 关闭所有指示灯
XBYTE[0x8000] = 0xff;
Delay(60000);
Delay(60000);
}
void SMGRuning()
{
unsigned char i;
for (i = 0; i < 8; i++)
{
// InitHC138(6);
// P0 = 0x01 << i;
// InitHC138(7);
// P0 = 0x00; 依次逐个点亮数码管的所有段码
XBYTE[0xc000] = 0x01 << i;
XBYTE[0xe000] = 0x00;
Delay(60000);
Delay(60000);
}
// P0 = 0xff;//关闭数码管
XBYTE[0xe000] = 0xff;
Delay(60000);
Delay(60000);
}
void main()
{
while(1)
{
LEDRuning();
SMGRuning();
}
}
|