5151单片机第9课:DS18B20温度检测系统
#include <reg51.h>//头文件
#define uint unsigned int//宏定义
#define uchar unsigned char //宏定义
sbit DQ=P3^2;//18B20的2脚与单片机P3.2口相接
sbit P10=P1^0;//数码管位选引脚P1.0
sbit P11=P1^1;//数码管位选引脚P1.1
uchar temp;
code unsigned char sz []={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9数组
void delay (uint t);//延时函数声明
void delayms(uint a);//for语句延时函数声明
void init();//18B20初始化程序声明
void write (uchar dat);//写1字节程序声明
uchar read ();//读1字节程序声明
void display();//显示程序声明
uchar readtemp();//读温度程序声明
void delay (uint t)//延时函数
{
while(t--);
}
void delayms(uint a) //for语句延时函数
{
uint x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
void init ()//18B20初始化程序
{
uchar n;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(4);
}
void write (uchar dat)//写1字节程序
{
uchar i;
for (i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay (4);
DQ=1;
dat>>=1;//dat=dat>>1
}
delay(4);
}
uchar read ()//读1字节程序
{
uchar i,value;
for (i=0;i<8;i++)
{
DQ=0;
value>>=1;
DQ=1;
if(DQ)
value|=0x80;
delay(4);
}
return value;
}
uchar readtemp()//读温度程序
{
uchar a,b;
init();
write (0xcc);
write (0x44);
delay (300);
init ();
write (0xcc);
write (0xbe);
a=read();
b=read();
b<<=4;
b+=(a&0xf0)>>4;
return b;
}
void display ()//显示程序
{
P10=0;
P0=sz[temp/10];
delayms(2);
P10=1;
P11=0;
P0=sz[temp%10];
delayms(2);
P11=1;
}
void main()//主程序
{
while(1)
{
temp=readtemp();
display ();
}
}
51单片机学习31-DS18B20
这篇讲DS18B20温度传感器
仿真图用的是我自己做的一个51单片机开发板 图纸比较大,截图可能看不清,需要的话可以私信联系我。
程序:
源代码:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^2;
sbit smg1=P2^4;
sbit smg2=P2^5;
sbit smg3=P2^6;
uchar temp; unsigned char code smg_du[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77, 0x7c,
0x39,0x5e,0x79,0x71,0x00};
unsigned char code smg_we[]={
0x08,0x18,0x28,0x38,
0x48,0x58,0x68,0x78};
void init_ds18b20(void);
void write_byte(uchar dat);
uchar read_byte(void);
uchar readtemperature(void);
void display(void);
void delay(uint t);
void delay_50us(uint t);
//************************************************//延时函数,在12MHz 的晶振频率下//大约50us 的延时//************************************************
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
///////////////////////////////
void delay(uint t)
{ while(t--); }
////////////////////////////
void main(void)
{
while(1)
{
temp=readtemperature();
display();
}
}
/////////////////////////
void init_ds18b20(void)
{
uchar n;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(14);
}
///////////////////////////////
void write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay(8);
DQ=1;
dat>>=1;
}
delay(8);
}
uchar read_byte(void)
{
uchar i,value;
for(i=0;i<8;i++)
{
DQ=0;
value>>=1;
DQ=1;
if(DQ)
value|=0x80;
delay(4);
}
return value;
}
////////////////////////////
uchar readtemperature(void)
{
uchar a,b;
init_ds18b20();
write_byte(0xcc); //跳过ROM
write_byte(0x44); // 启动温度测量
delay(300);
init_ds18b20();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
b<<=4;
b+=(a&0xf0)>>4;
return b;
}
void display(void)
{
smg3=0;
smg2=0;
smg1=0;
P1=smg_du[temp/10];
delay_50us(20);
smg2=0;
smg1=1;
P1=smg_du[temp%10];
delay_50us(20);
}
仿真结果:
数码管显示的数字就是温度传感器的温度,数码显示的跟实际的温度位置相反,这个可以程序里面的数码管的位定义即可。
相关问答
用一个 DS18B20 传感器和一个 单片机 最小系统和四位共阳极数码...我有。51单片机开发板使用例程,你找找,里面有一百个C的程序,有一个是关于这个的。这个挺简单的,网上搜搜一大把DS18B20的程序。
英语翻译本设计是基于 单片机 AT89 S51 的数字温度计的设计,采用...[最佳回答]Thepresentdesignisbasedonthenumberofsingle-chipAT89S51thermometerinthedesign,usedasa...
DS18B20 温度传感器如何 与单片机 相连接_汽配人问答[最佳回答]1、DS18B20温度传感器与单片机的一个IO口连接。2、温度传感器(temperaturetransducer)是指能感受温度并转换成可用输出信号的传感器。温度传感器...
肿么通过蓝牙模块把 DS18B20 温度传感器在 单片机 上显示的温度...51单片机直接用串口把数据发给蓝牙串口模块,模块就可以把数据发给电脑。卖模块...write_date(table[a/100]);write_date(table[a%100/10]);wr...
51单片机 温感报警器原理?本设计由STC89C52单片机电路+数字温度传感器DS18B20电路+按键电路+蜂鸣器报警电路+继电器控制电路+LCD1602液晶显示电路+电源电路组成。1、LCD1602液晶实时显...
单片机 ,两个系统肿么合并成一个系统?-ZOL问答做了一个DS18B20的温度报警系统,一个用滑动变阻器模拟的红外报警系统。单个运...另一个操作系统下直接删掉格式化掉就行了,然后把boot.ini文件中另一个的相关项...
DS18B20 温度传感器 与单片机 间的通信线(延长线)可以多长 - 17...50-100用5V供电没没问题,只接一支DS18B20最远可以达到500m,18B20单线传输抗干扰能力本来就不高,线最长就几厘米,不管你用什么线延长都没有用的。长...
单片机 中如何将 DS18b20 测得的温度通过串口发送到上位机VB中?你的一位十进制数据+0x30,不就变成字符的数字了吗例如:TN是十进制温度fasong[0]=TN/10+0x30;fasong[1]=TN%10+0x30;DS18B20采集到的数据你可以在单片机中...
单片机 p2.0口外接 ds18b20 为什么要加10k上拉电阻?这个为啥要加上拉电阻,上啦电阻是多少,这个都是DS18B20手册告诉你加多少就是多少,这个是设计者提供的最佳参数,DS18B20是单线通信,即接收和发送都是这个通...
51单片机 开发板有什么用,对初学单片机有什么帮助?51单片机开发板对初学单片机的帮助,就像学步车对于刚学走路的儿童一样,可以帮助它少摔跤,快速学会走路。一、单片机学习板的重要性单片机的学习,包含两大方...