micropython按键控制流水灯_【感知层备赛训练题】CC2530开发基础-按键控制流水灯运行...

任务要求

选择找到一块国赛Zigbee小模块或者XMF09B开发板,由选手独立新建工程并编写、编译代码,实现按键控制流水灯运行,完成以下任务要求:

【1】程序开始运行时,D4、D3、D6、D5灯全亮一会,然后全灭一会,开始进入流水灯。

【2】流水灯的运行过程为:D4灯亮,其余熄灭,过一会,D3灯亮,其余熄灭,过一会,D6灯亮,其余熄灭,过一会,D5灯亮,其余熄灭,过一会…如此反复运行流水灯。

【3】按下SW1按键松开后,流水灯暂停保留当前状态;再一次SW1按键松开后,从当前状态保留处继续运行流水灯,在按下SW1按键时,不能打断流水灯的运行。

参考源码

#include "ioCC2530.h"

#define D3 P1_0

#define D4 P1_1

#define D5 P1_3

#define D6 P1_4

#define SW1 P1_2

unsigned char F_LED = 0; //流水淡运行标志

unsigned int count = 0; //时间片计数

/*=======================简单的延时函数========================*/

void Delay(unsigned int t)

{

while(t--);

}

/*=======================端口初始化函数========================*/

void Init_Port()

{

P1SEL &= ~0x1b; //将P1_0,P1_1,P1_3,P1_4设置为通用I/O端口

P1DIR |= 0x1b; //将P1_0,P1_1,P1_3,P1_4设置为输出方向

P1 &= ~0x1b; //关闭4个LED灯

P1SEL &= ~0x04; //将P1_2设置为通用I/O端口

P1DIR &= ~0x04; //将P1_2设置为输入方向

P1INP &= ~0x04; //将P1_2设置为上拉/下拉

P2INP &= ~0x40; //将P1_2设置为上拉

}

/*=======================流水灯控制函数========================*/

void LED_Running()

{

Delay(100); //定义时间片

if(F_LED == 1) //如果处于运行状态,则累加时间片

{

count++;

}

if(count < 1000) //根据时间进行流水变换

{

D4 = 1; D3 = 0; D6 = 0; D5 = 0;

}

else if(count < 2000)

{

D4 = 0; D3 = 1; D6 = 0; D5 = 0;

}

else if(count < 3000)

{

D4 = 0; D3 = 0; D6 = 1; D5 = 0;

}

else if(count < 4000)

{

D4 = 0; D3 = 0; D6 = 0; D5 = 1;

}

else

{

count = 0; //流水周期结束,时间片计数清零

}

}

/*=======================按键扫描函数=========================*/

void Scan_Keys()

{

if(SW1 == 0) //发现有SW1按键信号

{

Delay(100); //延时片刻,去抖动处理

if(SW1 == 0) //确认为SW1按键信号

{

while(SW1 == 0)

{

LED_Running(); //在按键按下时,不打断流水灯运行

}

if(F_LED == 0)

{

F_LED = 1; //流水灯运行标志

}

else if(F_LED == 1)

{

F_LED = 0; //流水灯暂停标志

}

}

}

}

/*==========================主函数============================*/

void main()

{

Init_Port(); //端口初始化

D4 = 1; //全亮

D3 = 1;

D6 = 1;

D5 = 1;

Delay(60000);

Delay(60000);

D4 = 0; //全灭

D3 = 0;

D6 = 0;

D5 = 0;

Delay(60000);

Delay(60000);

F_LED = 1; //开启流水灯运行

while(1)

{

Scan_Keys(); //按键扫描

LED_Running(); //流水灯运行

}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值