- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.专业整理.
.学习帮手.
DS18B20测温显示,proteus仿真。
Written by jinsongliang
具体程序如下
Main.c:
#includereg51.h
#includelib51v3.c
#include18b20.c
#includesegv3.c
void main (void)
{
unsigned char disp[5]={10,0,0,14,2};
signed char temp=0;
while(1)
{
/*1、读取温度值*/
temp=Get_Temputer();
//2、显示前处理*/
if(temp0)
{disp[0]=13;
temp=-temp;
disp[1]=temp/10;
disp[2]=temp%10;
}
else
{disp[0]=temp/100;
disp[1]=temp/10-disp[0]*10;
disp[2]=temp%10;
if(!disp[0]) //百位数不为0则显示,若要显示0,可将其注释掉
disp[0]=10;
}
//3、显示*/
Seg_Display(disp);
}
}
Lib51v3.c
void Delay_Nus (unsigned char n)
{
while(n--);
//for (;n0;n--);
}
18b20.c:
/******************************************************************
时序很重要,移植时注意延时函数
******************************************************************/
#define B20_PORT P1 //此处可以设置I/O口
#define B20_CHANNEL 0
#define R_B20_CHANNEL() B20_PORT(1B20_CHANNEL)
#define W_B20_CHANNEL_1() B20_PORT|=(1B20_CHANNEL)
#define W_B20_CHANNEL_0() B20_PORT=~(1B20_CHANNEL)
#define SKIP_ROM 0xCC
#define TEMPUTER_CONVERT 0x44
#define READ_ROM 0xBE
//one
/*
初始化函数,失败会返回1,初始化过程见注释
若单片机读到了数据线上的低电平“0”后,还要做延时,
其延时的时间从单片机发出的高电平算起最少要480微秒。
之后单片机将数据线再次拉高到高电平“1”后结束。
*/
static unsigned char Init_18b20 (void)
{
unsigned char x=0;
W_B20_CHANNEL_1(); //1、从单片机拉高数据线开始
Delay_Nus(8); //6*n useconds lib51v3.c
W_B20_CHANNEL_0();
Delay_Nus(81);
W_B20_CHANNEL_1(); //2、单片机拉低数据线480us以上,拉高数据线,释放
Delay_Nus(14); //3、之后ds18b20,15~60us以后反应,拉高数据线
x=R_B20_CHANNEL(); //4、单片机读取数据线
if(x)
return x;
Delay_Nus(20);
return x; //x=0代表复位成功
}
//two
static void Write_18b20(unsigned char w_data)
{
unsigned char i;
unsigned char temp;
for(i=0;i8;i++)
{
W_B20_CHANNEL_1();
temp=w_data(10);
W_B20_CHANNEL_0(); //单片机从高到低,拉低1us以上,并在15us内产生写间隙
B20_PORT=tempB20_CHANNEL; //写数据,(先写低位)
Delay_Nus(7); //15~60us内18B20采样
w_data=1;
}
W_B20_CHANNEL_1();
Delay_Nus(4);
}
//three
st
文档评论(0)