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

2008-9-23 09:50 4015 5 7 分类: MCU/ 嵌入式

2.1 实验说明<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


按键控制开关试验是在自动闪烁基础之上完成的。主要是让用户掌握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 &= ~0X<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />0C;//作用是将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
,有些接口和我的板子不一样,所以做了一些改动。

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1623276 2009-7-16 19:02

你好请问你那里还有没有别的WXL的CC2430基础实验的例子了,能不能发给我啊,谢谢了,我的邮箱是wobushixing@126.com

用户221364 2009-7-1 10:49

我是zigbeeCC2430的初学者,用的是smar tRF04EB板子,想知道SFR的用法,书上说的很笼统,看了还是不明白,你知道的话,给我发发资料吧,先谢谢了,我的是邮箱zhuhongping320@163.com。

用户163410 2008-9-26 18:31

收藏

用户162876 2008-9-25 13:58

不错

用户168210 2008-9-25 12:35

ding
相关推荐阅读
用户484943 2008-09-26 11:08
IAR扩展关键字
本人只是初学C51,今天看到一段代码,貌似中断服务程序,但不知道怎么用,后来查阅了一些资料,原来和IAR的扩展关键字有关,就简单整理了一下。 #pragma vector = P1INT_VECTOR...
用户484943 2008-09-25 16:31
Keic C51中几个预处理指令
1.#message 用法:#message "message"用途:当编译器编译到#message处会在编译输出栏中输出message消息,这时程序员可以知道编译器已经并且编译了该处,可以用来检查程...
用户484943 2008-09-25 16:27
C-51语言设计基础
C-51 编译器支持下列数据类型: 数 据 类 型<?XML:NAMESPACE PREFIX = O />长 度值 域bit1 字节0 或 1signed char1 字节-128~+1...
用户484943 2008-09-23 17:15
单片机C51编程规范
1单片机C51编程规范- 前言 为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。 2 单片机C51编程规范-范围 本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范...
用户484943 2008-09-19 16:15
CC2430基础实验一:自动闪烁
1.1 实验说明<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />使用CC2430的I...
我要评论
2
5
关闭 站长推荐上一条 /3 下一条