以51单片机为核心的DS18B20的数码管显示温度程序Proteus仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

<TEXr>
严*******************************************************************
*文件名:温度采集DS1SB20.C
*描述 :该文件实现了用温度传感器件DS18B2O 对温度的采集,并在数码管上显示出 来。

*创建人:谢宜腾,2011年4月6 口 *版本号:1.0
***********************************************************************/ /*#iiiclude <reg52.h> #inc lude <intrins.h> #define uchai unsigned char #define umt unsigned mt #define jump_ROM OxCC #define start 0x44 #define read_EEROM OxBE unsigned char TMPHHMPL;
uchai code table[10] = {0x3f 、0x06・0x5b 、0x4f,0x66,0x6d,0x7d,0x07,0x7f 、0x6f}; sbit DQ = P2A 3; //OS 18B20 数据口
sbit P30=P3A
0; sbit P31=P3A 1;*/ /riiic lude<reg52.h> ^include <intriiis.h> #define uchar unsigned char #define uiiit unsisned int
sbit DATA = P2A
3; /.DS18B20 接入 I 丨
uchai code
vTExT-
I |S-
:X1> .・
一 一Ml
昭TT.I 「勺.
丄卫; -- 丄閔:
ia<
A
C4 4P !Of. 士土丄土

f y i XTAL2
KUUIAUU P0.VAD1 P02^AD2 P03AD3 RSI
PO 4JAD4 POS 认 D5 POS^ADB P0.7/AD7 P2.0/A8 P2.1/AS
P22ZA1O PSHM
P2 3/A11 ALE P2QM2
P2.WM3 cA
P26/A14 P1.0/T2 P1.1/T2EX
Pl.2
P2 7/A1S P3.0.RBD P3.1HXD
卜y ii
PI .3
IT Pi .4 PI .5 P3.4/T0 P35/T1 Pl .6
P3.6A/<Jr?
PI .7 P3.7W"
U1
18
9
lfi 30 3? 33
21

13
14 运

35
迫_
7i
12 ■ ■ ■ .■*
f U2
DS1333J <TEXT>
GND • •
table[]={0x3f0x06,0x5b,0x4f,0x66.0x6d.0x7d.0x07.0x7f,0x6f,0x77.0x7c.0x39.0x5e.0x79
0x71}; char
5
bai,shi,ge; 〃定义变量
/*延时子函数*/
void delay(uint num)
{
while(num-);
}
Iiut.DS 18B20(void) 〃传感器初始化
{
uchar x=0;
DATA= 1; //DQ 复位delay(lO); 〃稍做延时
DATA= 0; 〃单片机将DQ拉低
delay(80); //精确延时人于480us //450
DATA=1; 〃拉高总线
delay(20);
x=DATA; 〃稍做延时后如果x=0则初始化成功x=l则初始化失败
delay(30);
}
〃读一个字节
ReadOneChai(void)
{
uchar 1=0;
uchar dat = 0;
for (i=8;i>0;i~)
{
DATA = 0; //给脉冲信号dat»=l;
DATA=1;//给脉冲信号if(DATA)
dat|=0x80; delav(8);
}
retuin(dat);
}
〃写一个字节
WnteOneChai(unsigned chai dat) uchar 1=0; for (i=8; i>0; i—)
DATA=O;
DATA= dat&OxOl; delay(lO);
DATA= 1;
dat»=l;
} delay(8);
}
〃读取温度
mt ReadTemperature(void)
uchar a=0;
uchar b=0;
mt t=0;
float tt=O;
Ink_DS18E20();
WnteOneCliai-(OxCC); U跳过读序号列号的操作
WnteOneCliai(Ox44); 〃启动温度转换
Iiut_DS18B20();
WnteOneCliai-(OxCC); 〃跳过读序号列号的操作
WiiteOneCliaf(OxBE); 〃读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChai();// 低位b=ReadOneChai();//高位t=b;t«=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
retuin(t);
}
/*显示子函数*/
void display(int bai,int shi,mt ge)
PO=table[bai];〃显示T•位delay(5O);//—小段延时动态显示
P3=table[slu];〃显示百位delay(5O);
void maiiiQ
int temp;
while(l)
{
temp=ReadTemperature();// 读温度bai=temp% 1000/100;// 显示百位slii=temp% 100/10;//显示
十位ge=temp% 10;//显示个位display(bai,shi,ge);// 显示函数
}
}。

相关文档
最新文档