紫蜂吧 关注:9贴子:85
  • 0回复贴,共1

人体红外传感器

只看楼主收藏回复

/****************************************************************************
* 文 件 名: main.c
* 描 述: 人进入其感应范围模块输出高电平,点亮LED1,人离开感应范围LED1熄灭,
* P0.4口为HC-SR501传感器的输入端 串口配置也115200 8N1
****************************************************************************/
#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 DATA_PIN P0_4 //定义P0.4口为传感器的输入端
/****************************************************************************
* 名 称: DelayMS()
* 功 能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; 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<len; 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.4定义为输入口
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);
}
}


IP属地:山东1楼2021-10-26 07:33回复