• ZigBee按键查询实践


    按键查询

    即硬件上电后,程序开始运行,当检测到按键按下,触发按键语句,执行按键触发的事件;

    玩单片机需要清楚两件东西,第一个是单片机的电路图,另一个则是单片机的寄存器;

    CC2530是51的升级版,我们的寄存器在网上也有很多,直接百度查就有了;

    电路图

    寄存器

    本实验用到的相关寄存器:

    P0DIRP1DIR相同):设置各个I/O的方向,0为输入,1为输出

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    P0_7方向

    P0_6方向

    P0_5方向

    P0_4方向

    P0_3方向

    P0_2方向

    P0_1方向

    P0_0方向

    程序

    下面来两个程序实例,看看效果吧

     1 //*********************************************
     2 /*使用按键控制LED1的闪烁效果
     3 /*①系统复位后LED熄灭
     4 /*②按下一次SW1按键后,LED开始闪烁
     5 /*③再按下一次SW1按键后,LED停止闪烁并熄灭
     6 /*
     7 /*
     8 //********************************************/
     9 
    10 #include "ioCC2530.h"
    11 #define D3 P1_0
    12 #define D4 P1_1
    13 #define D5 P1_3
    14 #define D6 P1_4
    15 #define SW1 P1_2//宏定义需要用到的硬件
    16 
    17 typedef unsigned char uint8;
    18 typedef unsigned int uint16;
    19 
    20 uint8 flag=0;
    21 
    22 void delay(uint16 time)//延时函数
    23 {
    24   uint16 i;
    25   while(time--)
    26   {
    27     for(i=0;i<535;i++);
    28   }
    29 }
    30 
    31 void port()//初始化LED和按键
    32 {
    33   P1DIR = 0x1b;//0001 1011 LED灯设置为输出
    34   P1 &=~ 0x1b;//给LED等赋予低电平,初始化为灭
    35   P1DIR &=~ 0x04;//按键口为0,设置为输入
    36 }
    37 
    38 void Key()//按键查询函数
    39 {
    40   if(SW1==0)
    41   {
    42     if(SW1==0)
    43     {
    44       while(!SW1);
    45       flag=!flag;
    46     }
    47   }
    48 }
    49 
    50 void LED_Blink()//按键闪烁
    51 {
    52   P1 = 0x1b;
    53   delay(100);
    54   P1 &=~ 0x1b;
    55   delay(100);
    56 }
    57 
    58 main()
    59 {
    60   port();
    61   while(1)
    62   {
    63     Key();//调用按键查询函数
    64     if(flag==1)
    65     {
    66       LED_Blink();
    67     }
    68     else
    69     {
    70       P1 &=~ 0x1b;
    71     }
    72   }
    73 }
     1 //****************************************
     2 /*使用按键控制LED灯流水效果
     3 /*①系统复位后,LED开始以流水灯的方式进行
     4 /*②当按下按键时,流水灯停止运行,LED保持按键按下时的状态
     5 /*③当按键松开后,流水灯继续之前的运行
     6 /*
     7 /********************************************/
     8 
     9 #include"ioCC2530.h"
    10 #define D3  P1_0
    11 #define D4  P1_1
    12 #define D5  P1_3
    13 #define D6  P1_4
    14 #define SW1 P1_2
    15 
    16 typedef unsigned char uchar;
    17 typedef unsigned int uint;
    18 uchar flag=0;
    19 
    20 
    21 void delay(uint time)
    22 {
    23   uint i;
    24   while(time--)
    25   {
    26     for(i=0;i<535;i++);
    27     if(SW1==0)
    28     {
    29       while(!SW1);
    30     }
    31   }
    32 }
    33 
    34 void port()
    35 {
    36   P1DIR = 0x1b;
    37   P1 &=~ 0x1b;
    38   P1DIR &=~0x04;
    39 }
    40 
    41 main()
    42 {
    43   port();
    44   while(1)
    45   {
    46     if(flag==0)
    47     {
    48       D4=1;D3=0;D6=0;D5=0;
    49       delay(500);
    50       flag++;
    51     }
    52     if(flag==1)
    53     {
    54       D4=0;D3=1;D6=0;D5=0;
    55       delay(500);
    56       flag++;
    57     }
    58     if(flag==2)
    59     {
    60       D4=0;D3=0;D6=1;D5=0;
    61       delay(500);
    62       flag++;
    63     }
    64     if(flag==3)
    65     {
    66       D4=0;D3=0;D6=0;D5=1;
    67       delay(500);
    68       flag=0;
    69     }
    70   }
    71 }
  • 相关阅读:
    (C++)string类杂记
    理解inode
    WPF 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项
    网络抓包 Fiddler
    网络抓包 wireshark
    Vistual Studio Community 2017 账号的许可证过期,公安网激活方法
    C#实现图片叠加,图片上嵌入文字,文字生成图片的方法
    编写html与js交互网页心得:编写两个按钮切换显示不同的图片
    WPF当中StaticResource调用方法
    WPF通过DynamicResource的用法
  • 原文地址:https://www.cnblogs.com/Cion-Da/p/10256868.html
Copyright © 2020-2023  润新知