EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2008/9/23 9:50:10

1

关于投票

CC2430基础实验二:按键控制开关

2.1 实验说明

按键控制开关试验是在自动闪烁基础之上完成的。主要是让用户掌握CC2430的按键应用这一常用的人机交互方法,本实验是用两个按键分别控制小灯的亮灭。在这个实验里用到的寄存器分别是P0,P1,P0SEL,P0DIRP1DIRP0INP设置这几个按键的管脚的步骤分别是:功能选择(P0SEL),方向选择(P0DIR),输入模式选择(P0INP)。

   

位号

复位值

操作性

功能描述

P0

7:0

0x00

R/W

P0端口,通用I/O口,可以位寻址

P0SEL(SELP0_x)

7:0

0

R/W

P0口功能选择:0-通用I/O1-外设功能

P0DIR(DIRP0_x)

7:0

0

R/W

P0端口方向:0-输入,1-输出

P0INP(MDP0_x)

7:0

0

R/W

P0_x输入模式:0-上拉/下拉;1-三态

2.2 实验程序

#include <ioCC2430.h>

 

#define uint unsigned int

#define uchar unsigned char

#define ON 0          //定义LED状态,ON为亮,OFF为灭

#define OFF 1

 

//定义控制灯的端口

#define RLED P1_0   

/* 根据原理图,LD1(黄)为P1_0口控制;主扩展板为RLED;从扩展板为D2(红) */

#define GLED P1_1   

/* 根据原理图,LD2(红)为P1_1口控制;主扩展板为GLED;从扩展板为D3(黄) */

#define K1 P0_4         //K1为扩展板的CANCEL键,在P0_4

#define K2 P0_5         //K2为扩展板的OK键,在P0_5

 

//函数声明

void Delay(uint);         //延时函数

void Initial(void);          //LED初始化函数

void InitKey(void);             //按键初始化函数

uchar KeyScan(void);            //按键扫描函数

uchar Keyvalue = 0 ;        //用于存放按键值的变量,初值为0

/****************************

//延时函数

*****************************/

void Delay(uint n)

{

       uint tt;

       for(tt = 0;tt<n;tt++);

       for(tt = 0;tt<n;tt++);

       for(tt = 0;tt<n;tt++);

       for(tt = 0;tt<n;tt++);

       for(tt = 0;tt<n;tt++);

}

/*****************************************

//按键初始化函数,原理图中按键连在P0_4P0_5,所以进行了修改(080913

void InitKey(void)

{

  P1SEL &= ~0X0C;//作用是将P12 P13设为普通I/O口,但默认就是,不知道为什么还要加此语句

  P1DIR &= ~0X0C; //按键在P12 P13

  P1INP |= 0x0c; //上、下拉

}

*****************************************/

void InitKey(void)

{

  //P0SEL &= ~0X30;

P0DIR &= ~0x30; //将连接按键的P0_4P0_5口设置为输入

  P0INP |= 0x30; //P0_4P0_5口的输入状态设置为三态,以读取按键的状态

}

/****************************

//初始化程序

*****************************/

void Initial(void)

{

       P1DIR |= 0x03; //将连接LEDP1_0P11定义为输出

       RLED = 1;

       GLED = 1;     //LED置高电平,LED

}

/*****************************************

//按键扫描函数,检测按键是否按下,若有键按下,则返回相应的值

//K1键按下,则返回1K2键按下,则返回2;没有键按下,返回0

//不知道第二个if(K1 == 0)的作用,在实验三中进行了修改,也可以实现同样的功能

*****************************************/

uchar KeyScan(void)

{

  if(K1 == 0)

  {

    Delay(100);

    if(K1 == 0)

    {

      while(!K1);

      return(1);

    }

  };

 

  if(K2 == 0)

  {

    Delay(100);

    if(K2 == 0)

    {

      while(!K2);

      return(2);

    }

  };

  return(0);

}

/***************************

//主函数

***************************/

void main(void)

{

       Initial();          //调用初始化函数

    InitKey();

       RLED = ON;         //RLED

       GLED = OFF;             //GLED

       while(1)      //循环扫描按键值

       {

          Keyvalue = KeyScan();   //取按键值

          if(Keyvalue == 1)

          {

           RLED = !RLED;      //K1控制RLED

           Keyvalue = 0;      //清除键值

          }

          if(Keyvalue == 2)

          {

            GLED = !GLED;       //K2控制GLED

            Keyvalue = 0;           //清除键值

          }

       }

}

实验源程序来源于WXL的CC2430基础实验,我用的是C51RF-JKS-CC2430
,有些接口和我的板子不一样,所以做了一些改动。

系统分类: 嵌入式  |  用户分类: WXL实验手记  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(503) | 回复(2)

发表于 2008/9/19 16:15:24

1

关于投票

CC2430基础实验一:自动闪烁

1.1 实验说明

使用CC2430I/O来控制外设。以LED灯为外设,将I/O设置为输出,用CC2430控制LED闪烁。

实验中操作了的寄存器有P1P1DIR,没有设置而是取默认值的寄存器有:P1SELP1INP

   

位号

复位值

操作性

功能描述

P1

7:0

0x00

R/W

P1端口普通功能寄存器,可位寻址

P1DIR(DIRP1_x)

7:0

0

R/W

P1端口方向:0-输入,1-输出

P1SEL(SELP1_x)

7:0

0

R/W

P1口功能选择:0-普通I/O1-外设功能

P1INP(MDP1_x)

7:2

0

R/W

P1I/O输入模式:0-上/下拉;1-三态

P1INP

1:0

0x00

R0

不使用

1.2 实验程序

#include <ioCC2430.h>

 

#define uint unsigned int

#define uchar unsigned char

//定义控制灯的端口

#define RLED P1_0   

/* 根据原理图,LD1(黄)为P1_0口控制;主扩展板为RLED;JKS底板为D2(红) */

#define GLED P1_1   

/* 根据原理图,LD2(红)为P1_1口控制;主扩展板为GLED;JKS底板为D3(黄) */

#define YLED P1_2    //根据原理图,主扩展板的YLEDP1_2口控制;

 

//函数声明

void Delay(uint);         //延时函数

void Initial(void);          //初始化函数

/****************************

//延时程序,延时时间约为5*n/32μs

*****************************/

void Delay(uint n)

{

       uint tt;

       for(tt = 0;tt<n;tt++);

       for(tt = 0;tt<n;tt++);

       for(tt = 0;tt<n;tt++);

       for(tt = 0;tt<n;tt++);

       for(tt = 0;tt<n;tt++);

}

/****************************

//初始化程序

*****************************/

void Initial(void)

{

              P1DIR |= 0x07;    //P1_0P1_1P1_2定义为输出

        RLED = 1;

              GLED = 1;

        YLED = 1;           //置高电平,LED

}

/***************************

//主函数

***************************/

void main(void)

{

       Initial();          //调用初始化函数

       RLED = 0;

       GLED = 0;

    YLED = 0;     //置低电平,LED

       while(1)         //循环,实现LED闪烁

       {

           GLED = !GLED;

           Delay(10000);

       }

}

实验源程序来源于WXL的CC2430基础实验,我用的是C51RF-JKS-CC2430
,有些接口和我的板子不一样,所以做了一些改动。

系统分类: 嵌入式  |  用户分类: WXL实验手记  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(293) | 回复(0)

Total , Page /