ds18b20 C程序proteus仿真Word格式.docx

上传人:b****6 文档编号:8614985 上传时间:2023-05-12 格式:DOCX 页数:12 大小:140.09KB
下载 相关 举报
ds18b20 C程序proteus仿真Word格式.docx_第1页
第1页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第2页
第2页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第3页
第3页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第4页
第4页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第5页
第5页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第6页
第6页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第7页
第7页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第8页
第8页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第9页
第9页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第10页
第10页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第11页
第11页 / 共12页
ds18b20 C程序proteus仿真Word格式.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ds18b20 C程序proteus仿真Word格式.docx

《ds18b20 C程序proteus仿真Word格式.docx》由会员分享,可在线阅读,更多相关《ds18b20 C程序proteus仿真Word格式.docx(12页珍藏版)》请在冰点文库上搜索。

ds18b20 C程序proteus仿真Word格式.docx

else

{disp[0]=temp/100;

disp[1]=temp/10-disp[0]*10;

if(!

disp[0])//百位数不为0则显示,若要显示0,可将其注释掉

disp[0]=10;

//3、显示*/

Seg_Display(disp);

}

}

Lib51v3.c

voidDelay_Nus(unsignedcharn)

while(n--);

//for(;

n>

0;

n--);

18b20.c:

/******************************************************************

时序很重要,移植时注意延时函数

******************************************************************/

#defineB20_PORTP1//此处可以设置I/O口

#defineB20_CHANNEL0

#defineR_B20_CHANNEL()B20_PORT&

(1<

<

B20_CHANNEL)

#defineW_B20_CHANNEL_1()B20_PORT|=(1<

#defineW_B20_CHANNEL_0()B20_PORT&

=~(1<

#defineSKIP_ROM0xCC

#defineTEMPUTER_CONVERT0x44

#defineREAD_ROM0xBE

//one

/*

初始化函数,失败会返回1,初始化过程见注释

若单片机读到了数据线上的低电平“0”后,还要做延时,

其延时的时间从单片机发出的高电平算起最少要480微秒。

之后单片机将数据线再次拉高到高电平“1”后结束。

*/

staticunsignedcharInit_18b20(void)

{

unsignedcharx=0;

W_B20_CHANNEL_1();

//1、从单片机拉高数据线开始

Delay_Nus(8);

//6*nusecondslib51v3.c

W_B20_CHANNEL_0();

Delay_Nus(81);

//2、单片机拉低数据线480us以上,拉高数据线,释放

Delay_Nus(14);

//3、之后ds18b20,15~60us以后反应,拉高数据线

x=R_B20_CHANNEL();

//4、单片机读取数据线

if(x)

returnx;

Delay_Nus(20);

//x=0代表复位成功

//two

staticvoidWrite_18b20(unsignedcharw_data)

unsignedchari;

unsignedchartemp;

for(i=0;

i<

8;

i++)

{

W_B20_CHANNEL_1();

temp=w_data&

0);

W_B20_CHANNEL_0();

//单片机从高到低,拉低1us以上,并在15us内产生写间隙

B20_PORT=temp<

B20_CHANNEL;

//写数据,(先写低位)

Delay_Nus(7);

//15~60us内18B20采样

w_data>

>

=1;

}

Delay_Nus(4);

//three

staticunsignedcharRead_18b20(void)

unsignedcharr_data=0x00;

r_data>

//从高到低15us内,再到高,产生读间隙

Delay_Nus

(1);

temp=B20_PORT<

(7-B20_CHANNEL);

//读数据,从低位开始

temp&

=(1<

7);

r_data+=temp;

Delay_Nus(8);

//整个读一位过程在60~120us

returnr_data;

//four

若要读出当前的温度数据我们需要执行两次工作周期,

第一个周期为复位、跳过ROM指令、执行温度转换存储器操作指令、等待500uS温度转换时间。

紧接着执行第二个周期为复位、跳过ROM指令、执行读RAM的存储器操作指令、读数据

(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)

signedcharGet_Temputer(void)//读取温度值,返回的带符号字符型-55到+127;

128无法显示,初始化失败会显示00.C

unsignedchartem_h,tem_l;

signedchartemp;

if(Init_18b20()==0)//复位18b20

Write_18b20(SKIP_ROM);

//跳过ROM

Write_18b20(TEMPUTER_CONVERT);

//温度变换

else

returntemp=0;

//Delay_Nus(100);

if(Init_18b20()==0)//复位18b20

//跳过ROM

Write_18b20(READ_ROM);

//读暂存存储器

tem_l=Read_18b20();

//读数据

tem_h=Read_18b20();

只要高字符的低四位和低字符的高四位,温度范围0~99,temp为补码,直接由unsignedchar赋值给signedchar内容不变,代表的值改变

temp=(tem_h<

4)+(tem_l>

4);

returntemp;

Segv3.c:

#defineCOMMON_ANODIC0//共阳数码管

#defineCOMMON_CATHODAL1//共阴数码管

#defineSEG_CATEGORY0//选择共阳数码管

#defineSEG8_A~(1<

0)//段A亮时为0,属共阳数码管

