是格式化输出八进制的整型数据 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换个传感器应该修改哪部分程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)