CC2530学习笔记(2)—— IO端口基本操作实验(按键控制亮灯)

https://blog.csdn.net/zzz_xxj/article/details/79348397

2018年02月22日 17:47:24 ZZZ_XXJ 阅读数:913 标签: ZigBeeCC2530GPIOLEDKEY 更多

个人分类: ZigBee

CC2530学习笔记(2)—— IO端口基本操作(按键控制亮灯)

 

关于CC2530的IO端口基本知识、IO端口有关寄存器的介绍和描述请参照:CC2530学习笔记(1)——  IO端口

 

电路原理图如图1所示:

 

图1    按键和LED灯电路连接原理图

分析:本操作中不涉及IO端口中断,采用轮询方式实现操作。要求按一个按键亮一个灯,再按键灯熄灭。所以我们需要及时的检测按键是否被按下。原理图中两个LED当IO端口输出低电平时亮,三个按键当被按下时IO端口为低电平。


寄存器配置:

 

  • LED对应的P0_1、P0_4配置为通用IO引脚,方向为输出,初始电平为高电平。
  • 按键对应的P1_1、P2_0配置为通用IO引脚,方向为输入。

程序:

 
  1. /**************************************

  2. *本次操作只需添加以下这个头文件

  3. *************************************/

  4. #include <ioCC2530.h>

  5.  
  6. #define LED2 P0_1

  7. #define LED3 P0_4

  8. #define KEY3 P1_1

  9. #define KEY4 P2_0

  10. /***********************************

  11. *初始化LED

  12. **********************************/

  13. void LEDInit(void)

  14. {

  15. /*********LED2************/

  16. P0SEL &= ~(1<<1); //通用IO

  17. P0DIR |= 1<<1; //方向为输出

  18. LED2 = 1; //初始输出高电平,灯灭

  19.  
  20. /*********LED3************/

  21. P0SEL &= ~(1<<4); //通用IO

  22. P0DIR |= 1<<4; //方向为输出

  23. LED3 = 1; //初始输出高电平,灯灭

  24. }

  25.  
  26. /***********************************

  27. *初始化按键

  28. **********************************/

  29. void KEYInit(void)

  30. {

  31. /*********KEY3************/

  32. P1SEL &= ~(1<<1); //通用IO

  33. P1DIR &= ~(1<<1); //方向为输入

  34.  
  35. /*********KEY3************/

  36. P2SEL &= ~(1<<0); //通用IO

  37. P2DIR &= ~(1<<0); //方向为输入

  38. }

  39.  
  40. /***********************************

  41. *毫秒级延迟函数

  42. **********************************/

  43. void Delayms(unsigned int ms)

  44. {

  45. unsigned int i,j;

  46. for (i = ms; i > 0; i--)

  47. {

  48. for (j = 587; j > 0; j--);

  49. }

  50. }

  51.  
  52. /***********************************

  53. *按键扫描函数

  54. **********************************/

  55. void KEYScan(void)

  56. {

  57. if (0 == KEY3)//当KEY3按下

  58. {

  59. Delayms(10);//去抖

  60. LED2 = ~LED2; //P0_1输出状态取反

  61. }

  62. else if(0 == KEY4)//当KEY4按下

  63. {

  64. Delayms(10);//去抖

  65. LED2 = ~LED2; //P0_4输出状态取反

  66. }

  67. }

  68.  
  69. void main()

  70. {

  71. LEDInit();

  72. KEYInit();

  73.  
  74. while(1)

  75. {

  76. KEYScan();

  77. }

  78. }

2018.07.10更新:

前面的代码中,按键扫描函数其实是有点小问题的,改成下面的样子效果会好些。

 
  1. /***********************************

  2. *按键扫描函数

  3. **********************************/

  4. void KEYScan(void)

  5. {

  6. if (0 == KEY3)//当KEY3按下

  7. {

  8. Delayms(10);//去抖

  9. if (0 == KEY3)//再次判断

  10. {

  11. LED2 = ~LED2; //P0_1输出状态取反

  12. }

  13. }

  14. else if(0 == KEY4)//当KEY4按下

  15. {

  16. Delayms(10);//去抖

  17. if(0 == KEY4)//再次判断

  18. {

  19. LED2 = ~LED2; //P0_4输出状态取反

  20. }

  21. }

  22. }

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值