一、实验目的
通过S1P0_1控制P1_0、P1_1、P1_4来开关LED灯
二、实现相关电路图


三、配置相关寄存器






P1DIR |= 0x13;将P0DIR(P0端口的方向寄存器)上P1_0、P1_1、P1_4设置为高电平即方向设置为输出可以输出0V或者3.3V。
P0SEL &= ~0x02; 将P0SEL(P0端口的功能选择寄存器)上的P0_1设为低电平即设置为通用的I/O;
P0DIR &= ~0x02;将P0DIR(P0端口的方向寄存器)上的P0_1设置为低电平即方向设置为输入;
P0INP &= ~0x02;将P0INP(P0端口的输入模式)上P0_1设置为低电平;打开P0上拉电阻。

P0口是集电极开路输出,也就是OC门,这种结构没有输出高电平的能力
就相当于一个一端接地的开关 按下去就输出低电平0V,断开就没有电压,是悬空状态.
至于用不用上拉电阻,取决于外部电路,如果要输出高电平控制一个器件,而这个器件本身又没有内置上拉(),就必须自己接一个上拉电阻,如果要用低电平控制一个器件,则可以不用加上拉.
一般来讲,做板子时都会在P0口放一个排阻,10KΩ就可以了.
四、实验代码
****************************************************************************/
#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int uint;

#define LED1 P1_0 // 定义P1.0口为LED1控制端
#define LED2 P1_1 // 定义P1.1口为LED2控制端
#define LED3 P1_4 // 定义P1.4口为LED3控制端
#define KEY1 P0_1 // 定义P0.1口为S1控制端
#define ON 0
#define OFF 1

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

  • 名 称: DelayMS()

  • 功 能: 以毫秒为单位延时,系统时钟不配置时默认为16M(用示波器测量相当精确)

  • 入口参数: msec 延时参数,值越大,延时越久

  • 出口参数: 无
    ****************************************************************************/
    void DelayMS(uint msec)
    {
    uint i,j;

    for (i=0; i<msec; i++)
    for (j=0; j<535; j++);
    }

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

  • 名 称: LedOnOrOff()
  • 功 能: 点亮或熄灭所有LED灯
  • 入口参数: mode为0时LED灯亮 mode为1时LED灯灭
  • 出口参数: 无
    ****************************************************************************/
    void LedOnOrOff(uchar mode)
    {
    LED1 = mode;
    LED2 = mode;
    LED3 = mode; //由于P1.4与仿真器共用,必须拔掉仿真器的插头才能看到LED3的变化
    }

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

  • 名 称: InitLed()
  • 功 能: 设置LED相应的IO口
  • 入口参数: 无
  • 出口参数: 无
    ****************************************************************************/
    void InitLed(void)
    {
    P1DIR |= 0x13; // P1.0、P1.1、P1.4定义为输出
    LedOnOrOff(1); // 使所有LED灯默认为熄灭状态
    }

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

  • 名 称: InitKey()
  • 功 能: 设置按键相应的IO口
  • 入口参数: 无
  • 出口参数: 无
    ****************************************************************************/
    void InitKey(void)
    {
    P0SEL &= ~0x02; //设置P0.1为普通IO口
    P0DIR &= ~0x02; //按键接在P0.1口上,设P0.1为输入模式
    P0INP &= ~0x02; //打开P0.1上拉电阻
    }

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

  • 名 称: KeyScan()

  • 功 能: 读取按键状态

  • 入口参数: 无

  • 出口参数: 0为抬起 1为按键按下
    ****************************************************************************/
    uchar KeyScan(void)
    {
    if (KEY1 == 0)//如果按键被按下
    {
    // 按键再被按下或断开的瞬间都会出现机械振动,电路里面会断开闭合无数次
    // 消抖的方法有软件消抖和硬件消抖
    // 硬件消抖就是并联一个C104 电容瓷片电容
    // 软件消抖就是把机械振动这一时间段延时掉再进行检测
    DelayMS(10); //延时10MS去抖
    if (KEY1 == 0) //再次检测按键是否被按下
    {
    while(!KEY1); //松手检测,一直低电平的时候在里边循环,高电平跳出往下走
    return 1; //有按键按下
    }
    }

    return 0; //无按键按下
    }

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

  • 程序入口函数
    ****************************************************************************/
    void main(void)
    {
    InitLed(); //设置LED灯相应的IO口
    InitKey(); //设置按键S1相应的IO口

    while(1)
    {
    DelayMS(2);
    if (KeyScan()) //扫描按键当前状态,按下时执行跑马灯效果
    {
    LED1 = ON; //点亮LED1
    DelayMS(500);
    LED1 = OFF; //熄灭LED1
    LED2 = ON;
    DelayMS(500);
    LED2 = OFF;
    LED3 = ON;
    DelayMS(500);
    LED3 = OFF;
    }
    }
    }

