首页 手机版
关注我们
  • 关注公众号
您所在的位置: 查证宝 > 问答 > 正文
  • ?

    数码管 ds18b20温度显示

  • 汽车
  • 查证宝用户
  • 2024-11-16
最佳答案

楼主你在时序上有些错误1。在转换时没有留够足够的转换时间。根据DS18B20芯片手册,9位精度转换时间为93.75ms。12位精度转换时间为750ms。而DS18B20默认为12位精度。所以我加了750ms延时2。在写函数的时候voidds18b20_write_byte(uchardate)//写一个字节{uchari;for(i=0;i<8;i++)//一个字节八位{if((date&&0x01)==1)//写入1{ds18b20=0;delay_15us();ds18b20=1;}else//写入0{ds18b20=0;delay_60us();ds18b20=1;}date>>=1;//右移一位}}应该是if((dat&0x01)==0x01)这里多了一个&号,导致结果错误。3。我增加了用1602显示的模块,删除了用液晶显示的模块。/**********************************以下是程序,并附上仿真图一张**********************************/#include#include#defineucharunsignedchar#defineuintunsignedintuchartemp,tmph,tmpl;sbitds18b20=P2^3;sbitrw=P2^6;sbitlcde=P2^7;sbitrs=P2^5;//下面是1602的驱动程序voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidwrite_com(ucharcom,biti)//是命令写0数据写1{rs=i;P0=com;delay(5);lcde=1;delay(5);lcde=0;}voidlcd1602init(void){rw=0;write_com(0x01,0);write_com(0x02,0);write_com(0x06,0);write_com(0x0c,0);write_com(0x38,0);}voiddisplay(ucharx,uchary,uchardate){x&=0x01;y&=0x0f;if(x){y+=0x40;}y+=0x80;write_com(y,0);write_com(date,1);}voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}//////////////////////////////////////////////////////////////DS18B20部分/////////////////////////////////////////延时部分voiddelay_600us(void){uchari;for(i=0;i<180;i++);}//延时600usvoiddelay_400us(void){uchari;for(i=0;i<120;i++);}voiddelay_60us(void){uchari;for(i=0;i<18;i++);}//延时60usvoiddelay_15us(void){uchari;for(i=0;i<3;i++);}//延时15us//复位脉冲bitresetpulse(void){ds18b20=0;delay_600us();ds18b20=1;delay_60us();returnds18b20;}//ds18b20初始化voidds18b20_init(void){while(1){if(!resetpulse())//收到ds18b20的低电平信号{ds18b20=1;delay_400us();break;}elseresetpulse();//继续发送复位信号}}voidds18b20_write_byte(uchardate)//写一个字节{uchari;for(i=0;i<8;i++)//一个字节八位{//if((date&&0x01)==1)//写入1//这里错了if((date&0x01)==0x01){ds18b20=0;_nop_();ds18b20=1;delay_60us();}//endifelse//写入0{ds18b20=0;delay_60us();ds18b20=1;}//endelsedelay_15us();date>>=1;//右移一位}}uchards18b20_read_byte(void)//读一个字节{uchari,u;for(i=0;i<8;i++){u>>=1;ds18b20=0;_nop_();//释放总线ds18b20=1;_nop_();_nop_();if(ds18b20==1)//读1{u|=0x80;}else{u=u&0x7f;//读0}delay_60us();}returnu;}ucharread_temperaturn(){ds18b20_init();//初始化;ds18b20_write_byte(0xcc);//跳过ram;ds18b20_write_byte(0x44);//启动温度测量当为高电平时转换完成delayms(750);//转换时间要求ds18b20_init();//初始化;ds18b20_write_byte(0xcc);//跳过ram;ds18b20_write_byte(0xbe);//采集温度delayms(750);tmpl=ds18b20_read_byte();//低位温度数据tmph=ds18b20_read_byte();//高位温度数据tmph<<=4;//左移4位tmph+=(tmpl&0xf0)>>4;return(tmph);}voidmain(){uchartemph=0;uchartempl=0;lcd1602init();while(1){temp=read_temperaturn();temph=temp/10+0;templ=temp%10+0;delayms(20);display(0,0,temph);display(0,1,templ);}}

相关问题

长春 到 牡丹江 行车路线

全程约563.1公里长春市1.长春市内驾车方案详情1)从起点向正东方向出发,行驶230米,右转2)行驶60米,右转进入人民大街3)沿人民大街行驶420米,左转4)行驶20米,右转进入人民大街5)沿人民

汽车| 2024-11-20

小牛7寸行车记录仪

您好,我看到您的问题很久没有人来回答,但是问题过期无人回答会被扣分的并且你的悬赏分也会被没收!所以我给你提几条建议:一,你可以选择在正确的分类下去提问,这样知道你问题答案的人才会多一些,回答的人也会多

汽车| 2024-11-20

上海自由者缴医疗保险要缴满多少年

参保单位及其职工应缴的医保费每月20日前由单位通过地税部门征缴,其中职工个人应缴的医保费由单位按月从职工的工资收入中代扣代缴。随用人单位参加职工医疗保险的参保人员,按规定办理退休时,其基本医疗保险缴费

汽车| 2024-11-20

作文防写妈妈的行车记录仪

妈妈是卖行车记录仪的我的妈妈是卖行车记录仪的,天天上班没有节假日,不能陪我一起玩。听妈妈说今年生意特别难做,我非常担心爸爸哪一天被累垮了。如果我的妈妈累垮了,他就不能给我买鱼买肉吃。不能吃鱼吃肉我的记

汽车| 2024-11-20

丁威特记录仪沈阳哪里安装

首选有没有装卡!很多的行车记录仪没有装卡可能开一会就自动关机的。如果装卡了确认是不是C10的高速卡,如果不是就更换(与这个问题有很大的关系重点检查)。以上确认了在再次确认电池是否有没有电了。以上问题都

汽车| 2024-11-20

交通事故责任划分

摩托车是在小轿车的右侧行驶吗?如果是这样的话,那么小轿车应该等摩托车安全驶过之后再右转弯,如果辆车并行前行,那么准备右转的小轿车承担全责(在没其他特殊情况下)至于描述中的,摩托车加速超越小轿车,导致小

汽车| 2024-11-20