1、单纯亮个灯
2、按键点灯
3、中断点灯

一、单纯的亮个灯

首先找到你的zigbee板子的原理图,找到led灯对应的接口。

在这里我想点亮灯D1和D2,可以看到灯D1和D2对应的接口是P1_0和P1_1
我们可以在cc2530的中文手册中找到端口P1的相关设置

首先P0、P1、P2都是可以用作通用IO口也可以用作外设IO口,具体的选择跟上图是一样的。
PxSEL选择IO是通用还是外设
PxDIR选择是输入还是输出
PxINP设置上拉。要注意P1.0和P1.1没有上拉下拉功能,在这里可以不用设置。

#include <ioCC2530.h>#define LED1 P1_0 //定义P1.0口为LED1控制端
#define LED2 P1_1 //定义P1.1口为LED2控制端/**LED口初始化**/
void InitLed(void)
{P1SEL &= ~0x03; //设置为通用IO口P1DIR |= 0x03; //0000 0011 P1.0,P1.1口定义为输出,LED1 = 1;LED2 = 1;      //灯的默认状态为熄灭状态
}void main(void)
{//初始化InitLed();while(1){  LED1 = 0;LED2 = 0;}
}

之所以设定 P1SEL &= ~0x03; P1DIR |= 0x03; 是为了避免对端口其他位置的改变
&按位或 全1为1
P1SEL & 1111 1100(~0000 0011) 最后两位为0,在或运算下,最后两位的值是不会改变的。如果其他位有改变,也不会有影响。
|按位与 有1为1
同理 P1DIR | 0000 0011 最后两位为1,在与运算下,最后两位的值不会改变。

如果要设置流水灯,那么挨个亮灭就可以了

#include <ioCC2530.h>#define LED1 P1_0 //定义P1.0口为LED1控制端
#define LED2 P1_1 //定义P1.1口为LED2控制端/**延时函数**/
void Delayms(int ms)
{int i,j;for(i = 0;i < ms;i++){for(j = 0;j < 535;j++);}
}/**LED口初始化**/
void InitLed(void)
{P1SEL &= ~0x03; //设置为通用IO口P1DIR |= 0x03; //0000 0011 P1.0,P1.1口定义为输出,LED1 = 1;LED2 = 1;      //灯的默认状态为熄灭状态
}void main(void)
{//初始化InitLed();while(1){  LED1 = ~LED1;Delayms(500);LED1 = ~LED1;LED2 = ~LED2;Delayms(500);LED2 = ~LED2;}
}

大概最后的效果是D1亮一下灭了然后D2再亮一下灭这样循环。

二、按键点灯

同样是上图

想形成的效果是按一下S1灯开,再按一下灯关。
在这里按键S1的连接端口为P0_1 这个端口有上拉电阻的功能,所以这里要设置P0INP

#include <ioCC2530.h>#define LED1 P1_0 //定义P1.0口为LED1控制端
#define LED2 P1_1 //定义P1.1口为LED2控制端
#define KEY P0_1  //定义P0.1为按键S1控制端/**延时函数**/
void Delayms(int ms)
{int i,j;for(i = 0;i < ms;i++){for(j = 0;j < 535;j++);}
}
/**LED口初始化**/
void InitLed(void)
{P1SEL &= ~0x03; //设置为通用IO口P1DIR |= 0x03; //0000 0011 P1.0,P1.1口定义为输出,LED1 = 1;LED2 = 1;      //灯的默认状态为熄灭状态
}
/**按键初始化**/
void KeyInit(void)
{P0SEL &= ~0x02; //设置P0.1为普通IO口 0000 0010P0DIR &= ~0x02; //设置P0.1为输入模式P0INP &= ~0x02; //打开上拉电阻
}
/**读取按键状态,KEY=0表示按键被按下,KEY=1表示按键抬起**/
int KeyScan(void)
{if(KEY == 0){Delayms(10);if(KEY == 0){while(!KEY){return 1;}}}return 0;
}
void main(void)
{//初始化InitLed();KeyInit();while(1){  if(KeyScan()){LED1 = ~LED1;LED2 = ~LED2;}}
}   

这个代码IAR单步运行调试的时候是显示是对的,全速运行的时候有的时候按下会亮有的时候不会,不知道是代码逻辑问题还是哪里我没注意到的问题。

三、中断点灯

首先这里关于中断有几个概念。
中断向量:中断服务程序的入口地址。每个中断源都对应一个固定的入口地址。当内核响应中断请求时,就会暂停当前的程序执行,然后跳转到该入口地址执行代码。
中断服务函数: 内核响应中断后执行的相应处理程序。

CPU 有 18 个中断源。每个中断源都有它自己的位于一系列 SFR 寄存器中的中断请求标志。相应标志位请求的每个中断可以分别使能或禁用。

表2-5

大概意思就是,我请求一个中断,这个中断作用在某个端口,在这里,我是按下S1的按键后请求一个中断,这个中断响应在灯的P0口。而在中断源会有设置中断屏蔽,如果P0要响应就得开相应的设置。
注意一定要清楚中断标志,不然就会一直中断。


