求基于CC2530和DS18B20温度传感器和HS1101湿度传感器、DSM501灰尘传感器的C语言代码

求基于CC2530和DS18B20温度传感器和HS1101湿度传感器、DSM501灰尘传感器的C语言代码,第1张

是格式化输出八进制的整型数据 printf的格式控制的完整格式: 格式字符 格式字符用以指定输出项的数据类型和输出格式。

①d格式:用来输出十进制整数。有以下几种用法: %d:按整型数据的实际长度输出。 %md:m为指定的输出字段的宽度。

#ifndef ULTRASOUND_H

#define ULTRASOUND_H

#define uchar unsigned char

#define uint unsigned int

#define TRIG P1_3 //P1_2

#define ECHO P0_7 //P0_1

extern uchar RG;

extern uchar H1;

extern uchar L1;

extern uchar H2;

extern uchar L2;

extern uchar H3;

extern uchar L3;

extern uint data;

extern float distance;

extern uchar LoadRegBuf[4];

//void Delay(uint n);

void Delay_1us(uint microSecs);

void Delay_10us(uint n);

void Delay_1s(uint n);

void SysClkSet32M();

void Init_UltrasoundRanging();

void UltrasoundRanging(uchar ulLoadBufPtr);

__interrupt void P0_ISR(void);

#endif

×××××××××××××××××××××××××××××××××××××××××××

//×××××××××××Ultrasoundc

#include <ioCC2530h>

#include "Ultrasoundh"

uchar RG;

uchar H1;

uchar L1;

uchar H2;

uchar L2;

uchar H3;

uchar L3;

uint data;

float distance;

uchar LoadRegBuf[4];//全局数据,用以存储定时计数器的值。

void Delay_1us(uint microSecs)

{ while(microSecs--)

{ / 32 NOPs == 1 usecs 因为延时还有计算的缘故,用了31个nop/

asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");

asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");

asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");

asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");

asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");

asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");

asm("nop");

}

}

void Delay_10us(uint n)

{ / 320NOPs == 10usecs 因为延时还有计算的缘故,用了310个nop/

uint tt,yy;

for(tt = 0;tt<n;tt++);

for(yy = 310;yy>0;yy--);

{asm("NOP");}

}

void Delay_1s(uint n)

{ uint ulloop=1000;

uint tt;

for(tt =n ;tt>0;tt--);

for( ulloop=1000;ulloop>0;ulloop--)

{

Delay_10us(100);

}

}

void SysClkSet32M()

{

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

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

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

//此时的CLKCONSTA为0x88。即普通时钟和定时器时钟都是32M。

}

void Init_UltrasoundRanging()

{

P1DIR = 0x08; //0为输入1为输出 00001000 设置TRIG P1_3为输出模式

TRIG=0; //将TRIG 设置为低电平

P0INP &= ~0x80; //有上拉、下拉 有初始化的左右

P0IEN |= 0x80; //P0_7 中断使能

PICTL |= 0x01; //设置P0_7引脚,下降沿触发中断

IEN1 |= 0x20; // P0IE = 1;

P0IFG = 0;

}

void UltrasoundRanging(uchar ulLoadBufPtr)

{

SysClkSet32M();

Init_UltrasoundRanging();

EA = 0;

TRIG =1;

Delay_1us(10); //需要延时10us以上的高电平

TRIG =0;

T1CNTL=0;

T1CNTH=0;

while(!ECHO);

T1CTL = 0x09; //通道0,中断有效,32分频;自动重装模式(0x0000->0xffff);

L1=T1CNTL;

H1=T1CNTH;

ulLoadBufPtr++=T1CNTL;

ulLoadBufPtr++=T1CNTH;

EA = 1;

Delay_10us(60000);

Delay_10us(60000);

}

#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)

{

EA=0;

T1CTL = 0x00;

LoadRegBuf[2]=T1CNTL;

LoadRegBuf[3]=T1CNTH;

L2=T1CNTL;

H2=T1CNTH;

if(P0IFG&0x080) //外部ECHO反馈信号

{

P0IFG = 0;

}

T1CTL = 0x09;

T1CNTL=0;

T1CNTH=0;

P0IF = 0; //清中断标志

EA=1;

}

××××××××××××××××××××××××××××××××××××××

#include <ioCC2530h>

#include "Ultrasoundh"

void main(void)

{

while(1)

{

UltrasoundRanging(LoadRegBuf);

Delay_1s(1);

data=256H2+L2-L1-256H1;

distance=(float)data340/10000;

Delay_1s(2);

};

}

这要去看你用的那个传感器手册

看代码的意思是传感器信号经过8bit ADC采样。

采样后的数据一般来说就是+/- 127之间,被127减后相当于是采样波形在Y轴作了一个平移和反向,取值区间变成了0-255。如果是我的话会写成这样:

SensorValue = GetCh08bitADC() + 127; 会更容易理解一些

一般小的蜂鸣器驱动很简单,直接IO的高低电平通过三极管的开关状态就可以了不用IIC这些高科技的

您这个,看来就是一个点对点通信

一边采集温度,把温度数据送出来

另一边对温度进行判断,如果高,过阀值就驱动蜂鸣器

如果处理完了点对点通信(一般的例程都会有这个)应该不是什么难事

我本科的毕业设计也是做ZigBee的,实现一个果园环境监控系统。我讲讲我做这个毕业设计的基本思路和学习方向,希望对题主有帮助。

1、硬件

对ZigBee协议有基本了解的都知道,它只是一种协议,类似于TCP/IP协议,很多嵌入式平台(如ARM、Linux等)都可以实现。比较主流的用于构建ZigBee拓扑网络的嵌入式平台是CC2530/2430系列单片机,它们是TI公司专门设计用于搭建ZigBee网络的芯片,内置强大的ZigBee协议栈支持。CC2530/2430基于C51开发的,所以片上资源和接口和C51/C52系列单片机类似,学懂了51单片机,学这个也很简单了。

所以要搭建ZigBee网络,首先要搞懂CC2530/2430的硬件资源(只做APP层基本可以不用深入理解指令集)。从最小系统入手,电源电路、晶振电路、复位电路等,以及一些嵌入式基本通信协议,如iic、spi、RS232/485等,还有AD/DA模块,这个用于温度传感器(模拟的)数据采集。

2、软件

ZigBee协议栈的底层都是TI公司已经设计好了的,自组网、网络拓扑、路由、发送/接收数据包等,这些网络 *** 作都封装好并提供给用户编程接口,直接在APP层调用就行,若只做简单开发无需深入了解物理层和链路层,只要通过开发文档把这些需要用到的编程接口弄明白(类似于C语言的封装库,只管调用,不管实现)。

还有就是传感器编程(如题中所述的温度传感器),这种传感器市面上太常见了,基本都是通过iic或者其他通信协议直接读数字信号,连数模转换都不需要,源代码网上都一搜一大堆,直接拿过来用就行,稍微调一下接口和时序什么的。

3、网络拓扑

由于底层自组网的特性,我们只要简单地了解组网、路由、鉴权、发/收包等基本内容(应付答辩啊),因为底层的封装实现……你想看都看不到,只能通过官方文档大概知道它是怎么处理的。除了APP层,其他的交给协议栈来做吧。

以上就是关于求基于CC2530和DS18B20温度传感器和HS1101湿度传感器、DSM501灰尘传感器的C语言代码全部的内容,包括:求基于CC2530和DS18B20温度传感器和HS1101湿度传感器、DSM501灰尘传感器的C语言代码、求一个cc2530 超声波模块测距的程序、cc2530换个传感器应该修改哪部分程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9492990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存