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