ZigBee按键查询实践
按键查询
即硬件上电后,程序开始运行,当检测到按键按下,触发按键语句,执行按键触发的事件;
玩单片机需要清楚两件东西,第一个是单片机的电路图,另一个则是单片机的寄存器;
CC2530是51的升级版,我们的寄存器在网上也有很多,直接百度查就有了;
电路图
寄存器
本实验用到的相关寄存器:
P0DIR(P1DIR相同):设置各个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 }