物联网cc2530按键长按短按分别控制亮灯亮灭(详细版)
一.在编辑程序之前搭建其基本框架,如下所示
#include <iocc2530.h>
void main(void)
{
halBoardInit();
while(1)
{
}
}
二.确定所使用的引脚后进行宏定义
#include <iocc2530.h>
#define P1_0 LED1
#define P1_1 LED2
#define P1_2 SW1
void main(void)
{
halBoardInit();
while(1)
{
}
}
三.编写端口初始化
#include <iocc2530.h>
#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
void Init_port()
{
P1SEL &= ~0X03;//将P1_0和P1_1设置为通用输入输出
P1DIR |= 0X03;//将P1_0和P1_1设置为输出
}
void main(void)
{
halBoardInit();
while(1)
{
}
四.编辑一个简单的延时函数
#include <iocc2530.h>
#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define B 15//宏定义变量
void Init_port()
{
P1SEL &= ~0X03;//将P1_0和P1_1设置为通用输入输出
P1DIR |= 0X03;//将P1_0和P1_1设置为输出
}
void delay(unsigned int time)
{
while(time--);
}
void main()
{
while(1)
{
}
}
五.如何区分按键长按短按,需宏定义变量和计数变量,此处宏定义变量B 30,计数变量int型,再去编辑扫描代码
#include <iocc2530.h>
#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define B 15//宏定义变量
void Init_port()
{
P1SEL &= ~0X03;//将P1_0和P1_1设置为通用输入输出
P1DIR |= 0X03;//将P1_0和P1_1设置为输出
}
void delay(unsigned int time)
{
while(time--);
}
unsigned int count = 0;//设置计数变量
void Scan_SW1()
{
if(SW1 == 0)
{
delay(50);//延时消抖
if(SW1 == 0)
{
count = 0;//每次按下扫描重置count值
while(SW1 == 0)
{
delay(10000);//继续延时
count++;//让count值自加计算按下按键的时长
}
if(count < B)//如果比宏定义的值小实现短按效果
{
LED1 = ~LED1;
}
else//反之如果比宏定义的值大实现长按效果
{
LED2 = ~LED2;
}
}
}
}
void main()
{
while(1)
{
}
}
六.最后一步,完成主函数main的编辑(完全代码)
#include <iocc2530.h>
#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define B 15//宏定义变量
void Init_port()
{
P1SEL &= ~0X03;//将P1_0和P1_1设置为通用输入输出
P1DIR |= 0X03;//将P1_0和P1_1设置为输出
}
void delay(unsigned int time)
{
while(time--);
}
unsigned int count = 0;//设置计数变量
void Scan_SW1()
{
if(SW1 == 0)
{
delay(50);//延时消抖
if(SW1 == 0)
{
count = 0;//每次按下扫描重置count值
while(SW1 == 0)
{
delay(10000);//继续延时
count++;//让count值自加计算按下按键的时长
}
if(count < B)//如果比宏定义的值小实现短按效果
{
LED1 = ~LED1;
}
else//反之如果比宏定义的值大实现长按效果
{
LED2 = ~LED2;
}
}
}
}
void main(void)
{
Init_port();
while(1)
{
Scan_SW1();
}
}
物联网cc2530按键长按短按分别控制亮灯亮灭(详细版)的更多相关文章
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...
- CC2530学习路线-基础实验-定时器控制LED灯亮灭(3)
目录 1. 前期预备知识 1.1 定时器中断触发 1.2 相关寄存器 1.3 寄存器相关问题 1.4 T1.T3定时器初始化流程 2 程序及代码 THE END 1. 前期预备知识 1.1 定时器中断 ...
- CC2530学习路线-基础实验-GPIO 控制LED灯亮灭(1)
目录 1.前期预备知识 1.1 新大陆ZigBee模块LED灯电路 1.2 CC2530相关寄存器 1.3 寄存器操作技巧 1.4 CPU空转延时 1.4 操作流程图 2.程序代码 The End 1 ...
- cc2530的第三次实验,按键中断控制流水灯
cc2530的第三次实验:按键中断控制流水灯 效果为按一次按键,流水灯亮一次 实验相关电路图: 实验相关寄存器: 初始化函数 //初始化LED灯 //设置P1SEL,通用为0,外设为1 1111110 ...
- 长按短按控制LED灯-ESP32中断处理
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "freertos ...
- 通知短信 API 接入全流程(超详细整理)
随着移动互联网和智能手机的普及,短信成为了一种便捷.快速且有效的通信方式,尤其在向用户发送重要信息或提醒方面具有很大的优势. 本文将会深入探讨如何在程序中接入通知短信 API 实现短信通知功能,此外, ...
- [蓝点ZigBee] Zstack 之按键驱动以及控制LED灯 ZigBee/CC2530 视频资料
这一节主要演示如何在Zstack 下根据板子的不同修改按键驱动,实际演示的时候代码跳动比较多,建议大家除了看视频资料以外,还需要在网上找一下相关资料进一步学习. 视频总览:http://bphero. ...
- 物联网架构成长之路(6)-EMQ权限控制
1. 前言 EMQTT属于一个比较小众的开源软件,很多资料不全,很麻烦,很多功能都是靠猜测,还有就是看官方提供的那几个插件,了解. 2. 说明 上一小节的插件 emq_plugin_wunaozai ...
- 转战物联网·基础篇08-例说MQTT协议各控制报文
前面讨论了MQTT协议的控制报文的格式,下面分别举例探讨各个控制报文的详细内容. 01.CONNECT – 连接服务端 客户端到服务端的网络连接建立后,客户端发送给服务端的第一个报文必须是CO ...
- cc2530的第二次实验,用按键控制流水灯
按键控制流水灯 具体想要实现按一下按键,然后单片机的三个灯会以流水灯的形式都亮一遍 实验相关寄存器 实验相关电路 宏定义 #define uint unsigned int #define uchar ...
随机推荐
- ASP.NET Core Library – Google libphonenumber (Country Dial Code)
前言 Google libphonenumber 是 Java 的, ASP.NET Core 只是 port 过去而已. 以前在 angular2 学习笔记 ( translate, i18n 翻译 ...
- ASP.NET Core – Partial View
前言 之前写过一篇 ASP.NET Core – View Component 里面有提到, View Component 是 Partial View 的加强版. 多了一个 .cs 可以写逻辑. 那 ...
- HTML – W3Schools 学习笔记
有用链接: HTML Attribute Reference (查看所有 Attributes) HTML Paragraphs Link to W3Schools <p> 里面 doub ...
- shell脚本参数读取列表文件,循环执行时,要注意这个列表文件转换成 unix 格式
当报一些很奇怪的错,比如报错多了一个空格,但 vim 看打开没有,比如: 或者肉眼看上去路径正常,但却报路径不存在: 这种时候要使用 dos2unix 工具,把这个列表文件转换一下:
- Linux操作系统和文件系统、常见命令(下)
C语言的绝大部分内容应该记录在以.c作为拓展名的文件里,这种文件叫做C语言的源文件 C语言程序里还包括以.h作为拓展名的文件,这种文件叫头文件(只有极少数的内容可以记录在头文件里) C语言程序里可以使 ...
- Word、Excel办公书的资源下载
我是清华社编辑,下载资源没有版权问题,可供读者个人学习用,但不允许商用. 微信扫描,清华社网盘,可转自己邮箱下载.安全,无风险. <Word/Excel/PPT 2019商务办公从入门到精通&g ...
- union联合体的缺陷
传统的 union 联合体在 C++ 中虽然提供了一种能够在相同的内存空间内存储多种不同类型的方式,但它也有一些显著的缺陷和限制.这些缺陷让 union 的使用不太安全,尤其是在复杂的程序中.以下是传 ...
- Nuxt.js 应用中的 page:start 钩子详解
title: Nuxt.js 应用中的 page:start 钩子详解 date: 2024/10/8 updated: 2024/10/8 author: cmdragon excerpt: pag ...
- OpenGL和OpenCL区别
1.OpenGL用于图形渲染程序:OpenCL用于复杂的计算.他们都是由Khronos管理并使用C语言编译. 2.OpneGL使编程能够进行图形操作:OpenCL使编程能够在多个处理器中进行计算. 3 ...
- 03-jsx中使用js表达式
// 在jsx中使用 js 表达式 /// 通过一个 {} 展示变量即可 vue 中使用 {{}} 展示js表达式 // 什么是js表达式 有结果的 import reactDom from &quo ...