LedOnOrOff()函数点亮或熄灭LED灯,传一个参数进来它将传给3个IO口进行赋值,当传入0时Led灯被点亮,闯入1时候LED灯被熄灭

用宏定义的方法定义LED低电平亮 ,高电平灭。

检测到按键按下三个LED依次亮灭,按键按一次跑马灯一次

五、实验现象


按键控制LED跑马灯(CC2530)相关推荐

  1. CC2530基础实验:(1)按键控制LED跑马灯

    文章目录 前言 一.实验相关电路图 二.实验相关寄存器 三.源码分析 前言 本实验用于学习CC2530芯片GPIO 的配置方法,Led 驱动电路及开关 Led 的原理,按键的使用,实现简单的人机交互. ...

  2. 【嵌入式】按键中断控制 LED 跑马灯实验

    [嵌入式]按键中断控制 LED 跑马灯实验 1. 操作内容 2. 原理解释 2.1 实验箱按键电路 2.2 实验箱LED电路 2.3 寄存器说明 3. 操作步骤 3.1 编写键控制 LED 代码,将代 ...

  3. 定时器控制led跑马灯

    定时器控制led跑马灯 概述 1.1 资源概述 开发板:正点原子STM32F103zet6精英开发板 控芯片型号:STM32F103ZET6 开发板资料下载地址:http://www.openedv. ...

  4. zigbee CC2530 系列教程 4 按键控制LED实验

    所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 4.3按键控制LED实验 4.3.1 实验目的 了解使用按键方法,使用按键切换LED的状态. 4.3.2 实验讲解 首先根据开发 ...

  5. cc2530按键控制LED灯

    我平多多买的板子商家没给我原理图,我很无语,然后今天学按键控制终于找到了一个原理图: 不知道你们是否遇到寄存器设置值的事情,设置某位为输入或输出,通用IO或外部IO以及上拉电阻等等,我总结的方法可能很 ...

  6. 基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯

    基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯仿真设计 (程序+proteus仿真+报告) Proteus仿真版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C ...

  7. 利用51单片机进行LED 跑马灯设计

    题目: 使用单片机驱动8个LED,2个按键并实现跑马灯功能. 当按下按键1时,LED 从左至右依次点亮,全亮后再从右至左依次熄灭,全灭后再从左至右依次点亮,依次循环下去. 当按下按键2 时,LED 从 ...

  8. web展现mysql_web页面实现LED跑马灯效果(涉及web前端、原生JS、PHP、mysql)

    本帖最后由 yoin 于 2019-11-21 16:24 编辑 产品需求: LED跑马灯页面展示内容(班级电脑展示) setLED更改内容(老师电脑更改内容) LED页面及时更新内容设计思路: 最初 ...

  9. ADI Blackfin DSP处理器-BF533的开发详解14:LED跑马灯(含源代码)

    接口讲完了,下面写点应用程序,GPIO最典型的应用,LED跑马灯. 硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DS ...

最新文章

  1. ICLR2020全析解读:华人学者占据60%,谷歌再次领跑!(附最新高引华人榜单)...
  2. # 可视化工具资源汇总
  3. 华为认证数通专家HCIE-Datacom 11月30日发布
  4. iOS自动化探索(九)使用Jenkins自动化打包并发布iOS App
  5. Hibernate_13_QBC查询
  6. 我的MYSQL学习心得(二)
  7. 软件工程心理学之1----开篇
  8. OSI七层模型与TCP/IP五层模型详解
  9. Nginx应用场景之反向代理
  10. android Binder机制(一)架构设计
  11. 导出excel 数据取一次合理还是分页取合理_一张报表模板替代数百张Excel表格,用它让报表工作更轻松...
  12. django相关操作
  13. go任务调度2(linux的cron调用)
  14. [总结]FDM 3D打印机DIY实践
  15. 【期货期权】11月12日午盘盘面及涨跌逻辑解析
  16. c语言偶数求和while,C语言中编程计算1至100以内的奇数和偶数并分别求和,求代码...
  17. css图片背景之雪碧图的使用
  18. 分解质因数 (10 分)
  19. 小哥哥,你代码写得真好。
  20. unity 射线检测 碰撞点不准确的原因分析

热门文章

  1. matlab——智能算法之粒子群优化算法、模拟退火算法、遗传算法
  2. react ts hot update was not successful
  3. 【java篇】Java到底是值传递还是引用传递?
  4. QT项目三:中国象棋
  5. 我自己的mbot入门手册
  6. 海峡链技术白皮书-整体篇
  7. 2019年全国一二线城市程序员工资大调查,快来看看你有没有拖后腿!
  8. basics of bridge
  9. 洛谷:P1524 十字绣(图论中 (出 / 入) 度的应用)
  10. 微信跳一跳 可以直接更改分数,跳一跳POST改分数攻略