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

按下按键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

时间: 2024-12-24 16:38:22

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

CC2540开发板学习笔记(二)&mdash;&mdash;按键

一.实验内容 用按键S1控制LED1的亮和灭 二.实验过程 1.电路原理: 可以看出,当S按下P0.0和P0.1接地,反之则接高电压. 2.寄存器使用: 依旧应该首先进行3个基本寄存器的设定,对LED和按键S都要进行设定. 3.代码实现(IAR环境下) #include<ioCC2540.h> #define LED1 P1_0 //定义LED1,方便查阅代码 #define KEY1 P0_0 //定义按键S1 //函数声明 void Delayms(unsigned int t); //延

[Android TV 按键响应]listview的textview跑马灯在鼠标控制下失效的问题

问题:遥控按键选中的选项有跑马灯效果,但是鼠标事件来说,没有跑马灯效果 解题过程:重写一个类继承textview,永远获取焦点,不行.即使我再OnhoverListener里面实现onHover并且对textview获取了焦点,但是仍旧不行 解决方法:最后重写一个类继承textview,永远获取焦点,并且对textview调用了setSelected(true)之后就可以了. public class MarqueeTextView extends TextView { public Marqu

4、定时器T1通过查询方式控制LED1周期性闪烁(轮训方式)

定时器T1通过查询方式控制LED1周期性闪烁 1 /**************************************************************************** 2 * 文 件 名: main.c 3 * 作 者: Amo [ www.amoMcu.com 阿莫单片机] 4 * 修 订: 2014-04-08 5 * 版 本: 1.0 6 * 描 述: 定时器T1通过查询方式控制LED1周期性闪烁 7 *************************

独立按键控制跑马灯的速度

#include "REG52.H" #define const_voice_short 40 //蜂鸣器短叫的时间#define const_key_time1 15  //按键去抖动延时的时间#define const_key_time2 15  //按键去抖动延时的时间#define const_key_time3 15  //按键去抖动延时的时间 void initial_myself();void initial_peripheral();void delay_short(u

3、通过按键S1产生外部中断改变LED1状态(it&#39;s 中断-寄存器和中断子程序)

通过按键S1产生外部中断改变LED1状态 1 /**************************************************************************** 2 * 文 件 名: main.c 3 * 作 者: Amo [ www.amoMcu.com 阿莫单片机] 4 * 修 订: 2014-04-08 5 * 版 本: 1.0 6 * 描 述: 通过按键S1产生外部中断改变LED1状态 7 *****************************

利用定时器 1和定时器0控制led1和led2分别 2hz和0.5hz闪烁

1 //利用定时器 1和定时器0控制led1和led2分别 2hz和0.5hz闪烁 2 //利用定时器0 1s,led1取反,利用计数器1,(65535-10)%256,取反 3 #include<reg52.h> 4 #define uchar unsigned char 5 #define uint unsigned int 6 sbit led1=P1^3; 7 sbit led2=P1^7; 8 uchar count0,count1; 9 10 void delay(uint x)

UIView下使用Animation控制动画

UIView下使用Animation控制动画 动画效果是IOS界面重要的特色之一,其中CAAnimation是所有动画对象的抽象父类,作为新人,使用较多的是UIView下的动画方法(类方法).使用UIView下的动画,有下面几个方法. 方法一:设置beginAnimations 其中memberView为需要添加的子视图的视图,mivc.view为子视图,在使用的时候,需要将这两个地方替换 [cpp] view plaincopyprint? [UIView beginAnimations:@"

linux系统下的权限控制

 linux系统下的权限控制 1.文件权限 在我们的linux系统中,文件或目录的权限可以分为3种: r:4 读 w:2 写 x:1  执行 示例: 644:(4+2) (4)  (4) 第一个6:表示当前文件的拥有者的权限,6=4+2 可读可写权限 第二个4:表示当前文件的所属组权限,4=4 可读权限 第三个4:表示当前文件的组外权限,4=4 可读权限 2.查看文件权限的命令:(ls -l 或ll) 总共可以分为7大列: 第1列(分为10列): 1:文件的类型 ,-代表普通文件,d代表目录,l

制作由下向上的滚动字幕,字幕内容要求包含网站超级链接和图片超级链接, 使用鼠标移动事件控制字幕运动和停止。 2、在下拉列表框中设置五种以上颜色,选择颜色后, 滚动字幕背景色改变成相应颜色

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <!--        时间:2016-12-28        描述:1.制作由下向上的滚动字幕,字幕内容要求包含网站超级链接和图片超级链接,                   使用鼠标移动事件控制