ds18b20c程序proteus仿真_第1页
ds18b20c程序proteus仿真_第2页
ds18b20c程序proteus仿真_第3页
ds18b20c程序proteus仿真_第4页
ds18b20c程序proteus仿真_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DS18B20测温显示,Proteus 仿真。Written by jinsongliang具体程序如下#include#include #include #include void main (void)unsigned char disP5=10,0,0,14,2;signed char temP=0;while(1)/*1 、读取温度值 */ temp=Get_Temputer();/2 、显示前处理 */if(temp0;n-);/*时序很重要,移植时注意延时函数*/ 此处可以设置 I/O 口#define B20_PORT#define B20_CHANNEL#define R_B2

2、0_CHANNEL()#define W_B20_CHANNEL_1()#define W_B20_CHANNEL_0()#define SKIP_ROM#define TEMPUTER_CONVERT#define READ_ROMP10B20_PORT&(1B20_CHANNEL)B20_PORT|=(1B20_CHANNEL)B20_PORT&=(1B20_CHANNEL)0xCC0x440xBE/one/*初始化函数,失败会返回 1,初始化过程见注释 若单片机读到了数据线上的低电平“0”后,还要做延时,480 微秒。1”后结束。static unsigned char Init_18b

3、20 (void) unsigned char x=0;W_B20_CHANNEL_1();Delay_Nus(8);W_B20_CHANNEL_0(); Delay_Nus(81);W_B20_CHANNEL_1();Delay_Nus(14); x=R_B20_CHANNEL();/4/1/2、从单片机拉高数据线开始/6*n useconds、单片机拉低数据线 480us 以上,拉高数据线,释放 、之后 ds18b20 ,1560us 以后反应,拉高数据线/3、单片机读取数据线其延时的时间从单片机发出的高电平算起最少要 之后单片机将数据线再次拉高到高电平 */if(x)return x;/

4、x=0 代表复位成功Delay_Nus(20); return x;/twostatic 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=temp=1;B20_CHANNEL_1();Delay_Nus(4);/three static unsigned char Read

5、_18b20(void) unsigned char i;unsigned char temp;unsigned char r_data=0x00;for(i=0;i=1;W_B20_CHANNEL_1();W_B20_CHANNEL_0();Delay_Nus(1);W_B20_CHANNEL_1(); temp=B20_PORT(7-B20_CHANNEL); temp&=(17);r_data+=temp;Delay_Nus(8);/ 从高到低 15us 内,再到高,产生读间隙/ 读数据 , 从低位开始/ 整个读一位过程在 60120usB20_CHANNEL_1();return r_

6、data; /four/* 若要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过ROM旨令、执行温度转换存储器操作指令、等待500US温度转换时间。紧接着执行第二个周期为复位、跳过ROM旨令、执行读 RAM的存储器操作指令、读数据(最多为 9个字节,中途可停止,只读简单温度值则读前 2 个字节即可)*/ signed char Get_Temputer (void) / 读取温度值,返回的带符号字符型 unsigned char tem_h,tem_l; signed char temp;-55 到+127;128 无法显示,初始化失败会显示if(Init_18b20()=0

7、)/复位 18b20 elseWrite_18b20(SKIP_ROM);Write_18b20(TEMPUTER_CONVERT);/ 跳过 ROM 温度变换return temp=0;/Delay_Nus(100);if(Init_18b20()=0)Write_18b20(SKIP_ROM);Write_18b20(READ_ROM);else/ 复位 18b20/ 跳过 ROM/ 读暂存存储器return temp=0;tem_l=Read_18b20(); tem_h=Read_18b20();/ 读数据/* 只要高字符的低四位和低字符的高四位, char 内容不变,代表的值改变*/

8、温度范围 099,temp为补码,直接由 unsigned char 赋值给 signedtemp=(tem_h4); return temp;#define COMMON_ANODIC#define COMMON_CATHODAL#define SEG_CATEGORY/ 共阳数码管/ 共阴数码管/ 选择共阳数码管#define SEG8_A#define SEG8_B #define SEG8_C #define SEG8_D #define SEG8_E #define SEG8_F#define SEG8_G#define SEG8_DP#define SEG8_CHAR#define

9、0SEG8_CHAR_1#define SEG8_CHAR_2#define SEG8_CHAR_3(10)(11)(12)(13)(14)(15)(16)(17)(SEG8_G&SEG8_DP) (SEG8_A&SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP) (SEG8_C&SEG8_F&SEG8_DP) (SEG8_E&SEG8_F&SEG8_DP)/段 A 亮时为 0,属共阳数码管#define SEG8_CHAR_4#define SEG8_CHAR_5#define SEG8_CHAR_6(SEG8_A&SEG8_D&SEG8_E&SEG8_DP)(SEG8

10、_B&SEG8_E&SEG8_DP)(SEG8_B&SEG8_DP)#define SEG8_CHAR_7#define SEG8_CHAR_8(SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP) SEG8_DP#define SEG8_CHAR_9(SEG8_E&SEG8_DP)#define SEG8_CHAR0#define SEG8_CHAR_E#defineSEG8_CHAR_R(SEG8_B&SEG8_C&SEG8_DP)(SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_F&SEG8_DP)#defineSEG8_CHAR_SUB(SEG8_