#defineSEG8_B~(1<

1)

#defineSEG8_C~(1<

2)

#defineSEG8_D~(1<

3)

#defineSEG8_E~(1<

4)

#defineSEG8_F~(1<

5)

#defineSEG8_G~(1<

6)

#defineSEG8_DP~(1<

7)

#defineSEG8_CHAR_0~(SEG8_G&

SEG8_DP)

#defineSEG8_CHAR_1~(SEG8_A&

SEG8_D&

SEG8_E&

SEG8_F&

SEG8_G&

SEG8_DP)

#defineSEG8_CHAR_2~(SEG8_C&

#defineSEG8_CHAR_3~(SEG8_E&

#defineSEG8_CHAR_4~(SEG8_A&

#defineSEG8_CHAR_5~(SEG8_B&

#defineSEG8_CHAR_6~(SEG8_B&

#defineSEG8_CHAR_7~(SEG8_D&

#defineSEG8_CHAR_8~SEG8_DP

#defineSEG8_CHAR_9~(SEG8_E&

#defineSEG8_CHAR_~0

#defineSEG8_CHAR_E~(SEG8_B&

SEG8_C&

#defineSEG8_CHAR_R~(SEG8_A&

SEG8_B&

#defineSEG8_CHAR_SUB~(SEG8_A&

//#defineSEG8_CHAR_A

//#defineSEG8_CHAR_B

#defineSEG8_CHAR_C~(SEG8_B&

//#defineSEG8_CHAR_D

//#defineSEG8_CHAR_F

//#defineSEG8_CHAR_H

#ifSEG_CATEGORY==COMMON_ANODIC

staticconstunsignedcharSEG8_CODE[]={

SEG8_CHAR_0,

SEG8_CHAR_1,

SEG8_CHAR_2,

SEG8_CHAR_3,

SEG8_CHAR_4,

SEG8_CHAR_5,

SEG8_CHAR_6,

SEG8_CHAR_7,

SEG8_CHAR_8,

SEG8_CHAR_9,

SEG8_CHAR_,//SEG8_CODE[10]

SEG8_CHAR_E,//SEG8_CODE[11]

SEG8_CHAR_R,//SEG8_CODE[12]

SEG8_CHAR_SUB,//SEG8_CODE[13]

SEG8_CHAR_C//SEG8_CODE[14]

};

#else

~SEG8_CHAR_0,

~SEG8_CHAR_1,

~SEG8_CHAR_2,

~SEG8_CHAR_3,

~SEG8_CHAR_4,

~SEG8_CHAR_5,

~SEG8_CHAR_6,

~SEG8_CHAR_7,

~SEG8_CHAR_8,

~SEG8_CHAR_9,

~SEG8_CHAR_,//SEG8_CODE[10]

~SEG8_CHAR_E,//SEG8_CODE[11]

~SEG8_CHAR_R,//SEG8_CODE[12]

~SEG8_CHAR_SUB,//SEG8_CODE[13]

~SEG8_CHAR_C//SEG8_CODE[14]

};

#endif

#defineSEG8_SLECT_PORTP3//此处可以设置I/O口

#defineBIT00

#defineBIT11

#defineBIT22

#defineBIT33

#defineSEG8_BIT0_ON()SEG8_SLECT_PORT|=(1<

BIT0)

#defineSEG8_BIT0_OFF()SEG8_SLECT_PORT&

#defineSEG8_BIT1_ON()SEG8_SLECT_PORT|=(1<

BIT1)

#defineSEG8_BIT1_OFF()SEG8_SLECT_PORT&

#defineSEG8_BIT2_ON()SEG8_SLECT_PORT|=(1<

BIT2)

#defineSEG8_BIT2_OFF()SEG8_SLECT_PORT&

#defineSEG8_BIT3_ON()SEG8_SLECT_PORT|=(1<

BIT3)

#defineSEG8_BIT3_OFF()SEG8_SLECT_PORT&

#defineSEG8_CODE_PORTP2//此处可以设置I/O口

voidSeg_Display(char*p)

unsignedchartemp[4];

temp[0]=SEG8_CODE[*p++];

temp[1]=SEG8_CODE[*p++];

temp[2]=SEG8_CODE[*p++];

temp[3]=SEG8_CODE[*p++];

if(*p<

#ifSEG_CATEGORY==COMMON_ANODIC

temp[*p]&

=SEG8_DP;

#else

temp[*p]|=~SEG8_DP;

#endif

unsignedchari;

for(i=0;

150;

i++)

{

SEG8_CODE_PORT=temp[0];

SEG8_BIT0_ON();

Delay_Nus(6);

//lib51v1.c

SEG8_BIT0_OFF();

SEG8_CODE_PORT=temp[1];

SEG8_BIT1_ON();

SEG8_BIT1_OFF();

SEG8_CODE_PORT=temp[2];

SEG8_BIT2_ON();

SEG8_BIT2_OFF();

SEG8_CODE_PORT=temp[3];

SEG8_BIT3_ON();

SEG8_BIT3_OFF();

}

(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2