嵌入式成长轨迹39 【Zigbee项目】【CC2430基础实验】【按键控制闪烁】
前面两个实验的综合,所有寄存器都是之前的
1 //main.c 2 #include <ioCC2430.h> 3 4 #define uint unsigned int 5 #define uchar unsigned char 6 //定义控制灯的端口 7 #define RLED P1_0 //定义LED1为P10口控制 8 #define YLED P1_1 //定义LED2为P11口控制 9 10 #define ON 0 11 #define OFF 1 12 13 #define K1 P0_6 14 #define K2 P0_5 15 16 //函数声明 17 void Delay(uint); //延时函数 18 void Initial(void); //初始化P口 19 void InitKey(void); 20 uchar KeyScan(void); 21 22 uchar Keyvalue = 0 ; 23 uchar GlintFlag[2] = {0,0}; 24 25 /**************************** 26 //延时 27 *****************************/ 28 void Delay(uint n) 29 { 30 uint tt; 31 for(tt = 0;tt<n;tt++); 32 for(tt = 0;tt<n;tt++); 33 for(tt = 0;tt<n;tt++); 34 for(tt = 0;tt<n;tt++); 35 for(tt = 0;tt<n;tt++); 36 } 37 38 /***************************************** 39 //按键初始化 40 *****************************************/ 41 void InitKey(void) 42 { 43 P0SEL &= ~0X60; 44 P0DIR &= ~0X60; //按键在P05 P06 45 P0INP |= 0x60; //上、下拉 46 } 47 48 /**************************** 49 //初始化程序 50 *****************************/ 51 void Initial(void) 52 { 53 P1DIR |= 0x03; //P10、P11定义为输出 54 RLED = 1; //LED 55 YLED = 1; 56 } 57 58 /***************************************** 59 //读键值 60 *****************************************/ 61 uchar KeyScan(void) 62 { 63 if(K1 == 0) 64 { 65 Delay(100); 66 if(K1 == 0) 67 { 68 while(!K1); 69 return(1); 70 } 71 }; 72 if(K2 == 0) 73 { 74 Delay(100); 75 if(K2 == 0) 76 { 77 while(!K2); 78 return(2); 79 } 80 }; 81 82 83 return(0); 84 } 85 86 /*************************** 87 //主函数 88 ***************************/ 89 void main(void) 90 { 91 Initial(); //调用初始化函数 92 InitKey(); 93 RLED = ON; //开红灯,表示系统工作 94 YLED = ON; 95 while(1) 96 { 97 Keyvalue = KeyScan(); //扫键 98 if(Keyvalue>0) 99 { 100 if(Keyvalue == 1) 101 GlintFlag[0] = !GlintFlag[0]; 102 if(Keyvalue == 2) 103 GlintFlag[1] = !GlintFlag[1]; 104 }; 105 106 if(GlintFlag[0]==0) 107 { 108 RLED = !RLED; //闪灯 109 Delay(4000); 110 } 111 else 112 RLED = OFF; //关灯 113 114 if(GlintFlag[1]==0) 115 { 116 YLED = !YLED; 117 //if(GlintFlag[0] == 0) 118 Delay(4000); 119 } 120 else 121 YLED = OFF; 122 } 123 }