谁可以告诉我一个关于51单片机的数字温度计C程序啊

作者&投稿:貊子 (若有异议请与网页底部的电邮联系)
51单片机 数字温度计工作原理~

数字温度计原理是通过温度传感器实现实时温度检测,然后通过单片机来根据传感器特性计算出温度,并且显示出来

在STC单片机的官网有18B20的示例程序,自己拿来改改就能用,只能帮你到这儿了

不知这个合不合用(实验板带的):
#include<reg52.h>
code unsigned char seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90}; //显示段码

sbit TMDAT =P3^3; //DS18B20 的数据输入/输出脚DQ,根据情况设定

unsigned int sdata;//测量到的温度的整数部分
unsigned char xiaoshu1;//小数第一位
unsigned char xiaoshu2;//小数第二位
unsigned char xiaoshu;//两位小数

bit fg=1; //温度正负标志

//////////*显示延时程序*///////////////

void Delay(unsigned int tc)
{while( tc != 0 )
{unsigned int i;
for(i=0; i<80; i++);
tc--;}
}

////////////延时部分///////////////

void dmsec (unsigned int count)
{
unsigned char i;
while(count--)
{for(i=0;i<115;i++);}
}

/////////////发送复位///////////////

void tmreset (void)
{
unsigned char i;
TMDAT=0; for(i=0;i<103;i++);
TMDAT = 1; for(i=0;i<4;i++);
}

bit tmrbit (void) //读一位//
{
unsigned int i;
bit dat;
TMDAT = 0;
i++;
TMDAT = 1;
i++; i++; //微量延时 //
dat = TMDAT;
for(i=0;i<8;i++);
return (dat);
}
unsigned char tmrbyte (void) //读一个字节
{
unsigned char i,j,dat;
dat = 0;
for (i=1;i<=8;i++)
{ j = tmrbit(); dat = (j << 7) | (dat >> 1); }
return (dat);
}
void tmwbyte (unsigned char dat) //写一个字节
{
unsigned char j,i;
bit testb;
for (j=1;j<=8;j++)
{ testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{ TMDAT = 0; //写0
i++; i++;
TMDAT = 1;
for(i=0;i<8;i++); }
else
{ TMDAT = 0; //写0
for(i=0;i<8;i++);
TMDAT = 1;
i++; i++;}
}
}
void tmstart (void) //发送ds1820 开始转换
{
tmreset(); //复位
dmsec(1); //延时
tmwbyte(0xcc); //跳过序列号命令
tmwbyte(0x44); //发转换命令 44H,
}
void tmrtemp (void) //读取温度
{
unsigned char a,b;
tmreset (); //复位
dmsec (1); //延时
tmwbyte (0xcc); //跳过序列号命令
tmwbyte (0xbe); //发送读取命令
a = tmrbyte (); //读取低位温度
b = tmrbyte (); //读取高位温度
if(b>0x7f) //最高位为1 时温度是负
{a=~a; b=~b+1; //补码转换,取反加一
fg=0; //读取温度为负时fg=0
}
sdata = a/16+b*16; //整数部分
xiaoshu1 = (a&0x0f)*10/16; //小数第一位
xiaoshu2 = (a&0x0f)*100/16%10;//小数
xiaoshu=xiaoshu1*10+xiaoshu2; //小数
}
void DS18B20PRO(void)
{
tmstart();
//dmsec(5); //如果是不断地读取的话可以不延
tmrtemp(); //读取温度,执行完毕温度将存于
}
void Led()
{
P0=0x7f;
P1=0xdf;
Delay(4);
P1=P1|0xf0;
if(fg==1) //温度为正时显示的数据
{
P1=P1&0xef;
P0=seg7code[sdata/10]; //输
Delay(8); P1=P1|0xf0; P1=P1&0xdf;
P0=seg7code[sdata%10]|0x80; //输出个
Delay(8); P1=P1|0xf0; P1=P1&0xbf;
P0=seg7code[xiaoshu1]; //输出小数点
Delay(8); P1=P1|0xf0; P1=P1&0x7f;
P0=seg7code[xiaoshu2]; //输出小
Delay(8); P1=P1|0xf0;
Delay(4);
//P1=P1|0x0f; //销隐
// Delay(8);
}

}

main()
{fg=1;
while(1)
{
DS18B20PRO();
Led();
}
}

hah
wo kay
zuo

没有硬件电路怎么设计程序?


