DS18B20温度采集并由lcd显示 - 图文(8)

2019-05-17 10:08

_Nop(); _Nop(); }

/******************************************************************* 字节数据接收函数 函数原型: UCHAR RcvByte();

功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号), 发完后请用应答函数应答从机。

********************************************************************/ unsigned char RcvByte() {

unsigned char retc; unsigned char BitCnt; retc=0;

SDA=1; /*置数据线为输入方式*/ for(BitCnt=0;BitCnt<8;BitCnt++)

{

_Nop();

SCL=0; /*置时钟线为低,准备接收数据位*/ _Nop();

_Nop(); /*时钟低电平周期大于4.7μs*/ _Nop(); _Nop(); _Nop();

SCL=1; /*置时钟线为高使数据线上数据有效*/ _Nop();

_Nop(); retc=retc<<1; if(SDA==1)

retc=retc+1; /*读数据位,接收的数据位放入retc中 */

_Nop(); _Nop(); } }

/******************************************************************** 应答子函数 函数原型: void Ack_I2c(bit a);

功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定) ********************************************************************/ void Ack_I2c(bit a) {

if(a==0)

SDA=0; /*在此发出应答或非应答信号 */ SCL=0; _Nop(); _Nop(); return(retc);

else

SDA=1;

_Nop(); _Nop(); _Nop();

SCL=1; _Nop();

_Nop(); /*时钟低电平周期大于4μs*/ _Nop(); _Nop(); _Nop();

SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/ _Nop(); _Nop();

}

24c02部分

/*************************此部分为AT2402的驱动程序使用I2C总线连接*************************************/ #include //AT2402的功能函数

/******************************************************************* 向有子地址器件发送多字节数据函数 函数原型: bit ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no); 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。 如果返回1表示操作成功,否则操作有误。 注意: 使用前必须已结束总线。

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

bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char {

unsigned char i;

no) Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack==0) return(0);

SendByte(suba); /*发送器件子地址*/ if(ack==0)return(0); for(i=0;i

SendByte(*s); /*发送数据*/ if(ack==0)return(0); s++; }

Stop_I2c(); /*结束总线*/ return(1); }

/******************************************************************* 向有子地址器件读取多字节数据函数 函数原型: bit RecndStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no); 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。 如果返回1表示操作成功,否则操作有误。 注意: 使用前必须已结束总线。

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

bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char {

unsigned char i;

Start_I2c(); /*启动总线*/

no) SendByte(sla); /*发送器件地址*/ if(ack==0)return(0);

SendByte(suba); /*发送器件子地址*/ if(ack==0)return(0);

Start_I2c(); /*重新启动总线*/ SendByte(sla+1); if(ack==0)return(0); for(i=0;i

*s=RcvByte(); /*发送数据*/ Ack_I2c(0); /*发送就答位*/ s++; }

*s=RcvByte();

Ack_I2c(1); /*发送非应位*/ Stop_I2c(); /*结束总线*/ return(1); }

Function.h部分

#define uchar unsigned char #define uint unsigned int

extern void write_sfm(uchar add,uchar dat); extern extern extern extern

void delay(uint z);

void dsreset(void); //18B20复位,初始化函数 bit tempreadbit(void); //读1位函数 uchar tempread(void); //读1个字节


DS18B20温度采集并由lcd显示 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:4AM2U3 I have a friend 教案

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

马上注册会员

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