无线传感(期末考查论文) - 杨岗、余国朗、洪聪、朱校立(6)

2020-04-14 01:54

inerDelay_us(20); } //

void conversion(uint temp_data) // 数据转换出 个,十,百,千,万 {

wan=temp_data/10000+0x30 ;

temp_data=temp_data000; //取余运算 qian=temp_data/1000+0x30 ;

temp_data=temp_data00; //取余运算 bai=temp_data/100+0x30 ;

temp_data=temp_data0; //取余运算 shi=temp_data/10+0x30 ;

temp_data=temp_data; //取余运算 ge=temp_data+0x30; }

//毫秒延时************************** void delay_nms(unsigned int k) {

unsigned int i,j; for(i=0;i

for(j=0;j<121;j++) {;}} }

void Delay5us() {

_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); }

void Delay5ms() {

WORD n = 560;

while (n--); }

/************************************** 起始信号

**************************************/ void BH1750_Start() {

17

基于nRF2401无线传输的集温湿度与光照监测系统

SDA = 1; //拉高数据线 SCL = 1; //拉高时钟线 Delay5us(); //延时

SDA = 0; //产生下降沿 Delay5us(); //延时

SCL = 0; //拉低时钟线 }

/************************************** 停止信号

**************************************/ void BH1750_Stop() {

SDA = 0; //拉低数据线 SCL = 1; //拉高时钟线 Delay5us(); //延时

SDA = 1; //产生上升沿 Delay5us(); //延时 }

/************************************** 发送应答信号

入口参数:ack (0:ACK 1:NAK)

**************************************/ void BH1750_SendACK(bit ack) {

SDA = ack; //写应答信号 SCL = 1; //拉高时钟线 Delay5us(); //延时

SCL = 0; //拉低时钟线 Delay5us(); //延时 }

/************************************** 接收应答信号

**************************************/ bit BH1750_RecvACK() {

SCL = 1; //拉高时钟线 Delay5us(); //延时

CY = SDA; //读应答信号 SCL = 0; //拉低时钟线 Delay5us(); //延时

return CY; }

18

/************************************** 向IIC总线发送一个字节数据

**************************************/ void BH1750_SendByte(BYTE dat) {

BYTE i;

for (i=0; i<8; i++) //8位计数器 {

dat <<= 1; //移出数据的最高位 SDA = CY; //送数据口 SCL = 1; //拉高时钟线 Delay5us(); //延时

SCL = 0; //拉低时钟线 Delay5us(); //延时 }

BH1750_RecvACK(); }

/************************************** 从IIC总线接收一个字节数据

**************************************/ BYTE BH1750_RecvByte() {

BYTE i;

BYTE dat = 0;

SDA = 1; //使能内部上拉,准备读取数据, for (i=0; i<8; i++) //8位计数器 { dat<<= 1;

SCL = 1; //拉高时钟线 Delay5us(); //延时

dat |= SDA; //读数据 SCL = 0; //拉低时钟线 Delay5us(); //延时 }

return dat; }

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

void Single_Write_BH1750(uchar REG_Address) {

BH1750_Start(); //起始信号

19

基于nRF2401无线传输的集温湿度与光照监测系统

BH1750_SendByte(SlaveAddress); //发送设备地址+写信号

BH1750_SendByte(REG_Address); //内部寄存器地址,请参考中文pdf22页 BH1750_Stop(); //发送停止信号 }

//初始化BH1750,根据需要请参考pdf进行修改**** void Init_BH1750() {

Single_Write_BH1750(0x01);

//波特率9600 TR1=1; REN=1; SM0=0; SM1=1;

TMOD = 0x20; TH1 = 0xFD; TL1 = 0xFD; ES=1; EA=1; }

void Multiple_read_BH1750() { uchar i;

BH1750_Start(); //起始信号

BH1750_SendByte(SlaveAddress+1); //发送设备地址+读信号

for (i=0; i<3; i++) //连续读取6个地址数据,存储中BUF {

BUF[i] = BH1750_RecvByte(); //BUF[0]存储0x32地址中的数据 if (i == 3) {

BH1750_SendACK(1); //最后一个数据需要回NOACK } else

{

BH1750_SendACK(0); //回应ACK } }

BH1750_Stop(); //停止信号 Delay5ms(); }

bit init_DTH11() //图2 {

bit flag; uchar num;

20

DQ=0;

delay1ms(19); // >18ms DQ=1;

for(num=0;num<10;num++); // 20-40us 34.7us

for(num=0;num<12;num++); flag=DQ;

for(num=0;num<11;num++); //DTH响应80us

for(num=0;num<24;num++); //DTH拉高80us return flag; }

uchar DTH11_RD_CHAR() //图4 图3 {

uchar byte=0; uchar num; uchar num1;

while(DQ==1); //低电平开始 50us for(num1=0;num1<8;num1++) {

while(DQ==0); //高电平读数 byte<<=1; //高位在前

for(num=0;DQ==1;num++); //通过时间长短判断电平高低 if(num<10) //低电平 byte|=0x00;

else ///高电平 byte|=0x01; }

return byte; }

void DTH11_DUSHU() {

uchar num;

if(init_DTH11()==0) {

shidu=DTH11_RD_CHAR(); //比正常值高7度左右 ///湿度整数位 DTH11_RD_CHAR(); //湿度 小数位 wendu=DTH11_RD_CHAR(); //温度整数位 DTH11_RD_CHAR(); //温度小数位

DTH11_RD_CHAR(); //最后八位校验位

for(num=0;num<17;num++); //最后BIT输出后拉低总线50us DQ=1; BELL=0;

delay1ms(1); BELL=1;

21


无线传感(期末考查论文) - 杨岗、余国朗、洪聪、朱校立(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:统计学试题库计算题部分

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: