资讯详情

CC2530控制人体红外传感器的程序与详细教程

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

* 文 件 名: main.c

* 作 者: Andy

* 修 订: 2013-01-10

* 版 本: 1.0

* 描 述: 人进入感应范围模块输出高电平,点亮LED1.人离开感应范围LED1熄灭,

* P0.4口为HC-SR501传感器输入端 串口配置也115200 8N1

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

#include

typedef unsigned char uchar;

typedef unsigned intuint;

#define LED1 P1_0 //定义P1.0口为LED1控制端

#define LED2 P1_1 //定义P1.1口为LED2控制端

#define LED3 P1_4 //定义P1.4口为LED3控制端

#define DATA_PIN P0_4 //定义P0.四口是传感器的输入端

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

* 名 称: DelayMS()

* 功 能: 以毫秒为单位延迟 16M时约为535,系统时钟不修改默认为16M

* 入口参数: msec 延迟参数值越大,延迟时间越长

* 出口参数: 无

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

void DelayMS(uint msec)

{

uint i,j;

for (i=0; i

for (j=0; j<535; j );

}

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

* 名 称: InitUart()

* 功 能: 串口初始化函数

* 入口参数: 无

* 出口参数: 无

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

void InitUart(void)

{

PERCFG = 0x00; //外设控制寄存器 USART 0的IO位置:0为P0口位置1

P0SEL |= 0x0c; //P0_2,P0_3用作串口(外设功能)

P2DIR &= ~0XC0; //P0优先作为UART0

U0CSR |= 0x80; //设置为UART方式

U0GCR |= 11;

U0BAUD |= 216; //波特率为115200

UTX0IF = 0; //UART0 TX中断标志初始位置0

}

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

* 名 称: UartSendString()

* 功 能: 串口发送函数

* 入口参数: Data:发送缓冲区 len:发送长度

* 出口参数: 无

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

void UartSendString(char *Data, int len)

{

uint i;

for(i=0; i

{

U0DBUF = *Data ;

while(UTX0IF == 0);

UTX0IF = 0;

}

}

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

* 名 称: InitGpio()

* 功 能: 设置LED灯和P0.4相应的IO口

* 入口参数: 无

* 出口参数: 无

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

void InitLed(void)

{

P1DIR |= 0x13; //P1.0、P1.1、P1.4定义为输出

P0SEL &= ~0x10;

P0DIR &= ~0x10; //P0.定义为输入口

P2INP |= 0x20;

LED2 = 0; //点亮D2 提示程序已经运行

}

void main(void)

{

InitLed(); //设置LED灯和P0.4相应的IO口

InitUart(); ////与串口相关的寄存器

CLKCONCMD &= ~0x40; ///设置系统时钟源为32MHZ晶振

while(CLKCONSTA & 0x40); //等待晶振稳定32M

CLKCONCMD &= ~0x47; ///设置系统的主时钟频率为32MHZ

InitUart(); ////与串口相关的寄存器

while(1) //无限循环

{

if(DATA_PIN == 1)

{

LED1 = 0; //有人时LED1亮

UartSendString("ON ", 3); ///串口发送数据,提示使用

}

else

{

LED1 = 1;                  //无人时LED1熄灭

UartSendString("OFF ", 4); //串口发送数据,提示用户

}

DelayMS(1000);

}

…………限于本文篇幅 余下代码请从51黑下载附件…………

标签: 442感应开关传感器感应开关红外感应开关传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台