无限温湿度检测发送单位程序

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

共公函数

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

*#i

ndef fP_BILUEH__

#defien_ UBILPEH__

#

edinfe uhacr unigsendch ra#

edfien unt inuignse dnit

#defnieu lognu snined lgong

/*******************************函

数声明*

******************************

/ovdide ly1(auhcrai); voi

deday2lu(har ic;

)vod iedal3(yuhar ci,cuha jr;)void

dlay4(echaur ,ichaur ,uchaj r);k

end#if

/*******************************n

r24f01.l

h*****

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

#ifned _AfP_DEF_I#

deine _fPA_DEFI_

#i

clnued h

// nRF240L接口1定

//定 SP义引脚Is

ib Ct E = P ^2;5 / / 片使芯引脚(输能)

s出it bCNS = P 2^2 ;/ /SIP口使能接脚(引出)输

sib StC = P2^4K; / /断引脚中(入输)sbi

tMO IS = P^21; // 数 输入

据sitb MSIO =P 23^; / 数/输出

s据bt iRQI =P^02; / 时钟输出

/

#deinfe tSanbyd) (CE 0 =// 待机

#deifen Ativec() CE = 1 // 启 动#d

feien SC_K()L S KC =0

#edfne iSK_H(C ) SC K= 1

de#fnie CNSL_() SC N =0

d#efienCSN _()H CN S= 1#d

fien MeOIS_L( )OSIM=

0#efdne iMSOI_H() M OSI= 1

// nRF24

L10指令格式:#

dfeineRE ADREG _ 0x00 //读寄存 器

d#feien RWIT_REE G x200 / /寄写器

存d#efne iDRRX_P_OADL 0x6 1 // R读XFI OF效有数据1,32-字,节当读据完数成后数,据清被,应除用于接模式收

#dfeni eWRTX__PLAO 0xA0D // 写TX IFO有F效数据1,32-节字,操作写从节0开字始,应用于发模式

射de#fin FLUSeHTX _ 0 Ex /1 /除T清X FFO寄I存,器应用于射模式发

#defin eFLSU_HXR 0x2E / 清除/RXF FOI存器,应寄用接收模式于

def#in eRUES_TX_EL P0E3 //x 新使用上重包有效数一,据当CE为高程过,数据中包不被断的重发新射#d

feine OPN 0xF F/ /操作,可以空用读状来寄态器存

/ /RF24nL0寄1存地址

器de#fne iCNOFG I 0x 0 0 //配置寄存器

#d efnieE NAA _ 001 x// “动应答”自能功寄存器

#dfene iN_REAXDD 0xR2 0/ / 收通接道使寄存器能

#efdineSE UT_PA W x030 / 地址宽/设度置存器

#def寄neiS ETUPR_ERT 0 04 x// 动重自发置寄存器

#设efdie RFnCH _ 00x5 / 射频通道/频率设置寄存器#d

eifenR F_ESUPT 0 x6 /0 射/设置频存寄

器#dfine eSATTUS x07 0/ 状/态寄存

#de器fine BSOEREVT_ 0x0X8 //发 送测寄存器检

#efdnieC D 009x // 载波 检测寄存器#d

efne Ri_XADDR_0 P00xA / /据通道数接0地址收存器寄

#dfinee X_RADR_D1P 0 0xB // 数据通 1接收道地址寄存器

#dfine RX_eADRD_P 0x2C0 / 数据通/道接2收址地存器

#寄edfienRX_ DADR_P3 00xD // 据数道通3接收地址寄器存

#defie nXRA_DDR_4 P 00E x/ /据数道4接通地址收寄器存#

dfinee X_ADDRR_5P 0x0 F / 数/据通5道接收址地存器寄

d#feie TX_nDDR A 0x 01 // 发地送址寄存器

#efdie RXn_WPP_0 0 11 /x /数通据0有道数据效度宽设寄存器

#def置in RX_eW_P1P 0x12

//数 通道据1效有据宽度数置寄存设器#d

fiene RX_W_P2P 0 x1 3 / /据通数2道效数据有度设宽置存器寄

#efidneRX P__WP 0314x // 数通据3有道效据数度设置宽存器寄

#efdneiR _PWXP_ 0x415 / /数据道4通效有据数宽度设寄存置器#d

feie RnX_P_WP5 0 x61 / /据数道5通效有据宽度数设寄置器存

#edinef IFF_STAOUST0x 71 / /FI FO态寄状存器

e

xern utcahr sta ; / 状态/变量

#efindeR _DRX (sat& 040)x / /接成收功断中志标#d

fine TX_DSe (s a & 0t20x) // 发 射成中功断标

志d#efni eMXART_ s(at& 01x0) / 重发/溢出中断志标

ucha SPrIR_W(uchr)a

;d#einfeSt tusa)( SC_LN);(sta=SP_RWI(OP)NC;NSH_)( / 读/态状存寄,保器在存tas

d#efnie Celra_TX) (SN_C();LPISR_(FLUWS_HTX;C)S_N() H // 除清XTFI F

#Oefdnie lCea_RXr( )SNC_(L);SP_IR(WLFSUH_RX;)CS_H()N //清 除R FXIOF

#edfnei Re_Sne(d C)N_SL);S(P_IR(RWEUE_STXP_)L;CSNH_)( / 重/使新上用一包射有效数发包

extern oid init_ivovoi(d);e

xtrn uechr SaI_PR(uchWa bytr);ee

txenr uchraSP IR__RegW(uhcr rea, guchrava le);u

etxrne uchr aSIPWrit__Bufeu(carhreg , chur a* Bpu, ufcah brtyes;)

xetenruc hra SP_IRae(dchaurr ge;)

exetn ucrhraS I_PeaR_Bdufu(carh reg ,uchar* pufB ucha, brytes;)

extre noiv SdetC_nfogi(chuar fcg u,hcar ERR, Tuhcr cah ,uhcr RaF_ST);E

xteernv oidR _ModX(uchareP pie,uc arh* RX _AD, ucar byths);e

xterne ovidR XEN(uc_arh iPp,e chur Ea_RNX uc,ha rNEA_K)C

ext;rne ovid TX_Moeduc(har* T_XD,A cuah EN_rCAK;)e

xerntv odi Siwtc_RT(hchur aSW ucha, romd)e;

//extrne viod SW_TD_SPDuc(ah rSW);

exert nchura Ceckh_Recvoid)(

ext;re vnid Dota_Saav(ucher a *BUF,u car hbtes)y;ex

tenruchar Ch cek_CA(uKcar hclare)

;eterx vondiD ataSe_n(dcuha r* BUF, chaurb tyse);

#nedi /f* A_P_DIF_E */

/*******************************l

dc106.h2

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

#indffe __LC1D60_h2

#deifne __CL1D026h_

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

/ * 宏 定 义 * /

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

defi#en LC D0 P // P口作1CDLI/

O

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

** / 函 数 明声 * //

**********************************************

/ibtb us_yceckh() ; // 检查忙数函voi

budys_aitw)(; / /等空待

void闲 CLD_in(t); // 初始化 晶

液vio driwt_deat(uacha dat); r / 写数/据v

idow rtie_omm(ccuhr cam)o ; / /写 令指v

oi writd_e160_2ADAT(uhar xc,uhcar yu,har cdta) ;/ 指定/位置写据数

oivdL C1D60_2Cs_iun() ; //写 自义字定符

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

/ * 自定 义字符 区 /*/

* *

/**/********************************************/u

hcarco d teabe[l=

]{

x10,0x00,0006x,x090,0x0,8x0080x,09,0x6, /0/年/

0ffx,x0ff,0fx,fx0f,f00x00,x0,0x0

00,x000,/ //月

x10,f0x1,10x110x1,f0x,11,01x10,x1f0x0,0,/ //日

0x0,006x00x3,,Cx0220,42,x0x42,x002,x000 //,/氏摄

0x度0,4x00,4x0510x,f10x1f,,x01f,0x1,0x10,0///坦克 0

11x,01xf,x1f0,x10,fx15,00x4,0x004,x001,

0xf1,x10f,x0c0,00fx0,x0c,x0f,0x1f,00x00,

01x,0f1xf,x060,0xe1,00x,6x0f0,x10,0x0f0};

/

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

* / 引 脚 定 义 区 * /

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

s*it RbSP2^4;=

sib RtWP=^25

s;it bE P=^26;s

ib tF=BP0^;

7

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

ASI I码 表 * //***

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

