DS18B20中文资料+C程序(2)

2019-05-17 11:26

{

TRISA=0X00;

delay(5,100); //设置A口全为输出 PORTD=table[shi]; //显示整数十位 PORTA=0x3e; delay(10,100);

PORTD=table[ge]&0X7F; //显示整数个位,并点亮小数点 PORTA=0x3d; delay(10,100);

PORTD=table[shifen]; //显示小数十分位 PORTA=0x3b; delay(10,100);

PORTD=table[baifen]; //显示小数百分位 PORTA=0x37; delay(10,100);

PORTD=table[qianfen]; //显示小数千分位 PORTA=0x2f; delay(10,100);

PORTD=table[wanfen]; //显示小数万分位 PORTA=0x1f; delay(10,100); }

//------------------------------------------------ //系统初始化函数 void init() {

ADCON1=0X07; //设置A口为普通数字口 TRISA=0X00; //设置A口方向为输出 TRISD=0X00; //设置D口方向为输出 }

//----------------------------------------------- //复位DS18B20函数 reset(void) {

char presence=1; while(presence) {

DQ_LOW() ; //主机拉至低电平 delay(2,70); //延时503us

DQ_HIGH(); //释放总线等电阻拉高总线,并保持15~60us delay(2,8); //延时70us

if(DQ==1) presence=1; //没有接收到应答信号,继续复位 else presence=0; //接收到应答信号 delay(2,60); //延时430us } }

//----------------------------------------------- //写18b20写字节函数

void write_byte(uch val) {

uch i; uch temp;

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

temp=val&0x01; //最低位移出 DQ_LOW(); NOP(); NOP(); NOP(); NOP();

NOP(); //从高拉至低电平,产生写时间隙 if(temp==1) DQ_HIGH(); //如果写1,拉高电平 delay(2,7); //延时63us DQ_HIGH(); NOP(); NOP();

val=val>>1; //右移一位 } }

//------------------------------------------------ //18b20读字节函数 uch read_byte(void) {

uch i;

uch value=0; //读出温度 static bit j; for(i=8;i>0;i--) {

value>>=1; DQ_LOW(); NOP(); NOP(); NOP(); NOP(); NOP();

NOP(); //6us

DQ_HIGH(); //拉至高电平 NOP(); NOP(); NOP(); NOP();

NOP(); //4us j=DQ;

if(j) value|=0x80;

delay(2,7); //63us

}

return(value); }

//------------------------------------------------- //启动温度转换函数 void get_temp() {

int i; DQ_HIGH();

reset(); //复位等待从机应答 write_byte(0XCC); //忽略ROM匹配

write_byte(0X44); //发送温度转化命令 for(i=50;i>0;i--) {

display(); //调用多次显示函数,确保温度转换完成所需要的时间 }

reset(); //再次复位,等待从机应答 write_byte(0XCC); //忽略ROM匹配 write_byte(0XBE); //发送读温度命令 TLV=read_byte(); //读出温度低8 THV=read_byte(); //读出温度高8位 DQ_HIGH(); //释放总线 TZ=(TLV>>4)|(THV<<4)&0X3f; //温度整数部分 TX=TLV<<4; //温度小数部分 if(TZ>100) TZ/100; //不显示百位 ge=TZ;//个位 //整数部分个位 shi=TZ/10;//十位 //整数十位 wd=0;

if (TX & 0x80) wd=wd+5000; if (TX & 0x40) wd=wd+2500; if (TX & 0x20) wd=wd+1250;

if (TX & 0x10) wd=wd+625; //以上4条指令把小数部分转换为BCD码形式

shifen=wd/1000; //十分位 baifen=(wd00)/100; //百分位 qianfen=(wd0)/10; //千分位 wanfen=wd; //万分位 NOP(); NOP(); }

//-------------------------------------------------- //主函数 void main() {

init(); //调用系统初始化函数 while(1) {

get_temp(); //调用温度转换函数 // delay(5,50);

display(); //调用结果显示函数 } }


DS18B20中文资料+C程序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2年中考1年模拟,备战2014精品资料全国各地中考试题分类汇编:阅

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

马上注册会员

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