心情不好的忧伤说说:好想和你在一起,但我知道这再也不可能了
3、好想回到那一宿,再次牵起你的手,告诉你别走。 4、一个人坐在窗前,不知道自己在想什么,怀念过去,仅此而已。 5、说好了要好好生活,却还是把自己折磨地死去活来,为什么我连分开都迁就着你。 6、最心酸莫过于你感谢我付出更感谢我退出。 7、做了一个关于你的梦,带着遗憾醒来。 8、我答应自己一切重新开始...

<老师领进门>中田老师讲的故事告诉我们一个什么道理
关于诗作内容已有同志写成专文介绍,我在这里想谈的,只是“绿树成阴”的阴字的用法问题。 “绿树成阴”又可简化为“绿阴”。裘老另一首诗有“绿阴如酒醉诗人”。有位老同志曾用书法给他写成条幅,把“阴”字写成“荫”。裘老看了,把它收藏起来,既不张挂,也不用来影印出版,就因为是“阴”字多了个草头,...

谁可以告诉我,苏秦和张仪不是一个时代的吗
苏秦是东周洛阳人,据说也是一个贵族的后代,年少时读书多了,可能有点不忿做农民,老想通过游说人主发一把,重温一把贵族的美梦。虽然开始并不顺利,后来竟也成功了,得意洋洋地吹嘘道:“使我有洛阳负郭田二顷,吾岂能佩六国相印乎!”意思是说如果自己甘心做个农民,这辈子也就别想出头天了。他...

告诉我一个历史上最长的笑话
大家都:「我不是来救你的,是来看热闹的。」热闹 :「我有什麽好看的?」上帝 :「不关我的事,先走了。」魔王 :「你回答一个问题再走,为什麽这麽多人救公主?我这个魔王怎麽演下去?」下去 :「你好好的魔王不干,演我做什麽?」公主 :「魔王若是没有人演,我就可以走了。」没有人:...

关于一个"我相信爱情"的笑话...
那记者明显没听明白,但我看出来了,那小丫头反映快,不能让观众看出她笨不是?她连连称道,后来竟还挤出了几滴眼泪!其实我又何尝不知道这不过是个噱头?怎奈我这人最受不了女人的眼泪,尤其是漂亮女人的,结果我当机立断,配合了一下,说我愿意把这个笑话的独家报道和出版权交给她。节目播出后,...

写我发现了一个人的秘密的作文400字以上
我也去答题访问个人页 关注 展开全部 大自然就像一个万花筒,我们身边不时出现各种各样的自然现象...告诉你一个秘密 在我心中藏着一个小小的秘密,我不想让别人知道,但憋在心里又怪难受的,我真想找一...关于自己秘密的作文 我有一个小秘密,这件事天知、地知、我知,马上你也知! 去年暑假妈妈出差了,我...

每个人都有一个值得回忆的童年,你的童年有哪些趣事呢?回忆一下,写一篇...
我一跚一跳地来到小脸盆旁,正准备拿起棒冰吃,发现棒冰不见了,只剩下一个小木棍。我见此情景,大哭起来,这时,小花狗跑了过来,下午小花狗一举一动在我脑海一闪而过,我一口咬定,小花狗偷吃了我的棒冰。 过了一会儿,奶奶回来 了,看我一脸闷闷不乐,忙问我怎么了。我把事情一五一十地告诉了奶奶。奶奶听了开怀...

钱钟书的《围城》告诉我们一个什么道理,我们从中学到什么??
我们读小说,完全可以相信自己的感觉,不一定阅读之前就抱着一个受教育的姿态。 1,社会反映的层面 第一层我用比较常见的社会学的批评,也就是常说的反映论。中学语文老师都喜欢让同学概括,这是必要的,是一种训练嘛。概括是“通过什么什么,反映了什么什么”,它的主题是表达了什么什么。这种批评的方法来看,《围城...

为什么我爱了一个人十年还是忘不掉
3..其实有时候你可以换一种思想:你爱她!但有时,放弃是为了更好的选择。一方面你可以寻找你自己的真爱,得到比她更好的人。另一方面,你爱她,可你希望她过得更好吧,也许她离开了你过得比现在好,你其实应该高兴的。朋友我可以告诉你一个关于我的事:说实话,我也一直喜欢一个女孩,但是她现在...

我们语文老师让我们演讲 就演讲一个富有哲理的短小精悍的故事 比如伊 ...
他在信中说,“我不敢说这部著作对你有多大的帮助,但我敢肯定它比你的任何一个政令都能产生震动。” 后来这本书果然伴随着韩国的经济起飞了。这本书鼓舞了许多人,因为他们从一个新的角度告诉人们,成功与“劳其筋骨,饿其体肤”、“三更灯火五更鸡”、“头悬梁,锥刺股”没有必然的联系。只要你对某一事业感...