/******通过按键S1产生外部中断改变LED1状态******/#include <ioCC2530.h>
#define LED1 P1_0
#define KEY1 P0_1/**延时函数**/
void Delayms(int ms)
{for(int i = 0;i < ms;i++){for(int j = 0;j < 535;j++);}
}/**灯初始化**/
void InitLed(void)
{P1DIR |= 0x01;  //定义为输出口LED1 = 1; //LED1默认熄灭
}/**按键初始化**/
void InitKey()
{P0IEN |= 0x2; //P0.1设置为中断方式1PICTL |= 0x1; //下降沿触发IEN1 |= 0x20; //允许P0口中断P0IFG = 0x00; //初始化中断标志位EA = 1;   //打开总中断
}/**中断函数**/
#pragma vector = P0INT_VECTOR__interrupt void PA(void)
{Delayms(10); //消抖LED1 = ~LED1;P0IFG = 0; //清理中断标志P0IF = 0; //要清理中断标志位不然一直一直中断
}/**主函数**/
void main(void)
{InitLed();InitKey();while(1){}
}

小声bb一个我容易混乱的点
因为这里大多都是字节运算 八位的顺序是从右往左为0~7
意思就是 76543210 0位是最右边是端口上的0位比如P1_0

zigbee之点灯1相关推荐

  1. zigbee按键点灯

    zigbee点灯程序-1024程序员节日快乐 最近开始了专业课的学习,我们所使用到的zigbee模块搭载于51芯片,大致的使用与51开发板使用 差不多,不过功能更加的强大,多了很多难记得中断,以及通信 ...

  2. ZigBee无线点灯示例

      light_switch.c代码详解:无论你看哪个实验的代码,首先要找的就是main函数: void main ( void ) {uint8 appMode = NONE; /* 不设置模块的模 ...

  3. ai-人工智能的本质和未来_人工智能的历史-从一开始

    ai-人工智能的本质和未来 In the seminal paper on AI, titled Computing Machinery and Intelligence, Alan Turing f ...

  4. Zigbee 学习计划——第4天——基于CC2530 Basic RF的无线点灯

    就像Hellow world一样,无线点灯也是Zigbee的经典例子.根据<网蜂实战演练>中介绍,虽然还没有用到协议栈,但它体现出来的数据发送.接收和用协议栈是差不多的,而且TI公司的Ba ...

  5. ZigBee远程无线点灯

    ZigBee远程无线点灯 一.任务要求: 二.任务逻辑分析: 三.逻辑代码实现: 四.开发中注意的事项: 一.任务要求: 大棚种植区改造过程中提出新的需求,要求部分设备需要支持短距离无线 通讯控制风扇 ...

  6. ZIGBEE通讯-10.ZigBee协议栈的无线点灯

    在ZIGBEE协议栈中已经自带了按键与LED的驱动与使用函数,所以只需要将按键与LED修改为使用的开发板所连接IO就可以使用了.接下来将主要分析在协议栈中按键的初始化.按键的检测以及按键事件的传递与处 ...

  7. TI Zigbee Light Link 参考设计

    TI  Zigbee Light Link 参考设计 原文出处: http://processors.wiki.ti.com/index.php/Category:ZigBee_Light_Link ...

  8. ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet:学习教程目录

    [源码.文档.软件.硬件.技术交流.技术支持,入口见文末] [所有相关IDE.SDK和例程源码均可从群文件免费获取,免安装,解压即用] 持续更新中,欢迎关注! 一.理论 ZigBee 3.0理论教程- ...

  9. 《ZigBee实战演练》

    转一个多年前的帖,看内容就知道: 为什么学习 ZigBee? 试想着有一天,你坐在电脑前,你家里的空调.冰箱.洗衣机.电视,等在你屏幕前受你掌控时,这便是物联网的时代.我是一名普通的电子爱好者,半年前 ...

最新文章

  1. ubuntu字符界面login_Ubuntu字符界面输入密码始终提示错误 login incorrect 解决办法...
  2. Reverse Linked List
  3. 程序员面试系列——约瑟夫环
  4. 登录mysql时 未找到 grant命令_我在mysql数据库中可以登陆,为什么用grant命令创建用户时提示错误?...
  5. 【HDU - 1281 】棋盘游戏 (经典的二分图匹配,匈牙利算法,枚举删除顶点,必须边,关建边)
  6. 单线程会导致死锁吗?
  7. post请求改成body_如何使用BODY快速发送POST请求
  8. Clob类型转换为String
  9. C++程序设计必知:多文件结构和编译预处理命令
  10. ArcGIS API 离线字体库加载及跨域问题解决
  11. C4D多边形建模快捷键
  12. java设置单元格为文本_怎样设置单元格属性为文本格式?
  13. 天下所有的事,都是为了利益,都是按利益逻辑规律在运行,发生的一切事情都可以用利益逻辑来解释
  14. 博客摘录「 2022年C语言程序设计题库习集带答案(史上最全版)」2023年5月2日
  15. BERT微调(SQuAD v1.1)
  16. RTT(往返时间)和RPC
  17. vs2015 产品密钥
  18. 13 ,CSS 入门基础,行内排版内嵌式排版和外部排版样式
  19. 对于手机号和邮箱的格式验证
  20. vue手把手教你实现论坛bbs——(一)项目骨架

热门文章

  1. 美食微信公众号裂变引流?地方美食公众号怎么引流?
  2. 为什么最近这么多人去注册菲律宾公司?
  3. numpy 实现mask叠加原图
  4. java 非模态_JavaScrip高级应用:操作模态与非模态对话框
  5. 老电脑安装Windows11方法(不能保证全部都能用)
  6. 2013国内IT行业薪资对照表【技术岗位】
  7. MFC+HPSocket+log4cplus的TCP助手(一、界面绘制)
  8. oracle闪回某个时间点的数据库,Oracle 闪回总结
  9. linux 如何禁用wifi,如何禁用内置 wifi并仅使用USB wifi卡?
  10. 为赢取市场,vivo手机性价比超过小米,性价比旗手易位