码迷,mamicode.com
首页 > 其他好文 > 详细

2、按下按键S1控制LED1.LED2.LED3实现跑马灯效果(CC2540开发寄存器设置)

时间:2015-08-09 22:00:30      阅读:695      评论:0      收藏:0      [点我收藏+]

标签:

 

按下按键S1控制LED1.LED2.LED3实现跑马灯效果

  1 /****************************************************************************
  2 * 文 件 名: main.c
  3 * 作    者: Amo [ www.amoMcu.com 阿莫单片机]
  4 * 修    订: 2014-04-08
  5 * 版    本: 1.0
  6 * 描    述: 按下按键S1控制LED1.LED2.LED3实现跑马灯效果
  7 ****************************************************************************/
  8 #include <ioCC2540.h>
  9 
 10 typedef unsigned char uchar;
 11 typedef unsigned int  uint;
 12 
 13 #define LED1 P1_0        // 定义P1.0口为LED1控制端
 14 #define LED2 P1_1        // 定义P1.1口为LED2控制端
 15 #define LED3 P1_4        // 定义P1.4口为LED3控制端
 16 #define KEY1 P0_1        // 定义P0.1口为S1控制端
 17 #define ON      1
 18 #define OFF     0
 19 
 20 /****************************************************************************
 21 * 名    称: DelayMS()
 22 * 功    能: 以毫秒为单位延时,系统时钟不配置时默认为16M(用示波器测量相当精确)
 23 * 入口参数: msec 延时参数,值越大,延时越久
 24 * 出口参数: 无
 25 ****************************************************************************/
 26 void DelayMS(uint msec)
 27 { 
 28     uint i,j;
 29     
 30     for (i=0; i<msec; i++)
 31         for (j=0; j<535; j++);
 32 }
 33 
 34 /****************************************************************************
 35 * 名    称: LedOnOrOff()
 36 * 功    能: 点亮或熄灭所有LED灯    
 37 * 入口参数: mode为1时LED灯亮  mode为0时LED灯灭
 38 * 出口参数: 无
 39 ****************************************************************************/
 40 void LedOnOrOff(uchar mode)
 41 {
 42     LED1 = mode;
 43     LED2 = mode;
 44     LED3 = mode; 
 45 }
 46 
 47 /****************************************************************************
 48 * 名    称: InitLed()
 49 * 功    能: 设置LED相应的IO口
 50 * 入口参数: 无
 51 * 出口参数: 无
 52 ****************************************************************************/
 53 void InitLed(void)
 54 {
 55     P1DIR |= 0x13;  // P1.0、P1.1、P1.4定义为输出
 56     LedOnOrOff(0);  // 使所有LED灯默认为熄灭状态  
 57 }
 58 
 59 /****************************************************************************
 60 * 名    称: InitKey()
 61 * 功    能: 设置按键相应的IO口
 62 * 入口参数: 无
 63 * 出口参数: 无
 64 ****************************************************************************/
 65 void InitKey(void)
 66 {
 67     P0SEL &= ~0x02;     //设置P0.1为普通IO口  
 68     P0DIR &= ~0x02;     //按键接在P0.1口上,设P0.1为输入模式 
 69     P0INP &= ~0x02;     //打开P0.1上拉电阻
 70 }
 71 
 72 /****************************************************************************
 73 * 名    称: KeyScan()
 74 * 功    能: 读取按键状态
 75 * 入口参数: 无
 76 * 出口参数: 0为抬起   1为按键按下
 77 ****************************************************************************/
 78 uchar KeyScan(void)
 79 {
 80     if (KEY1 == 0)
 81     {
 82         DelayMS(10);      //延时10MS去抖
 83         if (KEY1 == 0)
 84         {
 85             while(!KEY1); //松手检测
 86             return 1;     //有按键按下
 87         }
 88     }
 89     
 90     return 0;             //无按键按下
 91 }
 92 
 93 /****************************************************************************
 94 * 程序入口函数
 95 ****************************************************************************/
 96 void main(void)
 97 {
 98     InitLed();              //设置LED灯相应的IO口
 99     InitKey();            //设置按键S1相应的IO口
100     
101     while(1)
102     {
103         DelayMS(2);
104         if (KeyScan())    //扫描按键当前状态,按下时执行跑马灯效果
105         {
106             LED1 = ON;    //点亮LED1      
107             DelayMS(500); 
108             LED1 = OFF;   //熄灭LED1 
109             LED2 = ON;                
110             DelayMS(500); 
111             LED2 = OFF;            
112             LED3 = ON;           
113             DelayMS(500); 
114             LED3 = OFF; 
115         }
116     }
117 }

这里的引脚使用要经过配置,这是和51不同之处,这个和寄存器有关!!!

一个端口对应几个寄存器来对其属性进行说明:

技术分享

按照表格寄存器的内容, 对 P1.0、 P1.1 、 P1.4 进行配置, 当 IO 口输出高电平时 Led 被点亮。
所以配置如下:

P1SEL &=~0x13; //配置 P1.0、 P1.1 、 P1.4 为通用 IO 口
P1DIR |= 0x13; //配置 P1.0、 P1.1 、 P1.4 为输出

由于 CC2540 寄存器初始化时默认值为(详细说明请参考 CC2530 数据手册(中文) .pdf,适用于 CC2540 和 CC2541 ):

P1SEL = 0x00;
P1DIR |= 0xff;
P1INP = 0x00;

所以 IO 口配置可简化为:

 53 void InitLed(void)
 54 {
 55     P1DIR |= 0x13;  // P1.0、P1.1、P1.4定义为输出
 56     LedOnOrOff(0);  // 使所有LED灯默认为熄灭状态  
 57 }

P0.1 要设成输入:

 65 void InitKey(void)
 66 {
 67     P0SEL &= ~0x02;     //设置P0.1为普通IO口  
 68     P0DIR &= ~0x02;     //按键接在P0.1口上,设P0.1为输入模式 
 69     P0INP &= ~0x02;     //打开P0.1上拉电阻
 70 }

资料:http://pan.baidu.com/s/1z503W

 

2、按下按键S1控制LED1.LED2.LED3实现跑马灯效果(CC2540开发寄存器设置)

标签:

原文地址:http://www.cnblogs.com/happyhappy/p/4716307.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!