ds18b20单片机程序ds18b20测温,面包板出错,哪位大神有耐心解答这个困扰我好久的问题,愿献出所有分

DS18B20测温C程序:数码管显示不随温度变化,且不正确,求高手解答,万分感谢!(单片机复位后仍为同数值_百度知道
DS18B20测温C程序:数码管显示不随温度变化,且不正确,求高手解答,万分感谢!(单片机复位后仍为同数值
uchar seg[10]={0x3f;sbit led2=P1^1;&#47,0}uchar read_byte(void)/return(presence);_nop_();for(i=0; P2=seg[dis[2]];delay(4),0x5b,0x87:dis[0]=9:dis[0]=5;write_byte(0xBE),0x00};write_byte(0x44); delay(40);while(reset());DQ=1;uchar temp,0x66;for(i=0;72uspresence=DQ;typedefbreak:dis[0]=6; led0=0;}return(value);T_data[1]=read_&#47:dis[0]=1;uchar value=0,0x7d;typedwrite_bit(temp);write_byte(0xCC);DQ=0;sbit DQ=P3^7; P2=seg[dis[0]],dis[6]={0};
display();数码管段码void delay(uint t)/60usreturn(b);break:dis[0]=9;复位{&#47,0x4f:dis[0]=1,0xef};s++);/读温度{while(reset());delay(5); case 0x0b;11*t+17us延时:break,0x86;&#47,b:dis[0]=4; led2=0,0x6;if(T_data[1]&4);& case 0x04:dis[0]=8;T_data[0]=256-T_data[0]:dis[0]=6;/百位dis[3]=dis[5]%100;sbit led3=P1^0;8;sbit led0=P1^3;i++){if(read_bit()) value|=(0x01& P2=seg1[dis[1]].h&DQ=0;/整数部分dis[4]=dis[5]/ case 0x05;
i++; case 0x07;dis[2]=dis[3]&#47,0x6f}; case 0x06;}uchar read_bit(void)//#include &100;i++){temp=((val&写位{DQ=0; led1=1; led1=0,0x6d;for(s=0; led2=1;读位{ led3=0; case 0x01;温度显示{ P2=0x39;
work_T_data(),0xe6;delay(50);3;i& case 0x0e;/t;}uchar reset(void)/break:dis[0]=3; case 0x0c; led0=1;/_nop_().h&gt,12MHZ晶振#include& delay(40);10;// case 0x00;127){T_data[1]=256-T_data[1];break,12MHZ晶振时 {
read_T_data(),0DQ=1;while(1) {
if(i==100)
i=0;小数位 { case 0x0f;///读字节{}void main(){uchar i=0;i):dis[0]=7;delay(4);}void work_T_data()/&#47,0&#47,0x7;/570usDQ=1,0 case 0x03;//write_byte(0x44);/4)|((T_data[0]&0xF0)&}void write_bit(char bitval)/_nop_();break:dis[0]=3;/温度处理{uchar n=0; case 0x0a;write_byte(0xCC);}void write_byte(uchar val)/8;}}void read_T_data()/T_data[0]=read_&个位switch (T_data[0]&0x0f)
/reg52;i++);十位dis[1]=dis[3]%10;while(reset());延时11usb=DQ;&写字节{uchar i:dis[0]=8:dis[0]=4;&//write_byte(0xCC);delay(40); case 0x08; led3=1;#define NOP() _nop_()uchar T_data[2]={0x00;// delay(40); delay(40);/ case 0x02;//i)&0x01); }}void display()/60usDQ=1,0x7f;DQ=bitval&0x01;for(i=0;&#47:dis[0]=0;uchar seg1[10]={0}dis[5]=((T_data[1]&0x0F)&450usDQ=1:dis[0]=2; case 0x0d;n=1; case 0x09;&#47,0/s&i&i&sbit led1=P1^2C51单片机
希望高手最好能把这个程序硬件试验一下我想知道自己这个程序问题的所在!(调整了好多次,再次感谢,但仍然不随温度改变,唯一有的变化就是显示数值较先前一个程序发生了变化
提问者采纳
在mian函数while(reset())的下一行加上DQ=1;(拉高电平)。
reset()函数最后我已经拉高了电平,而且经过测试,加上之后,还是不成功
又发现两处,你改了后再试试.1:少了存在脉冲判断 void read_T_data()//读温度 { while(reset());delay(200); //存在脉冲 write_byte(0xCC);write_byte(0x44);while(reset()); delay(1); //存在脉冲 write_byte(0xCC); write_byte(0xBE); T_data[0]=read_ T_data[1]=read_ } 2:负温度时的处理if(T_data[1]&125) //高字节为高5位为1时,温度为负。11 0000 取 125{ T_data[1]=255-T_data[1]; //低字节向高字节借了一位,256要减去1 T_data[0]=256-T_data[0]; }看下这个网页的18B20的说明文档,可能你会有收获:
还是不行,存在脉冲其实我也已经加在reset函数中了,delay(5)+delay(40)的时间已经大于480us至于负温度的处理,我没有多加考虑,因为温度是零上,应该不是主要问题的所在还是说声谢谢!
其他类似问题
为您推荐:
您可能关注的推广回答者:
数码管显示的相关知识
其他2条回答
你是在proteus中仿真还是实际硬件调试?最好将原理图贴出来看看。
硬件调试,而且用一个正确的测温程序试验时可以成功
不知道你的硬件是怎么连的,如果烧过好的程序没问题的话,那还是你的程序有问题,这个显示函数应该有一个选择位的,先选中第一个数码管,然后让它显示相映位的数字,然后再选中第二个数码管,让它显示相映的数字,再选择第三个数码管,让他显示相映的数。没看明白你那led1、2、3是什么意思。
led是位选,seg是段选,数码管这块是不会错的
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 192|回复: 0
STC89C52控制DS18B20在1602上显示温度,proteus仿真与面包板出错
用郭天祥的TX-1C板子功能可以实现,效果如图一;但同样的程序,照着板子一样的接法在proteus与搭的面包板上效果都出不来如图二图三;附程序;哪位热心帮我的大神指点我一下谢谢大家
#include &reg51.h&& & & &
#include &intrins.h&
#define uchar unsigned char
#define uint unsigned int
sbit RS=P3^5;//1602数据/命令选择
sbit E=P3^4;//1602使能
sbit DQ=P2^2;//18b20信号
uchar wdL,wdH;
static uchar sn[8]={0};
uchar code b2hex[]=&ABCDEF&;
void delay(uint z)
& & & & while(--z);
void wrcmd1602(uchar cmd)//1602写命令
& & & & RS=0;
& & & & P0=
& & & & delay(2);
& & & & E=1;
& & & & E=0;
void wrdata1602(uchar shuju)//1602写数据
& & & & RS=1;
& & & & P0=
& & & & delay(2);
& & & & E=1;
& & & & E=0;
void init1602()//1602初始化
& & & & E=0;
& & & & wrcmd);
& & & & wrcmdc);
& & & & wrcmd);
& & & & wrcmd);
void disp1602(uchar x,uchar y,uchar ch)//1602显示
& & & & wrcmd+x*0x40+y);
& & & & wrdata1602(ch);
void init18b20(void)//18b20初始化
& & & & DQ=0;
& & & & for(m=0;m&=90;m++);
& & & & DQ=1;
& & & & for(m=0;m&=65;m++);
void wrcmd18b20(uchar cmd18b20)//18b20写1字节
& & & & uchar i,m;
& & & & for(i=1;i&=8;i++)
& & & & & & & & sendbit=cmd18b20&0x01;
& & & & & & & & cmd18b20=cmd18b20&&1;
& & & & & & & & if(sendbit==0)
& & & & & & & & {
& & & & & & & & & & & & DQ=0;
& & & & & & & & & & & & for(m=0;m&=2;m++);
& & & & & & & & & & & & DQ=0;
& & & & & & & & & & & & for(m=0;m&=20;m++);
& & & & & & & & & & & & DQ=1;
& & & & & & & & & & & & for(m=0;m&=2;m++);
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & & & DQ=0;
& & & & & & & & & & & & for(m=0;m&=1;m++);& & & &
& & & & & & & & & & & & DQ=1;
& & & & & & & & & & & & for(m=0;m&=10;m++);& & & &
& & & & & & & & & & & & DQ=1;
& & & & & & & & & & & & for(m=0;m&=1;m++);& & & &
& & & & & & & & }
bit rdbit18b20(void)//18b20读1位
& & & & DQ=0;
& & & & _nop_();
& & & & DQ=1;& & & & & & & &&&
& & & & for(m=0;m&=1;m++);
& & & & onebit=DQ;
& & & & for(m=0;m&=10;m++);
& & & & return(onebit);
uchar rdbyte18b20(void)//18b20读1字节
& & & & uchar i,j;
& & & & for(i=1;i&=8;i++)
& & & & & & & & j=rdbit18b20();
& & & & & & & & wenduzhi=(j&&7)|(wenduzhi&&1);
& & & & return(wenduzhi);
void stconv18b20(void)//18b20启动
& & & & uchar m,n;
& & & & init18b20();
& & & & for(m=0;m&=1;m++);& & & &
& & & & & & & & wrcmd18b20(0xCC);
& & & & for(m=0;m&=1;m++);& & & &
& & & & & & & & wrcmd18b20(0x44);
& & & & for(n=0;n&=250;n++)
& & & && &for(m=0;m&=250;m++);
& & & & for(n=0;n&=250;n++)
& & & && &for(m=0;m&=250;m++);
uint rdwendu(void)//18b20读取
& & & & init18b20();
& & & & wrcmd18b20(0xCC);
& & & & wrcmd18b20(0xBE);
& & & & wdL=rdbyte18b20();
& & & & wdH=rdbyte18b20();
& & & & temp=wdH;
& & & & temp=temp&&8;
& & & & temp=temp|wdL;
& & & & temp=(uint)((float)temp*0..5);
& & & & return(temp);
}&&& & & & & & & && &&&
void main()
& & & & uint t,k;
& & & & init1602();
& & & & while(1)
& & & & & & & & stconv18b20();
& & & & & & & & t=rdwendu();
& & & & & & & & disp,t/100+'0');
& & & & & & & & disp,t/10%10+'0');
& & & & & & & & disp,'.');
& & & & & & & & disp,t%10+'0');
(21.47 KB, 下载次数: 1)
23:56 上传
(70.25 KB, 下载次数: 1)
23:56 上传
(18.83 KB, 下载次数: 1)
23:56 上传
Powered by单片机DS18B20测温的问题,程序好像没问题,但是用protues仿真就是没反应,请高手们帮帮忙!_百度知道
单片机DS18B20测温的问题,程序好像没问题,但是用protues仿真就是没反应,请高手们帮帮忙!
///// /i++)
DQ=0;//&#47,
0x5B;t&///////////////
en=0;////uchar read_byte(void);/void display(){
en=1;&#47,
0x7D;///////////void delay_50us(uint t){//uchar readtemperature(void),
0x7F;/ /
init_ds18b20();/&////
b+=(a&0xf0)&//////
delay(8);/////////&#47,b;&//////////////
delay(4);&
display();///
DQ=dat&0x01;
P0=smg_du[temp%10];////
P0=smg_du[temp///////////sbit we2=P2^1;//////
for(;///}////////////
//&////////
delay(4);//
DQ=0;跳过rom
write_byte(0x44);/////
n=DQ;//
delay(4);///
}}//////////}/////void init_ds18b20(void){//////uchar readtemperature(void){
delay_50us(20);///////////void init_ds18b20(void);//void main(){
temp=readtemperature();&#47,
0x66;///////// //// 大约40us~50us
DQ=1;///0;////uchar smg_du[]={
0x3F;////////////////////////////////////////
//8;/////=4;//////////&#47,
0x06;///
value|=0x80;////sbit en=P2^4;/0;//// ////&#47,
0x6D;//
a=read_byte();/4;//
for(i=0;uchar read_byte(void){////
DQ=1;//////
dat&/////////////void
write_byte(uchar dat),
0x07;/////
}j--);////&#47,
write_byte(0xcc);/////////// /
for(i=0;////void write_byte(uchar dat){/////////启动温度测量
delay(300);/
init_ds18b20();
delay(4);/////////}//////
we2=1;////
delay(80);////////////////////t--)
for(j=19;///void delay_50us(uint t);////i++)
DQ=0;/////
delay_50us(20);//&#47,
0x6F};//
DQ=1;/ 读取高位
b&///////void display();////void delay(uint t);/10];/
}////}void delay(uint t){
while(t--);}///////////////
delay(8);////}///// 读取低位
b=read_byte();///i&=1;//////////=1;//////大约600us
DQ=1;///8;////
write_byte(0xbe);j&/////////////////
value&///////////
we1=0;////////
we1=1;///i&/
write_byte(0xcc);//////
we2=0;&#47#include&&#47.h&//
en=0;/reg52;///sbit we1=P2^0;//#define uchar unsigned char#define uint unsigned intsbit DQ=P3^4
com/zhidao/wh%3D600%2C800/sign=ee68ea405343fbf2c579ae2/6f061d950a7bf0a962d9f2d.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="/zhidao/pic/item//zhidao/wh%3D450%2C600/sign=bb274a06ca8065387bbfac17a2ed8d72/6f061d950a7bf0a962d9f2d://a.baidu.hiphotos.jpg" esrc="http.baidu://a<a href="http://a.baidu
提问者采纳
这是动态显示;i&lt,人眼很难捕捉到,基本上数码管就没有闪烁的时间就过去了,你用静态显示就看见了 如果想动态显示那么 display();改成for(i=1;100,i++) { display(),ds18b20转换时间很长
谢谢你的提醒,不过我是在下面注释的位置加了delay();就成功了uchar readtemperature(void) {
uchar a,b;
init_ds18b20();
write_byte(0xcc);
write_byte(0x44);
delay(300);
init_ds18b20();
write_byte(0xcc);
write_byte(0xbe);
delay(300);
&#47;&#47;
后来才加上的delay
a=read_byte();
b=read_byte();
b+=(a&0xf0)&&4;
其他类似问题
为您推荐:
ds18b20的相关知识
其他2条回答
可恶的DS 我写了三天都没写对
protues仿真数码管,显示不出来是因为动态刷新太快了,可以调整数码管的属性的Minimum Trigger Time往大或往小调一调就可以了,不一定要延时
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
所有资料仅供参考,切勿抄袭或者商用。部分资料来自网络,如有侵权,请告知,将尽快删除。
&#xe602; 下载此文档
正在努力加载中...
基于单片机的DS18B20温度传感器测温系统设计(毕业论文doc)
下载积分:1000
内容提示:基于单片机的DS18B20温度传感器测温系统设计(毕业论文doc)
文档格式:DOC|
浏览次数:58|
上传日期: 02:15:12|
文档星级:&#xe60b;&#xe60b;&#xe612;&#xe612;&#xe612;
该用户还上传了这些文档
基于单片机的DS18B20温度传感器测温系统设计(毕业论文d
官方公共微信}

我要回帖

更多关于 ds18b20与单片机连接 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信