铁岭县13960095621: 51单片机 能存多少字节 -
尧厕西罗: 嘿嘿 俺来帮你回答吧 MCS-51单片机有2个子系列: 一个是51子系列 : 如 AT89C51、8051、 8751 、 8031 它们的片内数据存储器是128个字节. 另一个是52子系列: 如 AT89C52、8052、 8752 、 8032 它们的片内数据存储器是256个字节. 呵呵 满意 就选满意回答

铁岭县13960095621: 51单片机多少位谁能告诉我 -
尧厕西罗: 51系列的单片机是8位的吧

铁岭县13960095621: 关于51单片机汇编送数的指令 -
尧厕西罗: MOV 指令是可以直接传送立即数到直接地址的通过汇编指令表可以看出 只要有 direct 的就代表可以直接使用直接地址 P0 ACC P1 DPH DPL什么的都属于直接地址 后面带着#data的就代表可以直接使用 二进制 、十进制 或十六进制数的MOV P1,#0FH;就是把立即数0FH 送到直接地址P1使用 MOV A,#0FH MOV P1,A 这种情况 通常是为了下一步的计算 例如 左移 RL 跟 右移 RR 都只能对A进行操作 所以要通过左移或者右移实现流水灯必须要使用A来进行操作了

铁岭县13960095621: 谁可以告诉我一个关于51单片机的数字温度计C程序啊
尧厕西罗: 不知这个合不合用(实验板带的): #include&lt;reg52.h&gt; code unsigned char seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90}; //显示段码 sbit TMDAT =P3^3; //DS18B20 的数据输入/输出脚DQ,根据情况设定 unsigned ...

铁岭县13960095621: 单片机,51单片机,谁能回答上来,加10分 -
尧厕西罗: 如果楼上的热心网友的回答是错误的,那么,我就明白那个面试官的出题的目的以及他想考查的内容了,本质上,他是想看你这个人是不是深入学习,有没有钻研的态度.我就不详细回答你了.这个题目所说的51单片机,包含了两个意思:1 51内核2 51内核组成的单片机 那么,一共有多少个寄存器呢,又分几类呢?答案是分三类,具体个数不确定:1 内核的寄存器有 指令寄存器(IR) 数据寄存器(DR) 地址寄存器(AR) 程序计数器(PC)等等,我 记不全了,自己查资料吧.2 工作寄存器,又叫通用寄存器,其实际是RAM,R0-R73 特殊功能寄存器,又叫SFR,这个数量不确定,根据具体单片机而定

铁岭县13960095621: 51单片机的 pc值怎么算? -
尧厕西罗: A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h ) pc总是指向下一条指令的首地址的.但是在返回的时候得看堆栈中的数了.上面程序执行完之后: (A)=50H; sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后...

铁岭县13960095621: 那些年关于51单片机的事儿 -
尧厕西罗: 好多问题,你对IIC的时序把握还不够.没仔细看就简单的几个问题说一下,希望对你有帮助.1、改变SDA前SCL必须为0,否则容易出现STOP或着START状态,所以每个函数最好用SCL=0结束,改变SDA前需要保证SCL是0,即使是STOP和...

铁岭县13960095621: 51单片机的一个地址能存储多少大小的数据,我的理解是换算成10进制的范围是0 - 256.请问对吗?求高手!!! -
尧厕西罗: 51的一个内存地址存一个字节数据(8个bit),范围是0~255(一共可表示256个值)

铁岭县13960095621: 51单片机编程中 数字可以用十或者十六进制表示 比如计算时可以为256 - 0xf8这样吗? -
尧厕西罗: 在单片机内部,在运算过程中一律以二进制数形式进行.而写程序时随便用十进制数和十六进制数都行,但在编译时,也都变成二进制数了.其实,十六进制数就是二进制数的表示形式,一位十六进制数表示四位二进制数,这样,在显示和写二进制数时,就可以用十六进制数了.对十六进制数不熟悉,就写十进制数,编译软件就负责变成二进制数了.

铁岭县13960095621: 51单片机的计数器程序 -
尧厕西罗: 你得在P3.5引脚外部加计数脉冲信号呀,T1才能计数的.就用你的程序,仿真的结果如下图,并用数码管显示了TL1=1的状态了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网