第四节 控制LED

第四节  控制LED
    上一节点亮了单个LED灯,我们这堂课接着控制LED灯。这堂课我们要完成的是LED闪烁10次,蜂鸣器响1s钟。这里我们先使用延时函数进行。
我们的程序一定要做到结构清晰,可移植性强,阅读性高。程序设计不仅仅是实现了功能,如果那样的代码,那只有你自己可以看懂,是一手垃圾。真正的漂亮代码具有阅读性高、可移植性强、代码规范性好。

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

                  版权所有 (C), 2013-2020, 深圳市馒头科技有限公司

 ******************************************************************************
  文 件 名   : delay.h
  版 本 号   : V1.0
  作    者   :  朱兆祺
  生成日期   : 2014年06月07日
  功能描述   : 主函数
  函数列表   :
              
  修改历史   :
  1.日    期   : 2014年06月07日
    作    者   :  朱兆祺
    修改内容   : 创建文件

******************************************************************************/
#ifndef  __DELAY_H__
#define  __DELAY_H__


/*****************************************************************************
 函 数 名  : Delay1ms
 功能描述  : 延时函数
 输入参数  : unsigned int uiDelay:延时1ms的数量
 输出参数  : 无
 返 回 值  : 

 修改历史      :
  1.日    期   : 2014年6月7日
    作    者   :  朱兆祺
    修改内容   : 创建

*****************************************************************************/
extern void Delay1ms(unsigned int uiDelay);

#endif


/* end  file */

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

                  版权所有 (C), 2013-2020, 深圳市馒头科技有限公司

 ******************************************************************************
  文 件 名   : delay.c
  版 本 号   : V1.0
  作    者   :  朱兆祺
  生成日期   : 2014年06月07日
  功能描述   : 主函数
  函数列表   :
              
  修改历史   :
  1.日    期   : 2014年06月07日
    作    者   :  朱兆祺
    修改内容   : 创建文件

******************************************************************************/
/* 包含delay延时的头文件 */
#include "delay.h"


/*****************************************************************************
 函 数 名  : Delay1ms
 功能描述  : 延时函数
 输入参数  : unsigned int uiDelay:延时1ms的数量
 输出参数  : 无
 返 回 值  : 

 修改历史      :
  1.日    期   : 2014年6月7日
    作    者   :  朱兆祺
    修改内容   : 创建

*****************************************************************************/
void Delay1ms(unsigned int uiDelay)
{
    unsigned int i;
    
    for ( ; uiDelay > 0; uiDelay--)
    {
        /* 大约延时1ms */
        for (i = 0; i < 320; i++);
    }
}


/* end  file */

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

                  版权所有 (C), 2013-2020, 深圳市馒头科技有限公司

 ******************************************************************************
  文 件 名   : main.c
  版 本 号   : V1.0
  作    者   :  朱兆祺
  生成日期   : 2014年06月06日
  功能描述   : 主函数
  函数列表   :
              
  修改历史   :
  1.日    期   : 2014年06月06日
    作    者   :  朱兆祺
    修改内容   : 创建文件

******************************************************************************/
/* 包含CC254X的头文件 */
#include <ioCC2540.h>
#include "delay.h"

/*****************************************************************************
 函 数 名  : main
 功能描述  : 主函数
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 

 修改历史      :
  1.日    期   : 2014年6月6日
    作    者   :  朱兆祺
    修改内容   : 创建

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

int main(void)
{
    /* 控制LED灯闪烁 */
    unsigned char i;
    /* 驱动无源蜂鸣器 */
    unsigned int j;
    
  
    /* 将P1.0、P1.1设置为IO口 */
    P1SEL &= ~0x03;
    /* 将P1.0、P1.1设置为IO口的输出 */
    P1DIR |= 0x03;
    
    /* 将P2.0设置为IO口 */
    P2SEL &= ~0x01;
    /* 将P2.0设置为IO口输出 */
    P2DIR |= 0x01;
    
    /* 主循环 */
    while(1)
    {
        /* LED1,LED2闪烁10次 */
        for (i = 0; i < 10; i++)
        {
            /* P1.0----LED2,P1.1----LED1 */
            /* P1.0,P1.1输出高电平,即点亮LED2,LED1 */
            /* FC :  1111 1100*/
            P1 = (P1 & 0xFC) | 0x03;
            Delay1ms(1000);
        
            /* P1.0,P1.1输出低电平,即熄灭LED2,LED1 */
            /* FC :  1111 1100*/
            P1 = (P1 & 0xFC) & (~0x03);
            Delay1ms(1000);
        }
        
        /* 给出500HZ的方波驱动 */
        for(j = 0; j < 1000; j++)
        {
            /* P2.0----蜂鸣器 */
            P2 = (P2 & 0xFE) & (~0x01);
            Delay1ms(1);
            P2 = (P2 & 0xFE) | 0x01;
            Delay1ms(1);
        }

    }
     
}




/* end  file */


这里需要注意的是,MT254X蓝牙4.0开发板使用的无源蜂鸣器,那么我们需要产生一个方波来驱动。如这代码:

/* 给出500HZ的方波驱动 */
        for(j = 0; j < 1000; j++)
        {
            /* P2.0----蜂鸣器 */
            P2 = (P2 & 0xFE) & (~0x01);
            Delay1ms(1);
            P2 = (P2 & 0xFE) | 0x01;
            Delay1ms(1);
        }


如果是有源蜂鸣器,则没有那么麻烦,直接给出低电平驱动。为什么是低电平,我们看下原理图:


使用的PNP三极管,并且使用续流二极管保护蜂鸣器。


本文章转载自
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/69222.aspx
请勿用于商业

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值