/u/harccode AS I_Iat1b2[0=]'0'{',1','2'',3'','4'5,','',67',''8'',9,'a''',',b'c'',d'','e',f'',*', ''};

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

*/ 6102 指令集 * /

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

/#d

fenieLINE 1 0X80 / 第/行一址地

#defnei LIEN2 0xC /0第/行地址二#d

fein eETS_GCAR_MADR D X40 0 //置C设RAM地G址#de

ifn TeIN_WINLK_DI 0x38S /两行显/示 57*8位数 据口

#dfene iCRL1602_ 0x01 / 清屏/

#幕deifne ADR_Datu_aod d 006 x/ 地/自动加1址显 不移位示

#efide CnLS_601_2urcCr ox00 8 //闭关标光#def

ne iOPN_E1062 x00C //开显 示

#edifn

/*******************************dht1

.1h

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

#fidnf eDH_1T1__ h

defi#e nD_TH11h_

/

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

* / 引 脚 定 义 */

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

sbt DHi_Tbsu = 0P^0

;

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

* / 函 数 声 明 * //

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

ibt tastr_HTD1(1void;) /开/始

void ead_rHTD11(void) ; //取读

voidd lea_y2u0(vsoid;) /20u/s时延

voi dedlaym_su(hcarm ;) / / msN时

延bi tchcke_usm(vod)i; // 和验校

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

/* 宏 定 义 */

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

#efdnie HIHG

1#edfineLOW 0

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

变 量 定 义 /*

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

#dfine DHTe_tieomvre5 / /电平高持时间维,用识别于“数据”和“0数据1”

e#dni

f

#incldu"pueble.h"

i#nilcudere#

incudel i

in#lucde"nrf4201.lh"

/#i/nclduelc"1602.hd

#i"clnde"dhtu1.h"1

/*

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

结 构 体 * /

/**********************************************/s

turtcDH T_data

{cuarhDH_H; / 湿/整度数

cuharDH _L ; /湿/小数

度cuar h_H; T //温 整度

u数hac r_TL ; //度温小数

ucarh heCcsukm;/ 校验和

}/DTHd_aa;t

#dfine eTX_POLA_DIDWHT 4 / 数据通道/效数据宽度有

uchr aocd eXTA_DDERSS[06]= {5,x0340x,430x1,,0x10,00x01;} / / 定义一个静态送地发址

chua rodceTX_ADD RSES16] [= 5,{x001,x100,x01,0x10,00x1};0 / /义定一静个态送地址发uc

hr aR_XUFBTX[PLO_D_AWIDT]H;uc

har XTBUF_[XTPL_ADO_WITDH;]

oiv dmain()

{

edaly42(5,010,50;)

inti_oi);( / nr/f始初化

elda4y(50,120,05) ;

//LCD_int)( ; //612初始0化//

edaly42(5,1000,)5 ;

eStCo_fign(0x0e,0 x0a ,0, 0x047); // 16位RCC验校使,能上,电重发时延等待50us+82us,6重发1次0,率频.442G数,传输据率M1pb,发s功率0dB射,m噪声低大器放增

T益_XoMe(dTXA_DREDS0S 1);,R

_XMoe(d0 ,TX_ADDESR0S TX,PL_OA_WDDIH);T

R_EN(X0 1, ,)1 ; / /道通0,能接使通道0收使,接能收通P道pei动自答应

hwile(1){

f(istra_tDHT11))( / /果应答成功如

{

eadr_HT11D() ; //读湿度温

if(checksu_m))( /如/和果检通过验

{

TX_BUF[0=]HTDda_ta.DH_H;

TXBU_[F]1=HT_dDaatDH.L;_TX_

BUF2[=D]H_TatadT_.;H

X_TBUF3][=DT_dHta.Ta_;L

S

wtic_Rh(1T, ); 0 // 换切发到模式送,启动不

Dat_Sand(Te_BXUF,T XP_LOA_DWITDH) ; / /写入数包

A据citv();e / /启动备设

whleiIRQ() ; / 等/待送发完

Ch毕ce_kCKA1(); // 除清TX FFIOd

lae4y2(05,10,05); /延/2时5m0s

}els

e

}{;}

;

deay4(25l0100,,5;)}

;}

/

*******************************n

fr4l201c

.

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

#i

nludcep"bulie.h

#i"cnuld

#niluced"nr 2f401lh."

ucha srat ; / 状态/量变

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

函数:ini _io()

描t:述初始

化OI

/*************************************************/*v

io idnitio(_vod)

i{

C E =;0 // 待机

SC = N;1 // PIS止禁

CSK = ;0 / S/PI钟置低

}

**/************************************************函

数S:IPR_(W)

述描

:据SPI协议,写根字节数一据nRF到4L20,同1从n时R2F4L01

出读一节字

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

ucahrSP IR_(ucWharb yte)

ucha{r ;i

for(i0=;i

{

ifb(yte &0 8x) 0 // ytb最高位e输出MOS到IM

SOI_(H;)

esleM

SI_LO);

S(CK_H() ; // 高S拉K,nRFC4L012M从SI读O1入数位,同时据MIS从O输1位数据出

btey

f(iIMO)S

byet =| x001; / 读M/IOSby到te低位最S

KCL(); _ / /CKS置低

}retun(brty)e; // 返回读 的出字节

}

一/*************************************************/*

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

*数函S:P_RW_IRge(

)

描述:

写数据vlaue到egr寄存器

/*************************************************/*uch

r aPS_RWI_eg(Rcuahrre g u,chr aavlue)

{

uharc tatus;s

if((reg! &0 cx)) 0 / 判断直接/令还是寄存指操器

re作g|= 020x

;CSNL_() ; / /SN置C低开始,输数据传

sttusa S=IPR_(regW) ;//选 寄择器,存时返同状态字回S

PIR_(Wavue);l // 然 后写据数到寄存该器

SN_H(); C / /CNS高拉,束数据传输结

rtuenr(satut)s ; // 返回 状态寄器存

}*/*************************************************/

/**************************************************函

数SPI_Wr:it_eBuf()

描:述

p把uf缓存中B数的据入到写nR2F401L,通常用来写发

射入通道据或数接/收发送地址

/*************************************************/*u

hca SPIrWr_ti_Buf(ucehra eg, urhcar* Buf,pu hac byrets)

{

chaur status ,i

i;f((!erg& 0cx)0 ) / / 判直接断指令是寄还器操作存

rge = |x02;0C

S_N(L); / /CN置S低开,传输始据数

statu s S=PI_RW(er)g ; // 选择寄存器 ,同时返状态字回

orf(=0i i;byt

SIP_W(pRBu[i]); f / /个字逐写入nRF节2L014

CSN_H);( / /SNC拉,结束高数传据

r输ternust(tuas); // 回状态寄返存器

}

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

/***************************************************函数:S

PIRea_(d)

描述:

从reg存寄读器字一

/节*************************************************/

u*charSPI Re_d(acuar hegr)

u{char regval;

CSN__L)(; / /CNS低置开,始传输据数SP

IRW_re()g ; / /选择寄 存器re

gva_ l SP=I_R(W);0 // 后从该然存器寄数据读C

S_NH);( / / SNC拉,结高束据传数输retu

nrr(g_eva)l ; / /回寄存返器数据

}

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

/*

*************************************************

数函SP:_RIad_euBf()

描述

从r:e寄g存器读b出yts个e节,字常用通来取读收接通道数

或接据/收送发址地/

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

/*u*hac rSP_IeaR_Bdf(uchua rer,gu hca r* pBuf,uchar by tse)

{

uhac staruts i;,CSN_

L(); //C NS置低开,传输始据

数tsaut = SsIP_RWre(g;) / 选/寄择存,器时返回同状态字

fro(=0i ;

pBufi] [= SP_IRW0(); / /逐 个字从n节RF2L04读1出

SC_HN(;) // CN拉高S,束数据结传输

rteru(nsattsu; ) // 回返状寄存态器

}* /

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

*

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

数:S函e_Ctonfig()

描:

CO述NIFGS,TUP_ERERT,F_RC,HR_SETFPU寄器设置,

一存上电初始化般运行/*

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

voi dSt_Cenofg(iuhcr a

cf,gu hcar ETR,Ruchar ch, uhac RFrS_ET){

Stndab();ySPI

RW__egR(OCNIG,Fcf g; ) / /COFING存寄设置,包器括RC,上电

SPICRW_R_egS(TUE_REPTR RE,R);T / /设 自动重发置延时,动自重次数发

SP_RIWR_egRF(CH,_c ); h // 选择射频 通道

SPIR__WegRR(F_ETSPU RF,_ES);T //设置数据 传率,发射功输,率噪低放声器大益增

}

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

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

函*:数RX_odMe)(

描:述

个这数设置函一接收通道,输某参入R数X_AD为道通地址,

存在保组数,组数一字节第为址长度,后地面是的

/****址**********************************************

v/odi X_MRoe(udcah ripe, uchPr * Ra_XD,A char buyest)

{

tSndaby)(

;PISWrit__BeufR(XA_DR_DP + Pi0p,e X_ADR + 1, RX*_A)D; / 设/置收通接Pi道ep址

地PS_RWIR_g(Re_PX_WP 0+ Pie,p byets) ; //设置接收 通道ipP有效数据e度

宽}

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

/

**************************************************函数

RX:EN_()

述描:

这函数个使能者禁或某止接收一道和通自动答,关闭应自

应答动以可和RnF4201通信/**

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

oid vXREN_(cuarhP iep, cuarh E_RX, Nuhacr N_AEC)K{

S

antdyb);(

if(EN_R)X

PS_IW_RRge(ENR_XADR, DPSI_eRa(dEN_RADDX)R |1(

ese

SPlI_RWRe_gEN_(RXADR, SDP_IRed(aE_RXANDRD) & (~1

i(ENfACK)_S

P_IW_Reg(RNE_AA ,SP_RIed(EN_aA) |A(1

lees

SPI_RW_Rge(N_AAE, SI_PeaR(Ed_AAN & ~)(1

/

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

/*

*************************************************

数:TX_函odM()e

描述:这个函数设

发置送址,地并设且置否是要应答需不,需

要答可以应和nFR204通1信

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

/oivd X_TodMe(uchar* XTA_,Du har Ec_NCKA)

{

tSnabdy)(;

SI_WriPetBu_(fTXA_DD,RT _AX D+1 ,* T XAD); _ / / 入发写送址地i

(EN_fACK){

SP_WIrtieBuf(_R_XDARDP_, 0XTA_ + 1D ,* X_AT)D; / 为了/答应接收备设接收通道0地,址发和地送址同相SPI

RW_R_e(gE_RXNADRD ,SP_IeaR(EN_RXdADRD)| 0x 1)0 // ;能使收接通道0

PSI_W_Reg(RE_NA, API_RSedaE(N_AA)| 0 01x); //使能接 收道通0自应答

动}

esel{

S

IPR__ReW(gN_REAXDRD SPI,Rea_(EN_dRADDXR & )x0f)e ; / 禁止接/收道通0

SP_IWR_Re(ENgAA, SP__RIea(dE_ANA )&0xf );e // 禁止接收 道0自动应答通}

}

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

*

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

函:S数witc_RT(h)

述:描

这函个数来用换发射切式和接收模式,切模换是否马后

上启设动备如。果

只有个两设在通备,用信个这数很

函方切便模换式/

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

vodiSw icthRT(_uhcraS , Wcuharm deo){

Standb();y

f(SW)i

PI_SRWRe_gCONFI(G, PI_SRed(aOCNIF)G &0xf )e; / /发射式模

eles

SIP_RWR_e(gOCNFI, SPGIRead(_CONIF)G |001)x ;// 接模式收

if(omde)

Aticve(; ) //拉 高EC启动发收

}

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

/****

**********************************************

函数:SWSTD_PD_)(

述描:

个这数函让备设工作上在还电是电下掉/

*************************************************

vo*i dWSSTD__PD(uchr SaW){

taSnbd()y;

fi(W)

SSPI_W_RRe(CgNOFIG ,PS_ReaI(dONCIFG)| 0 02);x // 电上e

ls

SeP_IWRR_eg(OCNIFG S,I_RPeadCO(NIFG) 0&fxd;) // 掉电}

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

/**************************************************函数:

CehckRe_()c

:述

查是检否接到数据包,收且并回接收返数据到的通道

号0-5(),没有接到数据收返包6回这。个函很容易改数

接收成断函数中只要把R,e_ciPpe改成局全函数

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

**/uhcraCheck_ Rcevo(di

){

uhac reRcP_iep;

taSus(t; ) / 读状/态寄存器

ifR(XD_R ) //判 是否接收断数据到

Rec_{iPpe = sta (>>1) & x00;7 / /存通保号道

SPIRW_R_e(STAgUST ,tas) ; // 清除RX_D中S断志标}

e

se

Rec_Plpe = 6i;ret

run(Re_cipPe;)

*}/

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

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

函数:Dat_aSae(v)

描述:这个

数用函在接来到收据数后保存数据包,也可以入嵌

到hCck_eRce()数用函/

**************************************************

//vo*idDa atS_va(eucha * rUFB, chur abtye)s{

St

adby(n;)

PSIRea_dB_ufRD(R_X_LOADP, UB, Fybte)s ;// R从 XIFOF出数读据读,数出后R据XFIFO自 清除动}

* /

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

*/

**************************************************

函数:hCec_AkK(C)

描:

检述接查收设备有接无到数据包收,设没定有收应到答信

号否清除是X FTIO。稍F作修改可以为发作射断中函数/

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

char CueckhACK_(ucahr cealr

{)

Status(;) / /返回状态存器寄i

(fAXM_T)R

SPI_{WR_egR(SATTS,U sa)t ;/ 清除M/AX_R中T标断志i

(flcear) / 是否/除TX F清IF

OleCar_TX);

(}

f(iT_DSX)

{

PS_RWIR_g(STATUSe ,tsa;) / 清除/TXDS中_标志

r断tuer(0xn0)0; / 成/功发数据送返0回

}

ele

seturr(n0fxf); / 数据发/失败返回送非零

}/

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

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

数:Da函a_tSnd()e

描述:

这个函用来数数写据到T XIFOF便以发射运,这行函数个

后再运A行tivce)(可就以马发上送据数了/

**************************************************

vo/i Ddat_Sande(ucha r *UF, Bchar ubyts)

{e

Standy()b;

CelraTX_)( ; / 清/除X TIFFO

PI_WrSte_Bif(uW_TXR_POLD,A UBF byt,s);e / /写数据 包TX F到IFO}

/*

*************************************************

/

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

l*cd6021.c

*******************************

/#i

clude"nubpli.he

#i"nculd.

#inludc "eCL160D.h2"

*/- ------------

能:功检查

忙注备返回值::忙志标 1忙: 2:碌空

闲内:读取b容f值-

------------- */-

bt bisuych_ec()k{

bi

tbf ;

LD=Cxff0;RS=

;0

RW=1

;=E0;

=0E

E=;;

1E1=;b

fB=F

;rteur n(f)b;

}

* /-------------

功:等能待空闲备

:返回值:注

内容:死无循环等待直,至闲空-

-------------- */

voidbus y_wat(i

){

wihel b(sy_cuhcke())

{

usyb_chek(c);}

;}

/*- ------------功

能:晶液初化

始备:返回注值无

内容::始化液晶

初---------------* /

ovidLCD_in t)

({

writec_mo(mTIW_LNNK_IDSI;)

dleya(3250,10)

;wiret_comm(TIN_LINK_DWS)I;

deal3y(520,0);1

rwietc_omm(TWNI_INL_DISK)

de;lya(32501,)0

w;rietco_m(TmINWLINK__DS);Ibu

y_sait(w);

ritewc_om(CmLS1_062_Crucor)

bu;s_waiyt);(w

iter_cmm(CoRL_102)6;

bsyu_awi(t);

rwit_ecmomA(DD_Rautoa_dd;)bus

yw_iat)(;

rwie_comm(tOEN_1P602;)

usb_ywat(i;)

}

/*--- ---------

-功能写入:B1yt数e据备

注返回:值无:

入:数据输dta内

容:写adtD到DRAM-

--------------*/

viod riwt_eata(dcuahr da)t{

buy_sawt()i

RS=1;

R;W=;

0CDL=atd;

E0;=E

1;

=CLD=x00;

0}

/*

--- ----------功能:

入写令/命制控字备

注返:回值无:

入:命输/控令制c字m

o内:控制容晶

液-------------- -*/

voi write_dommcu(hacr oc)

{

bmsyuwa_it)(;

SR=;0

R=W;0

LCDco=;m

E=;0

E=;

L1D=Cx000;

}

*/ ------------

-能:指功定位置示

显备注:回值:返无

输入液:横晶标x;液晶坐坐纵标;y显示字符atd

内:把d容at显在示液晶x(,y位置)上

--------------- */vo

di ritew1_62_0DAT(Auchar ,xchura y,cuha radt

{)if(x>

00x)f

{

=0x0xf;

};i

(y=f1)=

{

riwet_ommcL(NIE+x1;)}

else

{wr

it_comem(LIE2+N)x;

};

wite_rata(ddt);a}

/

-*------------功能:写

入自义定字符

注备:返值:无回

输入:自定字义符据起数始地址p

容内:添自定加字符义

---------------*/

vio dCD16L20_us_in(uchaC *rp)

{ u

hca r=m0;

rwte_comim(ETSCGR_M_AADD); R/ /设定GCRMA地 址

ofr(=0m;m

{

writ_eadt(apm]); [ };

}

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

dsipal.cy

*

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

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

/* 函

数 声 明 * /

/*********************************************/*vo

idd splay(viiod;)

voi disdlay_eprrorvo(id)

;

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

/* 显 示温 湿 度 */

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

v/oi didpsly(vaio)

{d

write_commLI(NE)1 ; / 第一/行显

示wr

it_edataA(SI_Iatb1[HT_dDta.DaH_H/X100);] / /湿度

riwe_dtat(ASaII_ab1tDH[T_atd.aH_H%0X1D0])

;wrie_tatad('');.

riwt_edtaaASII(_ta1b[HTDda_at.DH_L/X100)];

rwiteda_atA(SI_tab1[IHD_data.DH_LT%X001)];

wrtied_at(a'%';)

wr it_deata'R');

(wrte_daiat'('H;) / /%RH

wrie_tata(d'');

wr

tie_dat(aSAI_taIb1DH[T_adat.TH_/X010); ] //度温

writ_deat(ASII_atba[DH1T_daat._TH0%10]);Xw

rie_tadt('a');.w

rti_datae(AISI_ab1[tHD_Tdta.T_aL0/X1]);0

write_atd(AaII_Sabt[DH1Tdata_T_.%0X1L0];)

rwtied_ta(0xdfa); /°/

writ_deata(''C;) / /C

writ

_comm(LeIEN); 2 //第二 行显示w

ire_datta('S');

write_dat('Ua');

riwte_ada(tM');

wr'it_eadta'('):

;wrtei_dataAS(IItab1[D_H_Tada.Ctechksu/m0X10);]w

ritedat_(aSIA_tab1ID[H_TadtaChec.suk%m010X])

}

;

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

示:显 rErro */

/ **********************************************/void

dis play_erro(vriod

{)

rwte_i612_0ATAD(1,,1E'); ' //第一行示

显wrtie_data'r();'

witr_eatd(ar'');write

da_at'(o);'

wiretdata_(''r;)}

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

*dth1.c1

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

in#lcdeu"upile.bh

"#nicldu

#>iclndu ei

.inc#lud e"DH1T1."h

/*

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

/ * 结 构 体 /*

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

xteenrs trcu tHDT_daa

{t

chaurDH H_; // 湿整度数u

hcarD H_L; //湿度小 数

uharcT_H; / 温/度整数uchar

_T; L / 温度小数/

ucha rheCkcsmu /;校验和

/}DH_dTtaa;

/

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

* / 开 DHT11 始温度计 湿 *

// 输入:* 无 /*/

*出输:应标志 答0应答失:败 1应:答成功 */

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

/ibt tsart_HT1D(voi1d

{)

bi DtHT_tart;s

HD_stTrta= 0;

HT_buD = HsIHG;

DTHb_s u= OW; L /拉/1低m8以上sd

ela_my(18s);

HTD_usb= H GH;I

dleay2_0us)(;

dela_y02u(); s//高2拉~400u

shiwe(l!HDTb_su)

{

HDTsta_tr= 1;

; }/ DHT/答应,DT拉H80us后低高8拉u0,s后开始传然数据

//输据数40bit)=8(ib湿度t整+数b8ti湿度数小8bi+t度整温+数8bi温t度小数8+bit校和验

wilhe(DTH_us)b{;

retu}rnD(T_Hstrta;)/ 应答/功返成1回

}

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

* / 读取 DH11T温 湿计度 * /

*/ 读结果取在D存HT_atad结体构内 *

//* 输:无入 输 :无 出 *//*

****

*****************************************/v

iod erda_HDT11voi(d){

uhacr ,mnt,iem_rhtd;

charu p*;p

=&DTHdat_a.H_H; D

of(m=r;m

{

fro(=0;nn

wilhe~D(TH_bus;) /DH/T拉低2114-us表1示bit据数始开

tmierd_h=tx00;

w0ihel(HDT_bu)s // 随DH后T拉高总,单片线机通高电过平持的维间时判“断据0”还是数“数据”1{

//据0数维26持~82su高电,平数1据维1持61118~su电高平

tmeirdht_+;+ / 由于/处此对时延间时长度要的很高,求以所采另用一种法判断

办};

if(tmeirdht>D_THt_mieover)

{*p

=1

;p*=0x01;|}

lsee

{

*p

*p&=x0ef

};;

};

+p+;};

}

/*

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

20u s 精确 时延 *

/*/ 1用在521Mz晶h振下 /*

/* 用调函数使L用ALLC和RTE令指,共费4花周个 */

期/* 此因只1有个N6P O */ /

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

void deal_y02s(uoidv

{)_

opn ()_;

n_op_ ();

_on_p( ;)

_op_n( );

nop__ (;)

n_p_ o();

n_o_p();

_nop ();

__onp ();

__no_p );

_no(p (_;

)_np_ ()o

_nop_ (;;)_

npo _();

n_o_p ()

_nop_ ;)(;}

/

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

N s m 时延 * /

*/ hwie()l额占用外约5周期 */ /*

因 内层w此ilh(4e0-)-2u0 大s1ms约 /*/*

mN延时函s数未测()试 *//**

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

voi*dd eal_ys(mcuhram)

{

ucharn =83;

wilh(em-)-{

while(n-)-{

dely_a2u0(s);

};

;

}}

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

//* 校 验 和 判 断 *

/*/ 校位 = 验度整湿数位湿度+数小+温位度数位+温整度小位数之 和*/

/ *验校正确回:1 返 败返回:失0 */

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

itbcheck sum_v(io)

d{

fiDHT(d_aa.Chectskm=u=DHT(data_.H_H+DDTH_ata.dDHL+DH_Tdat_.a_HTD+THd_aa.t_L)T

re)urnt(); /1校/验正

e确sel

eturr(n); /0/校失验败}

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

dleyac.

12MH(Z)

*******************************

/

#

nciude"pluble.hi

"

/==/=======================================================================================

/vo*idd ela1(yuchar )i /延时5/u-5s00s u //0us 1 3

{ /计/i算2*+5 //2us0 8while

-(i) ;- /5/0s u 32

}* / /1/00u s 84

/2/0u0s 8

/9/005us 2 48

//========================================================================================

/*=ovid delya(uch2ari ) //延迟1 us0-2sm //1ms 1 42

{ /计算/i*+10 8 // 2ms 492

fro (i>0 ;i-;) -

;}* /

/=/=======================================================================================

=*v/io deday3l(cuhr i,auhca jr)/延迟/m2

s-130m s // 5m s 205 0

1{ / 计/算i*(2+3*)j+5 /10/sm 50 2 20fo

( ;r>j0; --)j /2/m0 s 250 40for

(;>i0 i--; ; ) / 5/ms0 25 09 9}*

/ / /10ms0 205 1 99

//=========================================================================================v

iod dlea4(ucharyi ,cuha rjucha,r k) // 20ms0 52 019 9 2

{ / /500s m 20 5492 4

for( ;k>0 ; k-) - //延迟130 m-s0s 3 //1s 250 2 94 8

fr( o;j0 >j--) ; /计算/(i*2(+3*)+j3*k+5) //5 s 250 429 0

4of(r i;> ;0i-)-; /1/0 s 502 24 9 08

}

/=/=======================================================================================

=

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

共公函数

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

*#i

ndef fP_BILUEH__

#defien_ UBILPEH__

#

edinfe uhacr unigsendch ra#

edfien unt inuignse dnit

#defnieu lognu snined lgong

/*******************************函

数声明*

******************************

/ovdide ly1(auhcrai); voi

deday2lu(har ic;

)vod iedal3(yuhar ci,cuha jr;)void

dlay4(echaur ,ichaur ,uchaj r);k

end#if

/*******************************n

r24f01.l

h*****

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

#ifned _AfP_DEF_I#

deine _fPA_DEFI_

#i

clnued h

// nRF240L接口1定

//定 SP义引脚Is

ib Ct E = P ^2;5 / / 片使芯引脚(输能)

s出it bCNS = P 2^2 ;/ /SIP口使能接脚(引出)输

sib StC = P2^4K; / /断引脚中(入输)sbi

tMO IS = P^21; // 数 输入

据sitb MSIO =P 23^; / 数/输出

s据bt iRQI =P^02; / 时钟输出

/

#deinfe tSanbyd) (CE 0 =// 待机

#deifen Ativec() CE = 1 // 启 动#d

feien SC_K()L S KC =0

#edfne iSK_H(C ) SC K= 1

de#fnie CNSL_() SC N =0

d#efienCSN _()H CN S= 1#d

fien MeOIS_L( )OSIM=

0#efdne iMSOI_H() M OSI= 1

// nRF24

L10指令格式:#

dfeineRE ADREG _ 0x00 //读寄存 器

d#feien RWIT_REE G x200 / /寄写器

存d#efne iDRRX_P_OADL 0x6 1 // R读XFI OF效有数据1,32-字,节当读据完数成后数,据清被,应除用于接模式收

#dfeni eWRTX__PLAO 0xA0D // 写TX IFO有F效数据1,32-节字,操作写从节0开字始,应用于发模式

射de#fin FLUSeHTX _ 0 Ex /1 /除T清X FFO寄I存,器应用于射模式发

#defin eFLSU_HXR 0x2E / 清除/RXF FOI存器,应寄用接收模式于

def#in eRUES_TX_EL P0E3 //x 新使用上重包有效数一,据当CE为高程过,数据中包不被断的重发新射#d

feine OPN 0xF F/ /操作,可以空用读状来寄态器存

/ /RF24nL0寄1存地址

器de#fne iCNOFG I 0x 0 0 //配置寄存器

#d efnieE NAA _ 001 x// “动应答”自能功寄存器

#dfene iN_REAXDD 0xR2 0/ / 收通接道使寄存器能

#efdineSE UT_PA W x030 / 地址宽/设度置存器

#def寄neiS ETUPR_ERT 0 04 x// 动重自发置寄存器

#设efdie RFnCH _ 00x5 / 射频通道/频率设置寄存器#d

eifenR F_ESUPT 0 x6 /0 射/设置频存寄

器#dfine eSATTUS x07 0/ 状/态寄存

#de器fine BSOEREVT_ 0x0X8 //发 送测寄存器检

#efdnieC D 009x // 载波 检测寄存器#d

efne Ri_XADDR_0 P00xA / /据通道数接0地址收存器寄

#dfinee X_RADR_D1P 0 0xB // 数据通 1接收道地址寄存器

#dfine RX_eADRD_P 0x2C0 / 数据通/道接2收址地存器

#寄edfienRX_ DADR_P3 00xD // 据数道通3接收地址寄器存

#defie nXRA_DDR_4 P 00E x/ /据数道4接通地址收寄器存#

dfinee X_ADDRR_5P 0x0 F / 数/据通5道接收址地存器寄

d#feie TX_nDDR A 0x 01 // 发地送址寄存器

#efdie RXn_WPP_0 0 11 /x /数通据0有道数据效度宽设寄存器

#def置in RX_eW_P1P 0x12

//数 通道据1效有据宽度数置寄存设器#d

fiene RX_W_P2P 0 x1 3 / /据通数2道效数据有度设宽置存器寄

#efidneRX P__WP 0314x // 数通据3有道效据数度设置宽存器寄

#efdneiR _PWXP_ 0x415 / /数据道4通效有据数宽度设寄存置器#d

feie RnX_P_WP5 0 x61 / /据数道5通效有据宽度数设寄置器存

#edinef IFF_STAOUST0x 71 / /FI FO态寄状存器

e

xern utcahr sta ; / 状态/变量

#efindeR _DRX (sat& 040)x / /接成收功断中志标#d

fine TX_DSe (s a & 0t20x) // 发 射成中功断标

志d#efni eMXART_ s(at& 01x0) / 重发/溢出中断志标

ucha SPrIR_W(uchr)a

;d#einfeSt tusa)( SC_LN);(sta=SP_RWI(OP)NC;NSH_)( / 读/态状存寄,保器在存tas

d#efnie Celra_TX) (SN_C();LPISR_(FLUWS_HTX;C)S_N() H // 除清XTFI F

#Oefdnie lCea_RXr( )SNC_(L);SP_IR(WLFSUH_RX;)CS_H()N //清 除R FXIOF

#edfnei Re_Sne(d C)N_SL);S(P_IR(RWEUE_STXP_)L;CSNH_)( / 重/使新上用一包射有效数发包

extern oid init_ivovoi(d);e

xtrn uechr SaI_PR(uchWa bytr);ee

txenr uchraSP IR__RegW(uhcr rea, guchrava le);u

etxrne uchr aSIPWrit__Bufeu(carhreg , chur a* Bpu, ufcah brtyes;)

xetenruc hra SP_IRae(dchaurr ge;)

exetn ucrhraS I_PeaR_Bdufu(carh reg ,uchar* pufB ucha, brytes;)

extre noiv SdetC_nfogi(chuar fcg u,hcar ERR, Tuhcr cah ,uhcr RaF_ST);E

xteernv oidR _ModX(uchareP pie,uc arh* RX _AD, ucar byths);e

xterne ovidR XEN(uc_arh iPp,e chur Ea_RNX uc,ha rNEA_K)C

ext;rne ovid TX_Moeduc(har* T_XD,A cuah EN_rCAK;)e

xerntv odi Siwtc_RT(hchur aSW ucha, romd)e;

//extrne viod SW_TD_SPDuc(ah rSW);

exert nchura Ceckh_Recvoid)(

ext;re vnid Dota_Saav(ucher a *BUF,u car hbtes)y;ex

tenruchar Ch cek_CA(uKcar hclare)

;eterx vondiD ataSe_n(dcuha r* BUF, chaurb tyse);

#nedi /f* A_P_DIF_E */

/*******************************l

dc106.h2

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

#indffe __LC1D60_h2

#deifne __CL1D026h_

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

/ * 宏 定 义 * /

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

defi#en LC D0 P // P口作1CDLI/

O

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

** / 函 数 明声 * //

**********************************************

/ibtb us_yceckh() ; // 检查忙数函voi

budys_aitw)(; / /等空待

void闲 CLD_in(t); // 初始化 晶

液vio driwt_deat(uacha dat); r / 写数/据v

idow rtie_omm(ccuhr cam)o ; / /写 令指v

oi writd_e160_2ADAT(uhar xc,uhcar yu,har cdta) ;/ 指定/位置写据数

oivdL C1D60_2Cs_iun() ; //写 自义字定符

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

/ * 自定 义字符 区 /*/

* *

/**/********************************************/u

hcarco d teabe[l=

]{

x10,0x00,0006x,x090,0x0,8x0080x,09,0x6, /0/年/

0ffx,x0ff,0fx,fx0f,f00x00,x0,0x0

00,x000,/ //月

x10,f0x1,10x110x1,f0x,11,01x10,x1f0x0,0,/ //日

0x0,006x00x3,,Cx0220,42,x0x42,x002,x000 //,/氏摄

0x度0,4x00,4x0510x,f10x1f,,x01f,0x1,0x10,0///坦克 0

11x,01xf,x1f0,x10,fx15,00x4,0x004,x001,

0xf1,x10f,x0c0,00fx0,x0c,x0f,0x1f,00x00,

01x,0f1xf,x060,0xe1,00x,6x0f0,x10,0x0f0};

/

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

* / 引 脚 定 义 区 * /

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

s*it RbSP2^4;=

sib RtWP=^25

s;it bE P=^26;s

ib tF=BP0^;

7

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

ASI I码 表 * //***

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

/u/harccode AS I_Iat1b2[0=]'0'{',1','2'',3'','4'5,','',67',''8'',9,'a''',',b'c'',d'','e',f'',*', ''};

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

*/ 6102 指令集 * /

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

/#d

fenieLINE 1 0X80 / 第/行一址地

#defnei LIEN2 0xC /0第/行地址二#d

fein eETS_GCAR_MADR D X40 0 //置C设RAM地G址#de

ifn TeIN_WINLK_DI 0x38S /两行显/示 57*8位数 据口

#dfene iCRL1602_ 0x01 / 清屏/

#幕deifne ADR_Datu_aod d 006 x/ 地/自动加1址显 不移位示

#efide CnLS_601_2urcCr ox00 8 //闭关标光#def

ne iOPN_E1062 x00C //开显 示

#edifn

/*******************************dht1

.1h

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

#fidnf eDH_1T1__ h

defi#e nD_TH11h_

/

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

* / 引 脚 定 义 */

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

sbt DHi_Tbsu = 0P^0

;

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

* / 函 数 声 明 * //

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

ibt tastr_HTD1(1void;) /开/始

void ead_rHTD11(void) ; //取读

voidd lea_y2u0(vsoid;) /20u/s时延

voi dedlaym_su(hcarm ;) / / msN时

延bi tchcke_usm(vod)i; // 和验校

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

/* 宏 定 义 */

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

#efdnie HIHG

1#edfineLOW 0

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

变 量 定 义 /*

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

#dfine DHTe_tieomvre5 / /电平高持时间维,用识别于“数据”和“0数据1”

e#dni

f

#incldu"pueble.h"

i#nilcudere#

incudel i

in#lucde"nrf4201.lh"

/#i/nclduelc"1602.hd

#i"clnde"dhtu1.h"1

/*

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

结 构 体 * /

/**********************************************/s

turtcDH T_data

{cuarhDH_H; / 湿/整度数

cuharDH _L ; /湿/小数

度cuar h_H; T //温 整度

u数hac r_TL ; //度温小数

ucarh heCcsukm;/ 校验和

}/DTHd_aa;t

#dfine eTX_POLA_DIDWHT 4 / 数据通道/效数据宽度有

uchr aocd eXTA_DDERSS[06]= {5,x0340x,430x1,,0x10,00x01;} / / 定义一个静态送地发址

chua rodceTX_ADD RSES16] [= 5,{x001,x100,x01,0x10,00x1};0 / /义定一静个态送地址发uc

hr aR_XUFBTX[PLO_D_AWIDT]H;uc

har XTBUF_[XTPL_ADO_WITDH;]

oiv dmain()

{

edaly42(5,010,50;)

inti_oi);( / nr/f始初化

elda4y(50,120,05) ;

//LCD_int)( ; //612初始0化//

edaly42(5,1000,)5 ;

eStCo_fign(0x0e,0 x0a ,0, 0x047); // 16位RCC验校使,能上,电重发时延等待50us+82us,6重发1次0,率频.442G数,传输据率M1pb,发s功率0dB射,m噪声低大器放增

T益_XoMe(dTXA_DREDS0S 1);,R

_XMoe(d0 ,TX_ADDESR0S TX,PL_OA_WDDIH);T

R_EN(X0 1, ,)1 ; / /道通0,能接使通道0收使,接能收通P道pei动自答应

hwile(1){

f(istra_tDHT11))( / /果应答成功如

{

eadr_HT11D() ; //读湿度温

if(checksu_m))( /如/和果检通过验

{

TX_BUF[0=]HTDda_ta.DH_H;

TXBU_[F]1=HT_dDaatDH.L;_TX_

BUF2[=D]H_TatadT_.;H

X_TBUF3][=DT_dHta.Ta_;L

S

wtic_Rh(1T, ); 0 // 换切发到模式送,启动不

Dat_Sand(Te_BXUF,T XP_LOA_DWITDH) ; / /写入数包

A据citv();e / /启动备设

whleiIRQ() ; / 等/待送发完

Ch毕ce_kCKA1(); // 除清TX FFIOd

lae4y2(05,10,05); /延/2时5m0s

}els

e

}{;}

;

deay4(25l0100,,5;)}

;}

/

*******************************n

fr4l201c

.

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

#i

nludcep"bulie.h

#i"cnuld

#niluced"nr 2f401lh."

ucha srat ; / 状态/量变

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

函数:ini _io()

描t:述初始

化OI

/*************************************************/*v

io idnitio(_vod)

i{

C E =;0 // 待机

SC = N;1 // PIS止禁

CSK = ;0 / S/PI钟置低

}

**/************************************************函

数S:IPR_(W)

述描

:据SPI协议,写根字节数一据nRF到4L20,同1从n时R2F4L01

出读一节字

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

ucahrSP IR_(ucWharb yte)

ucha{r ;i

for(i0=;i

{

ifb(yte &0 8x) 0 // ytb最高位e输出MOS到IM

SOI_(H;)

esleM

SI_LO);

S(CK_H() ; // 高S拉K,nRFC4L012M从SI读O1入数位,同时据MIS从O输1位数据出

btey

f(iIMO)S

byet =| x001; / 读M/IOSby到te低位最S

KCL(); _ / /CKS置低

}retun(brty)e; // 返回读 的出字节

}

一/*************************************************/*

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

*数函S:P_RW_IRge(

)

描述:

写数据vlaue到egr寄存器

/*************************************************/*uch

r aPS_RWI_eg(Rcuahrre g u,chr aavlue)

{

uharc tatus;s

if((reg! &0 cx)) 0 / 判断直接/令还是寄存指操器

re作g|= 020x

;CSNL_() ; / /SN置C低开始,输数据传

sttusa S=IPR_(regW) ;//选 寄择器,存时返同状态字回S

PIR_(Wavue);l // 然 后写据数到寄存该器

SN_H(); C / /CNS高拉,束数据传输结

rtuenr(satut)s ; // 返回 状态寄器存

}*/*************************************************/

/**************************************************函

数SPI_Wr:it_eBuf()

描:述

p把uf缓存中B数的据入到写nR2F401L,通常用来写发

射入通道据或数接/收发送地址

/*************************************************/*u

hca SPIrWr_ti_Buf(ucehra eg, urhcar* Buf,pu hac byrets)

{

chaur status ,i

i;f((!erg& 0cx)0 ) / / 判直接断指令是寄还器操作存

rge = |x02;0C

S_N(L); / /CN置S低开,传输始据数

statu s S=PI_RW(er)g ; // 选择寄存器 ,同时返状态字回

orf(=0i i;byt

SIP_W(pRBu[i]); f / /个字逐写入nRF节2L014

CSN_H);( / /SNC拉,结束高数传据

r输ternust(tuas); // 回状态寄返存器

}

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

/***************************************************函数:S

PIRea_(d)

描述:

从reg存寄读器字一

/节*************************************************/

u*charSPI Re_d(acuar hegr)

u{char regval;

CSN__L)(; / /CNS低置开,始传输据数SP

IRW_re()g ; / /选择寄 存器re

gva_ l SP=I_R(W);0 // 后从该然存器寄数据读C

S_NH);( / / SNC拉,结高束据传数输retu

nrr(g_eva)l ; / /回寄存返器数据

}

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

/*

*************************************************

数函SP:_RIad_euBf()

描述

从r:e寄g存器读b出yts个e节,字常用通来取读收接通道数

或接据/收送发址地/

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

/*u*hac rSP_IeaR_Bdf(uchua rer,gu hca r* pBuf,uchar by tse)

{

uhac staruts i;,CSN_

L(); //C NS置低开,传输始据

数tsaut = SsIP_RWre(g;) / 选/寄择存,器时返回同状态字

fro(=0i ;

pBufi] [= SP_IRW0(); / /逐 个字从n节RF2L04读1出

SC_HN(;) // CN拉高S,束数据结传输

rteru(nsattsu; ) // 回返状寄存态器

}* /

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

*

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

数:S函e_Ctonfig()

描:

CO述NIFGS,TUP_ERERT,F_RC,HR_SETFPU寄器设置,

一存上电初始化般运行/*

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

voi dSt_Cenofg(iuhcr a

cf,gu hcar ETR,Ruchar ch, uhac RFrS_ET){

Stndab();ySPI

RW__egR(OCNIG,Fcf g; ) / /COFING存寄设置,包器括RC,上电

SPICRW_R_egS(TUE_REPTR RE,R);T / /设 自动重发置延时,动自重次数发

SP_RIWR_egRF(CH,_c ); h // 选择射频 通道

SPIR__WegRR(F_ETSPU RF,_ES);T //设置数据 传率,发射功输,率噪低放声器大益增

}

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

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

函*:数RX_odMe)(

描:述

个这数设置函一接收通道,输某参入R数X_AD为道通地址,

存在保组数,组数一字节第为址长度,后地面是的

/****址**********************************************

v/odi X_MRoe(udcah ripe, uchPr * Ra_XD,A char buyest)

{

tSndaby)(

;PISWrit__BeufR(XA_DR_DP + Pi0p,e X_ADR + 1, RX*_A)D; / 设/置收通接Pi道ep址

地PS_RWIR_g(Re_PX_WP 0+ Pie,p byets) ; //设置接收 通道ipP有效数据e度

宽}

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

/

**************************************************函数

RX:EN_()

述描:

这函数个使能者禁或某止接收一道和通自动答,关闭应自

应答动以可和RnF4201通信/**

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

oid vXREN_(cuarhP iep, cuarh E_RX, Nuhacr N_AEC)K{

S

antdyb);(

if(EN_R)X

PS_IW_RRge(ENR_XADR, DPSI_eRa(dEN_RADDX)R |1(

ese

SPlI_RWRe_gEN_(RXADR, SDP_IRed(aE_RXANDRD) & (~1

i(ENfACK)_S

P_IW_Reg(RNE_AA ,SP_RIed(EN_aA) |A(1

lees

SPI_RW_Rge(N_AAE, SI_PeaR(Ed_AAN & ~)(1

/

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

/*

*************************************************

数:TX_函odM()e

描述:这个函数设

发置送址,地并设且置否是要应答需不,需

要答可以应和nFR204通1信

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

/oivd X_TodMe(uchar* XTA_,Du har Ec_NCKA)

{

tSnabdy)(;

SI_WriPetBu_(fTXA_DD,RT _AX D+1 ,* T XAD); _ / / 入发写送址地i

(EN_fACK){

SP_WIrtieBuf(_R_XDARDP_, 0XTA_ + 1D ,* X_AT)D; / 为了/答应接收备设接收通道0地,址发和地送址同相SPI

RW_R_e(gE_RXNADRD ,SP_IeaR(EN_RXdADRD)| 0x 1)0 // ;能使收接通道0

PSI_W_Reg(RE_NA, API_RSedaE(N_AA)| 0 01x); //使能接 收道通0自应答

动}

esel{

S

IPR__ReW(gN_REAXDRD SPI,Rea_(EN_dRADDXR & )x0f)e ; / 禁止接/收道通0

SP_IWR_Re(ENgAA, SP__RIea(dE_ANA )&0xf );e // 禁止接收 道0自动应答通}

}

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

*

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

函:S数witc_RT(h)

述:描

这函个数来用换发射切式和接收模式,切模换是否马后

上启设动备如。果

只有个两设在通备,用信个这数很

函方切便模换式/

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

vodiSw icthRT(_uhcraS , Wcuharm deo){

Standb();y

f(SW)i

PI_SRWRe_gCONFI(G, PI_SRed(aOCNIF)G &0xf )e; / /发射式模

eles

SIP_RWR_e(gOCNFI, SPGIRead(_CONIF)G |001)x ;// 接模式收

if(omde)

Aticve(; ) //拉 高EC启动发收

}

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

/****

**********************************************

函数:SWSTD_PD_)(

述描:

个这数函让备设工作上在还电是电下掉/

*************************************************

vo*i dWSSTD__PD(uchr SaW){

taSnbd()y;

fi(W)

SSPI_W_RRe(CgNOFIG ,PS_ReaI(dONCIFG)| 0 02);x // 电上e

ls

SeP_IWRR_eg(OCNIFG S,I_RPeadCO(NIFG) 0&fxd;) // 掉电}

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

/**************************************************函数:

CehckRe_()c

:述

查是检否接到数据包,收且并回接收返数据到的通道

号0-5(),没有接到数据收返包6回这。个函很容易改数

接收成断函数中只要把R,e_ciPpe改成局全函数

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

**/uhcraCheck_ Rcevo(di

){

uhac reRcP_iep;

taSus(t; ) / 读状/态寄存器

ifR(XD_R ) //判 是否接收断数据到

Rec_{iPpe = sta (>>1) & x00;7 / /存通保号道

SPIRW_R_e(STAgUST ,tas) ; // 清除RX_D中S断志标}

e

se

Rec_Plpe = 6i;ret

run(Re_cipPe;)

*}/

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

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

函数:Dat_aSae(v)

描述:这个

数用函在接来到收据数后保存数据包,也可以入嵌

到hCck_eRce()数用函/

**************************************************

//vo*idDa atS_va(eucha * rUFB, chur abtye)s{

St

adby(n;)

PSIRea_dB_ufRD(R_X_LOADP, UB, Fybte)s ;// R从 XIFOF出数读据读,数出后R据XFIFO自 清除动}

* /

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

*/

**************************************************

函数:hCec_AkK(C)

描:

检述接查收设备有接无到数据包收,设没定有收应到答信

号否清除是X FTIO。稍F作修改可以为发作射断中函数/

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

char CueckhACK_(ucahr cealr

{)

Status(;) / /返回状态存器寄i

(fAXM_T)R

SPI_{WR_egR(SATTS,U sa)t ;/ 清除M/AX_R中T标断志i

(flcear) / 是否/除TX F清IF

OleCar_TX);

(}

f(iT_DSX)

{

PS_RWIR_g(STATUSe ,tsa;) / 清除/TXDS中_标志

r断tuer(0xn0)0; / 成/功发数据送返0回

}

ele

seturr(n0fxf); / 数据发/失败返回送非零

}/

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

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

数:Da函a_tSnd()e

描述:

这个函用来数数写据到T XIFOF便以发射运,这行函数个

后再运A行tivce)(可就以马发上送据数了/

**************************************************

vo/i Ddat_Sande(ucha r *UF, Bchar ubyts)

{e

Standy()b;

CelraTX_)( ; / 清/除X TIFFO

PI_WrSte_Bif(uW_TXR_POLD,A UBF byt,s);e / /写数据 包TX F到IFO}

/*

*************************************************

/

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

l*cd6021.c

*******************************

/#i

clude"nubpli.he

#i"nculd.

#inludc "eCL160D.h2"

*/- ------------

能:功检查

忙注备返回值::忙志标 1忙: 2:碌空

闲内:读取b容f值-

------------- */-

bt bisuych_ec()k{

bi

tbf ;

LD=Cxff0;RS=

;0

RW=1

;=E0;

=0E

E=;;

1E1=;b

fB=F

;rteur n(f)b;

}

* /-------------

功:等能待空闲备

:返回值:注

内容:死无循环等待直,至闲空-

-------------- */

voidbus y_wat(i

){

wihel b(sy_cuhcke())

{

usyb_chek(c);}

;}

/*- ------------功

能:晶液初化

始备:返回注值无

内容::始化液晶

初---------------* /

ovidLCD_in t)

({

writec_mo(mTIW_LNNK_IDSI;)

dleya(3250,10)

;wiret_comm(TIN_LINK_DWS)I;

deal3y(520,0);1

rwietc_omm(TWNI_INL_DISK)

de;lya(32501,)0

w;rietco_m(TmINWLINK__DS);Ibu

y_sait(w);

ritewc_om(CmLS1_062_Crucor)

bu;s_waiyt);(w

iter_cmm(CoRL_102)6;

bsyu_awi(t);

rwit_ecmomA(DD_Rautoa_dd;)bus

yw_iat)(;

rwie_comm(tOEN_1P602;)

usb_ywat(i;)

}

/*--- ---------

-功能写入:B1yt数e据备

注返回:值无:

入:数据输dta内

容:写adtD到DRAM-

--------------*/

viod riwt_eata(dcuahr da)t{

buy_sawt()i

RS=1;

R;W=;

0CDL=atd;

E0;=E

1;

=CLD=x00;

0}

/*

--- ----------功能:

入写令/命制控字备

注返:回值无:

入:命输/控令制c字m

o内:控制容晶

液-------------- -*/

voi write_dommcu(hacr oc)

{

bmsyuwa_it)(;

SR=;0

R=W;0

LCDco=;m

E=;0

E=;

L1D=Cx000;

}

*/ ------------

-能:指功定位置示

显备注:回值:返无

输入液:横晶标x;液晶坐坐纵标;y显示字符atd

内:把d容at显在示液晶x(,y位置)上

--------------- */vo

di ritew1_62_0DAT(Auchar ,xchura y,cuha radt

{)if(x>

00x)f

{

=0x0xf;

};i

(y=f1)=

{

riwet_ommcL(NIE+x1;)}

else

{wr

it_comem(LIE2+N)x;

};

wite_rata(ddt);a}

/

-*------------功能:写

入自义定字符

注备:返值:无回

输入:自定字义符据起数始地址p

容内:添自定加字符义

---------------*/

vio dCD16L20_us_in(uchaC *rp)

{ u

hca r=m0;

rwte_comim(ETSCGR_M_AADD); R/ /设定GCRMA地 址

ofr(=0m;m

{

writ_eadt(apm]); [ };

}

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

dsipal.cy

*

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

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

/* 函

数 声 明 * /

/*********************************************/*vo

idd splay(viiod;)

voi disdlay_eprrorvo(id)

;

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

/* 显 示温 湿 度 */

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

v/oi didpsly(vaio)

{d

write_commLI(NE)1 ; / 第一/行显

示wr

it_edataA(SI_Iatb1[HT_dDta.DaH_H/X100);] / /湿度

riwe_dtat(ASaII_ab1tDH[T_atd.aH_H%0X1D0])

;wrie_tatad('');.

riwt_edtaaASII(_ta1b[HTDda_at.DH_L/X100)];

rwiteda_atA(SI_tab1[IHD_data.DH_LT%X001)];

wrtied_at(a'%';)

wr it_deata'R');

(wrte_daiat'('H;) / /%RH

wrie_tata(d'');

wr

tie_dat(aSAI_taIb1DH[T_adat.TH_/X010); ] //度温

writ_deat(ASII_atba[DH1T_daat._TH0%10]);Xw

rie_tadt('a');.w

rti_datae(AISI_ab1[tHD_Tdta.T_aL0/X1]);0

write_atd(AaII_Sabt[DH1Tdata_T_.%0X1L0];)

rwtied_ta(0xdfa); /°/

writ_deata(''C;) / /C

writ

_comm(LeIEN); 2 //第二 行显示w

ire_datta('S');

write_dat('Ua');

riwte_ada(tM');

wr'it_eadta'('):

;wrtei_dataAS(IItab1[D_H_Tada.Ctechksu/m0X10);]w

ritedat_(aSIA_tab1ID[H_TadtaChec.suk%m010X])

}

;

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

示:显 rErro */

/ **********************************************/void

dis play_erro(vriod

{)

rwte_i612_0ATAD(1,,1E'); ' //第一行示

显wrtie_data'r();'

witr_eatd(ar'');write

da_at'(o);'

wiretdata_(''r;)}

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

*dth1.c1

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

in#lcdeu"upile.bh

"#nicldu

#>iclndu ei

.inc#lud e"DH1T1."h

/*

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

/ * 结 构 体 /*

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

xteenrs trcu tHDT_daa

{t

chaurDH H_; // 湿整度数u

hcarD H_L; //湿度小 数

uharcT_H; / 温/度整数uchar

_T; L / 温度小数/

ucha rheCkcsmu /;校验和

/}DH_dTtaa;

/

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

* / 开 DHT11 始温度计 湿 *

// 输入:* 无 /*/

*出输:应标志 答0应答失:败 1应:答成功 */

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

/ibt tsart_HT1D(voi1d

{)

bi DtHT_tart;s

HD_stTrta= 0;

HT_buD = HsIHG;

DTHb_s u= OW; L /拉/1低m8以上sd

ela_my(18s);

HTD_usb= H GH;I

dleay2_0us)(;

dela_y02u(); s//高2拉~400u

shiwe(l!HDTb_su)

{

HDTsta_tr= 1;

; }/ DHT/答应,DT拉H80us后低高8拉u0,s后开始传然数据

//输据数40bit)=8(ib湿度t整+数b8ti湿度数小8bi+t度整温+数8bi温t度小数8+bit校和验

wilhe(DTH_us)b{;

retu}rnD(T_Hstrta;)/ 应答/功返成1回

}

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

* / 读取 DH11T温 湿计度 * /

*/ 读结果取在D存HT_atad结体构内 *

//* 输:无入 输 :无 出 *//*

****

*****************************************/v

iod erda_HDT11voi(d){

uhacr ,mnt,iem_rhtd;

charu p*;p

=&DTHdat_a.H_H; D

of(m=r;m

{

fro(=0;nn

wilhe~D(TH_bus;) /DH/T拉低2114-us表1示bit据数始开

tmierd_h=tx00;

w0ihel(HDT_bu)s // 随DH后T拉高总,单片线机通高电过平持的维间时判“断据0”还是数“数据”1{

//据0数维26持~82su高电,平数1据维1持61118~su电高平

tmeirdht_+;+ / 由于/处此对时延间时长度要的很高,求以所采另用一种法判断

办};

if(tmeirdht>D_THt_mieover)

{*p

=1

;p*=0x01;|}

lsee

{

*p

*p&=x0ef

};;

};

+p+;};

}

/*

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

20u s 精确 时延 *

/*/ 1用在521Mz晶h振下 /*

/* 用调函数使L用ALLC和RTE令指,共费4花周个 */

期/* 此因只1有个N6P O */ /

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

void deal_y02s(uoidv

{)_

opn ()_;

n_op_ ();

_on_p( ;)

_op_n( );

nop__ (;)

n_p_ o();

n_o_p();

_nop ();

__onp ();

__no_p );

_no(p (_;

)_np_ ()o

_nop_ (;;)_

npo _();

n_o_p ()

_nop_ ;)(;}

/

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

N s m 时延 * /

*/ hwie()l额占用外约5周期 */ /*

因 内层w此ilh(4e0-)-2u0 大s1ms约 /*/*

mN延时函s数未测()试 *//**

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

voi*dd eal_ys(mcuhram)

{

ucharn =83;

wilh(em-)-{

while(n-)-{

dely_a2u0(s);

};

;

}}

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

//* 校 验 和 判 断 *

/*/ 校位 = 验度整湿数位湿度+数小+温位度数位+温整度小位数之 和*/

/ *验校正确回:1 返 败返回:失0 */

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

itbcheck sum_v(io)

d{

fiDHT(d_aa.Chectskm=u=DHT(data_.H_H+DDTH_ata.dDHL+DH_Tdat_.a_HTD+THd_aa.t_L)T

re)urnt(); /1校/验正

e确sel

eturr(n); /0/校失验败}

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

dleyac.

12MH(Z)

*******************************

/

#

nciude"pluble.hi

"

/==/=======================================================================================

/vo*idd ela1(yuchar )i /延时5/u-5s00s u //0us 1 3

{ /计/i算2*+5 //2us0 8while

-(i) ;- /5/0s u 32

}* / /1/00u s 84

/2/0u0s 8

/9/005us 2 48

//========================================================================================

/*=ovid delya(uch2ari ) //延迟1 us0-2sm //1ms 1 42

{ /计算/i*+10 8 // 2ms 492

fro (i>0 ;i-;) -

;}* /

/=/=======================================================================================

=*v/io deday3l(cuhr i,auhca jr)/延迟/m2

s-130m s // 5m s 205 0

1{ / 计/算i*(2+3*)j+5 /10/sm 50 2 20fo

( ;r>j0; --)j /2/m0 s 250 40for

(;>i0 i--; ; ) / 5/ms0 25 09 9}*

/ / /10ms0 205 1 99

//=========================================================================================v

iod dlea4(ucharyi ,cuha rjucha,r k) // 20ms0 52 019 9 2

{ / /500s m 20 5492 4

for( ;k>0 ; k-) - //延迟130 m-s0s 3 //1s 250 2 94 8

fr( o;j0 >j--) ; /计算/(i*2(+3*)+j3*k+5) //5 s 250 429 0

4of(r i;> ;0i-)-; /1/0 s 502 24 9 08

}

/=/=======================================================================================

=


相关内容

  • 仓库温湿度控制系统
  • 1前言 1.1仓库温湿度检测控制报警系统的发展 防潮通风等对温湿度的基本控制是仓库日常工作的重要内容,用来衡量仓库管理水平的重要指标.这直接关系到储备物资的使用寿命以及工作可靠性.为保证其日常工作的顺利开展,首要问题就在于加强关注仓库内温湿度的检测工作.因此我们需要一种使用方便并且测量准确的温湿度测 ...

  • 无线温湿度检测仪实习报告
  • 桂林理工大学信息科学与工程学院 "电子系统设计创新与实践" 课程设计(实习)报告 题目:基于单片机的无线温湿度测量仪设计 专业(方向) :电子信息工程 班 级:电信12-1 学 生: 学 号: 指导教师: 2015年7月9日 基于单片机的无线温湿度测量仪设计 摘要 温湿度在人们的 ...

  • 基于51单片机SHT11温湿度传感器检测程序(含电路图)
  • 下面是原理图: 下面是SHT11与MCU连接的典型电路: 下面是源代码: view source print? 001.#include 002.#include 003. 004./******************************************************** 0 ...

  • 温度测试控制仪
  • 温度测试控制仪 前言 温度是表示物体冷热程度的物理量,微观上来讲是物体分子热运动的剧烈程度.在整个宇宙当中,温度无处不存在.无论在地球上还是在月球上,也无论是在炽热的太阳上还是在阴冷的冥王星上,这一切无不由于空间位置的不同而存在着温度的差别. 温度和人类的生产.生活有着密切的关系,同时也是工业生产中 ...

  • 智能毫秒计
  • XGMS-II智能毫秒计 说明书 武汉西高华电电气有限公司 目录 概述----------------------------------------------------------------------------1 产品简介--------------------------------- ...

  • 高速公路计重收费系统
  • 高速公路计重收费系统 一.项目概述 公路通行费是政府授权的公路投资及经营者向公路使用者.受益 者征收的费用,它是公路使用者或受益者对使用公路所支付的一种补 偿,是收费公路管理部门或经营者获得收益的主要途径之一.实践证 明,收费公路的设立是解决公路建设资金不足.促进公路发展的有效 途径之一.海南从19 ...

  • 室内环境监控系统
  • 常州信息职业技术学院 学生毕业设计(论文)报告 系 别: 电子与电气工程学院 专 业: 电气自动化技术 班 级: 电气111 学 生 姓 名: 踪娜 学 生 学 号:设计(论文)题目: 室内环境监测系统 指 导 教 师: 宋艳 设 计 地 点: 常州信息职业技术学院 起 迄 日 期: 2013.09 ...

  • 智能别墅解决方案
  • 智 能 别 墅 解 决 方 案 深圳市科道智能产品有限公司 2015年4月 地址:深圳市宝安区洪浪北二路鼎新科技园凌云大厦8楼 电话:0755-26506515 传真:0755-26508137 网址:www.i-tone.cn 目 录 一.精彩应用 ........................ ...

  • GAXT单一气体检测仪中文说明书
  • GasAlert Extreme O 2, CO, H2S, PH3, SO2, Cl2, NH3, NO2, HCN, ETO, ClO2, O3, NO 气体检测仪快速参考指南 有限保证和责任限制 BW Technologies Ltd.(BW )保证,本产品从交付客户之日起在正常使用和保养情况 ...