蓝桥杯单片机——流水灯

 

 

 

概要

        实验名称:LED流水灯及继电器开关实验  

        实验环境:IAP15F2K61S2国信长天实验板

        实验配置:J3跳线配置为I/O模式,J5配置为BTN模式,J3配置为1-3,2-4模式

        实验要求:实现LED从第一位到第八位的流水灯,此时继电器为闭合状态,LED全部点亮意为流水灯结束,此时继电器为断开状态。

备注:蜂鸣器在实验过程中应为关闭状态

技术实现

1.硬件环境

        IAP15F2K61S2单片机部分

        74HC138

        74HC573

ULN22003

2.原理图

因为硬件设计原因,在实验中会涉及到蜂鸣器电路部分

3.代码实现

#include <stc15f2k60s2.h>
#include <intrins.h>

/*宏函数*/
#define REL(X) {P0=X;P2=((P2&0X1F)|0XAF);P2=P2&0X1F;}
#define LED(X) {P0=X;P2=((P2&0X1F)|0X80);P2=P2&0X1F;}
#define BUZ(X) {P0=X;P2=((P2&0X1F)|0XAF);P2=P2&0X1F;}

/*延时函数*/
void Delay3000ms(void)	//@11.0592MHz
{
	unsigned char data i, j, k;

	_nop_();
	_nop_();
	i = 127;
	j = 18;
	k = 107;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

/*LED流水灯+全部点亮*/
void LED_TASK()
{
    static unsigned char led = 0x01;
    while(led != 0x00)
    {
        LED(~led);
        led <<= 1;
        Delay3000ms();
    }
    LED(led); 
}

/*主函数*/
void main(void)
{  
    BUZ(0X00);                  //关闭蜂鸣器
    LED(0X01);                  //上电后L1亮,其余熄灭
    REL(0X10);                  //打开继电器
    LED_TASK();
    REL(0X00);                  //关闭继电器
    while(1);
}

 

4.内容要点 

        1.宏函数   

宏函数:宏函数是C语言中的一种预处理器指令,它在预编译阶段将宏名替换为后面的替换体。宏函数的使用可以提高程序的执行效率,因为它避免了函数调用的开销,如参数压栈、生成汇编语言的CALL调用、返回参数、执行return等过程。

宏函数的定义使用#define指令。例如:#define SQUARE(x) ((x)*(x))

          通过向LED(X)传递实参实现相应功能 ,代替的代码部分如下: 

    /*LED开*/
 	P2 = ((P2 & 0X1F) | 0X80);
	P0 = 0x00;
	P2 = P2 & 0x1f;
	Delay();
		
	/*LED关*/
	P2 = ((P2 & 0x1f) | 0x80);
	P0 = 0xff;
	P2 = P2 & 0x1f;
	Delay();

        蜂鸣器部分

/*关闭蜂鸣器*/
void clo_buzzer()
{
	//选中控制蜂鸣器的锁存器
	P2 = ((P2 & 0X1F) | 0XAF);
	/*
		P2 & 0x1F:高三位清零
		P2 | 0xAF 设置高三位
	*/
	//关闭
	P0 = 0X00;
	//将138锁存器的输入端置空
	P2 = (P2 & 0x1F);
   
}

        2.移位操作实现流水灯

/*LED流水灯+全部点亮*/
void LED_TASK()
{
    static unsigned char led = 0x01;
    while(led != 0x00)
    {
        LED(~led);
        led <<= 1;
        Delay3000ms();
    }
    LED(led); 
}

实验结果

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值