11、A&SEG8_B&SEG8_C&SEG8_D&SEG8_E&SEG8_F&SEG8_DP)/#define/#define#define SEG8_CHAR_CSEG8_CHAR_ASEG8_CHAR_B(SEG8_B&SEG8_C&SEG8_G&SEG8_DP)/#define/#define/#defineSEG8_CHAR_DSEG8_CHAR_FSEG8_CHAR_H#if SEG_CATEGORY=COMMON_ANODIC static const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_1,SEG8_CHAR_2,SEG8_CH

12、AR_3,SEG8_CHAR_4,SEG8_CHAR_5,SEG8_CHAR_6,SEG8_CHAR_7,SEG8_CHAR_8,SEG8_CHAR_9,SEG8_CHAR_,/SEG8_CODE10/SEG8_CODE11/SEG8_CODE12SEG8_CHAR_SUB, /SEG8_CODE13SEG8_CHAR_C /SEG8_CODE14SEG8_CHAR_E,SEG8_CHAR_R,;#elsestatic const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_1,SEG8_CHAR_2,SEG8_CHAR_3, SEG8_CHAR

13、_4,SEG8_CHAR_5,SEG8_CHAR_6, SEG8_CHAR_7,SEG8_CHAR_8,SEG8_CHAR_9,SEG8_CHAR_,SEG8_CHAR_E,SEG8_CHAR_R,/SEG8_CODE10/SEG8_CODE11/SEG8_CODE12SEG8_CHAR_SUB/,/SEG8_CODE13 SEG8_CHAR_C /SEG8_CODE14;#endifP30/ 此处可以设置 I/O 口#define SEG8_SLECT_PORT#define BIT0#define BIT1#define BIT2#define BIT3#define SEG8 #defi

14、ne SEG8 #define SEG8 #define SEG8 #define SEG8 #define SEG8 #define SEG8BIT0_ON()BIT0_OFF()BIT1_ON()BIT1_OFF()BIT2_ON()BIT2_OFF()BIT3_ON()SLECT_PORT|=(1BIT0)#define SEG8_BIT3_OFF() #define SEG8_CODE_PORTSEG8_SEG8_SLECT_PORT&=(1BIT0)SEG8_SLECT_PORT|=(1BIT1)SEG8_SLECT_PORT&=(1BIT1)SEG8_SLECT_PORT|=(1B

15、IT2)SEG8_SLECT_PORT&=(1BIT2)SEG8_SLECT_PORT|=(1BIT3)SEG8_SLECT_PORT&=(1BIT3)P2 / 此处可以设置 I/O 口void Seg_Display (char *p)unsigned char temp4; temp0=SEG8_CODE*p+; temp1=SEG8_CODE*p+; temp2=SEG8_CODE*p+; temp3=SEG8_CODE*p+;if(*p4)#if SEG_CATEGORY=COMMON_ANODIC temp*p&=SEG8_DP;#elsetemp*p|=SEG8_DP;#endif unsigned char i; for(i=0;i150;i+) SEG8_CODE_PORT = temp0;/SEG8_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论