zoukankan      html  css  js  c++  java
  • 嵌入式成长轨迹38 【Zigbee项目】【CC2430基础实验】【按键控制开关】

    注意:

    1、
    CC2430EB板上按键对应的管脚是P0.0 p0.4 p0.5 p0.6(这里用后两个),
    #define K2 P0_5
    #define K1 P0_4

    P0SEL&=~0X60; 设置为连接外设
    P0DIR&=~0X60; 将其配置为输入管脚
    P0INP|=0X60;  调节对应管脚空闲为三态
    这样之后读取K1、K2的值就知道是否按下按键

    2、
    这里给个按键消抖的范例:
    if(K1 == 0)       //低电平有效
    {
        Delay(100);     //检测到按键
        if(K1 == 0)
        {
          while(!K1);   //直到松开按键
          return(1);
        }
    }

      1 //main.c
      2 //电池板开关控制小灯
      3 #include <ioCC2430.h>
      4 
      5 
      6 #define uint unsigned int
      7 #define uchar unsigned char
      8 #define ON 0          //LED状态
      9 #define OFF 1
     10 
     11 //定义控制灯的端口
     12 #define RLED P1_0    //定义LED1为P10口控制
     13 #define YLED P1_1    //定义LED2为P11口控制
     14 
     15 //#define K1 P1_2         //控制红灯
     16 #define K2 P0_5
     17 #define K1 P0_4
     18 
     19 
     20 //函数声明
     21 void Delay(uint);        //延时函数
     22 void Initial(void);        //初始化P0口
     23 void InitKey(void);
     24 uchar KeyScan(void);
     25 
     26 char i = 0;
     27 uchar Keyvalue = 0 ;
     28 
     29 /****************************
     30 //延时
     31 *****************************/
     32 void Delay(uint n)
     33 {
     34     uint tt;
     35     for(tt = 0;tt<n;tt++);
     36     for(tt = 0;tt<n;tt++);
     37     for(tt = 0;tt<n;tt++);
     38     for(tt = 0;tt<n;tt++);
     39     for(tt = 0;tt<n;tt++);
     40 }
     41 
     42 /*****************************************
     43 //按键初始化
     44 *****************************************/
     45 void InitKey(void)
     46 {
     47   /*
     48  P1SEL &= ~0X0C; //P12 P13输入
     49   P1DIR &= ~0X0C; //按键在P12 P13
     50   P1INP |= 0x0c; //三态
     51   */
     52   P0SEL&=~0X60;//~0X10;
     53   P0DIR&=~0X60;//~0X10;
     54   P0INP|=0X60;//0X10;
     55 }
     56 
     57 /****************************
     58 //初始化程序
     59 *****************************/
     60 void Initial(void)
     61 {
     62     P1DIR |= 0x03; //P10、P11定义为输出
     63     RLED = 1;       //关LED
     64     YLED = 1;    //
     65 }
     66 
     67 /*****************************************
     68 //读键值
     69 *****************************************/
     70 uchar KeyScan(void)
     71 {
     72   if(K1 == 0)       //低电平有效
     73   {
     74     Delay(100);     //检测到按键
     75     if(K1 == 0)
     76     {
     77       while(!K1);   //直到松开按键
     78       return(1);
     79     }
     80 
     81   }
     82   if(K2 == 0)
     83   {
     84     Delay(100);
     85     if(K2 == 0)
     86     {
     87       while(!K2);
     88       return(2);
     89     }
     90   }
     91   return(0);
     92 }
     93 
     94 /***************************
     95 //主函数
     96 ***************************/
     97 void main(void)
     98 {
     99 
    100     Initial();        //调用初始化函数
    101         InitKey();
    102     RLED = ON;        //LED1
    103     YLED = ON;        //LED2
    104     while(1)
    105     {
    106           Keyvalue = KeyScan();
    107 
    108            if(Keyvalue == 1)
    109           {
    110            RLED = !RLED;      //red
    111            Keyvalue = 0;      //清除键值
    112           }
    113           else if(Keyvalue == 2)
    114           {
    115            YLED = !YLED;      //red
    116            Keyvalue = 0;      //清除键值
    117           }
    118 
    119 
    120     }
    121 }
  • 相关阅读:
    C语言第0次作业
    C语言博客作业02循环结构
    C语言博客作业04数组
    C语言博客作业03函数
    #C博客作业01分支、顺序结构
    函数
    operation on i may be undefined
    #关于C语言的顺序结构
    关于代码习惯
    VS2019调试的一系列待理解解决问题
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2666890.html
Copyright © 2011-2022 走看看