蓝桥杯LED跑马灯继电器蜂鸣器直接存储控制与IO控制

下面一段程序实现的是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模式进行控制,下期再见

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值