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 }

猜你喜欢

转载自www.cnblogs.com/Cion-Da/p/10256868.html
今日推荐