CC2530应用——按键控制灯光状态变化
阅读原文时间:2023年07月11日阅读:1

独立新建工程并编写、编译代码,实现按键控制灯光闪烁状态的变换,实现以下任务要求:
【1】程序开始运行:D4灯闪烁,D3、D5、D6灯熄灭。
【2】按下模块上的SW1按键松开后,实现D5、D6灯轮流闪烁。
【3】再次按下SW1按键,D5、D6灯灭。
【4】重复上述两个步骤。
此题需要定义一个灯光状态的标志位。通过按键的标志位有三个状态。
状态1:D4灯闪烁,D3、D5、D6灯熄灭。
状态2:D5、D6灯轮流闪烁。
状态3:D5、D6灯灭。

#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 stat = ; //灯光状态标志

/*=======================简单的延时函数========================*/
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设置为上拉
}

/*=====================D4灯闪烁函数======================*/
void D4_Flicker()
{
D4 = ;
Delay();
D4 = ;
Delay();
}

/*=====================D5D6灯闪烁函数======================*/
void D5D6_Flicker()
{
D3 = ;
D4 = ;
D5 = ;
Delay();
D5 = ;
Delay();
D6 = ;
Delay();
D6 = ;
Delay();
}

/*=======================按键扫描函数=========================*/
void Scan_Keys()
{
if(SW1 == ) //发现有SW1按键信号
{
Delay(); //延时片刻,去抖动处理
if(SW1 == ) //确认为SW1按键信号
{
if(stat == )
{
stat = ;
}
else if(stat == ) //重复
{
stat = ;
}
else if(stat == )
{
stat = ;
}

 }  

}
}

/*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
while()
{
Scan_Keys(); //按键扫描
switch(stat)
{
case : //上电状态,D4闪烁
D4_Flicker();
break;
case : //运行状态1:D5和D6闪烁
D5D6_Flicker();
break;
case : //运行状态2:D5和D6熄灭
D5 = ;
D6 = ;
break;
}
}
}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章