#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^0;
sbit p11=P1^1;
sbit p26=P2^6;
sbit p27=P2^7;
sbit p22=P2^2;
uchar buf[2],flag1,tem;
uchar code table2[]={0x18,0x7b,0x2c,
0x29,0x4b,0x89,0x88,
0x3b,0x08,0x09};
void delay1(uchar aa)
{ while(aa--);
}
void reset() //复位
{
DQ=0;
delay1(180);
DQ=1;
_nop_();
while(DQ);
p22=0;
//p11=0;
delay1(80);
//p11=1;
DQ=1;
}
void write(uchar cmd)
{
uchar i;
for(i=0;i<8;i++)
{
if(cmd&(0x80>>i))
{
DQ=0;
_nop_();
_nop_();
DQ=1;
delay1(20);
}
else
{
DQ=0;
delay1(20);
DQ=1;
_nop_();
_nop_();
}
}
}
void read()
{
uchar j,i;
for(j=0;j<2;j++)
{
buf[j]=0;
for(i=0;i<8;i++)
{
DQ=0;
_nop_();
_nop_();
DQ=1;
_nop_();
_nop_();
if(DQ)
{
buf[j]=buf[j]|(0x80>>i);
}
else
buf[j]=buf[j]&~(0x80>>i);
delay1(20);
DQ=1;
_nop_();
}
}
}
void get_tem() //获取温度
{
reset();
write(0xcc);
write(0x44);
delay1(200);
reset();
write(0xcc);
write(0xbe);
read();
}
void get_tem10() //转换成10进制数
{
uchar num0,num1,tem0,tem1;
buf[0]=(buf[0]>>4); //低8位的高4位移入低4位
tem0=(buf[0]&(0x0f)); //保留低8位的低4位
tem1=(buf[1]&(0x0f)); //保留高8位的低4位
switch(tem0) //个位
{
case 0: num0=0;
break;
case 1: num0=1;
break;
case 2: num0=2;
break;
case 3: num0=3;
break;
case 4: num0=4;
break;
case 5: num0=5;
break;
case 6: num0=6;
break;
case 7: num0=7;
break;
case 8: num0=8;
break;
case 9: num0=9;
break;
case 0x0a: num0=10;
break;
case 0x0b: num0=11;
break;
case 0x0c: num0=12;
break;
case 0x0d: num0=13;
break;
case 0x0e: num0=14;
break;
case 0x0f: num0=15;
break;
}
switch(tem1)
{
case 0: num1=0;
break;
case 1: num1=1;
break;
case 2: num1=2;
break;
case 3: num1=3;
break;
case 4: num1=4;
break;
case 5: num1=5;
break;
case 6: num1=6;
break;
case 7: num1=7;
break;
case 8: num1=8;
break;
case 9: num1=9;
break;
case 0x0a: num1=10;
break;
case 0x0b: num1=11;
break;
case 0x0c: num1=12;
break;
case 0x0d: num1=13;
break;
case 0x0e: num1=14;
break;
case 0x0f: num1=15;
break;
}
tem=((num1*16)+num0);
}
void display2()
{
uchar shi,ge;
get_tem();
get_tem10();
shi=tem/10;
ge=tem%10;
p27=0;
P0=table2[shi];
delay1(150);
p27=1;
p26=0;
P0=table2[ge];
delay1(150);
p26=1;
}
void main()
{
while(1)
{
display2();
}
}
它显示一直是79~
现在一直显示85
各位帮我看下这个18B20显示温度程序有什么问题~~多谢了
可能是时序不对,我做的开始也是85,那是18B20的复位状态!你可以参照一下下面的时序:基于51单片机的数字温度计制作(含源程序) 最近忙于电子设计竞赛,很久没有更新文章了。今天忙中偷闲,再来写点东西,希望给大家带来更多的灵感!本制作芯片采用数字温度传感器18b20,利用51单片机控制。DS18B20基本知识 DS18B20数字温度计是D...
...是按照书上写的,数码管却显示4095.希望各位大虾给看看啊
我看了一些你的程序,没看到什么问题。显示不正常可能是因为:1、硬件问题,ds18b20出现故障,可能性不大!2、软件问题。18b20对时序要求非常严格,我要求学生练习时序的时候,就拿18b20作为实例 18b20对时序要求非常严格,我想问几个问题。你选用的晶振是多少?你严格按照说明书说的时序了吗?我没有测试你...
各位帮我看下这个18B20显示温度程序有什么问题~~多谢了
其实18b20的读取操作都不是很难,主要是时序要求比较严格点,你认真看芯片使用文档,严格按照上面的读写时序来编写就没问题了
18B20 测温 (51单片机 C程序 ) 看不懂啊
main()是主函数,这个是所有C程序必须的。while(1)是一个死循环,反复执行。
有关温度报警器的程序,有关DS18B20的程序已写好,求助有关蜂鸣器报警和温...
知道答主 回答量:33 采纳率:0% 帮助的人:18.5万 我也去答题访问个人页 关注 展开全部 本设计的温度测量及加热控制系统以 AT89S52 单片机为核心部件,外加温度采集电路、键盘及显示电路、加热控制电路和越限报警等电路。采用单总线型数字式的温度传感器DS18B20,及行列式键盘和动态显示的方式,以容易控制的固...
单片机ts18b20测温程序 请大神注释程序 最好每一句都注释明白(小白一只...
DQ=1;\/\/释放温度传感器18b20的数据接口 temperature_convert();\/\/第一次调用18b20温度转换子函数消除85°C问题 lcd_int();\/\/液晶屏初始化(放在18b20温度转换子函数后边用来延时,跳过85°C)while(1){ temperature_convert();\/\/调用18b20温度转换子函数 rd_ram_command();\/\/发送命令子函数(读取18b20...
DS18B20温度传感器的使用方法
;这是关于DS18B20的读写程序,数据脚P2.2,晶振11.0592mhz ;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒 ;可以将检测到的温度直接显示到AT89C51的两个数码管上 ;显示温度00到99度,很准确无需校正!ORG 0000H ;单片机内存分配申明!TEMPER_L EQU 29H;用于保存读出温度的低8位...
...让数码管显示能出小数点后一位,谁能帮我把程序改改?
是八位共阳级的吗? 试试我的程序吧 我自己改的 可以显示小数点后一位。帮你写了很详细的备注信息,应该看的懂了把?你的悬赏分是0很杯具。。。\/ DS18B20温度采集系统程序 8 位共阳极显示,P0 送显示代码,P2作位选信号,低电平选通 分时选通,直接计算 能显示摄氏度符号 通过DD18B20读取温...
有谁知道DS18B20 温度采集程序,用C 语言编程, 用KeilC51 编译。_百度知...
我的 有谁知道DS18B20 温度采集程序,用C 语言编程, 用KeilC51 编译。 单片机控制DS18B20完成温度转换必须经过3个步骤:(1)每一次读写之前都要对DS18B20进行复位,即由单片机按照时序要求发送一个复位脉冲,DS18B20送出存在脉冲;(2)复位成功后发送1条写ROM指... 单片机控制DS18B20 完成温度转换必须经过3 个步骤: ...
...温度传感器的程序代码,用四位共阴数码管显示温度值
\/\/DS18B20的读写程序,数据脚P2.7 \/\/ \/\/温度传感器18B20汇编程序,采用器件默认的12位转化 \/\/ \/\/最大转化时间750微秒,显示温度-55到+125度,显示精度 \/\/ \/\/为0.1度,显示采用4位LED共阳显示测温值 \/\/ \/\/P0口为段码输入,P34~P37为位选 \/\/ \/***\/ include "reg51.h"include...