基于C8051F020车辆散热系统参数检测仪的设计(9)

2020-02-21 22:47

沈阳工业大学本科生毕业设计(论文)

ES = 1; }

/*--------------------------------------------------*/ //函数名称:DataChang

//功能描述:将压力、温度数据处理后存入串口发送数据缓冲区等待发送 //入口参数:压力、温度值 //返回值:无

void DataChang(unsigned int Dis,unsigned int Tem) { }

unsigned char h,l; h=Dis/256; l=Dis%6; Send_Buf[2]=h; Send_Buf[3]=l; h=Tem/256; l=Tem%6; Send_Buf[4]=h; Send_Buf[5]=l;

源代码三:测压部分

#include \#include #include sbit YL=AINO

uchar Adc0832(unsigned char channel) //AD转换,返回结果 {

uchar i=0; uchar j; uint dat=0; uchar ndat=0;

if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_();

ADCS=0;//拉低CS端

36

沈阳工业大学本科生毕业设计(论文)

_nop_(); _nop_();

ADCLK=1;//拉高CLK端 _nop_(); _nop_();

ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_();

ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_();

ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_();

ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_();

ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i<8;i++) {

dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_();

ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat<<=1;

if(i==7)dat|=ADDO; }

for(i=0;i<8;i++)

37

沈阳工业大学本科生毕业设计(论文)

{ j=0;

j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_();

ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j<<7; ndat=ndat|j; if(i<7)ndat>>=1; }

ADCS=1;//拉低CS端 ADCLK=0;//拉低CLK端

ADDO=1;//拉高数据端,回到初始状态 dat<<=8; dat|=ndat;

return(dat); //return ad k }

源代码四:DS18B20部分

#include \#include #include sbit DQ=P0^3;

extern void delay(unsigned int i);

/**********************4*******************/ /*****************DS18B20******************/

void Init_Ds18b20(void) //DS18B20初始化 { }

DQ=0; //单片机拉低总线 delay(900); //精确延时,维持至少480us DQ=1; //释放总线,即拉高了总线

delay(400); //此处延时有足够,确保能让DS18B20发出存在脉冲。

38

沈阳工业大学本科生毕业设计(论文)

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

unsigned char Read_One_Byte(void) //读取一个字节的数据 从总线移出

{ 效。

_nop_(); _nop_();

_nop_(); //至少维持了1us,表示读时序开始

dat>>=1; //让从总线上读到的位数据,依次从高位移动到低位。 DQ=1; //释放总线,此后DS18B20会控制总线,把数据传输到总线上 delay(10); //延时7us,此处参照推荐的读时序图,尽量把控制器采样时间

放到读时序后的15us内的最后部分

}

/********************************************************/ void Write_One_Byte(unsigned char dat) {

unsigned char i=0; for(i=8;i>0;i--) {

DQ=0; //拉低总线 if(DQ) //控制器进行采样 {

dat|=0x80; //若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0 } }

return (dat);

delay(100); //此延时不能少,确保读时序的长度60us--很重要 unsigned char i=0; unsigned char dat=0; for(i=8;i>0;i--) {

DQ=0; //将总线拉低,要在1us之后释放总线

//单片机要在此下降沿后的15us内读数据才会有

//读数据时,数据以字节的最低有效位先

39

沈阳工业大学本科生毕业设计(论文)

}

/***********************************************************************/ unsigned int Get_Tmp(void) //获取温度 {

unsigned int temp; float t;

unsigned char a=0,b=0;

Init_Ds18b20(); //初始化 Write_One_Byte(0xcc); //忽略ROM指令 Write_One_Byte(0x44); //温度转换指令 Init_Ds18b20(); //初始化 Write_One_Byte(0xcc); //忽略ROM指令

Write_One_Byte(0xbe); //读读RAM的存储器指令 a=Read_One_Byte(); //读取到的第一个字节为温度LSB b=Read_One_Byte(); //读取到的第二个字节为温度MSB temp=b; //先把高八位有效数据赋于temp

temp<<=8; //把以上8位数据从temp低八位移到高八位 temp=temp|a; //两字节合成一个整型变量 t=temp*0.0625; //得到真实十进制温度值

//因为DS18B20可以精确到0.0625度 //所以读回数据的最低位代表的是0.0625度 temp=t*10+0.5; //此处放大十倍

//这样做的目的将小数点后第一位也转换为

//临时中间变量

_nop_();

nop_(); //至少维持了1us,表示写时序(包括写0时序或写1时序)开始 DQ=dat&0x01; //从字节的最低位开始传输

//指令dat的最低位赋予给总线,必须在拉低总 //因为15us后DS18B20会对总线采样。

delay(100); //必须让写时序持续至少60us ----很重要 DQ=1; //写完后,必须释放总线, dat>>=1;

//因为15us后DS18B20会对总线采样。 delay(2); }

线后的15us内,

40


基于C8051F020车辆散热系统参数检测仪的设计(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:铁砂掌训练之痛

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

马上注册会员

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