下面一段程序实现的是LED闪烁三遍、LED从左到右依次亮起、继电器吸合后断开、led从右往左依次熄灭
首先用直接存储进行控制
硬件方面需要做到:将J13单元跳帽短接MM端
代码方面需要了解:
1.XBYTE[0x8000]=0xff;0x8000表示控制led存储空间,led引脚为0时点亮,1时熄灭,此代码表示将led全部熄灭。
2.XBYTE[0xa000]表示向控制继电器与蜂蜜器的地址写入指令,P06=1时蜂鸣器响,P04=1时继电器吸合,
3.二者配合延时函数即可完成上述功能
#include <reg52.h>
#include <absacc.h>
void delay(unsigned char x)
{ unsigned char i;
while(x--)
{for(i=0;i<113;i++);}
}
void ledrunning()
{
unsigned char i;
for(0;i<3;i++)
{ XBYTE[0x8000]=0x00;
delay(500);
XBYTE[0x8000]=0xff;
delay(500);
}
for(i=1;i<=8;i++)
{XBYTE[0x8000]=0xff>>i;//LED从左往右依次打开;
delay(500);
}
XBYTE[0xa000]=XBYTE[0xa000]|0x40;//P06=1蜂鸣器打开
delay(500);
XBYTE[0xa000]=XBYTE[0xa000]&0xbf;//P06=0,蜂鸣器关闭
delay(500);
XBYTE[0xa000]=XBYTE[0xa000]|0x10;//P04=1时继电器打开
delay(500);
XBYTE[0xa000]=XBYTE[0xa000]&0xef;//P04=0时继电器关闭
delay(500);
for(i=1;i<=8;i++)
{XBYTE[0x8000]=~(0xff<<i);//LED从右往左依次熄灭
delay(500);
}
}
void initsystem()
{
XBYTE[0x8000]=0xff;
XBYTE[0xa000]=0x00;
}
void main()
{
while(1)
{
initsystem();
ledrunning();
}
}
需要注意在写入一个字节时尽量不改变原来存储空间的其他位,运用与门、或门等运算配合逻辑0与逻辑1进行即可,欢迎广大博友批评指正
也可以用IO模式进行控制,下期再见