第四节 控制LED

来源:互联网 发布:vb declare function 编辑:程序博客网 时间:2024/05/01 11:44
第四节  控制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
原创粉丝点击